[
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Go to '...'\n2. Click on '....'\n3. Scroll down to '....'\n4. See error\n\nPlease provide a copy of an asset that can be used to reproduce the issue if needed, along with the game's Unreal Engine version. If the asset uses unversioned properties, you should also provide a set of mappings. YOUR ISSUE WILL NOT BE REVIEWED IF YOUR ISSUE CANNOT BE REPLICATED BECAUSE NO TEST ASSET IS PROVIDED.\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Screenshots**\nIf applicable, add screenshots to help explain your problem.\n\n**Desktop (please complete the following information):**\n - OS: [e.g. Windows 10]\n - Version or Commit: [e.g. 1.0.2/c7d9f8d]\n   - If you encountered this issue on a release version of UAssetGUI, you may find that your issue has already been fixed with the latest experimental release: https://github.com/atenfyr/UAssetGUI/releases/tag/experimental-latest\n\n**Additional context**\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your feature request related to a problem? Please describe.**\nA clear and concise description of what the problem is. Ex. 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.\n"
  },
  {
    "path": ".github/pull_request_template.md",
    "content": "# Pull Request\n\n## Description\n\n<!-- Please include a summary of the change(s) you have made.\n\nIf this pull request is intended to fix an existing issue, reference the existing GitHub issue number here or create a new issue and reference the new issue number here. If your PR is intended to fix an existing issue but no issue number is referenced, your PR will not be reviewed.\n\nPlease note that we currently do not accept AI generated code on the UAssetAPI repository. UAssetAPI is mature, stable software, so all changes must be thoroughly tested and reviewed by a human. Pull requests containing AI generated code will not be reviewed. -->\n\n## Type of change\n\n<!-- Please delete options that are not relevant. -->\n\n- [ ] Bug fix (non-breaking change which fixes an issue)\n- [ ] New feature (non-breaking change which adds functionality)\n- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)\n- [ ] Other (please specify)\n\n## Testing\n\n<!-- Please provide a sequence of steps that can be performed to verify your changes. If applicable, you may wish to create a new test in the UAssetAPI.Tests/AssetUnitTests.cs file including problematic assets. --> \n"
  },
  {
    "path": ".github/workflows/build.yml",
    "content": "name: CI\r\non:\r\n  push:\r\n    branches:\r\n      - master\r\n\r\njobs:\r\n  build:\r\n    runs-on: windows-latest\r\n    steps:\r\n      - name: git checkout\r\n        uses: actions/checkout@v3\r\n        with:\r\n          fetch-depth: 0\r\n      - name: .NET Setup\r\n        uses: actions/setup-dotnet@v2\r\n        with:\r\n          dotnet-version: '8.0.x'\r\n      - name: Install dependencies\r\n        run: dotnet restore\r\n      - name: Build\r\n        run: dotnet build --configuration Release --no-restore\r\n      - name: Unit tests\r\n        run: dotnet test --no-restore --verbosity normal\r\n"
  },
  {
    "path": ".github/workflows/main.yml",
    "content": "name: Deploy\r\non:\r\n  push:\r\n    branches:\r\n      - master\r\n\r\njobs:\r\n  deploy:\r\n    runs-on: ubuntu-latest\r\n    steps:\r\n    - uses: actions/checkout@v3\r\n      with:\r\n        fetch-depth: 0\r\n    - name: Install mdbook\r\n      run: |\r\n        mkdir mdbook\r\n        curl -sSL https://github.com/rust-lang/mdBook/releases/download/v0.4.14/mdbook-v0.4.14-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=./mdbook\r\n        echo `pwd`/mdbook >> $GITHUB_PATH\r\n    - name: Deploy GitHub Pages\r\n      run: |\r\n        cd docs\r\n        mdbook build\r\n        git worktree add gh-pages\r\n        git config user.name \"Deploy from CI\"\r\n        git config user.email \"\"\r\n        cd gh-pages\r\n        git update-ref -d refs/heads/gh-pages\r\n        rm -rf *\r\n        mv ../book/* .\r\n        git add .\r\n        git commit -m \"Deploy $GITHUB_SHA to gh-pages\"\r\n        git push --force --set-upstream origin gh-pages"
  },
  {
    "path": ".gitignore",
    "content": ".vs\r\ndocs/book\r\ndocs/XMLDoc2Markdown\r\npackages\r\nTestResults\r\nUAssetAPI/git_commit.txt\r\nUAssetAPI/bin\r\nUAssetAPI/obj\r\nUAssetAPI.Benchmark/bin\r\nUAssetAPI.Benchmark/obj\r\nUAssetAPI.Tests/bin\r\nUAssetAPI.Tests/obj\r\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\r\n\r\nCopyright (c) 2020 - 2026 atenfyr\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n"
  },
  {
    "path": "NOTICE.md",
    "content": "# Notices\r\nThe following is a list of applicable licensing information for all the third-party material used, in whole or in part, within this software.\r\n\r\n## repak\r\nhttps://github.com/trumank/repak\r\n```\r\nMIT License\r\n\r\nCopyright 2024 Truman Kilen, spuds\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n```\r\n\r\n## Json.NET\r\nhttps://github.com/JamesNK/Newtonsoft.Json\r\n```\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2007 James Newton-King\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of\r\nthis software and associated documentation files (the \"Software\"), to deal in\r\nthe Software without restriction, including without limitation the rights to\r\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\nthe Software, and to permit persons to whom the Software is furnished to do so,\r\nsubject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n```\r\n\r\n## dotmore\r\nhttps://github.com/mattmc3/dotmore\r\n```\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2014 mattmc3\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n```\r\n\r\n## ZstdNet\r\nhttps://github.com/skbkontur/ZstdNet\r\n```\r\nBSD License\r\n\r\nFor ZstdNet software\r\n\r\nCopyright (c) 2016-present, SKB Kontur. All rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n   list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice,\r\n   this list of conditions and the following disclaimer in the documentation\r\n   and/or other materials provided with the distribution.\r\n\r\n * Neither the name SKB Kontur nor the names of its contributors may be used to\r\n   endorse or promote products derived from this software without specific\r\n   prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n```\r\n\r\n## zstd\r\nhttps://github.com/facebook/zstd\r\n```\r\nBSD License\r\n\r\nFor Zstandard software\r\n\r\nCopyright (c) Meta Platforms, Inc. and affiliates. All rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n * Redistributions of source code must retain the above copyright notice, this\r\n   list of conditions and the following disclaimer.\r\n\r\n * Redistributions in binary form must reproduce the above copyright notice,\r\n   this list of conditions and the following disclaimer in the documentation\r\n   and/or other materials provided with the distribution.\r\n\r\n * Neither the name Facebook, nor Meta, nor the names of its contributors may\r\n   be used to endorse or promote products derived from this software without\r\n   specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n```\r\n\r\n## UEAssetToolkitGenerator\r\nhttps://github.com/LongerWarrior/UEAssetToolkitGenerator\r\n\r\n### License\r\n```\r\n                                 Apache License\r\n                           Version 2.0, January 2004\r\n                        http://www.apache.org/licenses/\r\n\r\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n   1. Definitions.\r\n\r\n      \"License\" shall mean the terms and conditions for use, reproduction,\r\n      and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n      \"Licensor\" shall mean the copyright owner or entity authorized by\r\n      the copyright owner that is granting the License.\r\n\r\n      \"Legal Entity\" shall mean the union of the acting entity and all\r\n      other entities that control, are controlled by, or are under common\r\n      control with that entity. For the purposes of this definition,\r\n      \"control\" means (i) the power, direct or indirect, to cause the\r\n      direction or management of such entity, whether by contract or\r\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r\n      outstanding shares, or (iii) beneficial ownership of such entity.\r\n\r\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\r\n      exercising permissions granted by this License.\r\n\r\n      \"Source\" form shall mean the preferred form for making modifications,\r\n      including but not limited to software source code, documentation\r\n      source, and configuration files.\r\n\r\n      \"Object\" form shall mean any form resulting from mechanical\r\n      transformation or translation of a Source form, including but\r\n      not limited to compiled object code, generated documentation,\r\n      and conversions to other media types.\r\n\r\n      \"Work\" shall mean the work of authorship, whether in Source or\r\n      Object form, made available under the License, as indicated by a\r\n      copyright notice that is included in or attached to the work\r\n      (an example is provided in the Appendix below).\r\n\r\n      \"Derivative Works\" shall mean any work, whether in Source or Object\r\n      form, that is based on (or derived from) the Work and for which the\r\n      editorial revisions, annotations, elaborations, or other modifications\r\n      represent, as a whole, an original work of authorship. For the purposes\r\n      of this License, Derivative Works shall not include works that remain\r\n      separable from, or merely link (or bind by name) to the interfaces of,\r\n      the Work and Derivative Works thereof.\r\n\r\n      \"Contribution\" shall mean any work of authorship, including\r\n      the original version of the Work and any modifications or additions\r\n      to that Work or Derivative Works thereof, that is intentionally\r\n      submitted to Licensor for inclusion in the Work by the copyright owner\r\n      or by an individual or Legal Entity authorized to submit on behalf of\r\n      the copyright owner. For the purposes of this definition, \"submitted\"\r\n      means any form of electronic, verbal, or written communication sent\r\n      to the Licensor or its representatives, including but not limited to\r\n      communication on electronic mailing lists, source code control systems,\r\n      and issue tracking systems that are managed by, or on behalf of, the\r\n      Licensor for the purpose of discussing and improving the Work, but\r\n      excluding communication that is conspicuously marked or otherwise\r\n      designated in writing by the copyright owner as \"Not a Contribution.\"\r\n\r\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\r\n      on behalf of whom a Contribution has been received by Licensor and\r\n      subsequently incorporated within the Work.\r\n\r\n   2. Grant of Copyright License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      copyright license to reproduce, prepare Derivative Works of,\r\n      publicly display, publicly perform, sublicense, and distribute the\r\n      Work and such Derivative Works in Source or Object form.\r\n\r\n   3. Grant of Patent License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      (except as stated in this section) patent license to make, have made,\r\n      use, offer to sell, sell, import, and otherwise transfer the Work,\r\n      where such license applies only to those patent claims licensable\r\n      by such Contributor that are necessarily infringed by their\r\n      Contribution(s) alone or by combination of their Contribution(s)\r\n      with the Work to which such Contribution(s) was submitted. If You\r\n      institute patent litigation against any entity (including a\r\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\r\n      or a Contribution incorporated within the Work constitutes direct\r\n      or contributory patent infringement, then any patent licenses\r\n      granted to You under this License for that Work shall terminate\r\n      as of the date such litigation is filed.\r\n\r\n   4. Redistribution. You may reproduce and distribute copies of the\r\n      Work or Derivative Works thereof in any medium, with or without\r\n      modifications, and in Source or Object form, provided that You\r\n      meet the following conditions:\r\n\r\n      (a) You must give any other recipients of the Work or\r\n          Derivative Works a copy of this License; and\r\n\r\n      (b) You must cause any modified files to carry prominent notices\r\n          stating that You changed the files; and\r\n\r\n      (c) You must retain, in the Source form of any Derivative Works\r\n          that You distribute, all copyright, patent, trademark, and\r\n          attribution notices from the Source form of the Work,\r\n          excluding those notices that do not pertain to any part of\r\n          the Derivative Works; and\r\n\r\n      (d) If the Work includes a \"NOTICE\" text file as part of its\r\n          distribution, then any Derivative Works that You distribute must\r\n          include a readable copy of the attribution notices contained\r\n          within such NOTICE file, excluding those notices that do not\r\n          pertain to any part of the Derivative Works, in at least one\r\n          of the following places: within a NOTICE text file distributed\r\n          as part of the Derivative Works; within the Source form or\r\n          documentation, if provided along with the Derivative Works; or,\r\n          within a display generated by the Derivative Works, if and\r\n          wherever such third-party notices normally appear. The contents\r\n          of the NOTICE file are for informational purposes only and\r\n          do not modify the License. You may add Your own attribution\r\n          notices within Derivative Works that You distribute, alongside\r\n          or as an addendum to the NOTICE text from the Work, provided\r\n          that such additional attribution notices cannot be construed\r\n          as modifying the License.\r\n\r\n      You may add Your own copyright statement to Your modifications and\r\n      may provide additional or different license terms and conditions\r\n      for use, reproduction, or distribution of Your modifications, or\r\n      for any such Derivative Works as a whole, provided Your use,\r\n      reproduction, and distribution of the Work otherwise complies with\r\n      the conditions stated in this License.\r\n\r\n   5. Submission of Contributions. Unless You explicitly state otherwise,\r\n      any Contribution intentionally submitted for inclusion in the Work\r\n      by You to the Licensor shall be under the terms and conditions of\r\n      this License, without any additional terms or conditions.\r\n      Notwithstanding the above, nothing herein shall supersede or modify\r\n      the terms of any separate license agreement you may have executed\r\n      with Licensor regarding such Contributions.\r\n\r\n   6. Trademarks. This License does not grant permission to use the trade\r\n      names, trademarks, service marks, or product names of the Licensor,\r\n      except as required for reasonable and customary use in describing the\r\n      origin of the Work and reproducing the content of the NOTICE file.\r\n\r\n   7. Disclaimer of Warranty. Unless required by applicable law or\r\n      agreed to in writing, Licensor provides the Work (and each\r\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\r\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r\n      implied, including, without limitation, any warranties or conditions\r\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r\n      PARTICULAR PURPOSE. You are solely responsible for determining the\r\n      appropriateness of using or redistributing the Work and assume any\r\n      risks associated with Your exercise of permissions under this License.\r\n\r\n   8. Limitation of Liability. In no event and under no legal theory,\r\n      whether in tort (including negligence), contract, or otherwise,\r\n      unless required by applicable law (such as deliberate and grossly\r\n      negligent acts) or agreed to in writing, shall any Contributor be\r\n      liable to You for damages, including any direct, indirect, special,\r\n      incidental, or consequential damages of any character arising as a\r\n      result of this License or out of the use or inability to use the\r\n      Work (including but not limited to damages for loss of goodwill,\r\n      work stoppage, computer failure or malfunction, or any and all\r\n      other commercial damages or losses), even if such Contributor\r\n      has been advised of the possibility of such damages.\r\n\r\n   9. Accepting Warranty or Additional Liability. While redistributing\r\n      the Work or Derivative Works thereof, You may choose to offer,\r\n      and charge a fee for, acceptance of support, warranty, indemnity,\r\n      or other liability obligations and/or rights consistent with this\r\n      License. However, in accepting such obligations, You may act only\r\n      on Your own behalf and on Your sole responsibility, not on behalf\r\n      of any other Contributor, and only if You agree to indemnify,\r\n      defend, and hold each Contributor harmless for any liability\r\n      incurred by, or claims asserted against, such Contributor by reason\r\n      of your accepting any such warranty or additional liability.\r\n\r\n   END OF TERMS AND CONDITIONS\r\n\r\n   APPENDIX: How to apply the Apache License to your work.\r\n\r\n      To apply the Apache License to your work, attach the following\r\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\r\n      replaced with your own identifying information. (Don't include\r\n      the brackets!)  The text should be enclosed in the appropriate\r\n      comment syntax for the file format. We also recommend that a\r\n      file or class name and description of purpose be included on the\r\n      same \"printed page\" as the copyright notice for easier\r\n      identification within third-party archives.\r\n\r\n   Copyright [yyyy] [name of copyright owner]\r\n\r\n   Licensed under the Apache License, Version 2.0 (the \"License\");\r\n   you may not use this file except in compliance with the License.\r\n   You may obtain a copy of the License at\r\n\r\n       http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n   Unless required by applicable law or agreed to in writing, software\r\n   distributed under the License is distributed on an \"AS IS\" BASIS,\r\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n   See the License for the specific language governing permissions and\r\n   limitations under the License.\r\n```\r\n### Statement of Modification\r\nMajor portions of the source code that is adapted from UEAssetToolkitGenerator have been modified for usage in UAssetAPI through changes in code formatting, nomenclature, and serialization specifics in order to improve the effectiveness of the serialization across different engine versions and assets and to improve integration with newer versions of UAssetAPI. The relevant portions of source code have been sufficiently adapted such that no improper serialization or other unexpected behavior should be construed as having originated from any portion of the original work or any of its contributors.\r\n\r\n### Original NOTICE text file information\r\nThe NOTICE text file bundled with the referenced project is not included in this copyright notice because none of the notices in that file pertain to any part of the work that is adapted for usage in UAssetAPI. Please see the original repository for more detailed copyright information.\r\n"
  },
  {
    "path": "README.md",
    "content": "# UAssetAPI\r\n[![CI Status](https://img.shields.io/github/actions/workflow/status/atenfyr/UAssetAPI/build.yml?label=CI)](https://github.com/atenfyr/UAssetAPI/actions)\r\n[![Issues](https://img.shields.io/github/issues/atenfyr/UAssetAPI.svg?style=flat-square)](https://github.com/atenfyr/UAssetAPI/issues)\r\n[![License](https://img.shields.io/github/license/atenfyr/UAssetAPI.svg?style=flat-square)](https://github.com/atenfyr/UAssetAPI/blob/master/LICENSE.md)\r\n\r\nUAssetAPI is a low-level .NET library for reading and writing Unreal Engine game assets.\r\n\r\n<img src=\"https://i.imgur.com/GZbr93m.png\" align=\"center\">\r\n\r\n## Features\r\n- Low-level read/write capability for a wide variety of cooked and uncooked .uasset files from ~4.13 to 5.3\r\n- Support for more than 100 property types and 12 export types\r\n- Support for JSON export and import to a proprietary format that maintains binary equality\r\n- Support for reading and writing raw Kismet (blueprint) bytecode\r\n- Reading capability for the unofficial .usmap format to parse ambiguous and unversioned properties\r\n- Robust fail-safes for many properties and exports that fail serialization\r\n- Automatic reflection for new property types in other loaded assemblies\r\n\r\n## Usage\r\nTo get started using UAssetAPI, first build the API using the [Build Instructions guide](https://atenfyr.github.io/UAssetAPI/guide/build.html) and learn how to perform basic operations on your cooked .uasset files using the [Basic Usage guide](https://atenfyr.github.io/UAssetAPI/guide/basic.html).\r\n\r\nUAssetGUI, a graphical wrapper around UAssetAPI which allows you to directly view and modify game assets by hand, is also available and can be downloaded for free on GitHub at [https://github.com/atenfyr/UAssetGUI/releases](https://github.com/atenfyr/UAssetGUI/releases).\r\n\r\n## Contributing\r\nAll contributions, whether through pull requests or issues, that you may make are greatly appreciated.\r\n\r\nI am particularly interested in .uasset files that have their `VerifyBinaryEquality()` method return false (or display \"failed to maintain binary equality\" within [UAssetGUI](https://github.com/atenfyr/UAssetGUI)); if you encounter such an asset, feel free to submit an issue here with a copy of the asset in question along with the name of the game and the Unreal version that it was cooked with.\r\n\r\nPlease note: Your issue will NOT be reviewed if your issue cannot be replicated due to no test asset being provided.\r\n\r\n## License\r\nUAssetAPI and UAssetGUI are distributed under the MIT license, which you can view in detail in the [LICENSE file](LICENSE).\r\n"
  },
  {
    "path": "UAssetAPI/AC7Decrypt.cs",
    "content": "﻿using System;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI\r\n{\r\n    /// <summary>\r\n    /// XOR key for decrypting a particular Ace Combat 7 asset. \r\n    /// </summary>\r\n    public class AC7XorKey\r\n    {\r\n        public int NameKey;\r\n        public int Offset;\r\n        public int pk1;\r\n        public int pk2;\r\n\r\n        public void SkipCount(int count)\r\n        {\r\n            int num = count % 217;\r\n            pk1 += num;\r\n            if (pk1 >= 217)\r\n            {\r\n                pk1 -= 217;\r\n            }\r\n            int num2 = count % 1024;\r\n            pk2 += num2;\r\n            if (pk2 >= 1024)\r\n            {\r\n                pk2 -= 1024;\r\n            }\r\n        }\r\n\r\n        private static int CalcNameKey(string fname)\r\n        {\r\n            fname = fname.ToUpper();\r\n            int num = 0;\r\n            for (int i = 0; i < fname.Length; i++)\r\n            {\r\n                int num2 = (byte)fname[i];\r\n                num ^= num2;\r\n                num2 = num * 8;\r\n                num2 ^= num;\r\n                int num3 = num + num;\r\n                num2 = ~num2;\r\n                num2 = (num2 >> 7) & 1;\r\n                num = num2 | num3;\r\n            }\r\n            return num;\r\n        }\r\n\r\n        private static void CalcPKeyFromNKey(int nkey, int dataoffset, out int pk1, out int pk2)\r\n        {\r\n            long num = (uint)((long)nkey * 7L);\r\n            System.Numerics.BigInteger bigInteger = new System.Numerics.BigInteger(5440514381186227205L);\r\n            num += dataoffset;\r\n            System.Numerics.BigInteger bigInteger2 = bigInteger * num;\r\n            long num2 = (long)(bigInteger2 >> 70);\r\n            long num3 = num2 >> 63;\r\n            num2 += num3;\r\n            num3 = num2 * 217;\r\n            num -= num3;\r\n            pk1 = (int)(num & 0xFFFFFFFFu);\r\n            long num4 = (uint)((long)nkey * 11L);\r\n            num4 += dataoffset;\r\n            num2 = 0L;\r\n            num2 &= 0x3FF;\r\n            num4 += num2;\r\n            num4 &= 0x3FF;\r\n            long num5 = num4 - num2;\r\n            pk2 = (int)(num5 & 0xFFFFFFFFu);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates an encryption key for a particular asset on disk.\r\n        /// </summary>\r\n        /// <param name=\"fname\">The name of the asset being encrypted on disk without the extension.</param>\r\n        /// <returns>An encryption key for the asset.</returns>\r\n        public AC7XorKey(string fname)\r\n        {\r\n            NameKey = CalcNameKey(fname); Offset = 4;\r\n            CalcPKeyFromNKey(this.NameKey, this.Offset, out this.pk1, out this.pk2);\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Decryptor for Ace Combat 7 assets.\r\n    /// </summary>\r\n    public class AC7Decrypt\r\n    {\r\n        private static byte[] AC7FullKey = new byte[0];\r\n\r\n        public AC7Decrypt()\r\n        {\r\n            if (AC7FullKey.Length == 0) AC7FullKey = Properties.Resources.AC7Key;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Decrypts an Ace Combat 7 encrypted asset on disk.\r\n        /// </summary>\r\n        /// <param name=\"input\">The path to an encrypted asset on disk.</param>\r\n        /// <param name=\"output\">The path that the decrypted asset should be saved to.</param>\r\n        public void Decrypt(string input, string output)\r\n        {\r\n            AC7XorKey xorKey = new AC7XorKey(Path.GetFileNameWithoutExtension(input));\r\n            byte[] doneData = DecryptUAssetBytes(File.ReadAllBytes(input), xorKey);\r\n            File.WriteAllBytes(output, doneData);\r\n            try\r\n            {\r\n                byte[] doneData2 = DecryptUexpBytes(File.ReadAllBytes(Path.ChangeExtension(input, \"uexp\")), xorKey);\r\n                File.WriteAllBytes(Path.ChangeExtension(output, \"uexp\"), doneData2);\r\n            }\r\n            catch { }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Encrypts an Ace Combat 7 encrypted asset on disk.\r\n        /// </summary>\r\n        /// <param name=\"input\">The path to a decrypted asset on disk.</param>\r\n        /// <param name=\"output\">The path that the encrypted asset should be saved to.</param>\r\n        public void Encrypt(string input, string output)\r\n        {\r\n            AC7XorKey xorKey = new AC7XorKey(Path.GetFileNameWithoutExtension(output));\r\n            byte[] doneData = EncryptUAssetBytes(File.ReadAllBytes(input), xorKey);\r\n            File.WriteAllBytes(output, doneData);\r\n            try\r\n            {\r\n                byte[] doneData2 = EncryptUexpBytes(File.ReadAllBytes(Path.ChangeExtension(input, \"uexp\")), xorKey);\r\n                File.WriteAllBytes(Path.ChangeExtension(output, \"uexp\"), doneData2);\r\n            }\r\n            catch { }\r\n        }\r\n\r\n        public byte[] DecryptUAssetBytes(byte[] uasset, AC7XorKey xorkey)\r\n        {\r\n            if (xorkey == null) throw new NullReferenceException(\"Null key provided\");\r\n            byte[] array = new byte[uasset.Length];\r\n            BitConverter.GetBytes(UAsset.UASSET_MAGIC).CopyTo(array, 0);\r\n            for (int i = 4; i < array.Length; i++)\r\n            {\r\n                array[i] = GetXorByte(uasset[i], ref xorkey);\r\n            }\r\n            return array;\r\n        }\r\n\r\n        public byte[] EncryptUAssetBytes(byte[] uasset, AC7XorKey xorkey)\r\n        {\r\n            if (xorkey == null) throw new NullReferenceException(\"Null key provided\");\r\n            byte[] array = new byte[uasset.Length];\r\n            BitConverter.GetBytes(UAsset.ACE7_MAGIC).CopyTo(array, 0);\r\n            for (int i = 4; i < array.Length; i++)\r\n            {\r\n                array[i] = GetXorByte(uasset[i], ref xorkey);\r\n            }\r\n            return array;\r\n        }\r\n\r\n        public byte[] DecryptUexpBytes(byte[] uexp, AC7XorKey xorkey)\r\n        {\r\n            if (xorkey == null) throw new NullReferenceException(\"Null key provided\");\r\n            byte[] array = new byte[uexp.Length];\r\n            for (int i = 0; i < array.Length; i++)\r\n            {\r\n                array[i] = GetXorByte(uexp[i], ref xorkey);\r\n            }\r\n            BitConverter.GetBytes(UAsset.UASSET_MAGIC).CopyTo(array, array.Length - 4);\r\n            return array;\r\n        }\r\n\r\n        public byte[] EncryptUexpBytes(byte[] uexp, AC7XorKey xorkey)\r\n        {\r\n            if (xorkey == null) throw new NullReferenceException(\"Null key provided\");\r\n            byte[] array = new byte[uexp.Length];\r\n            for (int i = 0; i < uexp.Length; i++)\r\n            {\r\n                array[i] = GetXorByte(uexp[i], ref xorkey);\r\n            }\r\n            return array;\r\n        }\r\n\r\n        private static byte GetXorByte(byte tagb, ref AC7XorKey xorkey)\r\n        {\r\n            if (xorkey == null)\r\n            {\r\n                return tagb;\r\n            }\r\n            tagb = (byte)((uint)(tagb ^ AC7FullKey[xorkey.pk1 * 1024 + xorkey.pk2]) ^ 0x77u);\r\n            xorkey.pk1++;\r\n            xorkey.pk2++;\r\n            if (xorkey.pk1 >= 217)\r\n            {\r\n                xorkey.pk1 = 0;\r\n            }\r\n            if (xorkey.pk2 >= 1024)\r\n            {\r\n                xorkey.pk2 = 0;\r\n            }\r\n            return tagb;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/AssetBinaryReader.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Text;\r\nusing UAssetAPI.CustomVersions;\r\nusing UAssetAPI.Kismet.Bytecode;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.Unversioned;\r\n\r\nnamespace UAssetAPI;\r\n\r\n/// <summary>\r\n/// Any binary reader used in the parsing of Unreal file types.\r\n/// </summary>\r\npublic class UnrealBinaryReader : BinaryReader\r\n{\r\n    public UnrealBinaryReader(Stream stream) : base(stream) { }\r\n\r\n    protected byte[] ReverseIfBigEndian(byte[] data)\r\n    {\r\n        if (!BitConverter.IsLittleEndian) Array.Reverse(data);\r\n        return data;\r\n    }\r\n\r\n    public override short ReadInt16()\r\n    {\r\n        return BitConverter.ToInt16(ReverseIfBigEndian(base.ReadBytes(2)), 0);\r\n    }\r\n\r\n    public override ushort ReadUInt16()\r\n    {\r\n        return BitConverter.ToUInt16(ReverseIfBigEndian(base.ReadBytes(2)), 0);\r\n    }\r\n\r\n    public override int ReadInt32()\r\n    {\r\n        return BitConverter.ToInt32(ReverseIfBigEndian(base.ReadBytes(4)), 0);\r\n    }\r\n\r\n    public override uint ReadUInt32()\r\n    {\r\n        return BitConverter.ToUInt32(ReverseIfBigEndian(base.ReadBytes(4)), 0);\r\n    }\r\n\r\n    public override long ReadInt64()\r\n    {\r\n        return BitConverter.ToInt64(ReverseIfBigEndian(base.ReadBytes(8)), 0);\r\n    }\r\n\r\n    public override ulong ReadUInt64()\r\n    {\r\n        return BitConverter.ToUInt64(ReverseIfBigEndian(base.ReadBytes(8)), 0);\r\n    }\r\n\r\n    public override float ReadSingle()\r\n    {\r\n        return BitConverter.ToSingle(ReverseIfBigEndian(base.ReadBytes(4)), 0);\r\n    }\r\n\r\n    public override double ReadDouble()\r\n    {\r\n        return BitConverter.ToDouble(ReverseIfBigEndian(base.ReadBytes(8)), 0);\r\n    }\r\n\r\n    public bool ReadBooleanInt()\r\n    {\r\n        var i = ReadInt32();\r\n        return i switch\r\n        {\r\n            1 => true,\r\n            0 => false,\r\n            _ => throw new FormatException($\"Invalid boolean value {i}\")\r\n        };\r\n    }\r\n\r\n    public override string ReadString()\r\n    {\r\n        return ReadFString()?.Value;\r\n    }\r\n\r\n    public virtual FString ReadFString()\r\n    {\r\n        int length = this.ReadInt32();\r\n        switch (length)\r\n        {\r\n            case < 0:\r\n                var len = -length * 2;\r\n                Span<byte> data = len < 512 ? stackalloc byte[len] : new byte[len];\r\n                BaseStream.Read(data);\r\n                return new FString(Encoding.Unicode.GetString(data[..^2]), Encoding.Unicode);\r\n            case > 0:\r\n                data = length < 512 ? stackalloc byte[length] : new byte[length];\r\n                BaseStream.Read(data);\r\n                return new FString(Encoding.UTF8.GetString(data[..^1]), Encoding.UTF8);\r\n            default:\r\n                return null;\r\n        }\r\n    }\r\n\r\n    public virtual FString ReadUtf8String()\r\n    {\r\n        int length = this.ReadInt32();\r\n        switch (length)\r\n        {\r\n            case < 0:\r\n                throw new FormatException(\"Invalid UTF-8 string length\");\r\n            case > 0:\r\n                Span<byte> data = length < 512 ? stackalloc byte[length] : new byte[length];\r\n                BaseStream.Read(data);\r\n                return new FString(Encoding.UTF8.GetString(data), Encoding.UTF8);\r\n            default:\r\n                return null;\r\n        }\r\n    }\r\n\r\n    public virtual FString ReadNameMapString(out uint hashes)\r\n    {\r\n        hashes = 0;\r\n        FString str = this.ReadFString();\r\n        if (this is AssetBinaryReader abr)\r\n        {\r\n            if (abr.Asset is UAsset abrUa && abrUa.WillSerializeNameHashes != false && !string.IsNullOrEmpty(str.Value))\r\n            {\r\n                hashes = this.ReadUInt32();\r\n                if (hashes < (1 << 10) && abrUa.ObjectVersion < ObjectVersion.VER_UE4_NAME_HASHES_SERIALIZED) // \"i lied, there's actually no hashes\"\r\n                {\r\n                    abrUa.WillSerializeNameHashes = false;\r\n                    hashes = 0;\r\n                    this.BaseStream.Position -= sizeof(uint);\r\n                }\r\n                else\r\n                {\r\n                    abrUa.WillSerializeNameHashes = true;\r\n                }\r\n            }\r\n        }\r\n        return str;\r\n    }\r\n\r\n    public List<CustomVersion> ReadCustomVersionContainer(ECustomVersionSerializationFormat format, List<CustomVersion> oldCustomVersionContainer = null, Usmap Mappings = null)\r\n    {\r\n        var newCustomVersionContainer = new List<CustomVersion>();\r\n        var existingCustomVersions = new HashSet<Guid>();\r\n        switch (format)\r\n        {\r\n            case ECustomVersionSerializationFormat.Enums:\r\n                throw new NotImplementedException(\"Custom version serialization format Enums is currently unimplemented\");\r\n            case ECustomVersionSerializationFormat.Guids:\r\n                int numCustomVersions = ReadInt32();\r\n                for (int i = 0; i < numCustomVersions; i++)\r\n                {\r\n                    var customVersionID = new Guid(ReadBytes(16));\r\n                    var customVersionNumber = ReadInt32();\r\n                    newCustomVersionContainer.Add(new CustomVersion(customVersionID, customVersionNumber) { Name = ReadFString() });\r\n                    existingCustomVersions.Add(customVersionID);\r\n                }\r\n                break;\r\n            case ECustomVersionSerializationFormat.Optimized:\r\n                numCustomVersions = ReadInt32();\r\n                for (int i = 0; i < numCustomVersions; i++)\r\n                {\r\n                    var customVersionID = new Guid(ReadBytes(16));\r\n                    var customVersionNumber = ReadInt32();\r\n                    newCustomVersionContainer.Add(new CustomVersion(customVersionID, customVersionNumber));                      \r\n                    existingCustomVersions.Add(customVersionID);\r\n                }\r\n                break;\r\n\r\n        }    \r\n\r\n        if (Mappings != null && Mappings.CustomVersionContainer != null && Mappings.CustomVersionContainer.Count > 0)\r\n        {\r\n            foreach (CustomVersion entry in Mappings.CustomVersionContainer)\r\n            {\r\n                if (!existingCustomVersions.Contains(entry.Key)) newCustomVersionContainer.Add(entry.SetIsSerialized(false));\r\n            }\r\n        }\r\n\r\n        if (oldCustomVersionContainer != null)\r\n        {\r\n            foreach (CustomVersion entry in oldCustomVersionContainer)\r\n            {\r\n                if (!existingCustomVersions.Contains(entry.Key)) newCustomVersionContainer.Add(entry.SetIsSerialized(false));\r\n            }\r\n        }\r\n\r\n        return newCustomVersionContainer;\r\n    }\r\n}\r\n\r\n/// <summary>\r\n/// Reads primitive data types from Unreal Engine assets.\r\n/// </summary>\r\npublic class AssetBinaryReader : UnrealBinaryReader\r\n{\r\n    public UAsset Asset;\r\n    public bool LoadUexp = true;\r\n\r\n    public AssetBinaryReader(Stream stream, UAsset asset = null) : base(stream)\r\n    {\r\n        Asset = asset;\r\n    }\r\n    \r\n    public AssetBinaryReader(Stream stream, bool inLoadUexp, UAsset asset = null) : base(stream)\r\n    {\r\n        Asset = asset;\r\n        LoadUexp = inLoadUexp;\r\n    }\r\n\r\n    public virtual Guid? ReadPropertyGuid()\r\n    {\r\n        if (Asset.HasUnversionedProperties) return null;\r\n        if (Asset.ObjectVersion >= ObjectVersion.VER_UE4_PROPERTY_GUID_IN_PROPERTY_TAG)\r\n        {\r\n            bool hasPropertyGuid = ReadBoolean();\r\n            if (hasPropertyGuid) return new Guid(ReadBytes(16));\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public virtual FName ReadFName()\r\n    {\r\n        int nameMapPointer = this.ReadInt32();\r\n        int number = this.ReadInt32();\r\n        return new FName(Asset, nameMapPointer, number);\r\n    }\r\n\r\n    public T[] ReadArray<T>(Func<T> readElement)\r\n    {\r\n        int arrayLength = ReadInt32();\r\n        if (arrayLength == 0) return [];\r\n        T[] newData = new T[arrayLength];\r\n        for (int i = 0; i < arrayLength; i++)\r\n        {\r\n            newData[i] = readElement();\r\n        }\r\n        return newData;\r\n    }\r\n\r\n    public FObjectThumbnail ReadObjectThumbnail()\r\n    {\r\n        var thumb = new FObjectThumbnail();\r\n\r\n        thumb.Width = ReadInt32();\r\n        thumb.Height = ReadInt32();\r\n        var imageBytesCount = ReadInt32();\r\n        thumb.CompressedImageData = imageBytesCount > 0 ? ReadBytes(imageBytesCount) : Array.Empty<byte>();\r\n\r\n        return thumb;\r\n    }\r\n\r\n    public FLocMetadataObject ReadLocMetadataObject()\r\n    {\r\n        var locMetadataObject = new FLocMetadataObject();\r\n\r\n        var valueCount = ReadInt32();\r\n        if (valueCount > 0)\r\n            throw new NotImplementedException(\"TODO: implement ReadLocMetadataObject\");\r\n\r\n        return locMetadataObject;\r\n    }\r\n\r\n    public string XFERSTRING()\r\n    {\r\n        List<byte> readData = new List<byte>();\r\n        while (true)\r\n        {\r\n            byte newVal = this.ReadByte();\r\n            if (newVal == 0) break;\r\n            readData.Add(newVal);\r\n        }\r\n        return Encoding.UTF8.GetString(readData.ToArray());\r\n    }\r\n\r\n    public string XFERUNICODESTRING()\r\n    {\r\n        List<byte> readData = new List<byte>();\r\n        while (true)\r\n        {\r\n            byte newVal1 = this.ReadByte();\r\n            byte newVal2 = this.ReadByte();\r\n            if (newVal1 == 0 && newVal2 == 0) break;\r\n            readData.Add(newVal1);\r\n            readData.Add(newVal2);\r\n        }\r\n        return Encoding.Unicode.GetString(readData.ToArray());\r\n    }\r\n\r\n    public void XFERTEXT()\r\n    {\r\n\r\n    }\r\n\r\n    public FName XFERNAME()\r\n    {\r\n        return this.ReadFName();\r\n    }\r\n\r\n    public FName XFER_FUNC_NAME()\r\n    {\r\n        return this.XFERNAME();\r\n    }\r\n\r\n    public FPackageIndex XFERPTR()\r\n    {\r\n        return new FPackageIndex(this.ReadInt32());\r\n    }\r\n\r\n    public FPackageIndex XFER_FUNC_POINTER()\r\n    {\r\n        return this.XFERPTR();\r\n    }\r\n\r\n    public KismetPropertyPointer XFER_PROP_POINTER()\r\n    {\r\n        if (Asset.GetCustomVersion<FReleaseObjectVersion>() >= FReleaseObjectVersion.FFieldPathOwnerSerialization)\r\n        {\r\n            int numEntries = this.ReadInt32();\r\n            FName[] allNames = new FName[numEntries];\r\n            for (int i = 0; i < numEntries; i++)\r\n            {\r\n                allNames[i] = this.ReadFName();\r\n            }\r\n            FPackageIndex owner = this.XFER_OBJECT_POINTER();\r\n            return new KismetPropertyPointer(new FFieldPath(allNames, owner, this.Asset.Exports.Count));\r\n        }\r\n        else\r\n        {\r\n            return new KismetPropertyPointer(this.XFERPTR());\r\n        }\r\n    }\r\n\r\n    public FPackageIndex XFER_OBJECT_POINTER()\r\n    {\r\n        return this.XFERPTR();\r\n    }\r\n\r\n    public KismetExpression[] ReadExpressionArray(EExprToken endToken)\r\n    {\r\n        List<KismetExpression> newData = new List<KismetExpression>();\r\n        KismetExpression currExpression = null;\r\n        while (currExpression == null || currExpression.Token != endToken)\r\n        {\r\n            if (currExpression != null) newData.Add(currExpression);\r\n            currExpression = ExpressionSerializer.ReadExpression(this);\r\n        }\r\n        return newData.ToArray();\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/AssetBinaryWriter.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Text;\r\nusing UAssetAPI.CustomVersions;\r\nusing UAssetAPI.Kismet.Bytecode;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.Unversioned;\r\n\r\nnamespace UAssetAPI\r\n{\r\n    /// <summary>\r\n    /// Any binary writer used in the parsing of Unreal file types.\r\n    /// </summary>\r\n    public class UnrealBinaryWriter : BinaryWriter\r\n    {\r\n        public UnrealBinaryWriter() : base()\r\n        {\r\n\r\n        }\r\n\r\n        public UnrealBinaryWriter(Stream stream) : base(stream)\r\n        {\r\n\r\n        }\r\n\r\n        public UnrealBinaryWriter(Stream stream, Encoding encoding) : base(stream, encoding)\r\n        {\r\n\r\n        }\r\n\r\n        public UnrealBinaryWriter(Stream stream, Encoding encoding, bool leaveOpen) : base(stream, encoding, leaveOpen)\r\n        {\r\n\r\n        }\r\n\r\n        protected byte[] ReverseIfBigEndian(byte[] data)\r\n        {\r\n            if (!BitConverter.IsLittleEndian) Array.Reverse(data);\r\n            return data;\r\n        }\r\n\r\n        public override void Write(short value)\r\n        {\r\n            this.Write(ReverseIfBigEndian(BitConverter.GetBytes(value)));\r\n        }\r\n\r\n        public override void Write(ushort value)\r\n        {\r\n            this.Write(ReverseIfBigEndian(BitConverter.GetBytes(value)));\r\n        }\r\n\r\n        public override void Write(int value)\r\n        {\r\n            this.Write(ReverseIfBigEndian(BitConverter.GetBytes(value)));\r\n        }\r\n\r\n        public override void Write(uint value)\r\n        {\r\n            this.Write(ReverseIfBigEndian(BitConverter.GetBytes(value)));\r\n        }\r\n\r\n        public override void Write(long value)\r\n        {\r\n            this.Write(ReverseIfBigEndian(BitConverter.GetBytes(value)));\r\n        }\r\n\r\n        public override void Write(ulong value)\r\n        {\r\n            this.Write(ReverseIfBigEndian(BitConverter.GetBytes(value)));\r\n        }\r\n\r\n        public override void Write(float value)\r\n        {\r\n            this.Write(ReverseIfBigEndian(BitConverter.GetBytes(value)));\r\n        }\r\n\r\n        public override void Write(double value)\r\n        {\r\n            this.Write(ReverseIfBigEndian(BitConverter.GetBytes(value)));\r\n        }\r\n\r\n        public override void Write(string value)\r\n        {\r\n            Write(new FString(value));\r\n        }\r\n\r\n        public virtual int Write(FString value)\r\n        {\r\n            switch (value?.Value)\r\n            {\r\n                case null:\r\n                    this.Write((int)0);\r\n                    return sizeof(int);\r\n                default:\r\n                    string nullTerminatedStr = value.Value + \"\\0\";\r\n                    this.Write(value.Encoding is UnicodeEncoding ? -nullTerminatedStr.Length : nullTerminatedStr.Length);\r\n                    byte[] actualStrData = value.Encoding.GetBytes(nullTerminatedStr);\r\n                    this.Write(actualStrData);\r\n                    return actualStrData.Length + 4;\r\n            }\r\n        }\r\n\r\n        public int WriteUtf8String(FString value)\r\n        {\r\n            switch (value?.Value)\r\n            {\r\n                case null:\r\n                    this.Write((int)0);\r\n                    return sizeof(int);\r\n                default:\r\n                    this.Write(value.Value.Length);\r\n                    byte[] actualStrData = value.Encoding.GetBytes(value.Value);\r\n                    this.Write(actualStrData);\r\n                    return actualStrData.Length + 4;\r\n            }\r\n        }\r\n\r\n        public void WriteCustomVersionContainer(ECustomVersionSerializationFormat format, List<CustomVersion> CustomVersionContainer)\r\n        {\r\n            // TODO: support for enum-based custom versions\r\n            int num = CustomVersionContainer == null ? 0 : CustomVersionContainer.Count;\r\n\r\n            switch (format)\r\n            {\r\n                case ECustomVersionSerializationFormat.Enums:\r\n                    throw new NotImplementedException(\"Custom version serialization format Enums is currently unimplemented\");\r\n                case ECustomVersionSerializationFormat.Guids:\r\n                    long numLoc = this.BaseStream.Position;\r\n                    Write((int)0);\r\n\r\n                    int realNum = 0;\r\n                    for (int i = 0; i < num; i++)\r\n                    {\r\n                        if (CustomVersionContainer[i].Version <= 0 || !CustomVersionContainer[i].IsSerialized) continue;\r\n                        realNum++;\r\n                        Write(CustomVersionContainer[i].Key.ToByteArray());\r\n                        Write(CustomVersionContainer[i].Version);\r\n                        Write(CustomVersionContainer[i].Name);\r\n                    }\r\n\r\n                    long endLoc = this.BaseStream.Position;\r\n                    this.Seek((int)numLoc, SeekOrigin.Begin);\r\n                    Write(realNum);\r\n                    this.Seek((int)endLoc, SeekOrigin.Begin);\r\n                    break;\r\n                case ECustomVersionSerializationFormat.Optimized:\r\n                    numLoc = this.BaseStream.Position;\r\n                    Write((int)0);\r\n\r\n                    realNum = 0;\r\n                    for (int i = 0; i < num; i++)\r\n                    {\r\n                        if (CustomVersionContainer[i].Version < 0 || !CustomVersionContainer[i].IsSerialized) continue;\r\n                        realNum++;\r\n                        Write(CustomVersionContainer[i].Key.ToByteArray());\r\n                        Write(CustomVersionContainer[i].Version);\r\n                    }\r\n\r\n                    endLoc = this.BaseStream.Position;\r\n                    this.Seek((int)numLoc, SeekOrigin.Begin);\r\n                    Write(realNum);\r\n                    this.Seek((int)endLoc, SeekOrigin.Begin);\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Writes primitive data types from Unreal Engine assets.\r\n    /// </summary>\r\n    public class AssetBinaryWriter : UnrealBinaryWriter\r\n    {\r\n        public UAsset Asset;\r\n\r\n        public AssetBinaryWriter(UAsset asset) : base()\r\n        {\r\n            Asset = asset;\r\n        }\r\n\r\n        public AssetBinaryWriter(Stream stream, UAsset asset) : base(stream)\r\n        {\r\n            Asset = asset;\r\n        }\r\n\r\n        public AssetBinaryWriter(Stream stream, Encoding encoding, UAsset asset) : base(stream, encoding)\r\n        {\r\n            Asset = asset;\r\n        }\r\n\r\n        public AssetBinaryWriter(Stream stream, Encoding encoding, bool leaveOpen, UAsset asset) : base(stream, encoding, leaveOpen)\r\n        {\r\n            Asset = asset;\r\n        }\r\n\r\n        public virtual void Write(FName name)\r\n        {\r\n            if (name == null) name = new FName(Asset, 0, 0);\r\n            this.Write(name.Index);\r\n            this.Write(name.Number);\r\n        }\r\n\r\n        public virtual void WritePropertyGuid(Guid? guid)\r\n        {\r\n            if (Asset.HasUnversionedProperties) return;\r\n            if (Asset.ObjectVersion >= ObjectVersion.VER_UE4_PROPERTY_GUID_IN_PROPERTY_TAG)\r\n            {\r\n                Write(guid != null);\r\n                if (guid != null) Write(((Guid)guid).ToByteArray());\r\n            }\r\n        }\r\n\r\n        public virtual void Write(FObjectThumbnail thumbnail)\r\n        {\r\n            Write(thumbnail.Width);\r\n            Write(thumbnail.Height);\r\n            Write(thumbnail.CompressedImageData.Length);\r\n            if (thumbnail.CompressedImageData.Length > 0)\r\n                Write(thumbnail.CompressedImageData);\r\n        }\r\n\r\n        public virtual void Write(FLocMetadataObject metadataObject)\r\n        {\r\n            Write(metadataObject.Values.Count);\r\n            if (metadataObject.Values.Count > 0)\r\n                throw new NotImplementedException(\"TODO: implement Write(FLocMetadataObject)\");\r\n        }\r\n\r\n        /*\r\n        !!!!!\r\n\r\n        THE FOLLOWING METHODS ARE INTENDED ONLY TO BE USED IN PARSING KISMET BYTECODE; PLEASE DO NOT USE THEM FOR ANY OTHER PURPOSE!\r\n\r\n        !!!!!\r\n        */\r\n\r\n        /// <summary>This method is intended only to be used in parsing Kismet bytecode; please do not use it for any other purpose!</summary>\r\n        public int XFERSTRING(string val)\r\n        {\r\n            long startMetric = this.BaseStream.Position;\r\n            this.Write(Encoding.UTF8.GetBytes(val + \"\\0\"));\r\n            return (int)(this.BaseStream.Position - startMetric);\r\n        }\r\n\r\n        /// <summary>This method is intended only to be used in parsing Kismet bytecode; please do not use it for any other purpose!</summary>\r\n        public int XFERUNICODESTRING(string val)\r\n        {\r\n            long startMetric = this.BaseStream.Position;\r\n            this.Write(Encoding.Unicode.GetBytes(val + \"\\0\"));\r\n            return (int)(this.BaseStream.Position - startMetric);\r\n        }\r\n\r\n        /// <summary>This method is intended only to be used in parsing Kismet bytecode; please do not use it for any other purpose!</summary>\r\n        public int XFERNAME(FName val)\r\n        {\r\n            this.Write(val);\r\n            return 12; // FScriptName's iCode offset is 12 bytes, not 8\r\n        }\r\n\r\n        /// <summary>This method is intended only to be used in parsing Kismet bytecode; please do not use it for any other purpose!</summary>\r\n        public int XFER_FUNC_NAME(FName val)\r\n        {\r\n            return this.XFERNAME(val);\r\n        }\r\n\r\n        private static readonly int PointerSize = sizeof(ulong);\r\n\r\n        /// <summary>This method is intended only to be used in parsing Kismet bytecode; please do not use it for any other purpose!</summary>\r\n        public int XFERPTR(FPackageIndex val)\r\n        {\r\n            this.Write(val?.Index ?? 0);\r\n            return PointerSize; // For the iCode offset, we return the size of a pointer in memory rather than the size of an FPackageIndex on disk\r\n        }\r\n\r\n        /// <summary>This method is intended only to be used in parsing Kismet bytecode; please do not use it for any other purpose!</summary>\r\n        public int XFER_FUNC_POINTER(FPackageIndex val)\r\n        {\r\n            return this.XFERPTR(val);\r\n        }\r\n\r\n        /// <summary>This method is intended only to be used in parsing Kismet bytecode; please do not use it for any other purpose!</summary>\r\n        public int XFER_PROP_POINTER(KismetPropertyPointer val)\r\n        {\r\n            if (Asset.GetCustomVersion<FReleaseObjectVersion>() >= FReleaseObjectVersion.FFieldPathOwnerSerialization)\r\n            {\r\n                this.Write(val.New.Path.Length);\r\n                for (int i = 0; i < val.New.Path.Length; i++)\r\n                {\r\n                    this.XFERNAME(val.New.Path[i]);\r\n                }\r\n                this.XFER_OBJECT_POINTER(val.New.ResolvedOwner);\r\n            }\r\n            else\r\n            {\r\n                this.XFERPTR(val.Old);\r\n            }\r\n            return PointerSize;\r\n        }\r\n\r\n        /// <summary>This method is intended only to be used in parsing Kismet bytecode; please do not use it for any other purpose!</summary>\r\n        public int XFER_OBJECT_POINTER(FPackageIndex val)\r\n        {\r\n            return this.XFERPTR(val);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/CRCGenerator.cs",
    "content": "﻿using System;\r\nusing System.Text;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI;\r\n\r\npublic static class CRCGenerator\r\n{\r\n    public static uint GenerateHash(FString text, bool disableCasePreservingHash, bool version420 = false)\r\n    {\r\n        return GenerateHash(text?.Value, text?.Encoding, disableCasePreservingHash, version420);\r\n    }\r\n\r\n    public static uint GenerateHash(string text, bool disableCasePreservingHash, bool version420 = false)\r\n    {\r\n        return GenerateHash(text, Encoding.UTF8, disableCasePreservingHash, version420);\r\n    }\r\n\r\n    public static uint GenerateHash(string text, Encoding encoding, bool disableCasePreservingHash, bool version420 = false)\r\n    {\r\n        uint algor1 = Strihash_DEPRECATED(text, encoding, version420);\r\n        uint algor2 = disableCasePreservingHash ? 0 : StrCrc32(text);\r\n        return (algor1 & 0xFFFF) | ((algor2 & 0xFFFF) << 16);\r\n    }\r\n\r\n    public static char ToUpper(char input)\r\n    {\r\n        return (char)((uint)input - ((((uint)input - 'a' < 26u) ? 1 : 0) << 5));\r\n    }\r\n\r\n    public static char ToUpperVersion420(char input)\r\n    {\r\n        return (char)((input < 256 ? (uint)unchecked((sbyte)input) : (uint)input) - ((((uint)input - 'a' < 26u) ? 1 : 0) << 5));\r\n    }\r\n\r\n    public static string ToUpper(string input)\r\n    {\r\n        var res = \"\";\r\n        foreach (char x in input) res += ToUpper(x); // todo: revise for better perf if needed\r\n        return res;\r\n    }\r\n\r\n    public static char ToLower(char input)\r\n    {\r\n        return (char)((uint)input + ((((uint)input - 'A' < 26u) ? 1 : 0) << 5));\r\n    }\r\n\r\n    public static string ToLower(string input, bool coalesceToSlash = false)\r\n    {\r\n        var res = \"\";\r\n        foreach (char x in input)\r\n        {\r\n            char chosenX = x;\r\n            if (coalesceToSlash && (chosenX == '.' || chosenX == ':')) chosenX = '/';\r\n            res += ToLower(chosenX); // todo: revise for better perf if needed\r\n        }\r\n        return res;\r\n    }\r\n\r\n    public static FString ToLower(FString input, bool coalesceToSlash = false)\r\n    {\r\n        FString output = (FString)input.Clone();\r\n        output.Value = ToLower(output.Value, coalesceToSlash);\r\n        return output;\r\n    }\r\n\r\n    public static uint Strihash_DEPRECATED(string text, Encoding encoding, bool version420 = false)\r\n    {\r\n        uint hash = 0;\r\n        byte[] rawDataForCharacter;\r\n        for (int i = 0; i < text.Length; i++)\r\n        {\r\n            var next = Math.Min(i + 1, text.Length - 1);\r\n            if (char.IsHighSurrogate(text[i]) && next != i && char.IsLowSurrogate(text[next]))\r\n            {\r\n                rawDataForCharacter = encoding.GetBytes( new [] { text[i], text[++i] });\r\n            }\r\n            else\r\n            {\r\n                char B = !version420 ? ToUpper(text[i]) : ToUpperVersion420(text[i]);\r\n                rawDataForCharacter = encoding.GetBytes(new [] { B });\r\n            }\r\n\r\n            foreach (byte rawByte in rawDataForCharacter)\r\n            {\r\n                hash = ((hash >> 8) & 0x00FFFFFF) ^ CRCTable_DEPRECATED[(hash ^ rawByte) & 0x000000FF];\r\n            }\r\n        }\r\n        return hash;\r\n    }\r\n\r\n    // Accurate as-is for both WIDECHAR and ANSICHAR\r\n    public static uint StrCrc32(string text, uint CRC = 0)\r\n    {\r\n        CRC = ~CRC;\r\n        for (int i = 0; i < text.Length; i++)\r\n        {\r\n            char Ch = text[i];\r\n            CRC = (CRC >> 8) ^ CRCTablesSB8[0, (CRC ^ Ch) & 0xFF];\r\n            Ch >>= 8;\r\n            CRC = (CRC >> 8) ^ CRCTablesSB8[0, (CRC ^ Ch) & 0xFF];\r\n            Ch >>= 8;\r\n            CRC = (CRC >> 8) ^ CRCTablesSB8[0, (CRC ^ Ch) & 0xFF];\r\n            Ch >>= 8;\r\n            CRC = (CRC >> 8) ^ CRCTablesSB8[0, (CRC ^ Ch) & 0xFF];\r\n        }\r\n        return ~CRC;\r\n    }\r\n\r\n    public static readonly uint[] CRCTable_DEPRECATED =\r\n    [\r\n        0x00000000, 0x04C11DB7, 0x09823B6E, 0x0D4326D9, 0x130476DC, 0x17C56B6B, 0x1A864DB2, 0x1E475005, 0x2608EDB8, 0x22C9F00F, 0x2F8AD6D6, 0x2B4BCB61, 0x350C9B64, 0x31CD86D3, 0x3C8EA00A, 0x384FBDBD,\r\n        0x4C11DB70, 0x48D0C6C7, 0x4593E01E, 0x4152FDA9, 0x5F15ADAC, 0x5BD4B01B, 0x569796C2, 0x52568B75, 0x6A1936C8, 0x6ED82B7F, 0x639B0DA6, 0x675A1011, 0x791D4014, 0x7DDC5DA3, 0x709F7B7A, 0x745E66CD,\r\n        0x9823B6E0, 0x9CE2AB57, 0x91A18D8E, 0x95609039, 0x8B27C03C, 0x8FE6DD8B, 0x82A5FB52, 0x8664E6E5, 0xBE2B5B58, 0xBAEA46EF, 0xB7A96036, 0xB3687D81, 0xAD2F2D84, 0xA9EE3033, 0xA4AD16EA, 0xA06C0B5D,\r\n        0xD4326D90, 0xD0F37027, 0xDDB056FE, 0xD9714B49, 0xC7361B4C, 0xC3F706FB, 0xCEB42022, 0xCA753D95, 0xF23A8028, 0xF6FB9D9F, 0xFBB8BB46, 0xFF79A6F1, 0xE13EF6F4, 0xE5FFEB43, 0xE8BCCD9A, 0xEC7DD02D,\r\n        0x34867077, 0x30476DC0, 0x3D044B19, 0x39C556AE, 0x278206AB, 0x23431B1C, 0x2E003DC5, 0x2AC12072, 0x128E9DCF, 0x164F8078, 0x1B0CA6A1, 0x1FCDBB16, 0x018AEB13, 0x054BF6A4, 0x0808D07D, 0x0CC9CDCA,\r\n        0x7897AB07, 0x7C56B6B0, 0x71159069, 0x75D48DDE, 0x6B93DDDB, 0x6F52C06C, 0x6211E6B5, 0x66D0FB02, 0x5E9F46BF, 0x5A5E5B08, 0x571D7DD1, 0x53DC6066, 0x4D9B3063, 0x495A2DD4, 0x44190B0D, 0x40D816BA,\r\n        0xACA5C697, 0xA864DB20, 0xA527FDF9, 0xA1E6E04E, 0xBFA1B04B, 0xBB60ADFC, 0xB6238B25, 0xB2E29692, 0x8AAD2B2F, 0x8E6C3698, 0x832F1041, 0x87EE0DF6, 0x99A95DF3, 0x9D684044, 0x902B669D, 0x94EA7B2A,\r\n        0xE0B41DE7, 0xE4750050, 0xE9362689, 0xEDF73B3E, 0xF3B06B3B, 0xF771768C, 0xFA325055, 0xFEF34DE2, 0xC6BCF05F, 0xC27DEDE8, 0xCF3ECB31, 0xCBFFD686, 0xD5B88683, 0xD1799B34, 0xDC3ABDED, 0xD8FBA05A,\r\n        0x690CE0EE, 0x6DCDFD59, 0x608EDB80, 0x644FC637, 0x7A089632, 0x7EC98B85, 0x738AAD5C, 0x774BB0EB, 0x4F040D56, 0x4BC510E1, 0x46863638, 0x42472B8F, 0x5C007B8A, 0x58C1663D, 0x558240E4, 0x51435D53,\r\n        0x251D3B9E, 0x21DC2629, 0x2C9F00F0, 0x285E1D47, 0x36194D42, 0x32D850F5, 0x3F9B762C, 0x3B5A6B9B, 0x0315D626, 0x07D4CB91, 0x0A97ED48, 0x0E56F0FF, 0x1011A0FA, 0x14D0BD4D, 0x19939B94, 0x1D528623,\r\n        0xF12F560E, 0xF5EE4BB9, 0xF8AD6D60, 0xFC6C70D7, 0xE22B20D2, 0xE6EA3D65, 0xEBA91BBC, 0xEF68060B, 0xD727BBB6, 0xD3E6A601, 0xDEA580D8, 0xDA649D6F, 0xC423CD6A, 0xC0E2D0DD, 0xCDA1F604, 0xC960EBB3,\r\n        0xBD3E8D7E, 0xB9FF90C9, 0xB4BCB610, 0xB07DABA7, 0xAE3AFBA2, 0xAAFBE615, 0xA7B8C0CC, 0xA379DD7B, 0x9B3660C6, 0x9FF77D71, 0x92B45BA8, 0x9675461F, 0x8832161A, 0x8CF30BAD, 0x81B02D74, 0x857130C3,\r\n        0x5D8A9099, 0x594B8D2E, 0x5408ABF7, 0x50C9B640, 0x4E8EE645, 0x4A4FFBF2, 0x470CDD2B, 0x43CDC09C, 0x7B827D21, 0x7F436096, 0x7200464F, 0x76C15BF8, 0x68860BFD, 0x6C47164A, 0x61043093, 0x65C52D24,\r\n        0x119B4BE9, 0x155A565E, 0x18197087, 0x1CD86D30, 0x029F3D35, 0x065E2082, 0x0B1D065B, 0x0FDC1BEC, 0x3793A651, 0x3352BBE6, 0x3E119D3F, 0x3AD08088, 0x2497D08D, 0x2056CD3A, 0x2D15EBE3, 0x29D4F654,\r\n        0xC5A92679, 0xC1683BCE, 0xCC2B1D17, 0xC8EA00A0, 0xD6AD50A5, 0xD26C4D12, 0xDF2F6BCB, 0xDBEE767C, 0xE3A1CBC1, 0xE760D676, 0xEA23F0AF, 0xEEE2ED18, 0xF0A5BD1D, 0xF464A0AA, 0xF9278673, 0xFDE69BC4,\r\n        0x89B8FD09, 0x8D79E0BE, 0x803AC667, 0x84FBDBD0, 0x9ABC8BD5, 0x9E7D9662, 0x933EB0BB, 0x97FFAD0C, 0xAFB010B1, 0xAB710D06, 0xA6322BDF, 0xA2F33668, 0xBCB4666D, 0xB8757BDA, 0xB5365D03, 0xB1F740B4\r\n    ];\r\n\r\n    public static readonly uint[,] CRCTablesSB8 = new uint[8, 256]\r\n    {\r\n        {\r\n            0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,\r\n            0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,\r\n            0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,\r\n            0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,\r\n            0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,\r\n            0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,\r\n            0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,\r\n            0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,\r\n            0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,\r\n            0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,\r\n            0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,\r\n            0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,\r\n            0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,\r\n            0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,\r\n            0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,\r\n            0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d\r\n        },\r\n        {\r\n            0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504, 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49, 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e, 0x87981ccf,\r\n            0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192, 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859, 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c, 0xd4413fdf, 0xcd5a0e9e,\r\n            0x958424a2, 0x8c9f15e3, 0xa7b24620, 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265, 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae, 0x202a5aef, 0x0b07092c, 0x121c386d,\r\n            0xdf4636f3, 0xc65d07b2, 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175, 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38, 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c,\r\n            0xf0794f05, 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40, 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f, 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca,\r\n            0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850, 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d, 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da, 0x3d23419b,\r\n            0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864, 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af, 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea, 0xfb7e4629, 0xe2657768,\r\n            0x2f3f79f6, 0x362448b7, 0x1d091b74, 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31, 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa, 0x9a9107bb, 0xb1bc5478, 0xa8a76539,\r\n            0x3b83984b, 0x2298a90a, 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd, 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180, 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484,\r\n            0x71418a1a, 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f, 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290, 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5,\r\n            0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed, 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0, 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167, 0x299fa026,\r\n            0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b, 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0, 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5, 0x7a468336, 0x635db277,\r\n            0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc, 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189, 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842, 0x7e54a903, 0x5579fac0, 0x4c62cb81,\r\n            0x8138c51f, 0x9823f45e, 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299, 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4, 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0,\r\n            0x5e7ef3ec, 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9, 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66, 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23,\r\n            0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9, 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4, 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33, 0x9324fd72\r\n        },\r\n        {\r\n            0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc, 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f, 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a, 0x0b5c473d,\r\n            0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29, 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8, 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023, 0x16b88e7a, 0x177ae44d,\r\n            0x384d46e0, 0x398f2cd7, 0x3bc9928e, 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065, 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84, 0x3095d5b3, 0x32d36bea, 0x331101dd,\r\n            0x246be590, 0x25a98fa7, 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922, 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71, 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad,\r\n            0x709a8dc0, 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b, 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816, 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd,\r\n            0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c, 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f, 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba, 0x67e0698d,\r\n            0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579, 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98, 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873, 0x4249e62a, 0x438b8c1d,\r\n            0x54f16850, 0x55330267, 0x5775bc3e, 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5, 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134, 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d,\r\n            0xe1351b80, 0xe0f771b7, 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732, 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461, 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd,\r\n            0xfd13b8f0, 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b, 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26, 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd,\r\n            0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc, 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef, 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a, 0xd2241a5d,\r\n            0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049, 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8, 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43, 0xcfc0d31a, 0xce02b92d,\r\n            0x91af9640, 0x906dfc77, 0x922b422e, 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5, 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24, 0x99770513, 0x9b31bb4a, 0x9af3d17d,\r\n            0x8d893530, 0x8c4b5f07, 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982, 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1, 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d,\r\n            0xa9e2d0a0, 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b, 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576, 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d,\r\n            0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c, 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f, 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda, 0xbe9834ed\r\n        },\r\n        {\r\n            0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757, 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a, 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733, 0x58631056,\r\n            0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871, 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70, 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42, 0xb0c620ac, 0x087a47c9,\r\n            0xa032af3e, 0x188ec85b, 0x0a3b67b5, 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787, 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086, 0x525877e3, 0x40edd80d, 0xf851bf68,\r\n            0xf02bf8a1, 0x48979fc4, 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d, 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0, 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7,\r\n            0x9b14583d, 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f, 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859, 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b,\r\n            0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5, 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028, 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891, 0x936e1ff4,\r\n            0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed, 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec, 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde, 0xdbf98030, 0x6345e755,\r\n            0x6b3fa09c, 0xd383c7f9, 0xc1366817, 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825, 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24, 0x99557841, 0x8be0d7af, 0x335cb0ca,\r\n            0xed59b63b, 0x55e5d15e, 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7, 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a, 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d,\r\n            0xbd40e1a4, 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196, 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0, 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2,\r\n            0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52, 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f, 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36, 0x15080953,\r\n            0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174, 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675, 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647, 0xfdad39a9, 0x45115ecc,\r\n            0x764dee06, 0xcef18963, 0xdc44268d, 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf, 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be, 0x842736db, 0x96929935, 0x2e2efe50,\r\n            0x2654b999, 0x9ee8defc, 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645, 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98, 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf,\r\n            0xd67f4138, 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a, 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c, 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e,\r\n            0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0, 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d, 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194, 0xde0506f1\r\n        },\r\n        {\r\n            0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0, 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271, 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61, 0x825097d1,\r\n            0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52, 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43, 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333, 0xdfd029e3, 0xe2b00053,\r\n            0xc1c12f04, 0xfca106b4, 0xbb017c64, 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314, 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205, 0x3951ebb5, 0x7ef19165, 0x4391b8d5,\r\n            0xa121b886, 0x9c419136, 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26, 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997, 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57,\r\n            0x58f35849, 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739, 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8, 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98,\r\n            0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b, 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba, 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa, 0xba43581a,\r\n            0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d, 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c, 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc, 0x2602c92c, 0x1b62e09c,\r\n            0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af, 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf, 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce, 0x0142247e, 0x46e25eae, 0x7b82771e,\r\n            0xb1e6b092, 0x8c869922, 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532, 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183, 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743,\r\n            0xd1062710, 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860, 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1, 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1,\r\n            0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956, 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7, 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7, 0xf2770847,\r\n            0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4, 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5, 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5, 0xaff7b675, 0x92979fc5,\r\n            0xe915e8db, 0xd475c16b, 0x93d5bbbb, 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb, 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da, 0x11852c6a, 0x562556ba, 0x6b457f0a,\r\n            0x89f57f59, 0xb49556e9, 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9, 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48, 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888,\r\n            0x28d4c7df, 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af, 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e, 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e,\r\n            0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d, 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c, 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c, 0xca64c78c\r\n        },\r\n        {\r\n            0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216, 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8, 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170, 0xf156b2d5,\r\n            0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035, 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6, 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145, 0x39dc63eb, 0xf280b04e,\r\n            0x07ac0536, 0xccf0d693, 0x4a64a43d, 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e, 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d, 0xbb3216e8, 0x3da66446, 0xf6fab7e3,\r\n            0x047a07ad, 0xcf26d408, 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0, 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e, 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578,\r\n            0x0f580a6c, 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf, 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a, 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9,\r\n            0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1, 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f, 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987, 0xfdd8ba22,\r\n            0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4, 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37, 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84, 0x32fe6e2a, 0xf9a2bd8f,\r\n            0x0b220dc1, 0xc07ede64, 0x46eaacca, 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79, 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba, 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14,\r\n            0x1eb014d8, 0xd5ecc77d, 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5, 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b, 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d,\r\n            0x1d661643, 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0, 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525, 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496,\r\n            0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8, 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026, 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e, 0xe84aa33b,\r\n            0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db, 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118, 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab, 0x20c07205, 0xeb9ca1a0,\r\n            0x11e81eb4, 0xdab4cd11, 0x5c20bfbf, 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c, 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf, 0xad760d6a, 0x2be27fc4, 0xe0beac61,\r\n            0x123e1c2f, 0xd962cf8a, 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32, 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec, 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa,\r\n            0x16441b82, 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31, 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4, 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957,\r\n            0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f, 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1, 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869, 0xe4c4abcc\r\n        },\r\n        {\r\n            0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413, 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3, 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d, 0xf64870e9,\r\n            0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653, 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9, 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e, 0x37e1e793, 0x9196ec27,\r\n            0xcfbd399c, 0x69ca3228, 0x582228b5, 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712, 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8, 0xae6a585c, 0x9f8242c1, 0x39f54975,\r\n            0xa863a552, 0x0e14aee6, 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068, 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8, 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb,\r\n            0x440b7579, 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade, 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37, 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590,\r\n            0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4, 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64, 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea, 0xd59d995e,\r\n            0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678, 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282, 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25, 0xdb8937b8, 0x7dfe3c0c,\r\n            0xec68d02b, 0x4a1fdb9f, 0x7bf7c102, 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5, 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f, 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2,\r\n            0x8816eaf2, 0x2e61e146, 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8, 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08, 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b,\r\n            0xefc8763c, 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b, 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972, 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5,\r\n            0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d, 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd, 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833, 0xb1e3a387,\r\n            0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d, 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7, 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60, 0x704a34fd, 0xd63d3f49,\r\n            0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2, 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105, 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff, 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62,\r\n            0xabc30345, 0x0db408f1, 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f, 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf, 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac,\r\n            0x03a0a617, 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0, 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959, 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe,\r\n            0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca, 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a, 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184, 0x92364a30\r\n        },\r\n        {\r\n            0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa, 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b, 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232, 0xd92012ac,\r\n            0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8, 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e, 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa, 0x69312319, 0xa59b2387,\r\n            0xf9766256, 0x35dc62c8, 0xbb53652b, 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f, 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719, 0x62737787, 0xecfc7064, 0x205670fa,\r\n            0x85cd537d, 0x496753e3, 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa, 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b, 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1,\r\n            0x299dc2ed, 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89, 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25, 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041,\r\n            0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c, 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed, 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4, 0x8c06e16a,\r\n            0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758, 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e, 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a, 0xc561b289, 0x09cbb217,\r\n            0xac509190, 0x60fa910e, 0xee7596ed, 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889, 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df, 0x37558441, 0xb9da83a2, 0x7570833c,\r\n            0x533b85da, 0x9f918544, 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d, 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c, 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776,\r\n            0x2f80b4f1, 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95, 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839, 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d,\r\n            0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976, 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7, 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be, 0x736df520,\r\n            0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144, 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12, 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376, 0xc37cc495, 0x0fd6c40b,\r\n            0x7aa64737, 0xb60c47a9, 0x3883404a, 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e, 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278, 0xe1a352e6, 0x6f2c5505, 0xa386559b,\r\n            0x061d761c, 0xcab77682, 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b, 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a, 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0,\r\n            0x83d02561, 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05, 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9, 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd,\r\n            0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0, 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61, 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678, 0x264b06e6\r\n        }\r\n    };\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/CustomVersion.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI;\r\n\r\n/// <summary>\r\n/// A custom version. Controls more specific serialization than the main engine object version does.\r\n/// </summary>\r\npublic class CustomVersion : ICloneable\r\n{\r\n    /// <summary>\r\n    /// Static map of custom version GUIDs to the object or enum that they represent in the Unreal Engine. This list is not necessarily exhaustive, so feel free to add to it if need be.\r\n    /// </summary>\r\n    public static readonly Dictionary<Guid, string> GuidToCustomVersionStringMap = new Dictionary<Guid, string>()\r\n    {\r\n        { UnusedCustomVersionKey, \"UnusedCustomVersionKey\" },\r\n        { UAPUtils.GUID(0xB0D832E4, 0x1F894F0D, 0xACCF7EB7, 0x36FD4AA2), \"FBlueprintsObjectVersion\" },\r\n        { UAPUtils.GUID(0xE1C64328, 0xA22C4D53, 0xA36C8E86, 0x6417BD8C), \"FBuildObjectVersion\" },\r\n        { UAPUtils.GUID(0x375EC13C, 0x06E448FB, 0xB50084F0, 0x262A717E), \"FCoreObjectVersion\" },\r\n        { UAPUtils.GUID(0xE4B068ED, 0xF49442E9, 0xA231DA0B, 0x2E46BB41), \"FEditorObjectVersion\" },\r\n        { UAPUtils.GUID(0xCFFC743F, 0x43B04480, 0x939114DF, 0x171D2073), \"FFrameworkObjectVersion\" },\r\n        { UAPUtils.GUID(0xB02B49B5, 0xBB2044E9, 0xA30432B7, 0x52E40360), \"FMobileObjectVersion\" },\r\n        { UAPUtils.GUID(0xA4E4105C, 0x59A149B5, 0xA7C540C4, 0x547EDFEE), \"FNetworkingObjectVersion\" },\r\n        { UAPUtils.GUID(0x39C831C9, 0x5AE647DC, 0x9A449C17, 0x3E1C8E7C), \"FOnlineObjectVersion\" },\r\n        { UAPUtils.GUID(0x78F01B33, 0xEBEA4F98, 0xB9B484EA, 0xCCB95AA2), \"FPhysicsObjectVersion\" },\r\n        { UAPUtils.GUID(0x6631380F, 0x2D4D43E0, 0x8009CF27, 0x6956A95A), \"FPlatformObjectVersion\" },\r\n        { UAPUtils.GUID(0x12F88B9F, 0x88754AFC, 0xA67CD90C, 0x383ABD29), \"FRenderingObjectVersion\" },\r\n        { UAPUtils.GUID(0x7B5AE74C, 0xD2704C10, 0xA9585798, 0x0B212A5A), \"FSequencerObjectVersion\" },\r\n        { UAPUtils.GUID(0xD7296918, 0x1DD64BDD, 0x9DE264A8, 0x3CC13884), \"FVRObjectVersion\" },\r\n        { UAPUtils.GUID(0xC2A15278, 0xBFE74AFE, 0x6C1790FF, 0x531DF755), \"FLoadTimesObjectVersion\" },\r\n        { UAPUtils.GUID(0x6EACA3D4, 0x40EC4CC1, 0xb7868BED, 0x9428FC5), \"FGeometryObjectVersion\" },\r\n        { UAPUtils.GUID(0x29E575DD, 0xE0A34627, 0x9D10D276, 0x232CDCEA), \"FAnimPhysObjectVersion\" },\r\n        { UAPUtils.GUID(0xAF43A65D, 0x7FD34947, 0x98733E8E, 0xD9C1BB05), \"FAnimObjectVersion\" },\r\n        { UAPUtils.GUID(0x6B266CEC, 0x1EC74B8F, 0xA30BE4D9, 0x0942FC07), \"FReflectionCaptureObjectVersion\" },\r\n        { UAPUtils.GUID(0x0DF73D61, 0xA23F47EA, 0xB72789E9, 0x0C41499A), \"FAutomationObjectVersion\" },\r\n        { UAPUtils.GUID(0x601D1886, 0xAC644F84, 0xAA16D3DE, 0x0DEAC7D6), \"FFortniteMainBranchObjectVersion\" },\r\n        { UAPUtils.GUID(0x9DFFBCD6, 0x494F0158, 0xE2211282, 0x3C92A888), \"FEnterpriseObjectVersion\" },\r\n        { UAPUtils.GUID(0xF2AED0AC, 0x9AFE416F, 0x8664AA7F, 0xFA26D6FC), \"FNiagaraObjectVersion\" },\r\n        { UAPUtils.GUID(0x174F1F0B, 0xB4C645A5, 0xB13F2EE8, 0xD0FB917D), \"FDestructionObjectVersion\" },\r\n        { UAPUtils.GUID(0x35F94A83, 0xE258406C, 0xA31809F5, 0x9610247C), \"FExternalPhysicsCustomObjectVersion\" },\r\n        { UAPUtils.GUID(0xB68FC16E, 0x8B1B42E2, 0xB453215C, 0x058844FE), \"FExternalPhysicsMaterialCustomObjectVersion\" },\r\n        { UAPUtils.GUID(0xB2E18506, 0x4273CFC2, 0xA54EF4BB, 0x758BBA07), \"FCineCameraObjectVersion\" },\r\n        { UAPUtils.GUID(0x64F58936, 0xFD1B42BA, 0xBA967289, 0xD5D0FA4E), \"FVirtualProductionObjectVersion\" },\r\n        { UAPUtils.GUID(0x6f0ed827, 0xa6094895, 0x9c91998d, 0x90180ea4), \"FMediaFrameworkObjectVersion\" },\r\n        { UAPUtils.GUID(0xAFE08691, 0x3A0D4952, 0xB673673B, 0x7CF22D1E), \"FPoseDriverCustomVersion\" },\r\n        { UAPUtils.GUID(0xCB8AB0CD, 0xE78C4BDE, 0xA8621393, 0x14E9EF62), \"FTempCustomVersion\" },\r\n        { UAPUtils.GUID(0x2EB5FDBD, 0x01AC4D10, 0x8136F38F, 0x3393A5DA), \"FAnimationCustomVersion\" },\r\n        { UAPUtils.GUID(0x717F9EE7, 0xE9B0493A, 0x88B39132, 0x1B388107), \"FAssetRegistryVersion\" },\r\n        { UAPUtils.GUID(0xFB680AF2, 0x59EF4BA3, 0xBAA819B5, 0x73C8443D), \"FClothingAssetCustomVersion\" },\r\n        { UAPUtils.GUID(0x9C54D522, 0xA8264FBE, 0x94210746, 0x61B482D0), \"FReleaseObjectVersion\" },\r\n        { UAPUtils.GUID(0x4A56EB40, 0x10F511DC, 0x92D3347E, 0xB2C96AE7), \"FParticleSystemCustomVersion\" },\r\n        { UAPUtils.GUID(0xD78A4A00, 0xE8584697, 0xBAA819B5, 0x487D46B4), \"FSkeletalMeshCustomVersion\" },\r\n        { UAPUtils.GUID(0x5579F886, 0x933A4C1F, 0x83BA087B, 0x6361B92F), \"FRecomputeTangentCustomVersion\" },\r\n        { UAPUtils.GUID(0x612FBE52, 0xDA53400B, 0x910D4F91, 0x9FB1857C), \"FOverlappingVerticesCustomVersion\" },\r\n        { UAPUtils.GUID(0x430C4D19, 0x71544970, 0x87699B69, 0xDF90B0E5), \"FFoliageCustomVersion\" },\r\n        { UAPUtils.GUID(0xaafe32bd, 0x53954c14, 0xb66a5e25, 0x1032d1dd), \"FProceduralFoliageCustomVersion\" },\r\n        { UAPUtils.GUID(0xab965196, 0x45d808fc, 0xb7d7228d, 0x78ad569e), \"FLiveLinkCustomVersion\" },\r\n        { UAPUtils.GUID(0xE7086368, 0x6B234C58, 0x84391B70, 0x16265E91), \"FFortniteReleaseBranchCustomObjectVersion\" },\r\n        { UAPUtils.GUID(0xD89B5E42, 0x24BD4D46, 0x8412ACA8, 0xDF641779), \"FUE5ReleaseStreamObjectVersion\" },\r\n        { UAPUtils.GUID(0xFCF57AFA, 0x50764283, 0xB9A9E658, 0xFFA02D32), \"FNiagaraCustomVersion\" },\r\n        { UAPUtils.GUID(0x697DD581, 0xE64f41AB, 0xAA4A51EC, 0xBEB7B628), \"FUE5MainStreamObjectVersion\" }\r\n\r\n        // etc.\r\n    };\r\n\r\n    /// <summary>\r\n    /// A GUID that represents an unused custom version.\r\n    /// </summary>\r\n    public static readonly Guid UnusedCustomVersionKey = UAPUtils.GUID(0, 0, 0, 0xF99D40C1);\r\n\r\n    /// <summary>\r\n    /// Returns the name of the object or enum that a custom version GUID represents, as specified in <see cref=\"GuidToCustomVersionStringMap\"/>.\r\n    /// </summary>\r\n    /// <param name=\"guid\">A GUID that represents a custom version.</param>\r\n    /// <returns>A string that represents the friendly name of the corresponding custom version.</returns>\r\n    public static string GetCustomVersionFriendlyNameFromGuid(Guid guid)\r\n    {\r\n        return GuidToCustomVersionStringMap.ContainsKey(guid) ? GuidToCustomVersionStringMap[guid] : null;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Returns the GUID of the custom version that the object or enum name provided represents.\r\n    /// </summary>\r\n    /// <param name=\"friendlyName\">The name of a custom version object or enum.</param>\r\n    /// <returns>A GUID that represents the custom version</returns>\r\n    public static Guid GetCustomVersionGuidFromFriendlyName(string friendlyName)\r\n    {\r\n        foreach (KeyValuePair<Guid, string> entry in GuidToCustomVersionStringMap)\r\n        {\r\n            if (entry.Value == friendlyName) return entry.Key;\r\n        }\r\n        return UnusedCustomVersionKey;\r\n    }\r\n\r\n    public FString Name = null;\r\n    public Guid Key;\r\n    public string FriendlyName = null;\r\n    public int Version;\r\n    public bool IsSerialized = true;\r\n\r\n    public CustomVersion SetIsSerialized(bool val)\r\n    {\r\n        this.IsSerialized = val;\r\n        return this;\r\n    }\r\n\r\n    public object Clone()\r\n    {\r\n        return new CustomVersion(Key, Version)\r\n        {\r\n            Name = Name,\r\n            FriendlyName = FriendlyName,\r\n            IsSerialized = IsSerialized\r\n        };\r\n    }\r\n\r\n    /// <summary>\r\n    /// Initializes a new instance of the <see cref=\"CustomVersion\"/> class given an object or enum name and a version number.\r\n    /// </summary>\r\n    /// <param name=\"friendlyName\">The friendly name to use when initializing this custom version.</param>\r\n    /// <param name=\"version\">The version number to use when initializing this custom version.</param>\r\n    public CustomVersion(string friendlyName, int version)\r\n    {\r\n        Key = GetCustomVersionGuidFromFriendlyName(friendlyName);\r\n        FriendlyName = friendlyName;\r\n        Version = version;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Initializes a new instance of the <see cref=\"CustomVersion\"/> class given a custom version GUID and a version number.\r\n    /// </summary>\r\n    /// <param name=\"key\">The GUID to use when initializing this custom version.</param>\r\n    /// <param name=\"version\">The version number to use when initializing this custom version.</param>\r\n    public CustomVersion(Guid key, int version)\r\n    {\r\n        Key = key;\r\n        if (GuidToCustomVersionStringMap.ContainsKey(key)) FriendlyName = GuidToCustomVersionStringMap[key];\r\n        Version = version;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Initializes a new instance of the <see cref=\"CustomVersion\"/> class.\r\n    /// </summary>\r\n    public CustomVersion()\r\n    {\r\n        Key = UnusedCustomVersionKey;\r\n        Version = 0;\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/CustomVersions/CustomVersions.cs",
    "content": "using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.CustomVersions\r\n{\r\n    /// <summary>\r\n    /// Represents the engine version at the time that a custom version was implemented.\r\n    /// </summary>\r\n    [AttributeUsage(AttributeTargets.Field)]\r\n    public class IntroducedAttribute : Attribute\r\n    {\r\n        public EngineVersion IntroducedVersion;\r\n\r\n        public IntroducedAttribute(EngineVersion introducedVersion)\r\n        {\r\n            IntroducedVersion = introducedVersion;\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Custom serialization version for changes made in the //Fortnite/Main stream.\r\n    /// </summary>\r\n    public enum FFortniteMainBranchObjectVersion\r\n    {\r\n        /// <summary>Before any version changes were made</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        BeforeCustomVersionWasAdded = 0,\r\n\r\n        /// <summary>World composition tile offset changed from 2d to 3d</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        WorldCompositionTile3DOffset,\r\n\r\n        /// <summary>Minor material serialization optimization</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        MaterialInstanceSerializeOptimization_ShaderFName,\r\n\r\n        /// <summary>Refactored cull distances to account for HLOD, explicit override and globals in priority</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        CullDistanceRefactor_RemovedDefaultDistance,\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        CullDistanceRefactor_NeverCullHLODsByDefault,\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        CullDistanceRefactor_NeverCullALODActorsByDefault,\r\n\r\n        /// <summary>Support to remove morphtarget generated by bRemapMorphtarget</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        SaveGeneratedMorphTargetByEngine,\r\n\r\n        /// <summary>Convert reduction setting options</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        ConvertReductionSettingOptions,\r\n\r\n        /// <summary>Serialize the type of blending used for landscape layer weight static params</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        StaticParameterTerrainLayerWeightBlendType,\r\n\r\n        /// <summary>Fix up None Named animation curve names,</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        FixUpNoneNameAnimationCurves,\r\n\r\n        /// <summary>Ensure ActiveBoneIndices to have parents even not skinned for old assets</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        EnsureActiveBoneIndicesToContainParents,\r\n\r\n        /// <summary>Serialize the instanced static mesh render data, to avoid building it at runtime</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        SerializeInstancedStaticMeshRenderData,\r\n\r\n        /// <summary>Cache material quality node usage</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        CachedMaterialQualityNodeUsage,\r\n\r\n        /// <summary>Font outlines no longer apply to drop shadows for new objects but we maintain the opposite way for backwards compat</summary>\r\n        [Introduced(EngineVersion.VER_UE4_21)]\r\n        FontOutlineDropShadowFixup,\r\n\r\n        /// <summary>New skeletal mesh import workflow (Geometry only or animation only re-import )</summary>\r\n        [Introduced(EngineVersion.VER_UE4_21)]\r\n        NewSkeletalMeshImporterWorkflow,\r\n\r\n        /// <summary>Migrate data from previous data structure to new one to support materials per LOD on the Landscape</summary>\r\n        [Introduced(EngineVersion.VER_UE4_21)]\r\n        NewLandscapeMaterialPerLOD,\r\n\r\n        /// <summary>New Pose Asset data type</summary>\r\n        [Introduced(EngineVersion.VER_UE4_21)]\r\n        RemoveUnnecessaryTracksFromPose,\r\n\r\n        /// <summary>Migrate Foliage TLazyObjectPtr to TSoftObjectPtr</summary>\r\n        [Introduced(EngineVersion.VER_UE4_21)]\r\n        FoliageLazyObjPtrToSoftObjPtr,\r\n\r\n        /// <summary>TimelineTemplates store their derived names instead of dynamically generating. This code tied to this version was reverted and redone at a later date</summary>\r\n        [Introduced(EngineVersion.VER_UE4_22)]\r\n        REVERTED_StoreTimelineNamesInTemplate,\r\n\r\n        /// <summary>Added BakePoseOverride for LOD setting</summary>\r\n        [Introduced(EngineVersion.VER_UE4_22)]\r\n        AddBakePoseOverrideForSkeletalMeshReductionSetting,\r\n\r\n        /// <summary>TimelineTemplates store their derived names instead of dynamically generating</summary>\r\n        [Introduced(EngineVersion.VER_UE4_22)]\r\n        StoreTimelineNamesInTemplate,\r\n\r\n        /// <summary>New Pose Asset data type</summary>\r\n        [Introduced(EngineVersion.VER_UE4_22)]\r\n        WidgetStopDuplicatingAnimations,\r\n\r\n        /// <summary>Allow reducing of the base LOD, we need to store some imported model data so we can reduce again from the same data.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_22)]\r\n        AllowSkeletalMeshToReduceTheBaseLOD,\r\n\r\n        /// <summary>Curve Table size reduction</summary>\r\n        [Introduced(EngineVersion.VER_UE4_22)]\r\n        ShrinkCurveTableSize,\r\n\r\n        /// <summary>Widgets upgraded with WidgetStopDuplicatingAnimations, may not correctly default-to-self for the widget parameter.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_22)]\r\n        WidgetAnimationDefaultToSelfFail,\r\n\r\n        /// <summary>HUDWidgets now require an element tag</summary>\r\n        [Introduced(EngineVersion.VER_UE4_22)]\r\n        FortHUDElementNowRequiresTag,\r\n\r\n        /// <summary>Animation saved as bulk data when cooked</summary>\r\n        [Introduced(EngineVersion.VER_UE4_23)]\r\n        FortMappedCookedAnimation,\r\n\r\n        /// <summary>Support Virtual Bone in Retarget Manager</summary>\r\n        [Introduced(EngineVersion.VER_UE4_23)]\r\n        SupportVirtualBoneInRetargeting,\r\n\r\n        /// <summary>Fixup bad defaults in water metadata</summary>\r\n        [Introduced(EngineVersion.VER_UE4_24)]\r\n        FixUpWaterMetadata,\r\n\r\n        /// <summary>Move the location of water metadata</summary>\r\n        [Introduced(EngineVersion.VER_UE4_24)]\r\n        MoveWaterMetadataToActor,\r\n\r\n        /// <summary>Replaced lake collision component</summary>\r\n        [Introduced(EngineVersion.VER_UE4_24)]\r\n        ReplaceLakeCollision,\r\n\r\n        /// <summary>Anim layer node names are now conformed by Guid</summary>\r\n        [Introduced(EngineVersion.VER_UE4_24)]\r\n        AnimLayerGuidConformation,\r\n\r\n        /// <summary>Ocean collision component has become dynamic</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        MakeOceanCollisionTransient,\r\n\r\n        /// <summary>FFieldPath will serialize the owner struct reference and only a short path to its property</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        FFieldPathOwnerSerialization,\r\n\r\n        /// <summary>Simplified WaterBody post process material handling</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        FixUpUnderwaterPostProcessMaterial,\r\n\r\n        /// <summary>A single water exclusion volume can now exclude N water bodies</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        SupportMultipleWaterBodiesPerExclusionVolume,\r\n\r\n        /// <summary>Serialize rigvm operators one by one instead of the full byte code array to ensure determinism</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        RigVMByteCodeDeterminism,\r\n\r\n        /// <summary>Serialize the physical materials generated by the render material</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        LandscapePhysicalMaterialRenderData,\r\n\r\n        /// <summary>RuntimeVirtualTextureVolume fix transforms</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        FixupRuntimeVirtualTextureVolume,\r\n\r\n        /// <summary>Retrieve water body collision components that were lost in cooked builds</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        FixUpRiverCollisionComponents,\r\n\r\n        /// <summary>Fix duplicate spline mesh components on rivers</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        FixDuplicateRiverSplineMeshCollisionComponents,\r\n\r\n        /// <summary>Indicates level has stable actor guids</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        ContainsStableActorGUIDs,\r\n\r\n        /// <summary>Levelset Serialization support for BodySetup.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        LevelsetSerializationSupportForBodySetup,\r\n\r\n        /// <summary>Moving Chaos solver properties to allow them to exist in the project physics settings</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        ChaosSolverPropertiesMoved,\r\n\r\n        /// <summary>Moving some UFortGameFeatureData properties and behaviors into the UGameFeatureAction pattern</summary>\r\n        [Introduced(EngineVersion.VER_UE4_27)]\r\n        GameFeatureData_MovedComponentListAndCheats,\r\n\r\n        /// <summary>Add centrifugal forces for cloth</summary>\r\n        [Introduced(EngineVersion.VER_UE4_27)]\r\n        ChaosClothAddfictitiousforces,\r\n\r\n        /// <summary>Chaos Convex StructureData supports different index sizes based on num verts/planes. Chaos FConvex uses array of FVec3s for vertices instead of particles (Merged from //UE4/Main)</summary>\r\n        [Introduced(EngineVersion.VER_UE4_27)]\r\n        ChaosConvexVariableStructureDataAndVerticesArray,\r\n\r\n        /// <summary>Remove the WaterVelocityHeightTexture dependency on MPC_Landscape and LandscapeWaterIndo</summary>\r\n        [Introduced(EngineVersion.VER_UE4_27)]\r\n        RemoveLandscapeWaterInfo,\r\n\r\n        // CHANGES BEYOND HERE ARE UE5 ONLY //\r\n\r\n        /// <summary>Added the weighted value property type to store the cloths weight maps' low/high ranges</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        ChaosClothAddWeightedValue,\r\n\r\n        /// <summary>Added the Long Range Attachment stiffness weight map</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        ChaosClothAddTetherStiffnessWeightMap,\r\n\r\n        /// <summary>Fix corrupted LOD transition maps</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        ChaosClothFixLODTransitionMaps,\r\n\r\n        /// <summary>Enable a few more weight maps to better art direct the cloth simulation</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        ChaosClothAddTetherScaleAndDragLiftWeightMaps,\r\n\r\n        /// <summary>Enable material (edge, bending, and area stiffness) weight maps</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        ChaosClothAddMaterialWeightMaps,\r\n\r\n        /// <summary>Added bShowCurve for movie scene float channel serialization</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        SerializeFloatChannelShowCurve,\r\n\r\n        /// <summary>Minimize slack waste by using a single array for grass data</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        LandscapeGrassSingleArray,\r\n\r\n        /// <summary>Add loop counters to sequencer's compiled sub-sequence data</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        AddedSubSequenceEntryWarpCounter,\r\n\r\n        /// <summary>Water plugin is now component-based rather than actor based</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        WaterBodyComponentRefactor,\r\n\r\n        /// <summary>Cooked BPGC storing editor-only asset tags</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        BPGCCookedEditorTags,\r\n\r\n        /// <summary>Terrain layer weights are no longer considered material parameters</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        TTerrainLayerWeightsAreNotParameters,\r\n\r\n        /// <summary>\r\n        /// Anim Dynamics Node Gravity Override vector is now defined in world space, not simulation space.\r\n        /// Legacy behavior can be maintained with a flag, which is set false by default for new nodes,\r\n        /// true for nodes predating this change.\r\n        /// </summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        GravityOverrideDefinedInWorldSpace,\r\n\r\n        /// <summary>Anim Dynamics Node Physics parameters for each body in a chain are now stored in an array and can be edited.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        AnimDynamicsEditableChainParameters,\r\n\r\n        /// <summary>Decoupled the generation of the water texture from the Water Brush and the landscape</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        WaterZonesRefactor,\r\n\r\n        /// <summary>Add faster damping calculations to the cloth simulation and rename previous Damping parameter to LocalDamping.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        ChaosClothFasterDamping,\r\n\r\n        /// <summary>Migrated function handlers to the CDO/archetype data</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        MigratedFunctionHandlersToDefaults,\r\n\r\n        /// <summary>Storing inertia tensor as vec3 instead of matrix.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        ChaosInertiaConvertedToVec3,\r\n\r\n        /// <summary>Migrated event definitions to the CDO/archetype data</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        MigratedEventDefinitionToDefaults,\r\n\r\n        /// <summary>Serialize LevelInstanceActorGuid on new ILevelInstanceInterface implementation</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        LevelInstanceActorGuidSerialize,\r\n\r\n        /// <summary>Single-frame/key AnimDataModel patch-up</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        SingleFrameAndKeyAnimModel,\r\n\r\n        /// <summary>Remapped bEvaluateWorldPositionOffset to bEvaluateWorldPositionOffsetInRayTracing</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        RemappedEvaluateWorldPositionOffsetInRayTracing,\r\n\r\n        /// <summary>Water body collision settings are now those of the base UPrimitiveComponent, rather than duplicated in UWaterBodyComponent</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        WaterBodyComponentCollisionSettingsRefactor,\r\n\r\n        /// <summary>\r\n        /// Introducing widget inherited named slots.  This wouldn't have required a version bump, except in the previous\r\n        /// version, users could make NamedSlots and then Seed them with any random widgets, as a sorta 'default' setup.\r\n        /// In order to preserve that, we're bumping the version so that we can set a new field on UNamedSlot to control\r\n        /// if a widget exposes its named slot to everyone (even if it has content), which by default they wont any longer.\r\n        /// </summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        WidgetInheritedNamedSlots,\r\n\r\n        /// <summary>Added water HLOD material</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        WaterHLODSupportAdded,\r\n\r\n        /// <summary>Moved parameters affecting Skeleton pose rendering from the PoseWatch class to the PoseWatchPoseElement class.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        PoseWatchMigrateSkeletonDrawParametersToPoseElement,\r\n\r\n        /// <summary>Reset default value for Water exclusion volumes to make them more intuitive and support the \"it just works\" philosophy.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        WaterExclusionVolumeExcludeAllDefault,\r\n\r\n        /// <summary>Added water non-tessellated LOD</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        WaterNontessellatedLODSupportAdded,\r\n\r\n        /// <summary>Added FHierarchicalSimplification::SimplificationMethod</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        HierarchicalSimplificationMethodEnumAdded,\r\n\r\n        /// <summary>Changed how world partition streaming cells are named</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        WorldPartitionStreamingCellsNamingShortened,\r\n\r\n        /// <summary>Serialize ContentBundleGuid in WorldPartitionActorDesc</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        WorldPartitionActorDescSerializeContentBundleGuid,\r\n\r\n        /// <summary>Serialize IsActorRuntimeOnly in WorldPartitionActorDesc</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        WorldPartitionActorDescSerializeActorIsRuntimeOnly,\r\n\r\n        /// <summary>Add Nanite Material Override option to materials and material instances.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        NaniteMaterialOverride,\r\n\r\n        /// <summary>Serialize HLOD stats in HLODActorDesc</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        WorldPartitionHLODActorDescSerializeStats,\r\n\r\n        /// <summary>WorldPartitionStreamingSourceComponent property deprecation</summary>\r\n        [Introduced(EngineVersion.VER_UE5_2)]\r\n        WorldPartitionStreamingSourceComponentTargetDeprecation,\r\n\r\n        /// <summary>Fixed localization gathering for external actor packages</summary>\r\n        [Introduced(EngineVersion.VER_UE5_2)]\r\n        FixedLocalizationGatherForExternalActorPackage,\r\n\r\n        /// <summary>Change HLODActors to RuntimeCells mapping to use a GUID instead of the cell name</summary>\r\n        [Introduced(EngineVersion.VER_UE5_2)]\r\n        WorldPartitionHLODActorUseSourceCellGuid,\r\n\r\n        /// <summary>Add an attribute to geometry collection to track internal faces, rather than relying on material ID numbering</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        ChaosGeometryCollectionInternalFacesAttribute,\r\n\r\n        /// <summary>Dynamic cast nodes use an enumerated pure node state to include a value for the default setting</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        DynamicCastNodesUsePureStateEnum,\r\n\r\n        /// <summary>Add FWorldPartitionActorFilter to FLevelInstanceActorDesc/FDataLayerInstanceDesc</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        WorldPartitionActorFilter,\r\n\r\n        /// <summary>Change the non-spatialized radius to blend to a pure 2D spatialized sound vs omnidirectional</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        AudioAttenuationNonSpatializedRadiusBlend,\r\n\r\n        /// <summary>Serialize actor class descriptors</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        WorldPartitionActorClassDescSerialize,\r\n\r\n        /// <summary>FActorContainerID is now an FGuid instead of a uint64</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        WorldPartitionFActorContainerIDu64ToGuid,\r\n\r\n        /// <summary>FDataLayerInstanceDesc support for private data layers</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        WorldPartitionPrivateDataLayers,\r\n\r\n        /// <summary>Reduce size and improve behaviour of Chaos::FImplicitObjectUnion</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        ChaosImplicitObjectUnionBVHRefactor,\r\n\r\n        /// <summary>FLevelInstanceActorDesc DeltaSerialize Filter</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        LevelInstanceActorDescDeltaSerializeFilter,\r\n\r\n        /// <summary>Fix the Nanite landscape mesh non-deterministic DDC keys</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        FixNaniteLandscapeMeshDDCKey,\r\n\r\n        /// <summary>Change how connection graphs are stored on Geometry Collections to an edge-array representation</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        ChaosGeometryCollectionConnectionEdgeGroup,\r\n\r\n        /// <summary>Moved the water info mesh data and static water body meshes into new static mesh components for water bodies.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        WaterBodyStaticMeshComponents,\r\n\r\n        /// <summary>Serialize invalid bounds in world partition actor descriptors</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        WorldPartitionActorDescSerializeInvalidBounds,\r\n\r\n        /// <summary>Upgrade Navigation Links to use 64 bits for the ID</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        NavigationLinkID32To64,\r\n\r\n        /// <summary>Serialize editor only references in world partition actor descriptors</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        WorldPartitionActorDescSerializeEditorOnlyReferences,\r\n\r\n        /// <summary>Add support for soft object paths in actor descriptors</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        WorldPartitionActorDescSerializeSoftObjectPathSupport,\r\n\r\n        /// <summary>Don't serialize class descriptor GUIDs</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        WorldPartitionClasDescGuidTransient,\r\n\r\n        /// <summary>Serialize ActorDesc bIsMainWorldOnly</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        WorldPartitionActorDescIsMainWorldOnly,\r\n\r\n        /// <summary>FWorldPartitionActorFilter go back to FString serialize of AssetPaths to avoid FArchiveReplaceOrClearExternalReferences clearing CDO references on BP Compile</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        WorldPartitionActorFilterStringAssetPath,\r\n\r\n        /// <summary>Add FPackedLevelActorDesc for APackedLevelActor and support for APackedLevelActor Filters</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        PackedLevelActorDesc,\r\n\r\n        /// <summary>Add customizable values for several UWorldPartitionRuntimeSpatialHash cvars</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        WorldPartitionRuntimeSpatialHashCVarOverrides,\r\n\r\n        /// <summary>WorldPartition HLOD now contains a source actors object</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        WorldPartitionHLODSourceActorsRefactor,\r\n\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        WaterBodyStaticMeshRename,\r\n\r\n        /// <summary>Geometry Collection now by-default converts vertex colors to sRGB when creating render data</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        GeometryCollectionConvertVertexColorToSRGB,\r\n\r\n        /// <summary>Water bodies before this version need to update their water zone on load since they won't have been serialized yet.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        WaterOwningZonePointerFixup,\r\n\r\n        /// <summary>Set flags on water static meshes to duplicate transient to avoid underlying static mesh duplication issue</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        WaterBodyStaticMeshDuplicateTransient,\r\n\r\n        /// <summary>Update paths to use the SkeletalClass</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        MVVMConvertPropertyPathToSkeletalClass,\r\n\r\n        /// <summary>Fixup all flags/outering on static meshes on water bodies by rebuilding them completely</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        WaterBodyStaticMeshFixup,\r\n\r\n        /// <summary>Binding extensions for anim graph nodes</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        AnimGraphNodeBindingExtensions,\r\n\r\n        /// <summary>Function data stores a map from work to debug operands</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        RigVMSaveDebugMapInGraphFunctionData,\r\n\r\n        /// <summary>Fix missing binding extensions for some anim graph nodes</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        FixMissingAnimGraphNodeBindingExtensions,\r\n\r\n        /// <summary>EditableWhenInherited: Skip custom serialization on non Archetypes</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        ISMComponentEditableWhenInheritedSkipSerialization,\r\n\r\n        /// <summary>GrassTypes are now per-component, rather than per-landscape proxy :</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        LandscapeSupportPerComponentGrassTypes,\r\n\r\n        /// <summary>World partition actor data layers activation logic operator support defaults for old maps</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        WorldPartitionDataLayersLogicOperatorAdded,\r\n\r\n        /// <summary>Started sorting Possessables, Spawnables, and MovieSceneBindings for better search performance.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        MovieSceneSortedBindings,\r\n\r\n        /// <summary>Remove the UAnimCurveCompressionCodec::InstanceGuid which causes cook determinism issues</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        RemoveAnimCurveCompressionCodecInstanceGuid,\r\n\r\n        /// <summary>Serialize the source HLOD Layer for HLOD actor descriptors.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        WorldPartitionHLODActorDescSerializeSourceHLODLayer,\r\n\r\n        /// <summary>Serialize custom editor bounds for HLOD actor descriptors.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        WorldPartitionHLODActorDescSerializeEditorBounds,\r\n\r\n        /// <summary>Changed default Local Exposure Contrast from 1.0 to 0.8 (reverted)</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        LocalExposureDefaultChangeFrom1_Reverted,\r\n\r\n        /// <summary>Added support of external packaging of Data Layer Instances</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        AddDataLayerInstanceExternalPackage,\r\n\r\n        /// <summary>Update paths to keep a flag if they are the widget BP</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        MVVMPropertyPathSelf,\r\n\r\n        /// <summary>Enabled ObjectPtr property serialization for Dataflow nodes</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        AddDataflowObjectSerialization,\r\n\r\n        /// <summary>Add anim notify rate scaling, defaults to on for new content, off for old content</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        AnimNotifyAddRateScale,\r\n\r\n        /// <summary>Fix tangents for non-uniform build scales, and add a flag to optionally match the previous (incorrect) tangents</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        FixedTangentTransformForNonuniformBuildScale,\r\n\r\n        /// <summary>AnimNode Layers will now start in a Shared Group, instead of being each one on a different group at runtime</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        AnimNodeRootDefaultGroupChange,\r\n\r\n        /// <summary>Move AnimNext graphs to sub-entries of assets</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        AnimNextMoveGraphsToEntries,\r\n\r\n        /// <summary>Removed debug information containing compressed data author, time etc. from animation DDC data as it introduces indeterminism</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        AnimationSequenceCompressedDataRemoveDebugData,\r\n\r\n        /// <summary>Changes to Orthographic Camera default settings</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        OrthographicCameraDefaultSettings,\r\n\r\n        /// <summary>Added settings to Landscape HLODs</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        LandscapeAddedHLODSettings,\r\n\r\n        /// <summary>Skeletal Mesh uses Mesh Description to store mesh bulk data.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        MeshDescriptionForSkeletalMesh,\r\n\r\n        /// <summary>Skeletal Mesh optionally cooks half edge data per lod</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        SkeletalHalfEdgeData,\r\n\r\n        /// <summary>Combine graph contexts for AnimNext graphs</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        AnimNextCombineGraphContexts,\r\n\r\n        /// <summary>Combine parameter blocks and graphs</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        AnimNextCombineParameterBlocksAndGraphs,\r\n\r\n        /// <summary>Move workspaces to a seperate plugin</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        AnimNextMoveWorkspaces,\r\n\r\n        /// <summary>Level Instance Property overrides</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        LevelInstancePropertyOverrides,\r\n\r\n        /// <summary>Added FVolumetricLightMapGridDesc in MapBuildData</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        VolumetricLightMapGridDescSupport,\r\n\r\n        /// <summary>Introduce new structure for customizing the landscape edit layer behavior</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        IntroduceLandscapeEditLayerClass,\r\n\r\n        /// <summary>Change workspaces to store asset references as external objects</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        AnimNextWorkspaceEntryConversion,\r\n\r\n        /// <summary>Add support for anytype in dataflow</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        DataflowAnyTypeSupport,\r\n\r\n        /// <summary>Adding a new flag in RBAN Solver Setting to be able to use manifolds</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        PhysicsAssetUseManifoldFlags,\r\n\r\n        /// <summary>Added support for to record sim and query data of Shape Instance data in CVD</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        SimAndQueryDataSupportInChaosVisualDebugger,\r\n\r\n        /// <summary>Add the imported asset dependencies to the Cloth Asset USD Import node</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        ChaosClothAssetUSDImportNodeAddAssetDependencies,\r\n\r\n        /// <summary>Changed HitLighting to HitLightingForReflections, and HitLighting now means hit lighting for entire Lumen</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        LumenRayLightingModeOverrideEnum,\r\n\r\n        /// <summary>PCGPartitionActorDesc</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        PCGPartitionActorDesc,\r\n\r\n        /// <summary>Target layers are now defined in the Landscape actor and not continuously synced from the assigned material.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        LandscapeTargetLayersInLandscapeActor,\r\n\r\n        /// <summary>Fix to get full name of templated type ( Tarray > TArray{Float} for example )</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        DataflowTemplatedTypeFix,\r\n\r\n        /// <summary>Changes for LevelInstance support in StaticLighting</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        LevelInstanceStaticLightingSupport,\r\n\r\n        /// <summary>PCGGridDescriptor</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        PCGGridDescriptor,\r\n\r\n        /// <summary>AnimNext graphs now have public/private state</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        AnimNextGraphAccessSpecifiers,\r\n\r\n        /// <summary>Added a more stable pixel depth offset mode.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        MaterialPixelDepthOffsetMode,\r\n\r\n        /// <summary>Added hideable pins to dataflow</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        DataflowHideablePins,\r\n\r\n        /// <summary>Added multiple section import to the cloth asset skeletal mesh import node</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        ClothAssetSkeletalMeshMultiSectionImport,\r\n\r\n        /// <summary>Serialize EditorBounds in WorldPartitionActorDesc</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        WorldPartitionActorDescSerializeEditorBounds,\r\n\r\n        /// <summary>Fixup for the data that has been damaged by LandscapeTargetLayersInLandscapeActor (loss of landscape layer info object assignments)</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        FixupLandscapeTargetLayersInLandscapeActor,\r\n\r\n        //Allow custom import of morph target\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        MorphTargetCustomImport,\r\n\r\n        /// <summary>Fix chaos cloth buckling stiffness parameter bug </summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        ChaosClothAllowZeroBucklingStiffness,\r\n\r\n        /// <summary>LevelSequenceUpgradeDynamicBindings was removed but was intended for this position. Putting this here to make sure versioning of subsequent assets remains the same</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        LevelSequenceUpgradeDynamicBindings_NoOp,\r\n\r\n        /// <summary>AddToFrontend GFA now defaults to unload plugin on exit frontend</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        GameFeatureDataActionAddToFrontendDefaultToUnload,\r\n\r\n        /// <summary>Upgraded movie scene 'dynamic bindings' to use the new Custom Bindings system</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        LevelSequenceUpgradeDynamicBindings,\r\n\r\n        /// <summary>Changed the precision for the stored rotation on kinematic targets to match the precision used in particles </summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        ChaosStoreKinematicTargetRotationAsSinglePrecision,\r\n\r\n        /// <summary>PCG changes around the ApplyOnActor node, where we collapsed the TargetActor to the input pin.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        PCGApplyOnActorNodeMoveTargetActorEdgeToInput,\r\n\r\n        /// <summary>\r\n        /// Deprecation of the bPlaying flag on FTimeline struct types in favor of a better\r\n        /// PlayingStateTracker type to improve replication reliability\r\n        /// </summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        TimelinePlayingStateTrackerDeprecation,\r\n\r\n        /// <summary>Enable SkipOnlyEditorOnly style cooking of UStaticMeshComponent::MeshPaintTexture</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        MeshPaintTextureUsesEditorOnly,\r\n\r\n        /// <summary>Fixup and synchronize some landscape properties that have moved to the property sharing/overriding system :</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        LandscapeBodyInstanceAsSharedProperty,\r\n\r\n        /// <summary>Multiple changes to AnimNext modules, variables etc.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        AnimNextModuleRefactor,\r\n\r\n        /// <summary>Subsurface profile now has a guid to be able to select one of many in a Substrate material.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        SubsurfaceProfileGuid,\r\n\r\n        /// <summary>Added support for to record the new solver iteration settings in CVD</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        SolverIterationsDataSupportInChaosVisualDebugger,\r\n\r\n        /// <summary>Updated FColorMaterialInput to use FLinearColor instead of FColor</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        MaterialInputUsesLinearColor,\r\n\r\n        /// <summary>Updated editor only AFunctionalTest running logic to run tests editor world if the actors don't support PIE</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        FunctionalTestCanRunInEditorWorld,\r\n\r\n        /// <summary>Added support for display name in the Visual Logger</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        VisualLoggerSupportDisplayName,\r\n\r\n        /// <summary>Added support for the GyroscopicTorque flag in CVD</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        GyroscopicTorquesSupportInChaosVisualDebugger,\r\n\r\n        /// <summary>Added managed array property serialization</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        AddManagedArrayCollectionPropertySerialization,\r\n\r\n        /// <summary>Landscape texture patches in Texture Asset source mode now use proper resolution when calculating transform</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        LandscapeTexturePatchUsesTextureAssetResolution,\r\n\r\n        /// <summary>Added support for relative transform in WorldPartitionActorDesc</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        WorldPartitionActorDescSerializeRelativeTransform,\r\n\r\n        /// <summary>Make sure scene graph entities are not public by default</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        SceneGraphEntitiesPrivateByDefault,\r\n\r\n        /// <summary>Added debug color for physical materials</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        DebugColorForPhysicalMaterials,\r\n\r\n        /// <summary>Added PreprocessedFontGeometry to FFontFaceData</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        AddedPreprocessedFontGeometry,\r\n\r\n        /// <summary>Added Dynamic Mesh Sculpt Layer serialization</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        DynamicMeshSerializeSculptLayers,\r\n\r\n        /// <summary>Fix reachable garbage object warnings from some legacy ASpatialHashRuntimeGridInfo actors</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        SpatialHashRuntimeGridInfoSpriteFixup,\r\n\r\n        /// <summary>Removed UAnimSequence::bUseRawDataOnly flag alongside compression refactor</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        AnimSequenceRawDataOnlyFlagRemoval,\r\n\r\n        /// <summary>HLOD relevancy of Level Instances was previously ignored, now taken into account. Reset to the default behavior.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        ResetLevelInstanceHLODRelevancy,\r\n\r\n        /// <summary>Updated default scene capture post-processing settings to reflect the underlying implementation overrides</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        SceneCaptureDefaultSettings,\r\n\r\n        /// <summary>Add Cloth Asset Base class serialization</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        AddClothAssetBase,\r\n\r\n        /// <summary>Add inline constant default values to the PCG graph nodes.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        PCGInlineConstantDefaultValues,\r\n\r\n        /// <summary>Add MaterialSubstrateSubsurfaceType type to UMaterialExpressionSubstrateSlabBSDF for replacing bUseSSSDifffusion</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        AddMaterialSubstrateSubsurfaceType,\r\n\r\n        /// <summary>Added option to visualize runtime virtual textures' streamed mips only in PIE </summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        AddedRuntimeVirtualTextureUseStreamingMipsInEditorMode,\r\n\r\n        /// <summary>Media plate holdout composite components have been replaced by a checkbox</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        MediaPlateHoldoutComponentRemoval,\r\n\r\n        /// <summary>Changed PCG landscape cache default from \"serialize at cook\" to \"never serialize\"</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        PCGLandscapeCacheDefaultSerializationChanged,\r\n\r\n        /// <summary>FSoftObjectPath::SubPathString changed to FUtf8String</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        SoftObjectPathUtf8SubPaths,\r\n\r\n        /// <summary>FSoftObjectPath::SubPathString could be saved with trailing NULs and need truncating</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        SoftObjectPathTrailingNULsMaintained,\r\n\r\n        /// <summary>Water body components no longer need to maintain their own PhysicalMaterial property since they are primitive components. After this version, leverage that one instead.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        WaterBodyPhysicalMaterialPropertyRemoval,\r\n\r\n        /// <summary>PCG fixed attribute set -> point conversion passing through empty point data as-is and violating output pin type.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        PCGAttributeSetToPointAlwaysConverts,\r\n\r\n        //Add per material slot overlay material data\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        MeshMaterialSlotOverlayMaterialAdded,\r\n\r\n        /// <summary>Convert Sustrate glint density properly</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        ConvertGlintDensity,\r\n\r\n        /// <summary>Introduced skinweight validation to avoid render crashes and disappearing simulation meshes</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        ClothAssetSkinweightsValidation,\r\n\r\n        /// <summary>Switching verse from right handed to left handed</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        VerseRightToLeftHandedness,\r\n\r\n        /// <summary>Added additional data required to record and represent particle data from the game thread (Kinematic targets, and SQ rejection reasons)</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        AdditionalGameThreadDataSupportInChaosVisualDebugger,\r\n\r\n        /// <summary>Upgrade UMG widget blueprints using legacy animation API</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        UpgradeWidgetBlueprintLegacySequencePlayer,\r\n\r\n        /// <summary>Changed clockwise detection algorithm for PCGSplineDirection node with the correct one, but add a version to not break previous nodes.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        PCGSplineDirectionClockwiseFix,\r\n\r\n        /// <summary>Rect Lights set in EV units had the wrong intensity (older files need a flag set to keep the old look)</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        RectLightFixedEVUnitConversion,\r\n\r\n        /// <summary>Add particle bounds to data exported to CVD</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        ParticleInflatedBoundsInChaosVisualDebugger,\r\n\r\n        /// <summary>Migrate properties from FLandscapeLayer to ULandscapeEditLayer</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        MigrateLandscapeEditLayerProperties,\r\n\r\n        /// <summary>Added more context data to CVD's traced shapes so we can play it back at the solver stage level (not just game thread frames) </summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        ThreadContextDataInChaosVisualDebuggerDebugDrawData,\r\n\r\n        /// <summary>Changed default grid mode in surface sampler to a version that's more intuitive and less error-prone</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        PCGChangedSurfaceSamplerDefaultGridCreationMode,\r\n\r\n        /// <summary>Media plate overlay composite technique replacement with holdout composite</summary>\r\n        [Introduced(EngineVersion.VER_UE5_7)]\r\n        MediaPlateOverlayTechniqueRemoval,\r\n\r\n        /// <summary>Added particle flag to allow/disallow partial island sleeping in the island the particle is in</summary>\r\n        [Introduced(EngineVersion.VER_UE5_7)]\r\n        PerParticleFlagToAllowPartialIslandSleepInConnectedIsland,\r\n\r\n        /// <summary>Material Function Blend Deserialize Top/Bottom input nodes with clearer enum marker.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_7)]\r\n        MaterialFunctionBlendTopBottomInputEnum,\r\n\r\n        /// <summary>Cooked CPU-side morph target points are now stored internally in the same compressed format as the GPU morph data. </summary>\r\n        [Introduced(EngineVersion.VER_UE5_7)]\r\n        MorphTargetCookedCPUDataCompressed,\r\n\r\n        /// <summary>AnimNext variables converted to references</summary>\r\n        [Introduced(EngineVersion.VER_UE5_7)]\r\n        AnimNextVariableReferences,\r\n\r\n        /// <summary>The default distortion rendering mode used by the Lens Component is now the Lens Distortion Scene View Extension</summary>\r\n        [Introduced(EngineVersion.VER_UE5_7)]\r\n        LensComponentDefaultToDistortionSVE,\r\n\r\n        /// <summary>Animation default blend option changed from Linear to HermiteCubic (aka SmoothStep, ease in / ease out)</summary>\r\n        [Introduced(EngineVersion.VER_UE5_7)]\r\n        ChangeDefaultAlphaBlendType,\r\n\r\n        /// <summary>Moved Position/Velocity/Projection Iteration Counts from FChaosVDFRigidParticleControlFlags to FChaosVDParticleDynamicMisc</summary>\r\n        [Introduced(EngineVersion.VER_UE5_7)]\r\n        PerParticleIterationCountMovedToDynamicMisc,\r\n\r\n        /// <summary>Added missing custom serialization for some properties in the ParticleDynamicMisc structure used by the Chaos Visual Debugger</summary>\r\n        [Introduced(EngineVersion.VER_UE5_7)]\r\n        AddedMissingSerializationForPropertiesInDynamicMisc,\r\n\r\n        /// <summary>Change default value for deprecated bEnableWorldPartitionGenerationSources</summary>\r\n        [Introduced(EngineVersion.VER_UE5_7)]\r\n        PCGDeprecateWorldPartitionGenerationSources,\r\n\r\n        /// <summary>Refactored the composite (plugin) actor scene capture management.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_7)]\r\n        CompositeActorSceneCaptureRefactor,\r\n\r\n        /// <summary>Moved HLOD Layer properties to an editor only optional object</summary>\r\n        [Introduced(EngineVersion.VER_UE5_7)]\r\n        HLODLayerEditorOnlyObject,\r\n\r\n        /// <summary>Deduplicated particle debug names serialization in the Chaos Visual Debugger</summary>\r\n        [Introduced(EngineVersion.VER_UE5_7)]\r\n        DeduplicatedDebugNameSerializationInCVD,\r\n\r\n        /// <summary>Add BloomGaussianIntensity and BloomConvolutionIntensity</summary>\r\n        [Introduced(EngineVersion.VER_UE5_7)]\r\n        SpecializeBloomIntensity,\r\n\r\n        /// <summary>Add support for world partition actor component descriptors</summary>\r\n        [Introduced(EngineVersion.VER_UE5_7)]\r\n        WorldPartitionActorComponentDesc,\r\n\r\n        /// <summary>Migrate Non-Edit layer landscapes to use the edit layer (ULandscapeEditLayer) system</summary>\r\n        [Introduced(EngineVersion.VER_UE5_7)]\r\n        MigrateLandscapeNonEditLayerToEditLayer,\r\n\r\n        /// <summary>FDynamicMeshAttributeSet has Morph Targets.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_7)]\r\n        DynamicMeshAttributesMorphTargets,\r\n\r\n        /// <summary>Introduce landscape advanced weight blending </summary>\r\n        [Introduced(EngineVersion.VER_UE5_7)]\r\n        LandscapeAdvancedWeightBlending,\r\n\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]\r\n        VersionPlusOne,\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]\r\n        LatestVersion = VersionPlusOne - 1\r\n    };\r\n\r\n    /// <summary>\r\n    /// Custom serialization version for changes made in Dev-Framework stream.\r\n    /// </summary>\r\n    public enum FFrameworkObjectVersion\r\n    {\r\n        /// <summary>Before any version changes were made</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        BeforeCustomVersionWasAdded = 0,\r\n\r\n        /// <summary>BodySetup's default instance collision profile is used by default when creating a new instance.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_12)]\r\n        UseBodySetupCollisionProfile,\r\n\r\n        /// <summary>Regenerate subgraph arrays correctly in animation blueprints to remove duplicates and add missing graphs that appear read only when edited</summary>\r\n        [Introduced(EngineVersion.VER_UE4_12)]\r\n        AnimBlueprintSubgraphFix,\r\n\r\n        /// <summary>Static and skeletal mesh sockets now use the specified scale</summary>\r\n        [Introduced(EngineVersion.VER_UE4_12)]\r\n        MeshSocketScaleUtilization,\r\n\r\n        /// <summary>Attachment rules are now explicit in how they affect location, rotation and scale</summary>\r\n        [Introduced(EngineVersion.VER_UE4_12)]\r\n        ExplicitAttachmentRules,\r\n\r\n        /// <summary>Moved compressed anim data from uasset to the DDC</summary>\r\n        [Introduced(EngineVersion.VER_UE4_12)]\r\n        MoveCompressedAnimDataToTheDDC,\r\n\r\n        /// <summary>Some graph pins created using legacy code seem to have lost the RF_Transactional flag, which causes issues with undo. Restore the flag at this version</summary>\r\n        [Introduced(EngineVersion.VER_UE4_12)]\r\n        FixNonTransactionalPins,\r\n\r\n        /// <summary>Create new struct for SmartName, and use that for CurveName</summary>\r\n        [Introduced(EngineVersion.VER_UE4_13)]\r\n        SmartNameRefactor,\r\n\r\n        /// <summary>Add Reference Skeleton to Rig</summary>\r\n        [Introduced(EngineVersion.VER_UE4_13)]\r\n        AddSourceReferenceSkeletonToRig,\r\n\r\n        /// <summary>Refactor ConstraintInstance so that we have an easy way to swap behavior paramters</summary>\r\n        [Introduced(EngineVersion.VER_UE4_13)]\r\n        ConstraintInstanceBehaviorParameters,\r\n\r\n        /// <summary>Pose Asset support mask per bone</summary>\r\n        [Introduced(EngineVersion.VER_UE4_13)]\r\n        PoseAssetSupportPerBoneMask,\r\n\r\n        /// <summary>Physics Assets now use SkeletalBodySetup instead of BodySetup</summary>\r\n        [Introduced(EngineVersion.VER_UE4_13)]\r\n        PhysAssetUseSkeletalBodySetup,\r\n\r\n        /// <summary>Remove SoundWave CompressionName</summary>\r\n        [Introduced(EngineVersion.VER_UE4_13)]\r\n        RemoveSoundWaveCompressionName,\r\n\r\n        /// <summary>Switched render data for clothing over to unreal data, reskinned to the simulation mesh</summary>\r\n        [Introduced(EngineVersion.VER_UE4_14)]\r\n        AddInternalClothingGraphicalSkinning,\r\n\r\n        /// <summary>Wheel force offset is now applied at the wheel instead of vehicle COM</summary>\r\n        [Introduced(EngineVersion.VER_UE4_14)]\r\n        WheelOffsetIsFromWheel,\r\n\r\n        /// <summary>Move curve metadata to be saved in skeleton. Individual asset still saves some flag - i.e. disabled curve and editable or not, but major flag - i.e. material types - moves to skeleton and handle in one place</summary>\r\n        [Introduced(EngineVersion.VER_UE4_14)]\r\n        MoveCurveTypesToSkeleton,\r\n\r\n        /// <summary>Cache destructible overlaps on save</summary>\r\n        [Introduced(EngineVersion.VER_UE4_14)]\r\n        CacheDestructibleOverlaps,\r\n\r\n        /// <summary>Added serialization of materials applied to geometry cache objects</summary>\r\n        [Introduced(EngineVersion.VER_UE4_14)]\r\n        GeometryCacheMissingMaterials,\r\n\r\n        /// <summary>Switch static and skeletal meshes to calculate LODs based on resolution-independent screen size</summary>\r\n        [Introduced(EngineVersion.VER_UE4_15)]\r\n        LODsUseResolutionIndependentScreenSize,\r\n\r\n        /// <summary>Blend space post load verification</summary>\r\n        [Introduced(EngineVersion.VER_UE4_15)]\r\n        BlendSpacePostLoadSnapToGrid,\r\n\r\n        /// <summary>Addition of rate scales to blend space samples</summary>\r\n        [Introduced(EngineVersion.VER_UE4_15)]\r\n        SupportBlendSpaceRateScale,\r\n\r\n        /// <summary>LOD hysteresis also needs conversion from the LODsUseResolutionIndependentScreenSize version</summary>\r\n        [Introduced(EngineVersion.VER_UE4_15)]\r\n        LODHysteresisUseResolutionIndependentScreenSize,\r\n\r\n        /// <summary>AudioComponent override subtitle priority default change</summary>\r\n        [Introduced(EngineVersion.VER_UE4_15)]\r\n        ChangeAudioComponentOverrideSubtitlePriorityDefault,\r\n\r\n        /// <summary>Serialize hard references to sound files when possible</summary>\r\n        [Introduced(EngineVersion.VER_UE4_16)]\r\n        HardSoundReferences,\r\n\r\n        /// <summary>Enforce const correctness in Animation Blueprint function graphs</summary>\r\n        [Introduced(EngineVersion.VER_UE4_17)]\r\n        EnforceConstInAnimBlueprintFunctionGraphs,\r\n\r\n        /// <summary>Upgrade the InputKeySelector to use a text style</summary>\r\n        [Introduced(EngineVersion.VER_UE4_17)]\r\n        InputKeySelectorTextStyle,\r\n\r\n        /// <summary>Represent a pins container type as an enum not 3 independent booleans</summary>\r\n        [Introduced(EngineVersion.VER_UE4_17)]\r\n        EdGraphPinContainerType,\r\n\r\n        /// <summary>Switch asset pins to store as string instead of hard object reference</summary>\r\n        [Introduced(EngineVersion.VER_UE4_17)]\r\n        ChangeAssetPinsToString,\r\n\r\n        /// <summary>Fix Local Variables so that the properties are correctly flagged as blueprint visible</summary>\r\n        [Introduced(EngineVersion.VER_UE4_17)]\r\n        LocalVariablesBlueprintVisible,\r\n\r\n        /// <summary>Stopped serializing UField_Next so that UFunctions could be serialized in dependently of a UClass in order to allow us to do all UFunction loading in a single pass (after classes and CDOs are created)</summary>\r\n        [Introduced(EngineVersion.VER_UE4_18)]\r\n        RemoveUField_Next,\r\n\r\n        /// <summary>Fix User Defined structs so that all members are correct flagged blueprint visible</summary>\r\n        [Introduced(EngineVersion.VER_UE4_18)]\r\n        UserDefinedStructsBlueprintVisible,\r\n\r\n        /// <summary>FMaterialInput and FEdGraphPin store their name as FName instead of FString</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        PinsStoreFName,\r\n\r\n        /// <summary>User defined structs store their default instance, which is used for initializing instances</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        UserDefinedStructsStoreDefaultInstance,\r\n\r\n        /// <summary>Function terminator nodes serialize an FMemberReference rather than a name/class pair</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        FunctionTerminatorNodesUseMemberReference,\r\n\r\n        /// <summary>Custom event and non-native interface event implementations add 'const' to reference parameters</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        EditableEventsUseConstRefParameters,\r\n\r\n        /// <summary>No longer serialize the legacy flag that indicates this state, as it is now implied since we don't serialize the skeleton CDO</summary>\r\n        [Introduced(EngineVersion.VER_UE4_22)]\r\n        BlueprintGeneratedClassIsAlwaysAuthoritative,\r\n\r\n        /// <summary>Enforce visibility of blueprint functions - e.g. raise an error if calling a private function from another blueprint:</summary>\r\n        [Introduced(EngineVersion.VER_UE4_24)]\r\n        EnforceBlueprintFunctionVisibility,\r\n\r\n        /// <summary>ActorComponents now store their serialization index</summary>\r\n        [Introduced(EngineVersion.VER_UE4_25)]\r\n        StoringUCSSerializationIndex,\r\n\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]\r\n        VersionPlusOne,\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]\r\n        LatestVersion = VersionPlusOne - 1\r\n    };\r\n\r\n    /// <summary>\r\n    /// Custom serialization version for changes made in Dev-Core stream.\r\n    /// </summary>\r\n    public enum FCoreObjectVersion\r\n    {\r\n        /// <summary>Before any version changes were made</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        BeforeCustomVersionWasAdded = 0,\r\n\r\n        [Introduced(EngineVersion.VER_UE4_12)]\r\n        MaterialInputNativeSerialize,\r\n\r\n        [Introduced(EngineVersion.VER_UE4_15)]\r\n        EnumProperties,\r\n\r\n        [Introduced(EngineVersion.VER_UE4_22)]\r\n        SkeletalMaterialEditorDataStripping,\r\n\r\n        [Introduced(EngineVersion.VER_UE4_25)]\r\n        FProperties,\r\n\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]\r\n        VersionPlusOne,\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]\r\n        LatestVersion = VersionPlusOne - 1\r\n    };\r\n\r\n    /// <summary>\r\n    /// Custom serialization version for changes made in Dev-Editor stream.\r\n    /// </summary>\r\n    public enum FEditorObjectVersion\r\n    {\r\n        /// <summary>Before any version changes were made</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        BeforeCustomVersionWasAdded = 0,\r\n\r\n        /// <summary>Localizable text gathered and stored in packages is now flagged with a localizable text gathering process version</summary>\r\n        [Introduced(EngineVersion.VER_UE4_12)]\r\n        GatheredTextProcessVersionFlagging,\r\n\r\n        /// <summary>Fixed several issues with the gathered text cache stored in package headers</summary>\r\n        [Introduced(EngineVersion.VER_UE4_12)]\r\n        GatheredTextPackageCacheFixesV1,\r\n\r\n        /// <summary>Added support for \"root\" meta-data (meta-data not associated with a particular object in a package)</summary>\r\n        [Introduced(EngineVersion.VER_UE4_13)]\r\n        RootMetaDataSupport,\r\n\r\n        /// <summary>Fixed issues with how Blueprint bytecode was cached</summary>\r\n        [Introduced(EngineVersion.VER_UE4_13)]\r\n        GatheredTextPackageCacheFixesV2,\r\n\r\n        /// <summary>Updated FFormatArgumentData to allow variant data to be marshaled from a BP into C++</summary>\r\n        [Introduced(EngineVersion.VER_UE4_13)]\r\n        TextFormatArgumentDataIsVariant,\r\n\r\n        /// <summary>Changes to SplineComponent</summary>\r\n        [Introduced(EngineVersion.VER_UE4_13)]\r\n        SplineComponentCurvesInStruct,\r\n\r\n        /// <summary>Updated ComboBox to support toggling the menu open, better controller support</summary>\r\n        [Introduced(EngineVersion.VER_UE4_14)]\r\n        ComboBoxControllerSupportUpdate,\r\n\r\n        /// <summary>Refactor mesh editor materials</summary>\r\n        [Introduced(EngineVersion.VER_UE4_14)]\r\n        RefactorMeshEditorMaterials,\r\n\r\n        /// <summary>Added UFontFace assets</summary>\r\n        [Introduced(EngineVersion.VER_UE4_15)]\r\n        AddedFontFaceAssets,\r\n\r\n        /// <summary>Add UPROPERTY for TMap of Mesh section, so the serialize will be done normally (and export to text will work correctly)</summary>\r\n        [Introduced(EngineVersion.VER_UE4_15)]\r\n        UPropertryForMeshSection,\r\n\r\n        /// <summary>Update the schema of all widget blueprints to use the WidgetGraphSchema</summary>\r\n        [Introduced(EngineVersion.VER_UE4_15)]\r\n        WidgetGraphSchema,\r\n\r\n        /// <summary>Added a specialized content slot to the background blur widget</summary>\r\n        [Introduced(EngineVersion.VER_UE4_15)]\r\n        AddedBackgroundBlurContentSlot,\r\n\r\n        /// <summary>Updated UserDefinedEnums to have stable keyed display names</summary>\r\n        [Introduced(EngineVersion.VER_UE4_15)]\r\n        StableUserDefinedEnumDisplayNames,\r\n\r\n        /// <summary>Added \"Inline\" option to UFontFace assets</summary>\r\n        [Introduced(EngineVersion.VER_UE4_15)]\r\n        AddedInlineFontFaceAssets,\r\n\r\n        /// <summary>Fix a serialization issue with static mesh FMeshSectionInfoMap FProperty</summary>\r\n        [Introduced(EngineVersion.VER_UE4_16)]\r\n        UPropertryForMeshSectionSerialize,\r\n\r\n        /// <summary>Adding a version bump for the new fast widget construction in case of problems.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_16)]\r\n        FastWidgetTemplates,\r\n\r\n        /// <summary>Update material thumbnails to be more intelligent on default primitive shape for certain material types</summary>\r\n        [Introduced(EngineVersion.VER_UE4_16)]\r\n        MaterialThumbnailRenderingChanges,\r\n\r\n        /// <summary>Introducing a new clipping system for Slate/UMG</summary>\r\n        [Introduced(EngineVersion.VER_UE4_17)]\r\n        NewSlateClippingSystem,\r\n\r\n        /// <summary>MovieScene Meta Data added as native Serialization</summary>\r\n        [Introduced(EngineVersion.VER_UE4_17)]\r\n        MovieSceneMetaDataSerialization,\r\n\r\n        /// <summary>Text gathered from properties now adds two variants: a version without the package localization ID (for use at runtime), and a version with it (which is editor-only)</summary>\r\n        [Introduced(EngineVersion.VER_UE4_17)]\r\n        GatheredTextEditorOnlyPackageLocId,\r\n\r\n        /// <summary>Added AlwaysSign to FNumberFormattingOptions</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        AddedAlwaysSignNumberFormattingOption,\r\n\r\n        /// <summary>Added additional objects that must be serialized as part of this new material feature</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        AddedMaterialSharedInputs,\r\n\r\n        /// <summary>Added morph target section indices</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        AddedMorphTargetSectionIndices,\r\n\r\n        /// <summary>Serialize the instanced static mesh render data, to avoid building it at runtime</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        SerializeInstancedStaticMeshRenderData,\r\n\r\n        /// <summary>Change to MeshDescription serialization (moved to release)</summary>\r\n        [Introduced(EngineVersion.VER_UE4_21)]\r\n        MeshDescriptionNewSerialization_MovedToRelease,\r\n\r\n        /// <summary>New format for mesh description attributes</summary>\r\n        [Introduced(EngineVersion.VER_UE4_21)]\r\n        MeshDescriptionNewAttributeFormat,\r\n\r\n        /// <summary>Switch root component of SceneCapture actors from MeshComponent to SceneComponent</summary>\r\n        [Introduced(EngineVersion.VER_UE4_22)]\r\n        ChangeSceneCaptureRootComponent,\r\n\r\n        /// <summary>StaticMesh serializes MeshDescription instead of RawMesh</summary>\r\n        [Introduced(EngineVersion.VER_UE4_22)]\r\n        StaticMeshDeprecatedRawMesh,\r\n\r\n        /// <summary>MeshDescriptionBulkData contains a Guid used as a DDC key</summary>\r\n        [Introduced(EngineVersion.VER_UE4_22)]\r\n        MeshDescriptionBulkDataGuid,\r\n\r\n        /// <summary>Change to MeshDescription serialization (removed FMeshPolygon::HoleContours)</summary>\r\n        [Introduced(EngineVersion.VER_UE4_22)]\r\n        MeshDescriptionRemovedHoles,\r\n\r\n        /// <summary>Change to the WidgetCompoent WindowVisibilty default value</summary>\r\n        [Introduced(EngineVersion.VER_UE4_23)]\r\n        ChangedWidgetComponentWindowVisibilityDefault,\r\n\r\n        /// <summary>Avoid keying culture invariant display strings during serialization to avoid non-deterministic cooking issues</summary>\r\n        [Introduced(EngineVersion.VER_UE4_23)]\r\n        CultureInvariantTextSerializationKeyStability,\r\n\r\n        /// <summary>Change to UScrollBar and UScrollBox thickness property (removed implicit padding of 2, so thickness value must be incremented by 4).</summary>\r\n        [Introduced(EngineVersion.VER_UE4_23)]\r\n        ScrollBarThicknessChange,\r\n\r\n        /// <summary>Deprecated LandscapeHoleMaterial</summary>\r\n        [Introduced(EngineVersion.VER_UE4_23)]\r\n        RemoveLandscapeHoleMaterial,\r\n\r\n        /// <summary>MeshDescription defined by triangles instead of arbitrary polygons</summary>\r\n        [Introduced(EngineVersion.VER_UE4_24)]\r\n        MeshDescriptionTriangles,\r\n\r\n        /// <summary>Add weighted area and angle when computing the normals</summary>\r\n        [Introduced(EngineVersion.VER_UE4_24)]\r\n        ComputeWeightedNormals,\r\n\r\n        /// <summary>SkeletalMesh now can be rebuild in editor, no more need to re-import</summary>\r\n        [Introduced(EngineVersion.VER_UE4_24)]\r\n        SkeletalMeshBuildRefactor,\r\n\r\n        /// <summary>Move all SkeletalMesh source data into a private uasset in the same package has the skeletalmesh</summary>\r\n        [Introduced(EngineVersion.VER_UE4_25)]\r\n        SkeletalMeshMoveEditorSourceDataToPrivateAsset,\r\n\r\n        /// <summary>Parse text only if the number is inside the limits of its type</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        NumberParsingOptionsNumberLimitsAndClamping,\r\n\r\n        /// <summary>Make sure we can have more then 255 material in the skeletal mesh source data</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        SkeletalMeshSourceDataSupport16bitOfMaterialNumber,\r\n\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]\r\n        VersionPlusOne,\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]\r\n        LatestVersion = VersionPlusOne - 1\r\n    };\r\n\r\n    /// <summary>\r\n    /// Custom serialization version for changes made in Dev-AnimPhys stream\r\n    /// </summary>\r\n    public enum FAnimPhysObjectVersion\r\n    {\r\n        /// <summary>Before any version changes were made</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        BeforeCustomVersionWasAdded,\r\n\r\n        /// <summary>convert animnode look at to use just default axis instead of enum, which doesn't do much</summary>\r\n        [Introduced(EngineVersion.VER_UE4_16)]\r\n        ConvertAnimNodeLookAtAxis,\r\n\r\n        /// <summary>Change FKSphylElem and FKBoxElem to use Rotators not Quats for easier editing</summary>\r\n        [Introduced(EngineVersion.VER_UE4_16)]\r\n        BoxSphylElemsUseRotators,\r\n\r\n        /// <summary>Change thumbnail scene info and asset import data to be transactional</summary>\r\n        [Introduced(EngineVersion.VER_UE4_16)]\r\n        ThumbnailSceneInfoAndAssetImportDataAreTransactional,\r\n\r\n        /// <summary>Enabled clothing masks rather than painting parameters directly</summary>\r\n        [Introduced(EngineVersion.VER_UE4_17)]\r\n        AddedClothingMaskWorkflow,\r\n\r\n        /// <summary>Remove UID from smart name serialize, it just breaks determinism</summary>\r\n        [Introduced(EngineVersion.VER_UE4_17)]\r\n        RemoveUIDFromSmartNameSerialize,\r\n\r\n        /// <summary>Convert FName Socket to FSocketReference and added TargetReference that support bone and socket</summary>\r\n        [Introduced(EngineVersion.VER_UE4_17)]\r\n        CreateTargetReference,\r\n\r\n        /// <summary>Tune soft limit stiffness and damping coefficients</summary>\r\n        [Introduced(EngineVersion.VER_UE4_17)]\r\n        TuneSoftLimitStiffnessAndDamping,\r\n\r\n        /// <summary>Fix possible inf/nans in clothing particle masses</summary>\r\n        [Introduced(EngineVersion.VER_UE4_18)]\r\n        FixInvalidClothParticleMasses,\r\n\r\n        /// <summary>Moved influence count to cached data</summary>\r\n        [Introduced(EngineVersion.VER_UE4_18)]\r\n        CacheClothMeshInfluences,\r\n\r\n        /// <summary>Remove GUID from Smart Names entirely + remove automatic name fixup</summary>\r\n        [Introduced(EngineVersion.VER_UE4_18)]\r\n        SmartNameRefactorForDeterministicCooking,\r\n\r\n        /// <summary>rename the variable and allow individual curves to be set</summary>\r\n        [Introduced(EngineVersion.VER_UE4_18)]\r\n        RenameDisableAnimCurvesToAllowAnimCurveEvaluation,\r\n\r\n        /// <summary>link curve to LOD, so curve metadata has to include LODIndex</summary>\r\n        [Introduced(EngineVersion.VER_UE4_18)]\r\n        AddLODToCurveMetaData,\r\n\r\n        /// <summary>Fixed blend profile references persisting after paste when they aren't compatible</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        FixupBadBlendProfileReferences,\r\n\r\n        /// <summary>Allowing multiple audio plugin settings</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        AllowMultipleAudioPluginSettings,\r\n\r\n        /// <summary>Change RetargetSource reference to SoftObjectPtr</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        ChangeRetargetSourceReferenceToSoftObjectPtr,\r\n\r\n        /// <summary>Save editor only full pose for pose asset</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        SaveEditorOnlyFullPoseForPoseAsset,\r\n\r\n        /// <summary>Asset change and cleanup to facilitate new streaming system</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        GeometryCacheAssetDeprecation,\r\n\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]\r\n        VersionPlusOne,\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]\r\n        LatestVersion = VersionPlusOne - 1\r\n    }\r\n\r\n    /// <summary>\r\n    /// Custom serialization version for changes made in Release streams.\r\n    /// </summary>\r\n    public enum FReleaseObjectVersion\r\n    {\r\n        /// <summary>Before any version changes were made</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        BeforeCustomVersionWasAdded = 0,\r\n\r\n        /// <summary>Static Mesh extended bounds radius fix</summary>\r\n        [Introduced(EngineVersion.VER_UE4_11)]\r\n        StaticMeshExtendedBoundsFix,\r\n\r\n        /// <summary>Physics asset bodies are either in the sync scene or the async scene, but not both</summary>\r\n        [Introduced(EngineVersion.VER_UE4_13)]\r\n        NoSyncAsyncPhysAsset,\r\n\r\n        /// <summary>ULevel was using TTransArray incorrectly (serializing the entire array in addition to individual mutations). converted to a TArray</summary>\r\n        [Introduced(EngineVersion.VER_UE4_13)]\r\n        LevelTransArrayConvertedToTArray,\r\n\r\n        /// <summary>Add Component node templates now use their own unique naming scheme to ensure more reliable archetype lookups.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_14)]\r\n        AddComponentNodeTemplateUniqueNames,\r\n\r\n        /// <summary>Fix a serialization issue with static mesh FMeshSectionInfoMap FProperty</summary>\r\n        [Introduced(EngineVersion.VER_UE4_15)]\r\n        UPropertryForMeshSectionSerialize,\r\n\r\n        /// <summary>Existing HLOD settings screen size to screen area conversion</summary>\r\n        [Introduced(EngineVersion.VER_UE4_15)]\r\n        ConvertHLODScreenSize,\r\n\r\n        /// <summary>Adding mesh section info data for existing billboard LOD models</summary>\r\n        [Introduced(EngineVersion.VER_UE4_15)]\r\n        SpeedTreeBillboardSectionInfoFixup,\r\n\r\n        /// <summary>Change FMovieSceneEventParameters::StructType to be a string asset reference from a TWeakObjectPtr UScriptStruct</summary>\r\n        [Introduced(EngineVersion.VER_UE4_16)]\r\n        EventSectionParameterStringAssetRef,\r\n\r\n        /// <summary>Remove serialized irradiance map data from skylight.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_16)]\r\n        SkyLightRemoveMobileIrradianceMap,\r\n\r\n        /// <summary>rename bNoTwist to bAllowTwist</summary>\r\n        [Introduced(EngineVersion.VER_UE4_17)]\r\n        RenameNoTwistToAllowTwistInTwoBoneIK,\r\n\r\n        /// <summary>Material layers serialization refactor</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        MaterialLayersParameterSerializationRefactor,\r\n\r\n        /// <summary>Added disable flag to skeletal mesh data</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        AddSkeletalMeshSectionDisable,\r\n\r\n        /// <summary>Removed objects that were serialized as part of this material feature</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        RemovedMaterialSharedInputCollection,\r\n\r\n        /// <summary>HISMC Cluster Tree migration to add new data</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        HISMCClusterTreeMigration,\r\n\r\n        /// <summary>Default values on pins in blueprints could be saved incoherently</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        PinDefaultValuesVerified,\r\n\r\n        /// <summary>During copy and paste transition getters could end up with broken state machine references</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        FixBrokenStateMachineReferencesInTransitionGetters,\r\n\r\n        /// <summary>Change to MeshDescription serialization</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        MeshDescriptionNewSerialization,\r\n\r\n        /// <summary>Change to not clamp RGB values > 1 on linear color curves</summary>\r\n        [Introduced(EngineVersion.VER_UE4_21)]\r\n        UnclampRGBColorCurves,\r\n\r\n        /// <summary>BugFix for FAnimObjectVersion::LinkTimeAnimBlueprintRootDiscovery.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_21)]\r\n        LinkTimeAnimBlueprintRootDiscoveryBugFix,\r\n\r\n        /// <summary>Change trail anim node variable deprecation</summary>\r\n        [Introduced(EngineVersion.VER_UE4_21)]\r\n        TrailNodeBlendVariableNameChange,\r\n\r\n        /// <summary>Make sure the Blueprint Replicated Property Conditions are actually serialized properly.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_23)]\r\n        PropertiesSerializeRepCondition,\r\n\r\n        /// <summary>DepthOfFieldFocalDistance at 0 now disables DOF instead of DepthOfFieldFstop at 0.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_23)]\r\n        FocalDistanceDisablesDOF,\r\n\r\n        /// <summary>Removed versioning, but version entry must still exist to keep assets saved with this version loadable</summary>\r\n        [Introduced(EngineVersion.VER_UE4_23)]\r\n        Unused_SoundClass2DReverbSend,\r\n\r\n        /// <summary>Groom asset version</summary>\r\n        [Introduced(EngineVersion.VER_UE4_24)]\r\n        GroomAssetVersion1,\r\n\r\n        /// <summary>Groom asset version</summary>\r\n        [Introduced(EngineVersion.VER_UE4_24)]\r\n        GroomAssetVersion2,\r\n\r\n        /// <summary>Store applied version of Animation Modifier to use when reverting</summary>\r\n        [Introduced(EngineVersion.VER_UE4_24)]\r\n        SerializeAnimModifierState,\r\n\r\n        /// <summary>Groom asset version</summary>\r\n        [Introduced(EngineVersion.VER_UE4_24)]\r\n        GroomAssetVersion3,\r\n\r\n        /// <summary>Upgrade filmback</summary>\r\n        [Introduced(EngineVersion.VER_UE4_24)]\r\n        DeprecateFilmbackSettings,\r\n\r\n        /// <summary>custom collision type</summary>\r\n        [Introduced(EngineVersion.VER_UE4_25)]\r\n        CustomImplicitCollisionType,\r\n\r\n        /// <summary>FFieldPath will serialize the owner struct reference and only a short path to its property</summary>\r\n        [Introduced(EngineVersion.VER_UE4_25)]\r\n        FFieldPathOwnerSerialization,\r\n\r\n        /// <summary>Dummy version to allow us to Fix up the fact that ReleaseObjectVersion was changed elsewhere</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        ReleaseUE4VersionFixup,\r\n\r\n        /// <summary>Pin types include a flag that propagates the 'CPF_UObjectWrapper' flag to generated properties</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        PinTypeIncludesUObjectWrapperFlag,\r\n\r\n        /// <summary>Added Weight member to FMeshToMeshVertData</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        WeightFMeshToMeshVertData,\r\n\r\n        /// <summary>Animation graph node bindings displayed as pins</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        AnimationGraphNodeBindingsDisplayedAsPins,\r\n\r\n        /// <summary>Serialized rigvm offset segment paths</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        SerializeRigVMOffsetSegmentPaths,\r\n\r\n        /// <summary>Upgrade AbcGeomCacheImportSettings for velocities</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        AbcVelocitiesSupport,\r\n\r\n        /// <summary>Add margin support to Chaos Convex</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        MarginAddedToConvexAndBox,\r\n\r\n        /// <summary>Add structure data to Chaos Convex</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        StructureDataAddedToConvex,\r\n\r\n        /// <summary>Changed axis UI for LiveLink AxisSwitch Pre Processor</summary>\r\n        [Introduced(EngineVersion.VER_UE4_27)]\r\n        AddedFrontRightUpAxesToLiveLinkPreProcessor,\r\n\r\n        /// <summary>Some sequencer event sections that were copy-pasted left broken links to the director BP</summary>\r\n        [Introduced(EngineVersion.VER_UE4_27)]\r\n        FixupCopiedEventSections,\r\n\r\n        /// <summary>Serialize the number of bytes written when serializing function arguments</summary>\r\n        [Introduced(EngineVersion.VER_UE4_27)]\r\n        RemoteControlSerializeFunctionArgumentsSize,\r\n\r\n        /// <summary>Add loop counters to sequencer's compiled sub-sequence data</summary>\r\n        [Introduced(EngineVersion.VER_UE4_27)]\r\n        AddedSubSequenceEntryWarpCounter,\r\n\r\n        /// <summary>Remove default resolution limit of 512 pixels for cubemaps generated from long-lat sources</summary>\r\n        [Introduced(EngineVersion.VER_UE4_27)]\r\n        LonglatTextureCubeDefaultMaxResolution,\r\n\r\n        // bake center of mass into chaos cache\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        GeometryCollectionCacheRemovesMassToLocal,\r\n\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]\r\n        VersionPlusOne,\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]\r\n        LatestVersion = VersionPlusOne - 1\r\n    }\r\n\r\n    /// <summary>\r\n    /// Version used for serializing asset registry caches, both runtime and editor\r\n    /// </summary>\r\n    public enum FAssetRegistryVersion\r\n    {\r\n        /// <summary>From before file versioning was implemented</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        PreVersioning = 0,\r\n\r\n        /// <summary>The first version of the runtime asset registry to include file versioning.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        HardSoftDependencies,\r\n\r\n        /// <summary>Added FAssetRegistryState and support for piecemeal serialization</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        AddAssetRegistryState,\r\n\r\n        /// <summary>AssetData serialization format changed, versions before this are not readable</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        ChangedAssetData,\r\n\r\n        /// <summary>Removed MD5 hash from package data</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        RemovedMD5Hash,\r\n\r\n        /// <summary>Added hard/soft manage references</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        AddedHardManage,\r\n\r\n        /// <summary>Added MD5 hash of cooked package to package data</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        AddedCookedMD5Hash,\r\n\r\n        /// <summary>Added UE::AssetRegistry::EDependencyProperty to each dependency</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        AddedDependencyFlags,\r\n\r\n        /// <summary>Major tag format change that replaces USE_COMPACT_ASSET_REGISTRY:</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        FixedTags,\r\n\r\n        /// <summary>Added Version information to AssetPackageData</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        WorkspaceDomain,\r\n\r\n        /// <summary>Added ImportedClasses to AssetPackageData</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        PackageImportedClasses,\r\n\r\n        /// <summary>A new version number of UE5 was added to FPackageFileSummary</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        PackageFileSummaryVersionChange,\r\n\r\n        /// <summary>Change to linker export/import resource serializationn</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        ObjectResourceOptionalVersionChange,\r\n\r\n        /// <summary>Added FIoHash for each FIoChunkId in the package to the AssetPackageData.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        AddedChunkHashes,\r\n\r\n        /// <summary>Classes are serialized as path names rather than short object names, e.g. /Script/Engine.StaticMesh</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        ClassPaths,\r\n\r\n        /// <summary>Asset bundles are serialized as FTopLevelAssetPath instead of FSoftObjectPath, deprecated FAssetData::ObjectPath</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        RemoveAssetPathFNames,\r\n\r\n        /// <summary>Added header with bFilterEditorOnlyData flag</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        AddedHeader,\r\n\r\n        /// <summary>Added Extension to AssetPackageData.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        AssetPackageDataHasExtension,\t\t\r\n\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]\r\n        VersionPlusOne,\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]\r\n        LatestVersion = VersionPlusOne - 1\r\n    }\r\n\r\n    public enum FSequencerObjectVersion\r\n    {\r\n        /// <summary>Before any version changes were made</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        BeforeCustomVersionWasAdded = 0,\r\n\r\n        /// <summary>Per-platform overrides player overrides for media sources changed name and type.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_14)]\r\n        RenameMediaSourcePlatformPlayers,\r\n\r\n        /// <summary>Enable root motion isn't the right flag to use, but force root lock</summary>\r\n        [Introduced(EngineVersion.VER_UE4_15)]\r\n        ConvertEnableRootMotionToForceRootLock,\r\n\r\n        /// <summary>Convert multiple rows to tracks</summary>\r\n        [Introduced(EngineVersion.VER_UE4_15)]\r\n        ConvertMultipleRowsToTracks,\r\n\r\n        /// <summary>When finished now defaults to restore state</summary>\r\n        [Introduced(EngineVersion.VER_UE4_16)]\r\n        WhenFinishedDefaultsToRestoreState,\r\n\r\n        /// <summary>EvaluationTree added</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        EvaluationTree,\r\n\r\n        /// <summary>When finished now defaults to project default</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        WhenFinishedDefaultsToProjectDefault,\r\n\r\n        /// <summary>Use int range rather than float range in FMovieSceneSegment</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        FloatToIntConversion,\r\n\r\n        /// <summary>Purged old spawnable blueprint classes from level sequence assets</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        PurgeSpawnableBlueprints,\r\n\r\n        /// <summary>Finish UMG evaluation on end</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        FinishUMGEvaluation,\r\n\r\n        /// <summary>Manual serialization of float channel</summary>\r\n        [Introduced(EngineVersion.VER_UE4_22)]\r\n        SerializeFloatChannel,\r\n\r\n        /// <summary>Change the linear keys so they act the old way and interpolate always.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_22)]\r\n        ModifyLinearKeysForOldInterp,\r\n\r\n        /// <summary>Full Manual serialization of float channel</summary>\r\n        [Introduced(EngineVersion.VER_UE4_25)]\r\n        SerializeFloatChannelCompletely,\r\n\r\n        /// <summary>Set ContinuouslyRespawn to false by default, added FMovieSceneSpawnable::bNetAddressableName</summary>\r\n        [Introduced(EngineVersion.VER_UE4_27)]\r\n        SpawnableImprovements,\r\n\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]\r\n        VersionPlusOne,\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]\r\n        LatestVersion = VersionPlusOne - 1\r\n    }\r\n\r\n    public enum FFortniteReleaseBranchCustomObjectVersion\r\n    {\r\n        /// <summary>Before any version changes were made</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        BeforeCustomVersionWasAdded = 0,\r\n\r\n        /// <summary>Custom 14.10 File Object Version</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        DisableLevelset_v14_10,\r\n\r\n        /// <summary>Add the long range attachment tethers to the cloth asset to avoid a large hitch during the cloth's initialization.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        ChaosClothAddTethersToCachedData,\r\n\r\n        /// <summary>Chaos::TKinematicTarget no longer stores a full transform, only position/rotation.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        ChaosKinematicTargetRemoveScale,\r\n\r\n        /// <summary>Move UCSModifiedProperties out of ActorComponent and in to sparse storage</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        ActorComponentUCSModifiedPropertiesSparseStorage,\r\n\r\n        /// <summary>Fixup Nanite meshes which were using the wrong material and didn't have proper UVs :</summary>\r\n        [Introduced(EngineVersion.VER_UE5_2)]\r\n        FixupNaniteLandscapeMeshes,\r\n\r\n        /// <summary>Remove any cooked collision data from nanite landscape / editor spline meshes since collisions are not needed there :</summary>\r\n        [Introduced(EngineVersion.VER_UE5_2)]\r\n        RemoveUselessLandscapeMeshesCookedCollisionData,\r\n\r\n        /// <summary>Serialize out UAnimCurveCompressionCodec::InstanceGUID to maintain deterministic DDC key generation in cooked-editor</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        SerializeAnimCurveCompressionCodecGuidOnCook,\r\n\r\n        /// <summary>Fix the Nanite landscape mesh being reused because of a bad name</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        FixNaniteLandscapeMeshNames,\r\n\r\n        /// <summary>Fixup and synchronize shared properties modified before the synchronicity enforcement</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        LandscapeSharedPropertiesEnforcement,\r\n\r\n        /// <summary>Include the cell size when computing the cell guid</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        WorldPartitionRuntimeCellGuidWithCellSize,\r\n\r\n        /// <summary>Enable SkipOnlyEditorOnly style cooking of NaniteOverrideMaterial</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        NaniteMaterialOverrideUsesEditorOnly,\r\n\r\n        /// <summary>Store game thread particles data in single precision</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        SinglePrecisonParticleData,\r\n\r\n        /// <summary>UPCGPoint custom serialization</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        PCGPointStructuredSerializer,\r\n\r\n        /// <summary>Deprecation of Nav Movement Properties and moving them to a new struct</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        NavMovementComponentMovingPropertiesToStruct,\r\n\r\n        /// <summary>Add bone serialization for dynamic mesh attributes</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        DynamicMeshAttributesSerializeBones,\r\n\r\n        /// <summary>-----new versions can be added above this line-------------------------------------------------</summary>\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]\r\n        VersionPlusOne,\r\n\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]\r\n        LatestVersion = VersionPlusOne - 1\r\n    }\r\n\r\n    public enum FUE5ReleaseStreamObjectVersion\r\n    {\r\n        /// <summary>Before any version changes were made</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        BeforeCustomVersionWasAdded = 0,\r\n\r\n        /// <summary>Added Lumen reflections to new reflection enum, changed defaults</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0EA)]\r\n        ReflectionMethodEnum,\r\n\r\n        /// <summary>Serialize HLOD info in WorldPartitionActorDesc</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0EA)]\r\n        WorldPartitionActorDescSerializeHLODInfo,\r\n\r\n        /// <summary>Removing Tessellation from materials and meshes.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0EA)]\r\n        RemovingTessellation,\r\n\r\n        /// <summary>LevelInstance serialize runtime behavior</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0EA)]\r\n        LevelInstanceSerializeRuntimeBehavior,\r\n\r\n        /// <summary>Refactoring Pose Asset runtime data structures</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0EA)]\r\n        PoseAssetRuntimeRefactor,\r\n\r\n        /// <summary>Serialize the folder path of actor descs</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0EA)]\r\n        WorldPartitionActorDescSerializeActorFolderPath,\r\n\r\n        /// <summary>Change hair strands vertex format</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0EA)]\r\n        HairStrandsVertexFormatChange,\r\n\r\n        /// <summary>Added max linear and angular speed to Chaos bodies</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0EA)]\r\n        AddChaosMaxLinearAngularSpeed,\r\n\r\n        /// <summary>PackedLevelInstance version</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0EA)]\r\n        PackedLevelInstanceVersion,\r\n\r\n        /// <summary>PackedLevelInstance bounds fix</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0EA)]\r\n        PackedLevelInstanceBoundsFix,\r\n\r\n        /// <summary>Custom property anim graph nodes (linked anim graphs, control rig etc.) now use optional pin manager</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        CustomPropertyAnimGraphNodesUseOptionalPinManager,\r\n\r\n        /// <summary>Add native double and int64 support to FFormatArgumentData</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        TextFormatArgumentData64bitSupport,\r\n\r\n        /// <summary>Material layer stacks are no longer considered 'static parameters'</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        MaterialLayerStacksAreNotParameters,\r\n\r\n        /// <summary>CachedExpressionData is moved from UMaterial to UMaterialInterface</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        MaterialInterfaceSavedCachedData,\r\n\r\n        /// <summary>Add support for multiple cloth deformer LODs to be able to raytrace cloth with a different LOD than the one it is rendered with</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        AddClothMappingLODBias,\r\n\r\n        /// <summary>Add support for different external actor packaging schemes</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        AddLevelActorPackagingScheme,\r\n\r\n        /// <summary>Add support for linking to the attached parent actor in WorldPartitionActorDesc</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        WorldPartitionActorDescSerializeAttachParent,\r\n\r\n        /// <summary>Converted AActor GridPlacement to bIsSpatiallyLoaded flag</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        ConvertedActorGridPlacementToSpatiallyLoadedFlag,\r\n\r\n        /// <summary>Fixup for bad default value for GridPlacement_DEPRECATED</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        ActorGridPlacementDeprecateDefaultValueFixup,\r\n\r\n        /// <summary>PackedLevelActor started using FWorldPartitionActorDesc (not currently checked against but added as a security)</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        PackedLevelActorUseWorldPartitionActorDesc,\r\n\r\n        /// <summary>Add support for actor folder objects</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        AddLevelActorFolders,\r\n\r\n        /// <summary>Remove FSkeletalMeshLODModel bulk datas</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        RemoveSkeletalMeshLODModelBulkDatas,\r\n\r\n        /// <summary>Exclude brightness from the EncodedHDRCubemap,</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        ExcludeBrightnessFromEncodedHDRCubemap,\r\n\r\n        /// <summary>Unified volumetric cloud component quality sample count slider between main and reflection views for consistency</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        VolumetricCloudSampleCountUnification,\r\n\r\n        /// <summary>Pose asset GUID generated from source AnimationSequence</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        PoseAssetRawDataGUID,\r\n\r\n        /// <summary>Convolution bloom now take into account FPostProcessSettings::BloomIntensity for scatter dispersion.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        ConvolutionBloomIntensity,\r\n\r\n        /// <summary>Serialize FHLODSubActors instead of FGuids in WorldPartition HLODActorDesc</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        WorldPartitionHLODActorDescSerializeHLODSubActors,\r\n\r\n        /// <summary>Large Worlds - serialize double types as doubles</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        LargeWorldCoordinates,\r\n\r\n        /// <summary>Deserialize old BP float and double types as real numbers for pins</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        BlueprintPinsUseRealNumbers,\r\n\r\n        /// <summary>Changed shadow defaults for directional light components, version needed to not affect old things</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        UpdatedDirectionalLightShadowDefaults,\r\n\r\n        /// <summary>Refresh geometry collections that had not already generated convex bodies.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        GeometryCollectionConvexDefaults,\r\n\r\n        /// <summary>Add faster damping calculations to the cloth simulation and rename previous Damping parameter to LocalDamping.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        ChaosClothFasterDamping,\r\n\r\n        /// <summary>Serialize LandscapeActorGuid in FLandscapeActorDesc sub class.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        WorldPartitionLandscapeActorDescSerializeLandscapeActorGuid,\r\n\r\n        /// <summary>add inertia tensor and rotation of mass to convex </summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        AddedInertiaTensorAndRotationOfMassAddedToConvex,\r\n\r\n        /// <summary>Storing inertia tensor as vec3 instead of matrix.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        ChaosInertiaConvertedToVec3,\r\n\r\n        /// <summary>For Blueprint real numbers, ensure that legacy float data is serialized as single-precision</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        SerializeFloatPinDefaultValuesAsSinglePrecision,\r\n\r\n        /// <summary>Upgrade the BlendMasks array in existing LayeredBoneBlend nodes</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        AnimLayeredBoneBlendMasks,\r\n\r\n        /// <summary>Uses RG11B10 format to store the encoded reflection capture data on mobile</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        StoreReflectionCaptureEncodedHDRDataInRG11B10Format,\r\n\r\n        /// <summary>Add WithSerializer type trait and implementation for FRawAnimSequenceTrack</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        RawAnimSequenceTrackSerializer,\r\n\r\n        /// <summary>Removed font from FEditableTextBoxStyle, and added FTextBlockStyle instead.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        RemoveDuplicatedStyleInfo,\r\n\r\n        /// <summary>Added member reference to linked anim graphs</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        LinkedAnimGraphMemberReference,\r\n\r\n        /// <summary>Changed default tangent behavior for new dynamic mesh components</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        DynamicMeshComponentsDefaultUseExternalTangents,\r\n\r\n        /// <summary>Added resize methods to media capture</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        MediaCaptureNewResizeMethods,\r\n\r\n        /// <summary>Function data stores a map from work to debug operands</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        RigVMSaveDebugMapInGraphFunctionData,\r\n\r\n        /// <summary>Changed default Local Exposure Contrast Scale from 1.0 to 0.8</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        LocalExposureDefaultChangeFrom1,\r\n\r\n        /// <summary>Serialize bActorIsListedInSceneOutliner in WorldPartitionActorDesc</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        WorldPartitionActorDescSerializeActorIsListedInSceneOutliner,\r\n\r\n        /// <summary>Disabled opencolorio display configuration by default</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        OpenColorIODisabledDisplayConfigurationDefault,\r\n\r\n        /// <summary>Serialize ExternalDataLayerAsset in WorldPartitionActorDesc</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        WorldPartitionExternalDataLayers,\r\n\r\n        /// <summary>Fix Chaos Cloth fictitious angular scale bug that requires existing parameter rescaling.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        ChaosClothFictitiousAngularVelocitySubframeFix,\r\n\r\n        /// <summary>Store physics thread particles data in single precision</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        SinglePrecisonParticleDataPT,\r\n\r\n        /// <summary>Orthographic Near and Far Plane Auto-resolve enabled by default</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        OrthographicAutoNearFarPlane,\r\n\r\n        /// <summary>-----new versions can be added above this line-------------------------------------------------</summary>\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]\r\n        VersionPlusOne,\r\n\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]\r\n        LatestVersion = VersionPlusOne - 1\r\n    }\r\n\r\n    public enum FNiagaraObjectVersion\r\n    {\r\n        /// <summary>Before any version changes were made</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        BeforeCustomVersionWasAdded = 0,\r\n\r\n        [Introduced(EngineVersion.VER_UE4_21)]\r\n        SkeletalMeshVertexSampling = 1,\r\n\r\n        /// <summary>-----new versions can be added above this line-------------------------------------------------</summary>\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]\r\n        VersionPlusOne,\r\n\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]\r\n        LatestVersion = VersionPlusOne - 1\r\n    }\r\n\r\n    public enum FNiagaraCustomVersion\r\n    {\r\n        /// <summary>Before any version changes were made in niagara</summary>\r\n        [Introduced(EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)]\r\n        BeforeCustomVersionWasAdded = 0,\r\n\r\n        /// <summary>Reworked vm external function binding to be more robust.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_16)]\r\n        VMExternalFunctionBindingRework,\r\n\r\n        /// <summary>Making all Niagara files reference the version number, allowing post loading recompilation if necessary.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_16)]\r\n        PostLoadCompilationEnabled,\r\n\r\n        /// <summary>Moved some runtime cost from external functions into the binding step and used variadic templates to neaten that code greatly.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_16)]\r\n        VMExternalFunctionBindingReworkPartDeux,\r\n\r\n        /// <summary>Moved per instance data needed for certain data interfaces out to it's own struct.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_18)]\r\n        DataInterfacePerInstanceRework,\r\n\r\n        /// <summary>Added shader maps and corresponding infrastructure</summary>\r\n        [Introduced(EngineVersion.VER_UE4_18)]\r\n        NiagaraShaderMaps,\r\n\r\n        /// <summary>Combined Spawn, Update, and Event scripts into one graph.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_18)]\r\n        UpdateSpawnEventGraphCombination,\r\n\r\n        /// <summary>Reworked data layout to store float and int data separately.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_18)]\r\n        DataSetLayoutRework,\r\n\r\n        /// <summary>Reworked scripts to support emitter and system scripts</summary>\r\n        [Introduced(EngineVersion.VER_UE4_18)]\r\n        AddedEmitterAndSystemScripts,\r\n\r\n        /// <summary>Rework of script execution contexts to allow better reuse and reduce overhead of parameter handling. </summary>\r\n        [Introduced(EngineVersion.VER_UE4_18)]\r\n        ScriptExecutionContextRework,\r\n\r\n        /// <summary>Removed the Niagara variable ID's making hookup impossible until next compile</summary>\r\n        [Introduced(EngineVersion.VER_UE4_18)]\r\n        RemovalOfNiagaraVariableIDs,\r\n\r\n        /// <summary>System and emitter script simulations.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_18)]\r\n        SystemEmitterScriptSimulations,\r\n\r\n        /// <summary>Adding integer random to VM. TODO: The vm really needs its own versioning system that will force a recompile when changes.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_18)]\r\n        IntegerRandom,\r\n\r\n        /// <summary>Added emitter spawn attributes</summary>\r\n        [Introduced(EngineVersion.VER_UE4_18)]\r\n        AddedEmitterSpawnAttributes,\r\n\r\n        /// <summary>cooking of shader maps and corresponding infrastructure</summary>\r\n        [Introduced(EngineVersion.VER_UE4_18)]\r\n        NiagaraShaderMapCooking,\r\n\r\n        /// <summary>don't serialize shader maps for system scripts</summary>\r\n        [Introduced(EngineVersion.VER_UE4_18)]\r\n        NiagaraShaderMapCooking2,\r\n\r\n        /// <summary>Added script rapid iteration variables, usually top-level module parameters...</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        AddedScriptRapidIterationVariables,\r\n\r\n        /// <summary>Added type to data interface infos</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        AddedTypeToDataInterfaceInfos,\r\n\r\n        /// <summary>Hooked up autogenerated default values for function call nodes.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        EnabledAutogeneratedDefaultValuesForFunctionCallNodes,\r\n\r\n        /// <summary>Now curve data interfaces have look-up tables on by default.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        CurveLUTNowOnByDefault,\r\n\r\n        /// <summary>Scripts now use a guid for identification instead of an index when there are more than one with the same usage.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        ScriptsNowUseAGuidForIdentificationInsteadOfAnIndex,\r\n\r\n        /// <summary>don't serialize shader maps for update scripts</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        NiagaraCombinedGPUSpawnUpdate,\r\n\r\n        /// <summary>don't serialize shader maps for emitters that don't run on gpu.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        DontCompileGPUWhenNotNeeded,\r\n\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        LifeCycleRework,\r\n\r\n        /// <summary>We weren't serializing event data sets previously.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        NowSerializingReadWriteDataSets,\r\n\r\n        /// <summary>Forcing the internal parameter map vars to be reset between emitter calls.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_19)]\r\n        TranslatorClearOutBetweenEmitters,\r\n\r\n        /// <summary>added sampler shader params based on DI buffer descriptors</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        AddSamplerDataInterfaceParams,\r\n\r\n        /// <summary>Need to force the GPU shaders to recompile</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        GPUShadersForceRecompileNeeded,\r\n\r\n        /// <summary>The playback range for the timeline is now stored in the system editor data.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        PlaybackRangeStoredOnSystem,\r\n\r\n        /// <summary>All cached values will auto-recompile.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        MovedToDerivedDataCache,\r\n\r\n        /// <summary>Data interfaces are preallocated</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        DataInterfacesNotAllocated,\r\n\r\n        /// <summary>emitter scripts are built using \"Emitter.\" instead of the full name.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        EmittersHaveGenericUniqueNames,\r\n\r\n        /// <summary>no longer have compiler version enum value in this list, instead moved to a guid, which works better for the DDC</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        MovingTranslatorVersionToGuid,\r\n\r\n        /// <summary>adding a parameter map in/out to the data set base node</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        AddingParamMapToDataSetBaseNode,\r\n\r\n        /// <summary>refactor of CS parameters allowing regular params as well as buffers.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        DataInterfaceComputeShaderParamRefactor,\r\n\r\n        /// <summary>bumping version and forcing curves to regen their LUT on version change.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        CurveLUTRegen,\r\n\r\n        /// <summary>Changing the graph generation for assignment nodes so that it uses a \"Begin Defaults\" node where appropriate.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        AssignmentNodeUsesBeginDefaults,\r\n\r\n        /// <summary>Updating the usage flage bitmask for assignment nodes to match the part of the stack it's used in.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        AssignmentNodeHasCorrectUsageBitmask,\r\n\r\n        /// <summary>Emitter local space is compiled into the hlsl as a literal constant to expose it to emitter scripts and allow for some better optimization of particle transforms.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_20)]\r\n        EmitterLocalSpaceLiteralConstant,\r\n\r\n        /// <summary>The cpu cache of the texture is now directly serialized instead of using array property serialization.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_21)]\r\n        TextureDataInterfaceUsesCustomSerialize,\r\n\r\n        /// <summary>The texture data interface now streams size info</summary>\r\n        [Introduced(EngineVersion.VER_UE4_21)]\r\n        TextureDataInterfaceSizeSerialize,\r\n\r\n        /// <summary>API to skeletal mesh interface was improved but requires a recompile and some graph fixup.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_21)]\r\n        SkelMeshInterfaceAPIImprovements,\r\n\r\n        /// <summary>Only do op add pin fixup on existing nodes which are before this version</summary>\r\n        [Introduced(EngineVersion.VER_UE4_23)]\r\n        ImproveLoadTimeFixupOfOpAddPins,\r\n\r\n        /// <summary>Moved commonly used input metadata out of the strin/string property metadata map to actual properties on the metadata struct.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_23)]\r\n        MoveCommonInputMetadataToProperties,\r\n\r\n        /// <summary>Move to using the traversed graph hash and the base script id for the FNiagaraVMExecutableDataId instead of the change id guid to prevent invalidating the DDC.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_23)]\r\n        UseHashesToIdentifyCompileStateOfTopLevelScripts,\r\n\r\n        /// <summary>Reworked how the metadata is stored in NiagaraGraph from storing a Map of FNiagaraVariableMetaData to storing a map of UNiagaraScriptVariable* to be used with the Details panel.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_23)]\r\n        MetaDataAndParametersUpdate,\r\n\r\n        /// <summary>Moved the emitter inheritance data from the emitter handle to the emitter to allow for chained emitter inheritance.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_23)]\r\n        MoveInheritanceDataFromTheEmitterHandleToTheEmitter,\r\n\r\n        /// <summary>Add property to all Niagara scripts indicating whether or not they belong to the library</summary>\r\n        [Introduced(EngineVersion.VER_UE4_23)]\r\n        AddLibraryAssetProperty,\r\n\r\n        /// <summary>Addding additional defines to the GPU script</summary>\r\n        [Introduced(EngineVersion.VER_UE4_24)]\r\n        AddAdditionalDefinesProperty,\r\n\r\n        /// <summary>Remove the random compile id guids from the cached script usage and from the compile and script ids since the hashes serve the same purpose and are deterministic.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_24)]\r\n        RemoveGraphUsageCompileIds,\r\n\r\n        /// <summary>Adding UseRapidIterationParams and DetailLevelMask to the GPU script</summary>\r\n        [Introduced(EngineVersion.VER_UE4_24)]\r\n        AddRIAndDetailLevel,\r\n\r\n        /// <summary>Changing the system and emitter compiled data to shared pointers to deal with lifetime issues in the editor.  They now are handled directly in system serialize.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_24)]\r\n        ChangeEmitterCompiledDataToSharedRefs,\r\n\r\n        /// <summary>Sorting on Renderers is disabled by default, we add a version to maintain existing systems that expected sorting to be enabled</summary>\r\n        [Introduced(EngineVersion.VER_UE4_24)]\r\n        DisableSortingByDefault,\r\n\r\n        /// <summary>Convert TMap into TArray to save memory, TMap contains an inline allocator which pushes the size to 80 bytes</summary>\r\n        [Introduced(EngineVersion.VER_UE4_25)]\r\n        MemorySaving,\r\n\r\n        /// <summary>Added a new value to the script usage enum, and we need a custom version to fix the existing bitfields.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_25)]\r\n        AddSimulationStageUsageEnum,\r\n\r\n        /// <summary>Save the functions generated by a GPU data interface inside FNiagaraDataInterfaceGPUParamInfo</summary>\r\n        [Introduced(EngineVersion.VER_UE4_25)]\r\n        AddGeneratedFunctionsToGPUParamInfo,\r\n\r\n        /// <summary>Removed DetailLevel in favor of FNiagaraPlatfomSet based selection of per platform settings.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_25)]\r\n        PlatformScalingRefactor,\r\n\r\n        /// <summary>Promote parameters used across script executions to the Dataset, and Demote unused parameters.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_25)]\r\n        PrecompileNamespaceFixup,\r\n\r\n        /// <summary>Postload fixup in UNiagaraGraph to fixup VariableToScriptVariable map entries being null.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_25)]\r\n        FixNullScriptVariables,\r\n\r\n        /// <summary>Move FNiagaraVariableMetaData from storing scope enum to storing registered scope name.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_25)]\r\n        PrecompileNamespaceFixup2,\r\n\r\n        /// <summary>Enable the simulation stage flag by default in the usage bitmask of modules and functions</summary>\r\n        [Introduced(EngineVersion.VER_UE4_25)]\r\n        SimulationStageInUsageBitmask,\r\n\r\n        /// <summary>Fix graph parameter map parameters on post load so that they all have a consisten parsable format and update the UI to show and filter based on these formats.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_25)]\r\n        StandardizeParameterNames,\r\n\r\n        /// <summary>Make sure that UNiagaraComponents only have override maps for User variables.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        ComponentsOnlyHaveUserVariables,\r\n\r\n        /// <summary>Refactor the options for UV settings on the ribbon renderer.</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        RibbonRendererUVRefactor,\r\n\r\n        /// <summary>Replace the TypeDefinition in VariableBase with an index into the type registry</summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        VariablesUseTypeDefRegistry,\r\n\r\n        /// <summary>Expand the visibility options of the scripts to be able to hide a script completely from the user </summary>\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        AddLibraryVisibilityProperty,\r\n\r\n        [Introduced(EngineVersion.VER_UE4_26)]\r\n        SignificanceHandlers,\r\n\r\n        /// <summary>Added support for multiple versions of script data</summary>\r\n        [Introduced(EngineVersion.VER_UE4_27)]\r\n        ModuleVersioning,\r\n\r\n        [Introduced(EngineVersion.VER_UE4_27)]\r\n        MoveDefaultValueFromFNiagaraVariableMetaDataToUNiagaraScriptVariable,\r\n\r\n        /// <summary>Changed the default mode from deterministic to non-deterministic which matches emitters</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        ChangeSystemDeterministicDefault,\r\n\r\n        /// <summary>Update static switch pins to use the PersistentId from their script variable so that when they're renamed their values aren't lost when reallocating pins.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_0)]\r\n        StaticSwitchFunctionPinsUsePersistentGuids,\r\n\r\n        /// <summary>Extended visibility culling options and moved properties into their own struct.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        VisibilityCullingImprovements,\r\n\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        AddBakerCameraBookmarks,\r\n\r\n        /// <summary>Function call node refresh from external changes has been refactored so that they don't need to populate their name bindings every load.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        PopulateFunctionCallNodePinNameBindings,\r\n\r\n        /// <summary>Changed the default value for the component renderer's OnlyCreateComponentsOnParticleSpawn property</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        ComponentRendererSpawnProperty,\r\n\r\n        /// <summary>Previous repopulate didn't handle module attributes like Particles.Module.Name so they need to be repopulated for renaming to work correctly.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        RepopulateFunctionCallNodePinNameBindings,\r\n\r\n        /// <summary>Event spawns now optionally update Initial. attribute values. New default is true but old data is kept false to maintain existing behavior.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_1)]\r\n        EventSpawnsUpdateInitialAttributeValues,\r\n\r\n        /// <summary>Adds list of variadic parameters to the information about GPU functions.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_2)]\r\n        AddVariadicParametersToGPUFunctionInfo,\r\n\r\n        /// <summary>Some data fixup for NiagaraNodeWithDynamicPins.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_2)]\r\n        DynamicPinNodeFixup,\r\n\r\n        /// <summary>Ribbon renderer will default to unique ID rather than normalized age to make more things 'just work'</summary>\r\n        [Introduced(EngineVersion.VER_UE5_3)]\r\n        RibbonRendererLinkOrderDefaultIsUniqueID,\r\n\r\n        /// <summary>Renderer SubImage Blends are enabled by default</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        SubImageBlendEnabledByDefault,\r\n\r\n        /// <summary>Ribbon renderer will use geometry normals by default rather than screen / facing aligned normals</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        RibbonPlaneUseGeometryNormals,\r\n\r\n        /// <summary>Actors velocity is used for the initial velocity before the component has any tracking, old assets use the old zero velocity</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        InitialOwnerVelocityFromActor,\r\n\r\n        /// <summary>FNiagaraParameterBindingWithValue wouldn't necessarily have the appropriate ResolvedParameter namespace when it comes to emitter merging</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        ParameterBindingWithValueRenameFixup,\r\n\r\n        /// <summary>Sim Cache moved to bulk data by default</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        SimCache_BulkDataVersion1,\r\n\r\n        /// <summary>Decoupling of 'Template' and 'Inheritance'</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        InheritanceUxRefactor,\r\n\r\n        /// <summary>NDC Read DIs will not override spawn group by default when spawning particles. Old content will remain unchanged.</summary>\r\n        [Introduced(EngineVersion.VER_UE5_4)]\r\n        NDCSpawnGroupOverrideDisabledByDefault,\r\n\r\n        /// <summary>Before it was normalized age which can introduce flickering with sorting and random lifetimes</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        CustomSortingBindingToAge,\r\n\r\n        /// <summary>Update Initial Mesh Orientation Module</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        StatelessInitialMeshOrientationV1,\r\n\r\n        /// <summary>Hierarchy Editor was implemented</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        HierarchyEditorScriptSupport,\r\n\r\n        /// <summary>Added loop delay enabled to emitter state</summary>\r\n        [Introduced(EngineVersion.VER_UE5_5)]\r\n        EmitterStateAddLoopDelayEnabled,\r\n\r\n        /// <summary>Make sure that we serialize the UsageBitMask with the GPUFunctionInfo</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        SerializeUsageBitMaskToGPUFunctionInfo,\r\n\r\n        /// <summary>Changed the interpolated spawn property into an enum</summary>\r\n        [Introduced(EngineVersion.VER_UE5_6)]\r\n        AddedNewInterpolatedSpawnMode,\r\n\r\n        /// <summary>Adding user asset tag storage in UMetaData for all UPackages</summary>\r\n        [Introduced(EngineVersion.VER_UE5_7)]\r\n        UserAssetTagStorageInMetaData,\r\n\r\n        /// <summary>\r\n        /// DO NOT ADD A NEW VERSION UNLESS YOU HAVE TALKED TO THE NIAGARA LEAD. Mismanagement of these versions can lead to data loss if it is adjusted in multiple streams simultaneously.\r\n        /// -----new versions can be added above this line-------------------------------------------------\r\n        /// </summary>\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE)]\r\n        VersionPlusOne,\r\n\r\n\r\n        [Introduced(EngineVersion.VER_UE4_AUTOMATIC_VERSION)]\r\n        LatestVersion = VersionPlusOne - 1\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/ExportTypes/AssetImportDataExport.cs",
    "content": "using UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.ExportTypes\n{\n    public class AssetImportDataExport : NormalExport\n    {\n        public FString Json;\n\n        public AssetImportDataExport(Export super) : base(super)\n        {\n\n        }\n\n        public AssetImportDataExport(UAsset asset, byte[] extras) : base(asset, extras)\n        {\n\n        }\n\n        public AssetImportDataExport()\n        {\n\n        }\n\n        public override void Read(AssetBinaryReader reader, int nextStarting)\n        {\n            Json = reader.ReadFString();\n\n            base.Read(reader, nextStarting);\n        }\n\n        public override void Write(AssetBinaryWriter writer)\n        {\n            writer.Write(Json);\n\n            base.Write(writer);\n        }\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/ExportTypes/ClassExport.cs",
    "content": "using Newtonsoft.Json;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing UAssetAPI.JSON;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.ExportTypes\r\n{\r\n    /// <summary>\r\n    /// Represents an interface that a UClass (<see cref=\"ClassExport\"/>) implements.\r\n    /// </summary>\r\n    public struct SerializedInterfaceReference\r\n    {\r\n        public int Class;\r\n        public int PointerOffset;\r\n        public bool bImplementedByK2;\r\n\r\n        public SerializedInterfaceReference(int @class, int pointerOffset, bool bImplementedByK2)\r\n        {\r\n            Class = @class;\r\n            PointerOffset = pointerOffset;\r\n            this.bImplementedByK2 = bImplementedByK2;\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Represents an object class.\r\n    /// </summary>\r\n    public class ClassExport : StructExport\r\n    {\r\n        /// <summary>\r\n        /// Map of all functions by name contained in this class\r\n        /// </summary>\r\n        [JsonConverter(typeof(TMapJsonConverter<FName, FPackageIndex>))]\r\n        public TMap<FName, FPackageIndex> FuncMap;\r\n\r\n        /// <summary>\r\n        /// Class flags; See <see cref=\"EClassFlags\"/> for more information\r\n        /// </summary>\r\n        public EClassFlags ClassFlags;\r\n\r\n        /// <summary>\r\n        /// The required type for the outer of instances of this class\r\n        /// </summary>\r\n        public FPackageIndex ClassWithin;\r\n\r\n        /// <summary>\r\n        /// Which Name.ini file to load Config variables out of\r\n        /// </summary>\r\n        public FName ClassConfigName;\r\n\r\n        /// <summary>\r\n        /// The list of interfaces which this class implements, along with the pointer property that is located at the offset of the interface's vtable.\r\n        /// If the interface class isn't native, the property will be empty.\r\n        /// </summary>\r\n        public SerializedInterfaceReference[] Interfaces;\r\n\r\n        /// <summary>\r\n        /// This is the blueprint that caused the generation of this class, or null if it is a native compiled-in class\r\n        /// </summary>\r\n        public FPackageIndex ClassGeneratedBy;\r\n\r\n        /// <summary>\r\n        /// Does this class use deprecated script order?\r\n        /// </summary>\r\n        public bool bDeprecatedForceScriptOrder;\r\n\r\n        /// <summary>\r\n        /// Used to check if the class was cooked or not\r\n        /// </summary>\r\n        public bool bCooked;\r\n\r\n        /// <summary>\r\n        /// The class default object; used for delta serialization and object initialization\r\n        /// </summary>\r\n        public FPackageIndex ClassDefaultObject;\r\n\r\n        public ClassExport(Export super) : base(super)\r\n        {\r\n\r\n        }\r\n\r\n        public ClassExport(UAsset asset, byte[] extras) : base(asset, extras)\r\n        {\r\n\r\n        }\r\n\r\n        public ClassExport()\r\n        {\r\n\r\n        }\r\n\r\n        public override void Read(AssetBinaryReader reader, int nextStarting)\r\n        {\r\n            base.Read(reader, nextStarting);\r\n\r\n            int numFuncIndexEntries = reader.ReadInt32();\r\n            FuncMap = new TMap<FName, FPackageIndex>();\r\n            for (int i = 0; i < numFuncIndexEntries; i++)\r\n            {\r\n                FName functionName = reader.ReadFName();\r\n                FPackageIndex functionExport = FPackageIndex.FromRawIndex(reader.ReadInt32());\r\n\r\n                FuncMap.Add(functionName, functionExport);\r\n            }\r\n\r\n            ClassFlags = (EClassFlags)reader.ReadUInt32();\r\n\r\n            if (Asset.ObjectVersion < ObjectVersion.VER_UE4_CLASS_NOTPLACEABLE_ADDED)\r\n            {\r\n                ClassFlags ^= EClassFlags.CLASS_NotPlaceable;\r\n            }\r\n\r\n            ClassWithin = new FPackageIndex(reader.ReadInt32());\r\n            ClassConfigName = reader.ReadFName();\r\n            Asset.AddNameReference(ClassConfigName.Value);\r\n\r\n            int numInterfaces = 0;\r\n            long interfacesStart = 0;\r\n            if (Asset.ObjectVersion < ObjectVersion.VER_UE4_UCLASS_SERIALIZE_INTERFACES_AFTER_LINKING)\r\n            {\r\n                interfacesStart = reader.BaseStream.Position;\r\n                numInterfaces = reader.ReadInt32();\r\n                reader.BaseStream.Seek(interfacesStart + sizeof(int) + numInterfaces * (sizeof(int) * 3), SeekOrigin.Begin);\r\n            }\r\n\r\n            // Linking procedure here; I don't think anything is really serialized during this\r\n            ClassGeneratedBy = new FPackageIndex(reader.ReadInt32());\r\n\r\n            long currentOffset = reader.BaseStream.Position;\r\n            if (Asset.ObjectVersion < ObjectVersion.VER_UE4_UCLASS_SERIALIZE_INTERFACES_AFTER_LINKING)\r\n            {\r\n                reader.BaseStream.Seek(interfacesStart, SeekOrigin.Begin);\r\n            }\r\n            numInterfaces = reader.ReadInt32();\r\n            Interfaces = new SerializedInterfaceReference[numInterfaces];\r\n            for (int i = 0; i < numInterfaces; i++)\r\n            {\r\n                Interfaces[i] = new SerializedInterfaceReference(reader.ReadInt32(), reader.ReadInt32(), reader.ReadInt32() == 1);\r\n            }\r\n            if (Asset.ObjectVersion < ObjectVersion.VER_UE4_UCLASS_SERIALIZE_INTERFACES_AFTER_LINKING)\r\n            {\r\n                reader.BaseStream.Seek(currentOffset, SeekOrigin.Begin);\r\n            }\r\n\r\n            bDeprecatedForceScriptOrder = reader.ReadInt32() == 1;\r\n\r\n            reader.ReadInt64(); // None\r\n\r\n            if (Asset.ObjectVersion >= ObjectVersion.VER_UE4_ADD_COOKED_TO_UCLASS)\r\n            {\r\n                bCooked = reader.ReadInt32() == 1;\r\n            }\r\n\r\n            ClassDefaultObject = new FPackageIndex(reader.ReadInt32());\r\n\r\n            // CDO serialization usually comes after this export has finished serializing\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n\r\n            writer.Write(FuncMap.Count);\r\n            for (int i = 0; i < FuncMap.Count; i++)\r\n            {\r\n                writer.Write(FuncMap.Keys.ElementAt(i));\r\n                writer.Write(FuncMap[i].Index);\r\n            }\r\n\r\n            EClassFlags serializingClassFlags = ClassFlags;\r\n            if (Asset.ObjectVersion < ObjectVersion.VER_UE4_CLASS_NOTPLACEABLE_ADDED)\r\n            {\r\n                serializingClassFlags ^= EClassFlags.CLASS_NotPlaceable;\r\n            }\r\n            writer.Write((uint)serializingClassFlags);\r\n\r\n            writer.Write(ClassWithin.Index);\r\n            writer.Write(ClassConfigName);\r\n\r\n            if (Asset.ObjectVersion < ObjectVersion.VER_UE4_UCLASS_SERIALIZE_INTERFACES_AFTER_LINKING)\r\n            {\r\n                SerializeInterfaces(writer);\r\n            }\r\n\r\n            // Linking procedure here; I don't think anything is really serialized during this\r\n            writer.Write(ClassGeneratedBy.Index);\r\n\r\n            if (Asset.ObjectVersion >= ObjectVersion.VER_UE4_UCLASS_SERIALIZE_INTERFACES_AFTER_LINKING)\r\n            {\r\n                SerializeInterfaces(writer);\r\n            }\r\n\r\n            writer.Write(bDeprecatedForceScriptOrder ? 1 : 0);\r\n\r\n            writer.Write(new FName(writer.Asset, \"None\"));\r\n\r\n            if (Asset.ObjectVersion >= ObjectVersion.VER_UE4_ADD_COOKED_TO_UCLASS)\r\n            {\r\n                writer.Write(bCooked ? 1 : 0);\r\n            }\r\n\r\n            writer.Write(ClassDefaultObject.Index);\r\n        }\r\n\r\n        private void SerializeInterfaces(BinaryWriter writer)\r\n        {\r\n            writer.Write(Interfaces.Length);\r\n            for (int i = 0; i < Interfaces.Length; i++)\r\n            {\r\n                writer.Write(Interfaces[i].Class);\r\n                writer.Write(Interfaces[i].PointerOffset);\r\n                writer.Write(Interfaces[i].bImplementedByK2 ? 1 : 0);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/ExportTypes/DataTableExport.cs",
    "content": "using System.Collections.Generic;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.PropertyTypes.Structs;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\nusing System.Reflection.PortableExecutable;\r\n\r\nnamespace UAssetAPI.ExportTypes\r\n{\r\n    /// <summary>\r\n    /// Imported spreadsheet table.\r\n    /// </summary>\r\n    public class UDataTable\r\n    {\r\n        public List<StructPropertyData> Data;\r\n\r\n        public UDataTable()\r\n        {\r\n            Data = new List<StructPropertyData>();\r\n        }\r\n\r\n        public UDataTable(List<StructPropertyData> data)\r\n        {\r\n            Data = data;\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Export for an imported spreadsheet table. See <see cref=\"UDataTable\"/>.\r\n    /// </summary>\r\n    public class DataTableExport : NormalExport\r\n    {\r\n        /// <summary>\r\n        /// Gets or sets the value associated with the specified key. This operation loops linearly, so it may not be suitable for high-performance environments.\r\n        /// </summary>\r\n        /// <param name=\"key\">The key associated with the value to get or set.</param>\r\n        public override PropertyData this[FName key]\r\n        {\r\n            get\r\n            {\r\n                for (int i = 0; i < Data.Count; i++)\r\n                {\r\n                    if (Data[i].Name == key) return Data[i];\r\n                }\r\n                for (int i = 0; i < Table.Data.Count; i++)\r\n                {\r\n                    if (Table.Data[i].Name == key) return Table.Data[i];\r\n                }\r\n                return null;\r\n            }\r\n            set\r\n            {\r\n                value.Name = key;\r\n\r\n                for (int i = 0; i < Data.Count; i++)\r\n                {\r\n                    if (Data[i].Name == key)\r\n                    {\r\n                        Data[i] = value;\r\n                        return;\r\n                    }\r\n                }\r\n\r\n                if (value is StructPropertyData)\r\n                {\r\n                    for (int i = 0; i < Table.Data.Count; i++)\r\n                    {\r\n                        if (Table.Data[i].Name == key)\r\n                        {\r\n                            Table.Data[i] = (StructPropertyData)value;\r\n                            return;\r\n                        }\r\n                    }\r\n\r\n                    Table.Data.Add((StructPropertyData)value);\r\n                }\r\n                else\r\n                {\r\n                    Data.Add(value);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the value associated with the specified key. This operation loops linearly, so it may not be suitable for high-performance environments.\r\n        /// </summary>\r\n        /// <param name=\"key\">The key associated with the value to get or set.</param>\r\n        public override PropertyData this[string key]\r\n        {\r\n            get\r\n            {\r\n                return this[FName.FromString(Asset, key)];\r\n            }\r\n            set\r\n            {\r\n                this[FName.FromString(Asset, key)] = value;\r\n            }\r\n        }\r\n\r\n        public UDataTable Table;\r\n\r\n        public DataTableExport(Export super) : base(super)\r\n        {\r\n\r\n        }\r\n\r\n        public DataTableExport(UDataTable data, UAsset asset, byte[] extras) : base(asset, extras)\r\n        {\r\n            Table = data;\r\n        }\r\n\r\n        public DataTableExport()\r\n        {\r\n\r\n        }\r\n\r\n        public override void Read(AssetBinaryReader reader, int nextStarting)\r\n        {\r\n            base.Read(reader, nextStarting);\r\n\r\n            // Find an ObjectProperty named RowStruct\r\n            FName decidedStructType = FName.DefineDummy(reader.Asset, \"Generic\");\r\n            foreach (PropertyData thisData in Data)\r\n            {\r\n                if (thisData.Name.Value.Value == \"RowStruct\" && thisData is ObjectPropertyData thisObjData && thisObjData.Value.IsImport())\r\n                {\r\n                    decidedStructType = thisObjData.ToImport(reader.Asset).ObjectName;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (decidedStructType.ToString() == \"Generic\")\r\n            {\r\n                // overrides here...\r\n                FName exportClassTypeName = this.GetExportClassType();\r\n                string exportClassType = exportClassTypeName.Value.Value;\r\n                switch(exportClassType)\r\n                {\r\n                    case \"CommonGenericInputActionDataTable\":\r\n                        decidedStructType = FName.DefineDummy(reader.Asset, \"CommonInputActionDataBase\");\r\n                        break;\r\n                }\r\n            }\r\n\r\n            Table = new UDataTable();\r\n\r\n            int numEntries = reader.ReadInt32();\r\n            FName pcen = reader.Asset.GetParentClassExportName(out FName pcen2);\r\n            for (int i = 0; i < numEntries; i++)\r\n            {\r\n                FName rowName = reader.ReadFName();\r\n                var nextStruct = new StructPropertyData(rowName)\r\n                {\r\n                    StructType = decidedStructType\r\n                };\r\n                nextStruct.Ancestry.Initialize(null, pcen, pcen2);\r\n                nextStruct.Read(reader, false, 1);\r\n                Table.Data.Add(nextStruct);\r\n            }\r\n        }\r\n\r\n        public override void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n        {\r\n            var ancestryNew = (AncestryInfo)ancestrySoFar.Clone();\r\n            FName pcen = asset.GetParentClassExportName(out FName pcen2);\r\n            ancestryNew.SetAsParent(pcen, pcen2);\r\n\r\n            if (Data != null)\r\n            {\r\n                for (int i = 0; i < Data.Count; i++) Data[i]?.ResolveAncestries(asset, ancestryNew);\r\n            }\r\n            if (Table?.Data != null)\r\n            {\r\n                for (int i = 0; i < Table.Data.Count; i++) Table.Data[i]?.ResolveAncestries(asset, ancestryNew);\r\n            }\r\n            base.ResolveAncestries(asset, ancestrySoFar);\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n\r\n            // Find an ObjectProperty named RowStruct\r\n            FName decidedStructType = FName.DefineDummy(writer.Asset, \"Generic\");\r\n            foreach (PropertyData thisData in Data)\r\n            {\r\n                if (thisData.Name.Value.Value == \"RowStruct\" && thisData is ObjectPropertyData thisObjData)\r\n                {\r\n                    decidedStructType = thisObjData.ToImport(writer.Asset).ObjectName;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (decidedStructType.ToString() == \"Generic\")\r\n            {\r\n                // overrides here...\r\n                FName exportClassTypeName = this.GetExportClassType();\r\n                string exportClassType = exportClassTypeName.Value.Value;\r\n                switch (exportClassType)\r\n                {\r\n                    case \"CommonGenericInputActionDataTable\":\r\n                        decidedStructType = FName.DefineDummy(writer.Asset, \"CommonInputActionDataBase\");\r\n                        break;\r\n                }\r\n            }\r\n\r\n            writer.Write(Table.Data.Count);\r\n            for (int i = 0; i < Table.Data.Count; i++)\r\n            {\r\n                var thisDataTableEntry = Table.Data[i];\r\n                thisDataTableEntry.StructType = decidedStructType;\r\n                writer.Write(thisDataTableEntry.Name);\r\n                thisDataTableEntry.Write(writer, false);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/ExportTypes/EnumExport.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing UAssetAPI.CustomVersions;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.ExportTypes\r\n{\r\n    /// <summary>How this enum is declared in C++. Affects the internal naming of enum values.</summary>\r\n    public enum ECppForm\r\n    {\r\n        Regular,\r\n\t\tNamespaced,\r\n\t\tEnumClass\r\n    }\r\n\r\n    /// <summary>\r\n    /// Reflection data for an enumeration.\r\n    /// </summary>\r\n    public class UEnum\r\n    {\r\n        /// <summary>List of pairs of all enum names and values.</summary>\r\n        public List<Tuple<FName, long>> Names;\r\n\r\n        /// <summary>How the enum was originally defined.</summary>\r\n        public ECppForm CppForm = ECppForm.Regular;\r\n\r\n        public void Read(AssetBinaryReader reader, UAsset asset)\r\n        {\r\n            if (asset.ObjectVersion < ObjectVersion.VER_UE4_TIGHTLY_PACKED_ENUMS)\r\n            {\r\n                int numEntries = reader.ReadInt32();\r\n                for (int i = 0; i < numEntries; i++)\r\n                {\r\n                    FName tempName = reader.ReadFName();\r\n                    Names.Add(new Tuple<FName, long>(tempName, i));\r\n                }\r\n            }\r\n            else if (asset.GetCustomVersion<FCoreObjectVersion>() < FCoreObjectVersion.EnumProperties)\r\n            {\r\n                int numEntries = reader.ReadInt32();\r\n                for (int i = 0; i < numEntries; i++)\r\n                {\r\n                    FName tempName = reader.ReadFName();\r\n                    byte tempVal = reader.ReadByte();\r\n                    Names.Add(new Tuple<FName, long>(tempName, tempVal));\r\n                }\r\n            }\r\n            else\r\n            {\r\n                int numEntries = reader.ReadInt32();\r\n                for (int i = 0; i < numEntries; i++)\r\n                {\r\n                    FName tempName = reader.ReadFName();\r\n                    long tempVal = reader.ReadInt64();\r\n                    Names.Add(new Tuple<FName, long>(tempName, tempVal));\r\n                }\r\n            }\r\n\r\n            if (asset.ObjectVersion < ObjectVersion.VER_UE4_ENUM_CLASS_SUPPORT)\r\n            {\r\n                bool bIsNamespace = reader.ReadInt32() == 1;\r\n                CppForm = bIsNamespace ? ECppForm.Namespaced : ECppForm.Regular;\r\n            }\r\n            else\r\n            {\r\n                CppForm = (ECppForm)reader.ReadByte();\r\n            }\r\n        }\r\n\r\n        public void Write(AssetBinaryWriter writer, UAsset asset)\r\n        {\r\n            writer.Write(Names.Count);\r\n            if (asset.ObjectVersion < ObjectVersion.VER_UE4_TIGHTLY_PACKED_ENUMS)\r\n            {\r\n                var namesForSerialization = new Dictionary<long, FName>();\r\n                for (int i = 0; i < Names.Count; i++) namesForSerialization.Add(Names[i].Item2, Names[i].Item1);\r\n                for (int i = 0; i < Names.Count; i++)\r\n                {\r\n                    if (namesForSerialization.ContainsKey(i)) writer.Write(namesForSerialization[i]);\r\n                }\r\n            }\r\n            else if (asset.GetCustomVersion<FCoreObjectVersion>() < FCoreObjectVersion.EnumProperties)\r\n            {\r\n                for (int i = 0; i < Names.Count; i++)\r\n                {\r\n                    writer.Write(Names[i].Item1);\r\n                    writer.Write((byte)Names[i].Item2);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                for (int i = 0; i < Names.Count; i++)\r\n                {\r\n                    writer.Write(Names[i].Item1);\r\n                    writer.Write(Names[i].Item2);\r\n                }\r\n            }\r\n\r\n            if (asset.ObjectVersion < ObjectVersion.VER_UE4_ENUM_CLASS_SUPPORT)\r\n            {\r\n                writer.Write(CppForm == ECppForm.Namespaced ? 1 : 0);\r\n            }\r\n            else\r\n            {\r\n                writer.Write((byte)CppForm);\r\n            }\r\n        }\r\n\r\n        public UEnum()\r\n        {\r\n            Names = new List<Tuple<FName, long>>();\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Export data for an enumeration. See <see cref=\"UEnum\"/>.\r\n    /// </summary>\r\n    public class EnumExport : NormalExport\r\n    {\r\n        /// <summary>The enum that is stored in this export.</summary>\r\n        public UEnum Enum;\r\n\r\n        public EnumExport(Export super) : base(super)\r\n        {\r\n\r\n        }\r\n\r\n        public EnumExport(UAsset asset, byte[] extras) : base(asset, extras)\r\n        {\r\n\r\n        }\r\n\r\n        public EnumExport()\r\n        {\r\n\r\n        }\r\n\r\n        public override void Read(AssetBinaryReader reader, int nextStarting)\r\n        {\r\n            base.Read(reader, nextStarting);\r\n\r\n            Enum = new UEnum();\r\n            Enum.Read(reader, Asset);\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n\r\n            Enum.Write(writer, Asset);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/ExportTypes/Export.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.ExportTypes\r\n{\r\n    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]\r\n    internal class DisplayIndexOrderAttribute : Attribute\r\n    {\r\n        internal int DisplayingIndex = 0;\r\n        internal bool IsIoStore = false;\r\n        internal bool IsTraditional = true;\r\n        internal DisplayIndexOrderAttribute(int displayingIndex, bool isIoStore = false, bool isTraditional = true)\r\n        {\r\n            DisplayingIndex = displayingIndex;\r\n            IsIoStore = isIoStore;\r\n            IsTraditional = isTraditional;\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Enum used to determine whether an export should be loaded or not on the client/server. Not actually a bitflag.\r\n    /// </summary>\r\n    public enum EExportFilterFlags : byte\r\n    {\r\n        None,\r\n\t    NotForClient,\r\n\t    NotForServer\r\n    }\r\n\r\n    /// <summary>\r\n    /// UObject resource type for objects that are contained within this package and can be referenced by other packages.\r\n    /// </summary>\r\n    [JsonObject(MemberSerialization.OptOut)]\r\n    public class Export : ICloneable\r\n    {\r\n        ///<summary>The name of the UObject represented by this resource.</summary>\r\n        [DisplayIndexOrder(0, true)]\r\n        public FName ObjectName;\r\n        ///<summary>Location of the resource for this resource's Outer (import/other export). 0 = this resource is a top-level UPackage</summary>\r\n        [DisplayIndexOrder(1)]\r\n        public FPackageIndex OuterIndex;\r\n        ///<summary>Location of this export's class (import/other export). 0 = this export is a UClass</summary>\r\n        [DisplayIndexOrder(2)]\r\n        public FPackageIndex ClassIndex;\r\n        ///<summary>Location of this export's parent class (import/other export). 0 = this export is not derived from UStruct</summary>\r\n        [DisplayIndexOrder(3)]\r\n        public FPackageIndex SuperIndex;\r\n        ///<summary>Location of this export's template (import/other export). 0 = there is some problem</summary>\r\n        [DisplayIndexOrder(4)]\r\n        public FPackageIndex TemplateIndex;\r\n        ///<summary>The object flags for the UObject represented by this resource. Only flags that match the RF_Load combination mask will be loaded from disk and applied to the UObject.</summary>\r\n        [DisplayIndexOrder(5, true)]\r\n        public EObjectFlags ObjectFlags;\r\n        ///<summary>The number of bytes to serialize when saving/loading this export's UObject.</summary>\r\n        [DisplayIndexOrder(6, true)]\r\n        public long SerialSize;\r\n        ///<summary>The location (into the FLinker's underlying file reader archive) of the beginning of the data for this export's UObject. Used for verification only.</summary>\r\n        [DisplayIndexOrder(7, true)]\r\n        public long SerialOffset;\r\n\r\n        /// <summary>\r\n        /// The location (relative to SerialOffset) of the beginning of the portion of this export's data that is serialized using tagged property serialization.\r\n        /// Serialized into packages using tagged property serialization as of <see cref=\"ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET\"/> (5.4).\r\n        /// </summary>\r\n        [DisplayIndexOrder(8)]\r\n        public long ScriptSerializationStartOffset;\r\n        /// <summary>\r\n        /// The location (relative to SerialOffset) of the end of the portion of this export's data that is serialized using tagged property serialization.\r\n        /// Serialized into packages using tagged property serialization as of <see cref=\"ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET\"/> (5.4)\r\n        /// </summary>\r\n        [DisplayIndexOrder(9)]\r\n        public long ScriptSerializationEndOffset;\r\n\r\n        ///<summary>Was this export forced into the export table via OBJECTMARK_ForceTagExp?</summary>\r\n        [DisplayIndexOrder(10)]\r\n        public bool bForcedExport;\r\n        ///<summary>Should this export not be loaded on clients?</summary>\r\n        [DisplayIndexOrder(11, true)]\r\n        public bool bNotForClient;\r\n        ///<summary>Should this export not be loaded on servers?</summary>\r\n        [DisplayIndexOrder(12, true)]\r\n        public bool bNotForServer;\r\n        ///<summary>If this object is a top level package (which must have been forced into the export table via OBJECTMARK_ForceTagExp), this is the GUID for the original package file. Deprecated</summary>\r\n        [DisplayIndexOrder(13)]\r\n        public Guid PackageGuid;\r\n        ///<summary></summary>\r\n        [DisplayIndexOrder(14)]\r\n        public bool IsInheritedInstance;\r\n        ///<summary>If this export is a top-level package, this is the flags for the original package</summary>\r\n        [DisplayIndexOrder(15)]\r\n        public EPackageFlags PackageFlags;\r\n        ///<summary>Should this export be always loaded in editor game?</summary>\r\n        [DisplayIndexOrder(16)]\r\n        public bool bNotAlwaysLoadedForEditorGame;\r\n        ///<summary>Is this export an asset?</summary>\r\n        [DisplayIndexOrder(17)]\r\n        public bool bIsAsset;\r\n        ///<summary></summary>\r\n        [DisplayIndexOrder(18)]\r\n        public bool GeneratePublicHash;\r\n\r\n        /// <summary>\r\n        /// The export table must serialize as a fixed size, this is used to index into a long list, which is later loaded into the array. -1 means dependencies are not present. These are contiguous blocks, so CreateBeforeSerializationDependencies starts at FirstExportDependency + SerializationBeforeSerializationDependencies.\r\n        /// </summary>\r\n        internal int FirstExportDependencyOffset;\r\n        internal int SerializationBeforeSerializationDependenciesSize;\r\n        internal int CreateBeforeSerializationDependenciesSize;\r\n        internal int SerializationBeforeCreateDependenciesSize;\r\n        internal int CreateBeforeCreateDependenciesSize;\r\n\r\n        [DisplayIndexOrder(19)]\r\n        public List<FPackageIndex> SerializationBeforeSerializationDependencies = new List<FPackageIndex>();\r\n        [DisplayIndexOrder(20)]\r\n        public List<FPackageIndex> CreateBeforeSerializationDependencies = new List<FPackageIndex>();\r\n        [DisplayIndexOrder(21)]\r\n        public List<FPackageIndex> SerializationBeforeCreateDependencies = new List<FPackageIndex>();\r\n        [DisplayIndexOrder(22)]\r\n        public List<FPackageIndex> CreateBeforeCreateDependencies = new List<FPackageIndex>();\r\n\r\n        /// <summary>\r\n        /// Miscellaneous, unparsed export data, stored as a byte array.\r\n        /// </summary>\r\n        public byte[] Extras;\r\n\r\n        /// <summary>\r\n        /// The asset that this export is parsed with.\r\n        /// </summary>\r\n        [JsonIgnore]\r\n        public UAsset Asset;\r\n\r\n        [JsonIgnore]\r\n        internal bool alreadySerialized = false;\r\n\r\n        public Export(UAsset asset, byte[] extras)\r\n        {\r\n            Asset = asset;\r\n            Extras = extras;\r\n        }\r\n\r\n        public Export()\r\n        {\r\n\r\n        }\r\n\r\n        public virtual void Read(AssetBinaryReader reader, int nextStarting = 0)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Resolves the ancestry of all child properties of this export.\r\n        /// </summary>\r\n        public virtual void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n        {\r\n\r\n        }\r\n\r\n        public virtual void Write(AssetBinaryWriter writer)\r\n        {\r\n\r\n        }\r\n\r\n        // https://github.com/EpicGames/UnrealEngine/commit/1952a8b65290bc5b492f87d57fce87c809e231a0\r\n        // this commit doesn't seem to actually make any changes to how bools are serialized\r\n        private bool ReadBit(AssetBinaryReader reader)\r\n        {\r\n            return reader.ReadInt32() == 1;\r\n        }\r\n\r\n        private void WriteBit(AssetBinaryWriter writer, bool b)\r\n        {\r\n            writer.Write(b ? 1 : 0);\r\n        }\r\n\r\n        public void ReadExportMapEntry(AssetBinaryReader reader)\r\n        {\r\n            Asset = reader.Asset;\r\n\r\n            this.ClassIndex = new FPackageIndex(reader.ReadInt32());\r\n            this.SuperIndex = new FPackageIndex(reader.ReadInt32());\r\n            if (Asset.ObjectVersion >= ObjectVersion.VER_UE4_TemplateIndex_IN_COOKED_EXPORTS)\r\n            {\r\n                this.TemplateIndex = new FPackageIndex(reader.ReadInt32());\r\n            }\r\n            this.OuterIndex = new FPackageIndex(reader.ReadInt32());\r\n            this.ObjectName = reader.ReadFName();\r\n            this.ObjectFlags = (EObjectFlags)reader.ReadUInt32();\r\n            if (Asset.ObjectVersion < ObjectVersion.VER_UE4_64BIT_EXPORTMAP_SERIALSIZES)\r\n            {\r\n                this.SerialSize = reader.ReadInt32();\r\n                this.SerialOffset = reader.ReadInt32();\r\n            }\r\n            else\r\n            {\r\n                this.SerialSize = reader.ReadInt64();\r\n                this.SerialOffset = reader.ReadInt64();\r\n            }\r\n            this.bForcedExport = ReadBit(reader);\r\n            this.bNotForClient = ReadBit(reader);\r\n            this.bNotForServer = ReadBit(reader);\r\n            if (Asset.ObjectVersionUE5 < ObjectVersionUE5.REMOVE_OBJECT_EXPORT_PACKAGE_GUID) this.PackageGuid = new Guid(reader.ReadBytes(16));\r\n            if (Asset.ObjectVersionUE5 >= ObjectVersionUE5.TRACK_OBJECT_EXPORT_IS_INHERITED) this.IsInheritedInstance = ReadBit(reader);\r\n            this.PackageFlags = (EPackageFlags)reader.ReadUInt32();\r\n            if (Asset.ObjectVersion >= ObjectVersion.VER_UE4_LOAD_FOR_EDITOR_GAME)\r\n            {\r\n                this.bNotAlwaysLoadedForEditorGame = ReadBit(reader);\r\n            }\r\n            if (Asset.ObjectVersion >= ObjectVersion.VER_UE4_COOKED_ASSETS_IN_EDITOR_SUPPORT)\r\n            {\r\n                this.bIsAsset = ReadBit(reader);\r\n            }\r\n            if (Asset.ObjectVersionUE5 >= ObjectVersionUE5.OPTIONAL_RESOURCES)\r\n            {\r\n                this.GeneratePublicHash = ReadBit(reader);\r\n            }\r\n            if (Asset.ObjectVersion >= ObjectVersion.VER_UE4_PRELOAD_DEPENDENCIES_IN_COOKED_EXPORTS)\r\n            {\r\n                this.FirstExportDependencyOffset = reader.ReadInt32();\r\n                this.SerializationBeforeSerializationDependenciesSize = reader.ReadInt32();\r\n                this.CreateBeforeSerializationDependenciesSize = reader.ReadInt32();\r\n                this.SerializationBeforeCreateDependenciesSize = reader.ReadInt32();\r\n                this.CreateBeforeCreateDependenciesSize = reader.ReadInt32();\r\n            }\r\n            if (!Asset.HasUnversionedProperties && Asset.ObjectVersionUE5 >= ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET)\r\n            {\r\n                this.ScriptSerializationStartOffset = reader.ReadInt64();\r\n                this.ScriptSerializationEndOffset = reader.ReadInt64();\r\n            }\r\n        }\r\n\r\n        public static long GetExportMapEntrySize(UAsset asset)\r\n        {\r\n            AssetBinaryWriter testWriter = new AssetBinaryWriter(new MemoryStream(127), asset);\r\n            new Export().WriteExportMapEntry(testWriter);\r\n            \r\n            long res = testWriter.BaseStream.Position;\r\n            testWriter.Dispose();\r\n            return res;\r\n        }\r\n\r\n        public void WriteExportMapEntry(AssetBinaryWriter writer)\r\n        {\r\n            Asset = writer.Asset;\r\n\r\n            writer.Write(ClassIndex?.Index ?? 0);\r\n            writer.Write(SuperIndex?.Index ?? 0);\r\n            if (Asset.ObjectVersion >= ObjectVersion.VER_UE4_TemplateIndex_IN_COOKED_EXPORTS)\r\n            {\r\n                writer.Write(TemplateIndex?.Index ?? 0);\r\n            }\r\n            writer.Write(OuterIndex?.Index ?? 0);\r\n            writer.Write(ObjectName);\r\n            writer.Write((uint)ObjectFlags);\r\n            if (Asset.ObjectVersion < ObjectVersion.VER_UE4_64BIT_EXPORTMAP_SERIALSIZES)\r\n            {\r\n                writer.Write((int)SerialSize);\r\n                writer.Write((int)SerialOffset);\r\n            }\r\n            else\r\n            {\r\n                writer.Write(SerialSize);\r\n                writer.Write(SerialOffset);\r\n            }\r\n            WriteBit(writer, bForcedExport);\r\n            WriteBit(writer, bNotForClient);\r\n            WriteBit(writer, bNotForServer);\r\n            if (Asset.ObjectVersionUE5 < ObjectVersionUE5.REMOVE_OBJECT_EXPORT_PACKAGE_GUID) writer.Write(PackageGuid.ToByteArray());\r\n            if (Asset.ObjectVersionUE5 >= ObjectVersionUE5.TRACK_OBJECT_EXPORT_IS_INHERITED) WriteBit(writer, IsInheritedInstance);\r\n            writer.Write((uint)PackageFlags);\r\n            if (Asset.ObjectVersion >= ObjectVersion.VER_UE4_LOAD_FOR_EDITOR_GAME)\r\n            {\r\n                WriteBit(writer, bNotAlwaysLoadedForEditorGame);\r\n            }\r\n            if (Asset.ObjectVersion >= ObjectVersion.VER_UE4_COOKED_ASSETS_IN_EDITOR_SUPPORT)\r\n            {\r\n                WriteBit(writer, bIsAsset);\r\n            }\r\n            if (Asset.ObjectVersionUE5 >= ObjectVersionUE5.OPTIONAL_RESOURCES)\r\n            {\r\n                WriteBit(writer, GeneratePublicHash);\r\n            }\r\n            if (Asset.ObjectVersion >= ObjectVersion.VER_UE4_PRELOAD_DEPENDENCIES_IN_COOKED_EXPORTS)\r\n            {\r\n                writer.Write(FirstExportDependencyOffset);\r\n                writer.Write(SerializationBeforeSerializationDependenciesSize);\r\n                writer.Write(CreateBeforeSerializationDependenciesSize);\r\n                writer.Write(SerializationBeforeCreateDependenciesSize);\r\n                writer.Write(CreateBeforeCreateDependenciesSize);\r\n            }\r\n            if (!Asset.HasUnversionedProperties && Asset.ObjectVersionUE5 >= ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET)\r\n            {\r\n                writer.Write(ScriptSerializationStartOffset);\r\n                writer.Write(ScriptSerializationEndOffset);\r\n            }\r\n        }\r\n\r\n        private static MemberInfo[] _allFields = null;\r\n        private static void InitAllFields()\r\n        {\r\n            if (_allFields != null) return;\r\n            _allFields = UAPUtils.GetOrderedMembers<Export>();\r\n        }\r\n\r\n        public static MemberInfo[] GetAllObjectExportFields(UAsset asset)\r\n        {\r\n            InitAllFields();\r\n\r\n            var finalFields = new List<MemberInfo>();\r\n            for (int i = 0; i < _allFields.Length; i++)\r\n            {\r\n                if (_allFields[i] == null) continue;\r\n                DisplayIndexOrderAttribute attr = ((DisplayIndexOrderAttribute[])_allFields[i]?.GetCustomAttributes(typeof(DisplayIndexOrderAttribute), true))?[0];\r\n                if (attr == null) continue;\r\n                if (asset is UAsset && !attr.IsTraditional) continue;\r\n                finalFields.Add(_allFields[i]);\r\n            }\r\n            return finalFields.ToArray();\r\n        }\r\n\r\n        public static string[] GetAllFieldNames(UAsset asset)\r\n        {\r\n            InitAllFields();\r\n\r\n            MemberInfo[] relevantFields = GetAllObjectExportFields(asset);\r\n            string[] allFieldNames = new string[relevantFields.Length];\r\n            for (int i = 0; i < relevantFields.Length; i++)\r\n            {\r\n                allFieldNames[i] = relevantFields[i].Name;\r\n            }\r\n            return allFieldNames;\r\n        }\r\n\r\n        public FName GetExportClassType()\r\n        {\r\n            return this.ClassIndex.IsImport() ? this.ClassIndex.ToImport(Asset).ObjectName : FName.DefineDummy(Asset, this.ClassIndex.Index.ToString());\r\n        }\r\n\r\n        public FName GetClassTypeForAncestry(UAsset asset, out FName modulePath)\r\n        {\r\n            if (asset == null) asset = Asset;\r\n            return GetClassTypeForAncestry(this.ClassIndex, asset, out modulePath);\r\n        }\r\n\r\n        public static FName GetClassTypeForAncestry(FPackageIndex classIndex, UAsset asset, out FName modulePath)\r\n        {\r\n            modulePath = null;\r\n            if (classIndex.IsNull()) return null;\r\n            if (classIndex.IsExport()) return classIndex.ToExport(asset).ObjectName;\r\n\r\n            var imp = classIndex.ToImport(asset);\r\n            if (imp.OuterIndex.IsImport()) modulePath = imp.OuterIndex.ToImport(asset).ObjectName;\r\n            return imp.ObjectName;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            InitAllFields();\r\n\r\n            var sb = new StringBuilder();\r\n            foreach (var info in _allFields)\r\n            {\r\n                DisplayIndexOrderAttribute attr = ((DisplayIndexOrderAttribute[])info?.GetCustomAttributes(typeof(DisplayIndexOrderAttribute), true))?[0];\r\n                if (attr == null) continue;\r\n                if (Asset is UAsset && !attr.IsTraditional) continue;\r\n\r\n                var value = info.GetValue(this) ?? \"(null)\";\r\n                sb.AppendLine(info.Name + \": \" + value.ToString());\r\n            }\r\n            return sb.ToString();\r\n        }\r\n\r\n        public object Clone()\r\n        {\r\n            var res = (Export)MemberwiseClone();\r\n            res.SerializationBeforeSerializationDependencies = this.SerializationBeforeSerializationDependencies.ToList();\r\n            res.CreateBeforeSerializationDependencies = this.CreateBeforeSerializationDependencies.ToList();\r\n            res.SerializationBeforeCreateDependencies = this.SerializationBeforeCreateDependencies.ToList();\r\n            res.CreateBeforeCreateDependencies = this.CreateBeforeCreateDependencies.ToList();\r\n            res.Extras = (byte[])this.Extras.Clone();\r\n            res.PackageGuid = new Guid(this.PackageGuid.ToByteArray());\r\n            return res;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a child export instance with the same export details as the current export.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\">The type of child export to create.</typeparam>\r\n        /// <returns>An instance of the child export type provided with the export details copied over.</returns>\r\n        public T ConvertToChildExport<T>() where T : Export, new()\r\n        {\r\n            InitAllFields();\r\n\r\n            Export res = new T();\r\n            res.SerializationBeforeSerializationDependencies = this.SerializationBeforeSerializationDependencies.ToList();\r\n            res.CreateBeforeSerializationDependencies = this.CreateBeforeSerializationDependencies.ToList();\r\n            res.SerializationBeforeCreateDependencies = this.SerializationBeforeCreateDependencies.ToList();\r\n            res.CreateBeforeCreateDependencies = this.CreateBeforeCreateDependencies.ToList();\r\n            res.Asset = this.Asset;\r\n            res.Extras = this.Extras;\r\n            foreach (var info in _allFields)\r\n            {\r\n                info.SetValue(res, info.GetValue(this));\r\n            }\r\n            return (T)res;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/ExportTypes/FieldExport.cs",
    "content": "using UAssetAPI.FieldTypes;\r\n\r\nnamespace UAssetAPI.ExportTypes\r\n{\r\n    /// <summary>\r\n    /// Export data for a <see cref=\"UField\"/>.\r\n    /// </summary>\r\n    public class FieldExport : NormalExport\r\n    {\r\n        public UField Field;\r\n\r\n        public FieldExport(Export super) : base(super)\r\n        {\r\n\r\n        }\r\n\r\n        public FieldExport(UAsset asset, byte[] extras) : base(asset, extras)\r\n        {\r\n\r\n        }\r\n\r\n        public FieldExport()\r\n        {\r\n\r\n        }\r\n\r\n        public override void Read(AssetBinaryReader reader, int nextStarting)\r\n        {\r\n            base.Read(reader, nextStarting);\r\n\r\n            Field = new UField();\r\n            Field.Read(reader);\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n\r\n            Field.Write(writer);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/ExportTypes/FunctionExport.cs",
    "content": "using System.IO;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.ExportTypes\r\n{\r\n    /// <summary>\r\n    /// Export data for a blueprint function.\r\n    /// </summary>\r\n    public class FunctionExport : StructExport\r\n    {\r\n        public EFunctionFlags FunctionFlags;\r\n        public FunctionExport(Export super) : base(super)\r\n        {\r\n            Asset = super.Asset;\r\n            Extras = super.Extras;\r\n        }\r\n\r\n        public FunctionExport(UAsset asset, byte[] extras) : base(asset, extras)\r\n        {\r\n\r\n        }\r\n\r\n        public FunctionExport()\r\n        {\r\n\r\n        }\r\n\r\n        public override void Read(AssetBinaryReader reader, int nextStarting)\r\n        {\r\n            base.Read(reader, nextStarting);\r\n            FunctionFlags = (EFunctionFlags)reader.ReadUInt32();\r\n            // TODO\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n            writer.Write((uint)FunctionFlags);\r\n            // TODO\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/ExportTypes/LevelExport.cs",
    "content": "using System.Collections.Generic;\r\nusing UAssetAPI.CustomVersions;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.ExportTypes;\r\n\r\n/// <summary>\r\n/// URL structure.\r\n/// </summary>\r\npublic struct FURL\r\n{\r\n    // Protocol, i.e. \"unreal\" or \"http\".\r\n    public FString Protocol;\r\n    // Optional hostname, i.e. \"204.157.115.40\" or \"unreal.epicgames.com\", blank if local.\r\n    public FString Host;\r\n    // Optional host port.\r\n    public int Port;\r\n    public int Valid;\r\n    // Map name, i.e. \"SkyCity\", default is \"Entry\".\r\n    public FString Map;\r\n    // Options.\r\n    public List<FString> Op;\r\n    // Portal to enter through, default is \"\".\r\n    public FString Portal;\r\n\r\n    public FURL(AssetBinaryReader reader)\r\n    {\r\n        Protocol = reader.ReadFString();\r\n        Host = reader.ReadFString();\r\n        Map = reader.ReadFString();\r\n        Portal = reader.ReadFString();\r\n        var len = reader.ReadInt32();\r\n        Op = new List<FString>(len);\r\n        for (int i = 0; i < len; i++)\r\n        {\r\n            Op.Add(reader.ReadFString());\r\n        }\r\n        Port = reader.ReadInt32();\r\n        Valid = reader.ReadInt32();\r\n    }\r\n\r\n    public int Write(AssetBinaryWriter writer){\r\n\r\n        var offset = writer.BaseStream.Position;\r\n        writer.Write(Protocol);\r\n        writer.Write(Host);\r\n        writer.Write(Map);\r\n        writer.Write(Portal);\r\n        writer.Write(Op.Count);\r\n        for (int i = 0; i < Op.Count; i++)\r\n        {\r\n            writer.Write(Op[i]);\r\n        }\r\n        writer.Write(Port);\r\n        writer.Write(Valid);\r\n        return (int)(writer.BaseStream.Position-offset);\r\n    }\r\n}\r\n\r\npublic class LevelExport : NormalExport\r\n{\r\n    // Owner of TTransArray<AActor> Actors\r\n    public FPackageIndex Owner;\r\n    public List<FPackageIndex> Actors;\r\n    public FURL URL;\r\n    public FPackageIndex Model;\r\n    public List<FPackageIndex> ModelComponents;\r\n    public FPackageIndex LevelScriptActor;\r\n    public FPackageIndex NavListStart;\r\n    public FPackageIndex NavListEnd;\r\n    //public FPrecomputedVisibilityHandler PrecomputedVisibilityHandler;\r\n    //public FPrecomputedVolumeDistanceField PrecomputedVolumeDistanceField;\r\n\r\n    public LevelExport(Export super) : base(super) { }\r\n\r\n    public LevelExport(UAsset asset, byte[] extras) : base(asset, extras) { }\r\n\r\n    public LevelExport(){ } \r\n\r\n    public override void Read(AssetBinaryReader reader, int nextStarting)\r\n    {\r\n        base.Read(reader, nextStarting);\r\n\r\n        if (reader.Asset.GetCustomVersion<FReleaseObjectVersion>() < FReleaseObjectVersion.LevelTransArrayConvertedToTArray)\r\n            Owner = new FPackageIndex(reader);\r\n\r\n        int numIndexEntries = reader.ReadInt32();\r\n\r\n        Actors = new List<FPackageIndex>(numIndexEntries);\r\n        for (int i = 0; i < numIndexEntries; i++) {\r\n            Actors.Add(new FPackageIndex(reader));\r\n        }\r\n        \r\n        URL = new FURL(reader);\r\n\r\n        Model = new FPackageIndex(reader);\r\n        int numModelEntries = reader.ReadInt32();\r\n\r\n        ModelComponents = new List<FPackageIndex>(numModelEntries);\r\n        for (int i = 0; i < numModelEntries; i++)\r\n        {\r\n            ModelComponents.Add(new FPackageIndex(reader));\r\n        }\r\n\r\n        LevelScriptActor = new FPackageIndex(reader);\r\n        NavListStart = new FPackageIndex(reader);\r\n        NavListEnd = new FPackageIndex(reader);\r\n        \r\n        // TODO: Implement the rest of the properties\r\n    }\r\n\r\n    public override void Write(AssetBinaryWriter writer)\r\n    {\r\n        base.Write(writer);\r\n\r\n        if (writer.Asset.GetCustomVersion<FReleaseObjectVersion>() < FReleaseObjectVersion.LevelTransArrayConvertedToTArray)\r\n            Owner.Write(writer);\r\n\r\n        writer.Write(Actors.Count);\r\n        for (int i = 0; i < Actors.Count; i++)\r\n        {\r\n            Actors[i].Write(writer);\r\n        }\r\n\r\n        URL.Write(writer);\r\n\r\n        Model.Write(writer);\r\n        writer.Write(ModelComponents.Count);\r\n        for (int i = 0; i < ModelComponents.Count; i++)\r\n        {\r\n            ModelComponents[i].Write(writer);\r\n        }\r\n\r\n        LevelScriptActor.Write(writer);\r\n        NavListStart.Write(writer);\r\n        NavListEnd.Write(writer);\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/ExportTypes/MetaDataExport.cs",
    "content": "using Newtonsoft.Json;\nusing System.Collections.Generic;\nusing UAssetAPI.CustomVersions;\nusing UAssetAPI.JSON;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.ExportTypes\n{\n    public struct ObjectMetaDataEntry\n    {\n        public int Import;\n        [JsonConverter(typeof(TMapJsonConverter<FName, FString>))]\n        public TMap<FName, FString> MetaData;\n        \n        public ObjectMetaDataEntry(int import, TMap<FName, FString> metaData)\n        {\n            Import = import;\n            MetaData = metaData;\n        }\n    }\n\n    public class MetaDataExport : NormalExport\n    {\n        public List<ObjectMetaDataEntry> ObjectMetaData;\n        [JsonConverter(typeof(TMapJsonConverter<FName, FString>))]\n        public TMap<FName, FString> RootMetaData;\n\n        public MetaDataExport(Export super) : base(super)\n        {\n\n        }\n\n        public MetaDataExport(UAsset asset, byte[] extras) : base(asset, extras)\n        {\n\n        }\n\n        public MetaDataExport()\n        {\n\n        }\n        public override void Read(AssetBinaryReader reader, int nextStarting)\n        {\n            base.Read(reader, nextStarting);\n\n            {\n                ObjectMetaData = [];\n                var objectMetaDataMapCount = reader.ReadInt32();\n                for (var i = 0; i < objectMetaDataMapCount; i++)\n                {\n                    var import = reader.ReadInt32();\n                    var metaDataCount = reader.ReadInt32();\n                    var metaData = new TMap<FName, FString>();\n                    for (var j = 0; j < metaDataCount; j++)\n                    {\n                        var key = reader.ReadFName();\n                        var value = reader.ReadFString();\n                        metaData.Add(key, value);\n                    }\n                    ObjectMetaData.Add(new ObjectMetaDataEntry(import, metaData));\n                }\n            }\n\n            if (reader.Asset.GetCustomVersion<FEditorObjectVersion>() >= FEditorObjectVersion.RootMetaDataSupport)\n            {\n                RootMetaData = [];\n                var rootMetaDataMapCount = reader.ReadInt32();\n                for (var i = 0; i < rootMetaDataMapCount; i++)\n                {\n                    var key = reader.ReadFName();\n                    var value = reader.ReadFString();\n                    RootMetaData.Add(key, value);\n                }\n            }\n        }\n\n        public override void Write(AssetBinaryWriter writer)\n        {\n            base.Write(writer);\n\n            writer.Write(ObjectMetaData.Count);\n            foreach (var entry in ObjectMetaData)\n            {\n                writer.Write(entry.Import);\n                writer.Write(entry.MetaData.Count);\n                foreach (var entry2 in entry.MetaData)\n                {\n                    writer.Write(entry2.Key);\n                    writer.Write(entry2.Value);\n                }\n            }\n\n            if (writer.Asset.GetCustomVersion<FEditorObjectVersion>() >= FEditorObjectVersion.RootMetaDataSupport)\n            {\n                writer.Write(RootMetaData.Count);\n                foreach ((var key, var value) in RootMetaData)\n                {\n                    writer.Write(key);\n                    writer.Write(value);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/ExportTypes/NormalExport.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.Unversioned;\r\n\r\nnamespace UAssetAPI.ExportTypes\r\n{\r\n    /// <summary>\r\n    /// Enum flags that indicate that additional data may be serialized prior to actual tagged property serialization\r\n    /// Those extensions are used to store additional function to control how TPS will resolved. e.g. use overridable serialization\r\n    /// </summary>\r\n    public enum EClassSerializationControlExtension\r\n    {\r\n        NoExtension = 0x00,\r\n        ReserveForFutureUse = 0x01, // Can be use to add a next group of extension\r\n\r\n        ////////////////////////////////////////////////\r\n        // First extension group\r\n        OverridableSerializationInformation = 0x02,\r\n\r\n        //\r\n        // Add more extension for the first group here\r\n        //\r\n    }\r\n\r\n    /// <summary>\r\n    /// A regular export representing a UObject, with no special serialization.\r\n    /// </summary>\r\n    public class NormalExport : Export\r\n    {\r\n        public List<PropertyData> Data;\r\n        public Guid? ObjectGuid;\r\n        public EClassSerializationControlExtension SerializationControl;\r\n        public EOverriddenPropertyOperation Operation;\r\n        public bool HasLeadingFourNullBytes = false;\r\n\r\n        /// <summary>\r\n        /// Gets or sets the value associated with the specified key. This operation loops linearly, so it may not be suitable for high-performance environments.\r\n        /// </summary>\r\n        /// <param name=\"key\">The key associated with the value to get or set.</param>\r\n        public virtual PropertyData this[FName key]\r\n        {\r\n            get\r\n            {\r\n                for (int i = 0; i < Data.Count; i++)\r\n                {\r\n                    if (Data[i].Name == key) return Data[i];\r\n                }\r\n                return null;\r\n            }\r\n            set\r\n            {\r\n                value.Name = key;\r\n\r\n                for (int i = 0; i < Data.Count; i++)\r\n                {\r\n                    if (Data[i].Name == key)\r\n                    {\r\n                        Data[i] = value;\r\n                        return;\r\n                    }\r\n                }\r\n\r\n                Data.Add(value);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the value associated with the specified key. This operation loops linearly, so it may not be suitable for high-performance environments.\r\n        /// </summary>\r\n        /// <param name=\"key\">The key associated with the value to get or set.</param>\r\n        public virtual PropertyData this[string key]\r\n        {\r\n            get\r\n            {\r\n                return this[FName.FromString(Asset, key)];\r\n            }\r\n            set\r\n            {\r\n                this[FName.FromString(Asset, key)] = value;\r\n            }\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Gets or sets the value at the specified index.\r\n        /// </summary>\r\n        /// <param name=\"index\">The index of the value to get or set.</param>\r\n        public PropertyData this[int index]\r\n        {\r\n            get\r\n            {\r\n                return Data[index];\r\n            }\r\n            set\r\n            {\r\n                Data[index] = value;\r\n            }\r\n        }\r\n\r\n        public NormalExport(Export super)\r\n        {\r\n            Asset = super.Asset;\r\n            Extras = super.Extras;\r\n        }\r\n\r\n        public NormalExport(UAsset asset, byte[] extras) : base(asset, extras)\r\n        {\r\n\r\n        }\r\n\r\n        public NormalExport(List<PropertyData> data, UAsset asset, byte[] extras) : base(asset, extras)\r\n        {\r\n            Data = data;\r\n        }\r\n\r\n        public NormalExport()\r\n        {\r\n\r\n        }\r\n\r\n        public override void Read(AssetBinaryReader reader, int nextStarting = 0)\r\n        {\r\n            // 5.4-specific problem; unclear why this occurs\r\n            if (reader.Asset.ObjectVersionUE5 > ObjectVersionUE5.DATA_RESOURCES && reader.Asset.ObjectVersionUE5 < ObjectVersionUE5.ASSETREGISTRY_PACKAGEBUILDDEPENDENCIES && !ObjectFlags.HasFlag(EObjectFlags.RF_ClassDefaultObject))\r\n            {\r\n                int dummy = reader.ReadInt32();\r\n                if (dummy == 0)\r\n                {\r\n                    HasLeadingFourNullBytes = true;\r\n                }\r\n                else\r\n                {\r\n                    HasLeadingFourNullBytes = false;\r\n                    reader.BaseStream.Seek(-4, System.IO.SeekOrigin.Current);\r\n                }\r\n            }\r\n\r\n            Data = new List<PropertyData>();\r\n            PropertyData bit;\r\n\r\n            var unversionedHeader = new FUnversionedHeader(reader);\r\n            if (!reader.Asset.HasUnversionedProperties && reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.PROPERTY_TAG_EXTENSION_AND_OVERRIDABLE_SERIALIZATION)\r\n            {\r\n                SerializationControl = (EClassSerializationControlExtension)reader.ReadByte();\r\n\r\n                if (SerializationControl.HasFlag(EClassSerializationControlExtension.OverridableSerializationInformation))\r\n                {\r\n                    Operation = (EOverriddenPropertyOperation)reader.ReadByte();\r\n                }\r\n            }\r\n            FName parentName = GetClassTypeForAncestry(reader.Asset, out FName parentModulePath);\r\n            while ((bit = MainSerializer.Read(reader, null, parentName, parentModulePath, unversionedHeader, true)) != null)\r\n            {\r\n                Data.Add(bit);\r\n            }\r\n\r\n            ObjectGuid = null;\r\n            if (!this.ObjectFlags.HasFlag(EObjectFlags.RF_ClassDefaultObject) && reader.ReadBooleanInt()) ObjectGuid = new Guid(reader.ReadBytes(16));\r\n        }\r\n\r\n        public override void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n        {\r\n            var ancestryNew = (AncestryInfo)ancestrySoFar.Clone();\r\n            ancestryNew.SetAsParent(GetClassTypeForAncestry(asset, out FName modulePath), modulePath);\r\n\r\n            if (Data != null)\r\n            {\r\n                for (int i = 0; i < Data.Count; i++) Data[i]?.ResolveAncestries(asset, ancestryNew);\r\n            }\r\n            base.ResolveAncestries(asset, ancestrySoFar);\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            // 5.4-specific problem; unclear why this occurs\r\n            if (HasLeadingFourNullBytes && writer.Asset.ObjectVersionUE5 > ObjectVersionUE5.DATA_RESOURCES && writer.Asset.ObjectVersionUE5 < ObjectVersionUE5.ASSETREGISTRY_PACKAGEBUILDDEPENDENCIES && !ObjectFlags.HasFlag(EObjectFlags.RF_ClassDefaultObject))\r\n            {\r\n                writer.Write((int)0); // \"false\" bool?\r\n            }\r\n\r\n            FName parentName = GetClassTypeForAncestry(writer.Asset, out FName parentModulePath);\r\n\r\n            MainSerializer.GenerateUnversionedHeader(ref Data, parentName, parentModulePath, writer.Asset)?.Write(writer);\r\n\r\n            if (!writer.Asset.HasUnversionedProperties && writer.Asset.ObjectVersionUE5 >= ObjectVersionUE5.PROPERTY_TAG_EXTENSION_AND_OVERRIDABLE_SERIALIZATION)\r\n            {\r\n                writer.Write((byte)SerializationControl);\r\n\r\n                if (SerializationControl.HasFlag(EClassSerializationControlExtension.OverridableSerializationInformation))\r\n                {\r\n                    writer.Write((byte)Operation);\r\n                }\r\n            }\r\n\r\n            for (int j = 0; j < Data.Count; j++)\r\n            {\r\n                PropertyData current = Data[j];\r\n                MainSerializer.Write(current, writer, true);\r\n            }\r\n            if (!writer.Asset.HasUnversionedProperties) writer.Write(new FName(writer.Asset, \"None\"));\r\n\r\n            if (this.ObjectFlags.HasFlag(EObjectFlags.RF_ClassDefaultObject)) return;\r\n            if (ObjectGuid == null)\r\n            {\r\n                writer.Write((int)0);\r\n            }\r\n            else\r\n            {\r\n                writer.Write((int)1);\r\n                writer.Write(((Guid)ObjectGuid).ToByteArray());\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/ExportTypes/PropertyExport.cs",
    "content": "using System.Linq;\r\nusing UAssetAPI.FieldTypes;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.ExportTypes\r\n{\r\n    /// <summary>\r\n    /// Export data for a <see cref=\"UProperty\"/>.\r\n    /// </summary>\r\n    public class PropertyExport : NormalExport\r\n    {\r\n        public UProperty Property;\r\n\r\n        public PropertyExport(Export super) : base(super)\r\n        {\r\n\r\n        }\r\n\r\n        public PropertyExport(UAsset asset, byte[] extras) : base(asset, extras)\r\n        {\r\n\r\n        }\r\n\r\n        public PropertyExport()\r\n        {\r\n\r\n        }\r\n\r\n        public override void Read(AssetBinaryReader reader, int nextStarting)\r\n        {\r\n            base.Read(reader, nextStarting);\r\n\r\n            FName exportClassType = this.GetExportClassType();\r\n            Property = MainSerializer.ReadUProperty(reader, exportClassType);\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n\r\n            MainSerializer.WriteUProperty(Property, writer);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/ExportTypes/RawExport.cs",
    "content": "using System.IO;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.ExportTypes\r\n{\r\n    /// <summary>\r\n    /// An export that could not be properly parsed by UAssetAPI, and is instead represented as an array of bytes as a fallback.\r\n    /// </summary>\r\n    public class RawExport : Export\r\n    {\r\n        public byte[] Data;\r\n\r\n        public RawExport(Export super)\r\n        {\r\n            Asset = super.Asset;\r\n            Extras = super.Extras;\r\n        }\r\n\r\n        public RawExport(byte[] data, UAsset asset, byte[] extras) : base(asset, extras)\r\n        {\r\n            Data = data;\r\n        }\r\n\r\n        public RawExport()\r\n        {\r\n\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            writer.Write(Data);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/ExportTypes/StringTableExport.cs",
    "content": "using Newtonsoft.Json;\r\nusing System.Linq;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.ExportTypes\r\n{\r\n    /// <summary>\r\n    /// A string table. Holds Key->SourceString pairs of text.\r\n    /// </summary>\r\n    public class FStringTable : TMap<FString, FString>\r\n    {\r\n        [JsonProperty]\r\n        public FString TableNamespace;\r\n\r\n        public FStringTable(FString tableNamespace) : base()\r\n        {\r\n            TableNamespace = tableNamespace;\r\n        }\r\n\r\n        public FStringTable() : base()\r\n        {\r\n\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Export data for a string table. See <see cref=\"FStringTable\"/>.\r\n    /// </summary>\r\n    public class StringTableExport : NormalExport\r\n    {\r\n        [JsonProperty]\r\n        public FStringTable Table;\r\n\r\n        public StringTableExport(Export super) : base(super)\r\n        {\r\n\r\n        }\r\n\r\n        public StringTableExport(FStringTable data, UAsset asset, byte[] extras) : base(asset, extras)\r\n        {\r\n            Table = data;\r\n        }\r\n\r\n        public StringTableExport()\r\n        {\r\n\r\n        }\r\n\r\n        public override void Read(AssetBinaryReader reader, int nextStarting)\r\n        {\r\n            base.Read(reader, nextStarting);\r\n\r\n            Table = new FStringTable(reader.ReadFString());\r\n\r\n            int numEntries = reader.ReadInt32();\r\n            for (int i = 0; i < numEntries; i++)\r\n            {\r\n                Table.Add(reader.ReadFString(), reader.ReadFString());\r\n            }\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n\r\n            writer.Write(Table.TableNamespace);\r\n            writer.Write(Table.Count);\r\n            for (int i = 0; i < Table.Count; i++)\r\n            {\r\n                writer.Write(Table.Keys.ElementAt(i));\r\n                writer.Write(Table[i]);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/ExportTypes/StructExport.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing UAssetAPI.CustomVersions;\r\nusing UAssetAPI.FieldTypes;\r\nusing UAssetAPI.Kismet.Bytecode;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\n#if DEBUGVERBOSE\r\nusing System.Diagnostics;\r\n#endif\r\n\r\nnamespace UAssetAPI.ExportTypes\r\n{\r\n    /// <summary>\r\n    /// Base export for all UObject types that contain fields.\r\n    /// </summary>\r\n    public class StructExport : FieldExport\r\n    {\r\n        /// <summary>\r\n        /// Struct this inherits from, may be null\r\n        /// </summary>\r\n        public FPackageIndex SuperStruct;\r\n\r\n        /// <summary>\r\n        /// List of child fields\r\n        /// </summary>\r\n        public FPackageIndex[] Children;\r\n\r\n        /// <summary>\r\n        /// Properties serialized with this struct definition\r\n        /// </summary>\r\n        public FProperty[] LoadedProperties;\r\n\r\n        /// <summary>\r\n        /// The bytecode instructions contained within this struct.\r\n        /// </summary>\r\n        public KismetExpression[] ScriptBytecode;\r\n\r\n        /// <summary>\r\n        /// Bytecode size in total in deserialized memory. Filled out in lieu of <see cref=\"ScriptBytecode\"/> if an error occurs during bytecode parsing.\r\n        /// </summary>\r\n        public int ScriptBytecodeSize;\r\n\r\n        /// <summary>\r\n        /// Raw binary bytecode data. Filled out in lieu of <see cref=\"ScriptBytecode\"/> if an error occurs during bytecode parsing.\r\n        /// </summary>\r\n        public byte[] ScriptBytecodeRaw;\r\n\r\n        public StructExport(Export super) : base(super)\r\n        {\r\n\r\n        }\r\n\r\n        public StructExport(UAsset asset, byte[] extras) : base(asset, extras)\r\n        {\r\n\r\n        }\r\n\r\n        public StructExport()\r\n        {\r\n\r\n        }\r\n\r\n        public override void Read(AssetBinaryReader reader, int nextStarting)\r\n        {\r\n            base.Read(reader, nextStarting);\r\n\r\n            SuperStruct = new FPackageIndex(reader.ReadInt32());\r\n\r\n            if (Asset.GetCustomVersion<FFrameworkObjectVersion>() < FFrameworkObjectVersion.RemoveUField_Next)\r\n            {\r\n                var firstChild = new FPackageIndex(reader.ReadInt32());\r\n                Children = firstChild.IsNull() ? Array.Empty<FPackageIndex>() : new[] { firstChild };\r\n            }\r\n            else\r\n            {\r\n                int numIndexEntries = reader.ReadInt32();\r\n                Children = new FPackageIndex[numIndexEntries];\r\n                for (int i = 0; i < numIndexEntries; i++)\r\n                {\r\n                    Children[i] = new FPackageIndex(reader.ReadInt32());\r\n                }\r\n            }\r\n\r\n            if (Asset.GetCustomVersion<FCoreObjectVersion>() >= FCoreObjectVersion.FProperties)\r\n            {\r\n                int numProps = reader.ReadInt32();\r\n                LoadedProperties = new FProperty[numProps];\r\n                for (int i = 0; i < numProps; i++)\r\n                {\r\n                    LoadedProperties[i] = MainSerializer.ReadFProperty(reader);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                LoadedProperties = [];\r\n            }\r\n\r\n            ScriptBytecodeSize = reader.ReadInt32(); // # of bytes in total in deserialized memory\r\n            int scriptStorageSize = reader.ReadInt32(); // # of bytes in total\r\n            long startedReading = reader.BaseStream.Position;\r\n\r\n            bool willParseRaw = true;\r\n#pragma warning disable CS0168 // Variable is declared but never used\r\n            try\r\n            {\r\n                if (!Asset.CustomSerializationFlags.HasFlag(CustomSerializationFlags.SkipParsingBytecode))\r\n                {\r\n                    var tempCode = new List<Kismet.Bytecode.KismetExpression>();\r\n                    while ((reader.BaseStream.Position - startedReading) < scriptStorageSize)\r\n                    {\r\n                        tempCode.Add(ExpressionSerializer.ReadExpression(reader));\r\n                    }\r\n                    ScriptBytecode = tempCode.ToArray();\r\n                    willParseRaw = false;\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n#if DEBUGVERBOSE\r\n                Debug.WriteLine(ex.StackTrace);\r\n#endif\r\n            }\r\n#pragma warning restore CS0168 // Variable is declared but never used\r\n\r\n            if (willParseRaw)\r\n            {\r\n                reader.BaseStream.Seek(startedReading, SeekOrigin.Begin);\r\n                ScriptBytecode = null;\r\n                ScriptBytecodeRaw = reader.ReadBytes(scriptStorageSize);\r\n            }\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n\r\n            writer.Write(SuperStruct.Index);\r\n\r\n            if (Asset.GetCustomVersion<FFrameworkObjectVersion>() < FFrameworkObjectVersion.RemoveUField_Next)\r\n            {\r\n                if (Children.Length == 0) \r\n                {\r\n                    writer.Write(0);\r\n                }\r\n                else\r\n                {\r\n                    writer.Write(Children[0].Index);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                writer.Write(Children.Length);\r\n                for (int i = 0; i < Children.Length; i++)\r\n                {\r\n                    writer.Write(Children[i].Index);\r\n                }\r\n            }\r\n\r\n            if (Asset.GetCustomVersion<FCoreObjectVersion>() >= FCoreObjectVersion.FProperties)\r\n            {\r\n                writer.Write(LoadedProperties.Length);\r\n                for (int i = 0; i < LoadedProperties.Length; i++)\r\n                {\r\n                    MainSerializer.WriteFProperty(LoadedProperties[i], writer);\r\n                }\r\n            }\r\n\r\n            if (ScriptBytecode == null)\r\n            {\r\n                writer.Write(ScriptBytecodeSize);\r\n                writer.Write(ScriptBytecodeRaw.Length);\r\n                writer.Write(ScriptBytecodeRaw);\r\n            }\r\n            else\r\n            {\r\n                long lengthOffset1 = writer.BaseStream.Position;\r\n                writer.Write((int)0); // total iCode offset; to be filled out after serialization\r\n                long lengthOffset2 = writer.BaseStream.Position;\r\n                writer.Write((int)0); // size on disk; to be filled out after serialization\r\n\r\n                int totalICodeOffset = 0;\r\n                long startMetric = writer.BaseStream.Position;\r\n                for (int i = 0; i < ScriptBytecode.Length; i++)\r\n                {\r\n                    totalICodeOffset += ExpressionSerializer.WriteExpression(ScriptBytecode[i], writer);\r\n                }\r\n                long endMetric = writer.BaseStream.Position;\r\n\r\n                // Write out total size in bytes\r\n                long totalLength = endMetric - startMetric;\r\n                long here = writer.BaseStream.Position;\r\n                writer.Seek((int)lengthOffset1, SeekOrigin.Begin);\r\n                writer.Write(totalICodeOffset);\r\n                writer.Seek((int)lengthOffset2, SeekOrigin.Begin);\r\n                writer.Write((int)totalLength);\r\n                writer.Seek((int)here, SeekOrigin.Begin);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/ExportTypes/UserDefinedStructExport.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Linq;\r\nusing UAssetAPI.CustomVersions;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.Unversioned;\r\n\r\nnamespace UAssetAPI.ExportTypes;\r\n\r\npublic class UserDefinedStructExport : StructExport\r\n{\r\n    public uint StructFlags;\r\n    public List<PropertyData> StructData = [];\r\n    public EClassSerializationControlExtension SerializationControl2;\r\n    public EOverriddenPropertyOperation Operation2;\r\n\r\n    public UserDefinedStructExport(Export super) : base(super) { }\r\n\r\n    public UserDefinedStructExport(UAsset asset, byte[] extras) : base(asset, extras) { }\r\n\r\n    public UserDefinedStructExport() { }\r\n\r\n    public override void Read(AssetBinaryReader reader, int nextStarting)\r\n    {\r\n        base.Read(reader, nextStarting);\r\n\r\n        if (reader.Asset.Mappings?.Schemas != null && this.ObjectName?.Value?.Value != null)\r\n        {\r\n            UsmapSchema newSchema = Usmap.GetSchemaFromStructExport(this, reader.Asset.Mappings?.AreFNamesCaseInsensitive ?? true);\r\n            reader.Asset.Mappings.Schemas[this.ObjectName.Value.Value] = newSchema;\r\n        }\r\n\r\n        if (reader.Asset.GetCustomVersion<FFrameworkObjectVersion>() < FFrameworkObjectVersion.UserDefinedStructsStoreDefaultInstance\r\n            || (Data.FirstOrDefault(x => x.Name.Value.Value == \"Status\") is BytePropertyData byteprop && byteprop.EnumValue?.Value.Value != \"UDSS_UpToDate\"))\r\n            return;\r\n\r\n        if (this.ObjectFlags.HasFlag(EObjectFlags.RF_ClassDefaultObject)) return;\r\n\r\n        StructFlags = reader.ReadUInt32();\r\n\r\n        PropertyData bit;\r\n        var unversionedHeader = new FUnversionedHeader(reader);\r\n        while ((bit = MainSerializer.Read(reader, null, this.ObjectName, FName.DefineDummy(reader.Asset, reader.Asset.InternalAssetPath), unversionedHeader, true)) != null)\r\n        {\r\n            StructData.Add(bit);\r\n        }\r\n    }\r\n\r\n    public override void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n    {\r\n        var ancestryNew = (AncestryInfo)ancestrySoFar.Clone();\r\n        ancestryNew.SetAsParent(this.ObjectName, null);\r\n\r\n        if (StructData != null)\r\n        {\r\n            for (int i = 0; i < StructData.Count; i++) StructData[i]?.ResolveAncestries(asset, ancestryNew);\r\n        }\r\n        base.ResolveAncestries(asset, ancestrySoFar);\r\n    }\r\n\r\n    public override void Write(AssetBinaryWriter writer)\r\n    {\r\n        base.Write(writer);\r\n\r\n        if (writer.Asset.GetCustomVersion<FFrameworkObjectVersion>() < FFrameworkObjectVersion.UserDefinedStructsStoreDefaultInstance\r\n            || (Data.FirstOrDefault(x => x.Name.Value.Value == \"Status\") is BytePropertyData byteprop && byteprop.EnumValue?.Value.Value != \"UDSS_UpToDate\"))\r\n            return;\r\n\r\n        if (this.ObjectFlags.HasFlag(EObjectFlags.RF_ClassDefaultObject)) return;\r\n\r\n        writer.Write(StructFlags);\r\n\r\n        MainSerializer.GenerateUnversionedHeader(ref StructData, this.ObjectName, FName.DefineDummy(writer.Asset, writer.Asset.InternalAssetPath), writer.Asset)?.Write(writer);\r\n        for (int j = 0; j < StructData.Count; j++)\r\n        {\r\n            PropertyData current = StructData[j];\r\n            MainSerializer.Write(current, writer, true);\r\n        }\r\n        if (!writer.Asset.HasUnversionedProperties) writer.Write(new FName(writer.Asset, \"None\"));\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/FieldTypes/EArrayDim.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.FieldTypes\r\n{\r\n    /// <summary>\r\n    /// The type of array that this property represents. This is represented an integer in the engine.\r\n    /// </summary>\r\n    public enum EArrayDim : int\r\n    {\r\n        NotAnArray = 0,\r\n        TArray = 1,\r\n        CArray = 2\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/FieldTypes/ELifetimeCondition.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.FieldTypes\r\n{\r\n    /// <summary>Secondary condition to check before considering the replication of a lifetime property.</summary>\r\n    public enum ELifetimeCondition : byte\r\n    {\r\n        /// <summary>This property has no condition, and will send anytime it changes</summary>\r\n        COND_None = 0,\r\n        /// <summary>This property will only attempt to send on the initial bunch</summary>\r\n        COND_InitialOnly = 1,\r\n        /// <summary>This property will only send to the actor's owner</summary>\r\n        COND_OwnerOnly = 2,\r\n        /// <summary>This property send to every connection EXCEPT the owner</summary>\r\n        COND_SkipOwner = 3,\r\n        /// <summary>This property will only send to simulated actors</summary>\r\n        COND_SimulatedOnly = 4,\r\n        /// <summary>This property will only send to autonomous actors</summary>\r\n        COND_AutonomousOnly = 5,\r\n        /// <summary>This property will send to simulated OR bRepPhysics actors</summary>\r\n        COND_SimulatedOrPhysics = 6,\r\n        /// <summary>This property will send on the initial packet, or to the actors owner</summary>\r\n        COND_InitialOrOwner = 7,\r\n        /// <summary>This property has no particular condition, but wants the ability to toggle on/off via SetCustomIsActiveOverride</summary>\r\n        COND_Custom = 8,\r\n        /// <summary>This property will only send to the replay connection, or to the actors owner</summary>\r\n        COND_ReplayOrOwner = 9,\r\n        /// <summary>This property will only send to the replay connection</summary>\r\n        COND_ReplayOnly = 10,\r\n        /// <summary>This property will send to actors only, but not to replay connections</summary>\r\n        COND_SimulatedOnlyNoReplay = 11,\r\n        /// <summary>This property will send to simulated Or bRepPhysics actors, but not to replay connections</summary>\r\n        COND_SimulatedOrPhysicsNoReplay = 12,\r\n        /// <summary>This property will not send to the replay connection</summary>\r\n        COND_SkipReplay = 13,\r\n        /// <summary>This property will never be replicated</summary>\r\n        COND_Never = 15,\r\n        COND_Max = 16\r\n    };\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/FieldTypes/FField.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Text.Json.Serialization;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.Unversioned;\r\n\r\nnamespace UAssetAPI.FieldTypes\r\n{\r\n    /// <summary>\r\n    /// Base class of reflection data objects.\r\n    /// </summary>\r\n    public class FField\r\n    {\r\n        public FName SerializedType;\r\n        public FName Name;\r\n        public EObjectFlags Flags;\r\n        public TMap<FName, FString> MetaDataMap;\r\n\r\n        public virtual void Read(AssetBinaryReader reader)\r\n        {\r\n            Name = reader.ReadFName();\r\n            Flags = (EObjectFlags)reader.ReadUInt32();\r\n\r\n            if (!reader.Asset.IsFilterEditorOnly && !reader.Asset.PackageFlags.HasFlag(EPackageFlags.PKG_Cooked))\r\n            {\r\n                bool bHasMetaData = reader.ReadBooleanInt();\r\n                if (bHasMetaData)\r\n                {\r\n                    MetaDataMap = new TMap<FName, FString>();\r\n                    int leng = reader.ReadInt32();\r\n                    for (int i = 0; i < leng; i++)\r\n                    {\r\n                        FName key = reader.ReadFName();\r\n                        FString val = reader.ReadFString();\r\n                        MetaDataMap.Add(key, val);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        public virtual void Write(AssetBinaryWriter writer)\r\n        {\r\n            writer.Write(Name);\r\n            writer.Write((uint)Flags);\r\n\r\n            if (!writer.Asset.IsFilterEditorOnly && !writer.Asset.PackageFlags.HasFlag(EPackageFlags.PKG_Cooked))\r\n            {\r\n                writer.Write(MetaDataMap is not null ? 1 : 0); // int32\r\n                if (MetaDataMap is not null && MetaDataMap.Count > 0)\r\n                {\r\n                    writer.Write(MetaDataMap.Count); // int32\r\n                    for (int i = 0; i < MetaDataMap.Count; i++)\r\n                    {\r\n                        var pair = MetaDataMap.GetItem(i);\r\n                        writer.Write(pair.Key);\r\n                        writer.Write(pair.Value);\r\n                    }\r\n                }\r\n\r\n            }\r\n        }\r\n\r\n        public FField()\r\n        {\r\n\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// An UnrealScript variable.\r\n    /// </summary>\r\n    public abstract class FProperty : FField\r\n    {\r\n        public EArrayDim ArrayDim;\r\n        public int ElementSize;\r\n        public EPropertyFlags PropertyFlags;\r\n        public ushort RepIndex;\r\n        public FName RepNotifyFunc;\r\n        public ELifetimeCondition BlueprintReplicationCondition;\r\n\r\n        public object RawValue;\r\n\r\n        public void SetObject(object value)\r\n        {\r\n            RawValue = value;\r\n        }\r\n\r\n        public T GetObject<T>()\r\n        {\r\n            return (T)RawValue;\r\n        }\r\n\r\n        [JsonIgnore]\r\n        public IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides = new Dictionary<string, EPropertyType>()\r\n        {\r\n            { \"MulticastInlineDelegateProperty\", EPropertyType.MulticastDelegateProperty },\r\n            { \"ClassProperty\", EPropertyType.ObjectProperty },\r\n            { \"SoftClassProperty\", EPropertyType.SoftObjectProperty }\r\n        };\r\n\r\n        public EPropertyType GetUsmapPropertyType()\r\n        {\r\n            EPropertyType res = EPropertyType.Unknown;\r\n            if (UsmapPropertyTypeOverrides.TryGetValue(SerializedType.Value.Value, out res)) return res;\r\n            if (Enum.TryParse(SerializedType.Value.Value, out res)) return res;\r\n            return res;\r\n        }\r\n\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n            ArrayDim = (EArrayDim)reader.ReadInt32();\r\n            ElementSize = reader.ReadInt32();\r\n            PropertyFlags = (EPropertyFlags)reader.ReadUInt64();\r\n            RepIndex = reader.ReadUInt16();\r\n            RepNotifyFunc = reader.ReadFName();\r\n            BlueprintReplicationCondition = (ELifetimeCondition)reader.ReadByte();\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n            writer.Write((int)ArrayDim);\r\n            writer.Write(ElementSize);\r\n            writer.Write((ulong)PropertyFlags);\r\n            writer.Write(RepIndex);\r\n            writer.Write(RepNotifyFunc);\r\n            writer.Write((byte)BlueprintReplicationCondition);\r\n        }\r\n\r\n        public FProperty()\r\n        {\r\n\r\n        }\r\n    }\r\n\r\n    public class FEnumProperty : FProperty\r\n    {\r\n        ///<summary>A pointer to the UEnum represented by this property</summary>\r\n        public FPackageIndex Enum;\r\n        ///<summary>The FNumericProperty which represents the underlying type of the enum</summary>\r\n        public FProperty UnderlyingProp;\r\n\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n\r\n            Enum = new FPackageIndex(reader.ReadInt32());\r\n            UnderlyingProp = MainSerializer.ReadFProperty(reader);\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n\r\n            writer.Write(Enum.Index);\r\n            MainSerializer.WriteFProperty(UnderlyingProp, writer);\r\n        }\r\n    }\r\n\r\n    public class FArrayProperty : FProperty\r\n    {\r\n        public FProperty Inner;\r\n\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n            Inner = MainSerializer.ReadFProperty(reader);\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n            MainSerializer.WriteFProperty(Inner, writer);\r\n        }\r\n    }\r\n\r\n    public class FSetProperty : FProperty\r\n    {\r\n        public FProperty ElementProp;\r\n\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n            ElementProp = MainSerializer.ReadFProperty(reader);\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n            MainSerializer.WriteFProperty(ElementProp, writer);\r\n        }\r\n    }\r\n\r\n    public class FObjectProperty : FProperty\r\n    {\r\n        // UClass*\r\n        public FPackageIndex PropertyClass;\r\n\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n            PropertyClass = new FPackageIndex(reader.ReadInt32());\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n            writer.Write(PropertyClass.Index);\r\n        }\r\n    }\r\n\r\n    public class FSoftObjectProperty : FObjectProperty\r\n    {\r\n\r\n    }\r\n\r\n    public class FWeakObjectProperty : FObjectProperty\r\n    {\r\n\r\n    }\r\n\r\n    public class FClassProperty : FObjectProperty\r\n    {\r\n        // UClass*\r\n        public FPackageIndex MetaClass;\r\n\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n            MetaClass = new FPackageIndex(reader.ReadInt32());\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n            writer.Write(MetaClass.Index);\r\n        }\r\n    }\r\n\r\n    public class FSoftClassProperty : FObjectProperty\r\n    {\r\n        // UClass*\r\n        public FPackageIndex MetaClass;\r\n\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n            MetaClass = new FPackageIndex(reader.ReadInt32());\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n            writer.Write(MetaClass.Index);\r\n        }\r\n    }\r\n\r\n    public class FDelegateProperty : FProperty\r\n    {\r\n        // UFunction*\r\n        public FPackageIndex SignatureFunction;\r\n\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n            SignatureFunction = new FPackageIndex(reader.ReadInt32());\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n            writer.Write(SignatureFunction.Index);\r\n        }\r\n    }\r\n\r\n    public class FMulticastDelegateProperty : FDelegateProperty\r\n    {\r\n\r\n    }\r\n\r\n    public class FMulticastInlineDelegateProperty : FMulticastDelegateProperty\r\n    {\r\n\r\n    }\r\n\r\n    public class FInterfaceProperty : FProperty\r\n    {\r\n        // UFunction*\r\n        public FPackageIndex InterfaceClass;\r\n\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n            InterfaceClass = new FPackageIndex(reader.ReadInt32());\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n            writer.Write(InterfaceClass.Index);\r\n        }\r\n    }\r\n\r\n    public class FMapProperty : FProperty\r\n    {\r\n        public FProperty KeyProp;\r\n        public FProperty ValueProp;\r\n\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n            KeyProp = MainSerializer.ReadFProperty(reader);\r\n            ValueProp = MainSerializer.ReadFProperty(reader);\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n            MainSerializer.WriteFProperty(KeyProp, writer);\r\n            MainSerializer.WriteFProperty(ValueProp, writer);\r\n        }\r\n    }\r\n\r\n    public class FBoolProperty : FProperty\r\n    {\r\n        /// <summary>Size of the bitfield/bool property. Equal to ElementSize but used to check if the property has been properly initialized (0-8, where 0 means uninitialized).</summary>\r\n        public byte FieldSize;\r\n        /// <summary>Offset from the memeber variable to the byte of the property (0-7).</summary>\r\n        public byte ByteOffset;\r\n        /// <summary>Mask of the byte with the property value.</summary>\r\n        public byte ByteMask;\r\n        /// <summary>Mask of the field with the property value. Either equal to ByteMask or 255 in case of 'bool' type.</summary>\r\n        public byte FieldMask;\r\n\r\n        public bool NativeBool;\r\n        public bool Value;\r\n\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n\r\n            byte BoolSize = (byte)ElementSize;\r\n            FieldSize = reader.ReadByte();\r\n            ByteOffset = reader.ReadByte();\r\n            ByteMask = reader.ReadByte();\r\n            FieldMask = reader.ReadByte();\r\n            NativeBool = reader.ReadBoolean();\r\n            Value = reader.ReadBoolean();\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n            writer.Write(FieldSize);\r\n            writer.Write(ByteOffset);\r\n            writer.Write(ByteMask);\r\n            writer.Write(FieldMask);\r\n            writer.Write(NativeBool);\r\n            writer.Write(Value);\r\n        }\r\n    }\r\n\r\n    public class FByteProperty : FProperty\r\n    {\r\n        /// <summary>A pointer to the UEnum represented by this property</summary>\r\n        public FPackageIndex Enum;\r\n\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n            Enum = new FPackageIndex(reader.ReadInt32());\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n            writer.Write(Enum.Index);\r\n        }\r\n    }\r\n\r\n    public class FStructProperty : FProperty\r\n    {\r\n        // UScriptStruct*\r\n        public FPackageIndex Struct;\r\n\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n            Struct = new FPackageIndex(reader.ReadInt32());\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n            writer.Write(Struct.Index);\r\n        }\r\n    }\r\n\r\n    public class FNumericProperty : FProperty\r\n    {\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// This is a UAssetAPI-specific property that represents anything that we don't have special serialization for\r\n    /// </summary>\r\n    public class FGenericProperty : FProperty\r\n    {\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n        }\r\n    }\r\n\r\n    public class FOptionalProperty : FProperty\r\n    {\r\n        public FProperty ValueProperty;\r\n\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n            ValueProperty = MainSerializer.ReadFProperty(reader);\r\n        }\r\n\r\n        public override void Write(AssetBinaryWriter writer)\r\n        {\r\n            base.Write(writer);\r\n            MainSerializer.WriteFProperty(ValueProperty, writer);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/FieldTypes/UField.cs",
    "content": "﻿using UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\nusing UAssetAPI.CustomVersions;\r\nusing UAssetAPI.Unversioned;\r\n\r\nnamespace UAssetAPI.FieldTypes;\r\n\r\n/// <summary>\r\n/// Base class of reflection data objects.\r\n/// </summary>\r\npublic class UField\r\n{\r\n    /// <summary>\r\n    /// Next Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n    /// </summary>\r\n    [DisplayIndexOrder(0)]\r\n    public FPackageIndex Next;\r\n\r\n    public virtual void Read(AssetBinaryReader reader)\r\n    {\r\n        if (reader.Asset.GetCustomVersion<FFrameworkObjectVersion>() < FFrameworkObjectVersion.RemoveUField_Next)\r\n        {\r\n            Next = new FPackageIndex(reader.ReadInt32());\r\n        }\r\n    }\r\n\r\n    public virtual void Write(AssetBinaryWriter writer)\r\n    {\r\n        if (writer.Asset.GetCustomVersion<FFrameworkObjectVersion>() < FFrameworkObjectVersion.RemoveUField_Next)\r\n        {\r\n            writer.Write(Next.Index);\r\n        }\r\n    }\r\n\r\n    public UField() { }\r\n}\r\n\r\n/// <summary>\r\n/// An UnrealScript variable.\r\n/// </summary>\r\npublic abstract class UProperty : UField\r\n{\r\n    [DisplayIndexOrder(1)]\r\n    public EArrayDim ArrayDim;\r\n    [DisplayIndexOrder(2)]\r\n    public int ElementSize;\r\n    [DisplayIndexOrder(3)]\r\n    public EPropertyFlags PropertyFlags;\r\n    [DisplayIndexOrder(4)]\r\n    public FName RepNotifyFunc;\r\n    [DisplayIndexOrder(5)]\r\n    public ELifetimeCondition BlueprintReplicationCondition;\r\n\r\n    public object RawValue;\r\n\r\n    public void SetObject(object value)\r\n    {\r\n        RawValue = value;\r\n    }\r\n\r\n    public T GetObject<T>()\r\n    {\r\n        return (T)RawValue;\r\n    }\r\n\r\n    public override void Read(AssetBinaryReader reader)\r\n    {\r\n        base.Read(reader);\r\n        ArrayDim = (EArrayDim)reader.ReadInt32();\r\n        PropertyFlags = (EPropertyFlags)reader.ReadUInt64();\r\n        RepNotifyFunc = reader.ReadFName();\r\n\r\n        if (reader.Asset.GetCustomVersion<FReleaseObjectVersion>() >= FReleaseObjectVersion.PropertiesSerializeRepCondition)\r\n        {\r\n            BlueprintReplicationCondition = (ELifetimeCondition)reader.ReadByte();\r\n        }\r\n    }\r\n\r\n    public override void Write(AssetBinaryWriter writer)\r\n    {\r\n        base.Write(writer);\r\n        writer.Write((int)ArrayDim);\r\n        writer.Write((ulong)PropertyFlags);\r\n        writer.Write(RepNotifyFunc);\r\n\r\n        if (writer.Asset.GetCustomVersion<FReleaseObjectVersion>() >= FReleaseObjectVersion.PropertiesSerializeRepCondition)\r\n        {\r\n            writer.Write((byte)BlueprintReplicationCondition);\r\n        }\r\n    }\r\n\r\n    public UProperty() { }\r\n\r\n    public EPropertyType GetUsmapPropertyType()\r\n    {\r\n        return this switch\r\n        {\r\n            UEnumProperty => EPropertyType.EnumProperty,\r\n            UByteProperty => EPropertyType.ByteProperty,\r\n            UBoolProperty => EPropertyType.BoolProperty,\r\n            UInt8Property => EPropertyType.Int8Property,\r\n            UInt16Property => EPropertyType.Int16Property,\r\n            UIntProperty => EPropertyType.IntProperty,\r\n            UInt64Property => EPropertyType.Int64Property,\r\n            UUInt16Property => EPropertyType.UInt16Property,\r\n            UUInt32Property => EPropertyType.UInt32Property,\r\n            UUInt64Property => EPropertyType.UInt64Property,\r\n            UFloatProperty => EPropertyType.FloatProperty,\r\n            UDoubleProperty => EPropertyType.DoubleProperty,\r\n\r\n            UAssetClassProperty => EPropertyType.SoftObjectProperty,\r\n            USoftClassProperty => EPropertyType.SoftObjectProperty,\r\n            UClassProperty => EPropertyType.ObjectProperty,\r\n            UAssetObjectProperty => EPropertyType.AssetObjectProperty,\r\n            UWeakObjectProperty => EPropertyType.WeakObjectProperty,\r\n            ULazyObjectProperty => EPropertyType.LazyObjectProperty,\r\n            USoftObjectProperty => EPropertyType.SoftObjectProperty,\r\n            UObjectProperty => EPropertyType.ObjectProperty,\r\n\r\n            UNameProperty => EPropertyType.NameProperty,\r\n            UStrProperty => EPropertyType.StrProperty,\r\n            UTextProperty => EPropertyType.TextProperty,\r\n\r\n            UInterfaceProperty => EPropertyType.InterfaceProperty,\r\n\r\n            UMulticastDelegateProperty => EPropertyType.MulticastDelegateProperty,\r\n            UDelegateProperty => EPropertyType.DelegateProperty,\r\n\r\n            UMapProperty => EPropertyType.MapProperty,\r\n            USetProperty => EPropertyType.SetProperty,\r\n            UArrayProperty => EPropertyType.ArrayProperty,\r\n            UStructProperty => EPropertyType.StructProperty,\r\n\r\n            _ => EPropertyType.Unknown,\r\n        };\r\n    }\r\n}\r\n\r\npublic class UEnumProperty : UProperty\r\n{\r\n    ///<summary>A pointer to the UEnum represented by this property</summary>\r\n    [DisplayIndexOrder(6)]\r\n    public FPackageIndex Enum;\r\n    ///<summary>The FNumericProperty which represents the underlying type of the enum</summary>\r\n    [DisplayIndexOrder(7)]\r\n    public FPackageIndex UnderlyingProp;\r\n\r\n    public override void Read(AssetBinaryReader reader)\r\n    {\r\n        base.Read(reader);\r\n\r\n        Enum = new FPackageIndex(reader.ReadInt32());\r\n        UnderlyingProp = new FPackageIndex(reader.ReadInt32());\r\n    }\r\n\r\n    public override void Write(AssetBinaryWriter writer)\r\n    {\r\n        base.Write(writer);\r\n\r\n        writer.Write(Enum.Index);\r\n        writer.Write(UnderlyingProp.Index);\r\n    }\r\n}\r\n\r\npublic class UArrayProperty : UProperty\r\n{\r\n    [DisplayIndexOrder(6)]\r\n    public FPackageIndex Inner;\r\n\r\n    public override void Read(AssetBinaryReader reader)\r\n    {\r\n        base.Read(reader);\r\n        Inner = new FPackageIndex(reader.ReadInt32());\r\n    }\r\n\r\n    public override void Write(AssetBinaryWriter writer)\r\n    {\r\n        base.Write(writer);\r\n        writer.Write(Inner.Index);\r\n    }\r\n}\r\n\r\npublic class USetProperty : UProperty\r\n{\r\n    [DisplayIndexOrder(6)]\r\n    public FPackageIndex ElementProp;\r\n\r\n    public override void Read(AssetBinaryReader reader)\r\n    {\r\n        base.Read(reader);\r\n        ElementProp = new FPackageIndex(reader.ReadInt32());\r\n    }\r\n\r\n    public override void Write(AssetBinaryWriter writer)\r\n    {\r\n        base.Write(writer);\r\n        writer.Write(ElementProp.Index);\r\n    }\r\n}\r\n\r\npublic class UObjectProperty : UProperty\r\n{\r\n    // UClass*\r\n    [DisplayIndexOrder(6)]\r\n    public FPackageIndex PropertyClass;\r\n\r\n    public override void Read(AssetBinaryReader reader)\r\n    {\r\n        base.Read(reader);\r\n        PropertyClass = new FPackageIndex(reader.ReadInt32());\r\n    }\r\n\r\n    public override void Write(AssetBinaryWriter writer)\r\n    {\r\n        base.Write(writer);\r\n        writer.Write(PropertyClass.Index);\r\n    }\r\n}\r\n\r\npublic class UWeakObjectProperty : UObjectProperty { }\r\n\r\npublic class USoftObjectProperty : UObjectProperty { }\r\n\r\npublic class ULazyObjectProperty : UObjectProperty { }\r\n\r\npublic class UAssetObjectProperty : UObjectProperty { }\r\n\r\npublic class UClassProperty : UObjectProperty\r\n{\r\n    // UClass*\r\n    [DisplayIndexOrder(7)]\r\n    public FPackageIndex MetaClass;\r\n\r\n    public override void Read(AssetBinaryReader reader)\r\n    {\r\n        base.Read(reader);\r\n        MetaClass = new FPackageIndex(reader.ReadInt32());\r\n    }\r\n\r\n    public override void Write(AssetBinaryWriter writer)\r\n    {\r\n        base.Write(writer);\r\n        writer.Write(MetaClass.Index);\r\n    }\r\n}\r\n\r\npublic class UAssetClassProperty : UObjectProperty\r\n{\r\n    // UClass*\r\n    [DisplayIndexOrder(7)]\r\n    public FPackageIndex MetaClass;\r\n\r\n    public override void Read(AssetBinaryReader reader)\r\n    {\r\n        base.Read(reader);\r\n        MetaClass = new FPackageIndex(reader.ReadInt32());\r\n    }\r\n\r\n    public override void Write(AssetBinaryWriter writer)\r\n    {\r\n        base.Write(writer);\r\n        writer.Write(MetaClass.Index);\r\n    }\r\n}\r\n\r\npublic class USoftClassProperty : UObjectProperty\r\n{\r\n    // UClass*\r\n    [DisplayIndexOrder(7)]\r\n    public FPackageIndex MetaClass;\r\n\r\n    public override void Read(AssetBinaryReader reader)\r\n    {\r\n        base.Read(reader);\r\n        MetaClass = new FPackageIndex(reader.ReadInt32());\r\n    }\r\n\r\n    public override void Write(AssetBinaryWriter writer)\r\n    {\r\n        base.Write(writer);\r\n        writer.Write(MetaClass.Index);\r\n    }\r\n}\r\n\r\npublic class UDelegateProperty : UProperty\r\n{\r\n    // UFunction*\r\n    [DisplayIndexOrder(6)]\r\n    public FPackageIndex SignatureFunction;\r\n\r\n    public override void Read(AssetBinaryReader reader)\r\n    {\r\n        base.Read(reader);\r\n        SignatureFunction = new FPackageIndex(reader.ReadInt32());\r\n    }\r\n\r\n    public override void Write(AssetBinaryWriter writer)\r\n    {\r\n        base.Write(writer);\r\n        writer.Write(SignatureFunction.Index);\r\n    }\r\n}\r\n\r\npublic class UMulticastDelegateProperty : UDelegateProperty { }\r\n\r\npublic class UMulticastInlineDelegateProperty : UMulticastDelegateProperty { }\r\n\r\npublic class UMulticastSparseDelegateProperty : UMulticastDelegateProperty { }\r\n\r\npublic class UInterfaceProperty : UProperty\r\n{\r\n    // UFunction*\r\n    [DisplayIndexOrder(6)]\r\n    public FPackageIndex InterfaceClass;\r\n\r\n    public override void Read(AssetBinaryReader reader)\r\n    {\r\n        base.Read(reader);\r\n        InterfaceClass = new FPackageIndex(reader.ReadInt32());\r\n    }\r\n\r\n    public override void Write(AssetBinaryWriter writer)\r\n    {\r\n        base.Write(writer);\r\n        writer.Write(InterfaceClass.Index);\r\n    }\r\n}\r\n\r\npublic class UMapProperty : UProperty\r\n{\r\n    [DisplayIndexOrder(6)]\r\n    public FPackageIndex KeyProp;\r\n    [DisplayIndexOrder(7)]\r\n    public FPackageIndex ValueProp;\r\n\r\n    public override void Read(AssetBinaryReader reader)\r\n    {\r\n        base.Read(reader);\r\n        KeyProp = new FPackageIndex(reader.ReadInt32());\r\n        ValueProp = new FPackageIndex(reader.ReadInt32());\r\n    }\r\n\r\n    public override void Write(AssetBinaryWriter writer)\r\n    {\r\n        base.Write(writer);\r\n        writer.Write(KeyProp.Index);\r\n        writer.Write(ValueProp.Index);\r\n    }\r\n}\r\n\r\npublic class UBoolProperty : UProperty\r\n{\r\n    [DisplayIndexOrder(6)]\r\n    public bool NativeBool;\r\n\r\n    public override void Read(AssetBinaryReader reader)\r\n    {\r\n        base.Read(reader);\r\n\r\n        ElementSize = reader.ReadByte();\r\n        NativeBool = reader.ReadBoolean();\r\n    }\r\n\r\n    public override void Write(AssetBinaryWriter writer)\r\n    {\r\n        base.Write(writer);\r\n        writer.Write((byte)ElementSize);\r\n        writer.Write(NativeBool);\r\n    }\r\n}\r\n\r\npublic class UByteProperty : UProperty\r\n{\r\n    /// <summary>A pointer to the UEnum represented by this property</summary>\r\n    [DisplayIndexOrder(6)]\r\n    public FPackageIndex Enum;\r\n\r\n    public override void Read(AssetBinaryReader reader)\r\n    {\r\n        base.Read(reader);\r\n        Enum = new FPackageIndex(reader.ReadInt32());\r\n    }\r\n\r\n    public override void Write(AssetBinaryWriter writer)\r\n    {\r\n        base.Write(writer);\r\n        writer.Write(Enum.Index);\r\n    }\r\n}\r\n\r\npublic class UStructProperty : UProperty\r\n{\r\n    // UScriptStruct*\r\n    [DisplayIndexOrder(6)]\r\n    public FPackageIndex Struct;\r\n\r\n    public override void Read(AssetBinaryReader reader)\r\n    {\r\n        base.Read(reader);\r\n        Struct = new FPackageIndex(reader.ReadInt32());\r\n    }\r\n\r\n    public override void Write(AssetBinaryWriter writer)\r\n    {\r\n        base.Write(writer);\r\n        writer.Write(Struct.Index);\r\n    }\r\n}\r\n\r\npublic class UNameProperty : UProperty { }\r\n\r\npublic class UStrProperty : UProperty { }\r\n\r\npublic class UTextProperty : UProperty { }\r\n\r\npublic class UNumericProperty : UProperty { }\r\n\r\npublic class UDoubleProperty : UNumericProperty { }\r\n\r\npublic class UFloatProperty : UNumericProperty { }\r\n\r\npublic class UIntProperty : UNumericProperty { }\r\n\r\npublic class UInt8Property : UNumericProperty { }\r\n\r\npublic class UInt16Property : UNumericProperty { }\r\n\r\npublic class UInt64Property : UNumericProperty { }\r\n\r\npublic class UUInt16Property : UNumericProperty { }\r\n\r\npublic class UUInt32Property : UNumericProperty { }\r\n\r\npublic class UUInt64Property : UNumericProperty { }\r\n\r\n/// <summary>\r\n/// This is a UAssetAPI-specific property that represents anything that we don't have special serialization for\r\n/// </summary>\r\npublic class UGenericProperty : UProperty { }\r\n"
  },
  {
    "path": "UAssetAPI/Import.cs",
    "content": "﻿using UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI\r\n{\r\n    /// <summary>\r\n    /// UObject resource type for objects that are referenced by this package, but contained within another package.\r\n    /// </summary>\r\n    public class Import\r\n    {\r\n        ///<summary>The name of the UObject represented by this resource.</summary>\r\n        public FName ObjectName;\r\n        ///<summary>Location of the resource for this resource's Outer (import/other export). 0 = this resource is a top-level UPackage</summary>\r\n        public FPackageIndex OuterIndex;\r\n        public FName ClassPackage;\r\n        public FName ClassName;\r\n        /// <summary>\r\n        /// Package Name this import belongs to. Can be none, in that case follow the outer chain\r\n        /// until a set PackageName is found or until OuterIndex is null\r\n        /// </summary>\r\n        public FName PackageName;\r\n        public bool bImportOptional;\r\n\r\n        public Import(string classPackage, string className, FPackageIndex outerIndex, string objectName, bool importOptional, UAsset asset)\r\n        {\r\n            ObjectName = new FName(asset, objectName);\r\n            OuterIndex = outerIndex;\r\n            ClassPackage = new FName(asset, classPackage);\r\n            ClassName = new FName(asset, className);\r\n            bImportOptional = importOptional;\r\n        }\r\n\r\n        public Import(FName classPackage, FName className, FPackageIndex outerIndex, FName objectName, bool importOptional)\r\n        {\r\n            ObjectName = objectName;\r\n            OuterIndex = outerIndex;\r\n            ClassPackage = classPackage;\r\n            ClassName = className;\r\n            bImportOptional = importOptional;\r\n        }\r\n\r\n        public Import(AssetBinaryReader reader)\r\n        {\r\n            ClassPackage = reader.ReadFName();\r\n            ClassName = reader.ReadFName();\r\n            OuterIndex = new FPackageIndex(reader.ReadInt32());\r\n            ObjectName = reader.ReadFName();\r\n\r\n            if (reader.Asset.ObjectVersion >= ObjectVersion.VER_UE4_NON_OUTER_PACKAGE_IMPORT\r\n                && !reader.Asset.IsFilterEditorOnly)\r\n                PackageName = reader.ReadFName();\r\n\r\n            if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.OPTIONAL_RESOURCES) bImportOptional = reader.ReadInt32() == 1;\r\n        }\r\n\r\n        public Import()\r\n        {\r\n\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/JSON/ByteArrayJsonConverter.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace UAssetAPI.JSON\r\n{\r\n    public class ByteArrayJsonConverter : JsonConverter\r\n    {\r\n        public override bool CanConvert(Type objectType)\r\n        {\r\n            return objectType == typeof(byte[]);\r\n        }\r\n\r\n        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\r\n        {\r\n            writer.WriteValue(Convert.ToBase64String((byte[])value));\r\n        }\r\n\r\n        public override bool CanRead\r\n        {\r\n            get { return true; }\r\n        }\r\n\r\n        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\r\n        {\r\n            string val = reader.Value as string;\r\n\r\n            // backwards compatibility for fun\r\n            if (reader.TokenType == JsonToken.StartObject)\r\n            {\r\n                reader.Read();\r\n                while (reader.TokenType != JsonToken.EndObject)\r\n                {\r\n                    if (reader.TokenType != JsonToken.PropertyName) throw new FormatException(\"Expected PropertyName, got \" + reader.TokenType);\r\n                    string propertyName = reader.Value.ToString();\r\n                    reader.Read();\r\n                    object propertyValue = reader.Value;\r\n                    reader.Read();\r\n\r\n                    if (propertyName == \"$value\")\r\n                    {\r\n                        val = propertyValue as string;\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (val == null) return null;\r\n            return Convert.FromBase64String(val);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/JSON/FNameJsonConverter.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.JSON\r\n{\r\n    public class FNameJsonConverter : JsonConverter\r\n    {\r\n        public Dictionary<FName, string> ToBeFilled;\r\n        public int currentI = 0;\r\n\r\n        public override bool CanConvert(Type objectType)\r\n        {\r\n            return objectType == typeof(FName);\r\n        }\r\n\r\n        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\r\n        {\r\n            var realVal = (FName)value;\r\n            writer.WriteValue(realVal.DummyValue == null ? (realVal is null ? \"null\" : realVal.ToString()) : realVal.DummyValue.ToString());\r\n        }\r\n\r\n        public override bool CanRead\r\n        {\r\n            get { return true; }\r\n        }\r\n\r\n        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\r\n        {\r\n            if (reader.Value == null) return null;\r\n            var res = FName.DefineDummy(null, \"temp\", ++currentI);\r\n            ToBeFilled[res] = Convert.ToString(reader.Value);\r\n            return res;\r\n        }\r\n\r\n        public FNameJsonConverter(Dictionary<FName, string> dict) : base()\r\n        {\r\n            ToBeFilled = dict;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/JSON/FPackageIndexJsonConverter.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.JSON\r\n{\r\n    public class FPackageIndexJsonConverter : JsonConverter\r\n    {\r\n        public override bool CanConvert(Type objectType)\r\n        {\r\n            return objectType == typeof(FPackageIndex);\r\n        }\r\n\r\n        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\r\n        {\r\n            writer.WriteValue((value as FPackageIndex).Index);\r\n        }\r\n\r\n        public override bool CanRead\r\n        {\r\n            get { return true; }\r\n        }\r\n\r\n        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\r\n        {\r\n            return new FPackageIndex(Convert.ToInt32(reader.Value));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/JSON/FSignedZeroJsonConverter.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing System.Diagnostics;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.JSON\r\n{\r\n    public class FSignedZeroJsonConverter : JsonConverter\r\n    {\r\n        private static readonly decimal negativeZero = decimal.Negate(decimal.Zero);\r\n\r\n        private static bool IsNegativeZero(double x)\r\n        {\r\n            return x == 0.0 && double.IsNegativeInfinity(1.0 / x);\r\n        }\r\n\r\n        public override bool CanConvert(Type objectType)\r\n        {\r\n            return objectType == typeof(decimal) || objectType == typeof(float) || objectType == typeof(double);\r\n        }\r\n\r\n        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\r\n        {\r\n            double us = Convert.ToDouble(value);\r\n            if (us == 0)\r\n            {\r\n                writer.WriteValue(IsNegativeZero(us) ? \"-0\" : \"+0\");\r\n            }\r\n            else\r\n            {\r\n                writer.WriteValue(us);\r\n            }\r\n        }\r\n\r\n        public override bool CanRead\r\n        {\r\n            get { return true; }\r\n        }\r\n\r\n        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\r\n        {\r\n            if (reader.Value is null) return 0;\r\n\r\n            if (reader.Value is string)\r\n            {\r\n                if (reader.Value == null || reader.Value.Equals(\"+0\")) return Convert.ChangeType(0.0, objectType);\r\n                if (reader.Value.Equals(\"-0\")) return Convert.ChangeType(negativeZero, objectType);\r\n            }\r\n\r\n            object res = Convert.ChangeType(reader.Value, objectType);\r\n            if (res is null) return 0;\r\n            return res;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/JSON/FStringJsonConverter.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.JSON\r\n{\r\n    public class FStringJsonConverter : JsonConverter\r\n    {\r\n        public override bool CanConvert(Type objectType)\r\n        {\r\n            return objectType == typeof(FString);\r\n        }\r\n\r\n        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\r\n        {\r\n            writer.WriteValue((value as FString)?.Value);\r\n        }\r\n\r\n        public override bool CanRead\r\n        {\r\n            get { return true; }\r\n        }\r\n\r\n        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\r\n        {\r\n            if (reader.Value == null) return null;\r\n            return new FString(Convert.ToString(reader.Value));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/JSON/FStringTableJsonConverter.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing Newtonsoft.Json.Linq;\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Specialized;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.JSON\r\n{\r\n    public class FStringTableJsonConverter : JsonConverter\r\n    {\r\n        public override bool CanConvert(Type objectType)\r\n        {\r\n            return objectType == typeof(FStringTable);\r\n        }\r\n\r\n        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\r\n        {\r\n            var realVal = (FStringTable)value;\r\n\r\n            ICollection keys = ((IOrderedDictionary)value).Keys;\r\n            ICollection values = ((IOrderedDictionary)value).Values;\r\n            IEnumerator valueEnumerator = values.GetEnumerator();\r\n\r\n            writer.WriteStartObject();\r\n            writer.WritePropertyName(\"TableNamespace\");\r\n            writer.WriteValue(realVal.TableNamespace?.Value);\r\n            writer.WritePropertyName(\"Value\");\r\n            writer.WriteStartArray();\r\n            foreach (object key in keys)\r\n            {\r\n                valueEnumerator.MoveNext();\r\n\r\n                writer.WriteStartArray();\r\n                serializer.Serialize(writer, key);\r\n                serializer.Serialize(writer, valueEnumerator.Current);\r\n                writer.WriteEndArray();\r\n            }\r\n            writer.WriteEndArray();\r\n            writer.WriteEndObject();\r\n        }\r\n\r\n        public override bool CanRead\r\n        {\r\n            get { return true; }\r\n        }\r\n\r\n        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\r\n        {\r\n            var dictionary = new FStringTable();\r\n\r\n            JObject tableJson = JObject.Load(reader);\r\n            dictionary.TableNamespace = new FString(tableJson[\"TableNamespace\"].ToObject<string>());\r\n            JArray tokens = (JArray)tableJson[\"Value\"];\r\n\r\n            foreach (var eachToken in tokens)\r\n            {\r\n                FString key = eachToken[0].ToObject<FString>(serializer);\r\n                FString value = eachToken[1].ToObject<FString>(serializer);\r\n                dictionary.Add(key, value);\r\n            }\r\n\r\n            return dictionary;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/JSON/GuidJsonConverter.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\n\r\nnamespace UAssetAPI.JSON\r\n{\r\n    public class GuidJsonConverter : JsonConverter\r\n    {\r\n        public override bool CanConvert(Type objectType)\r\n        {\r\n            return objectType == typeof(Guid);\r\n        }\r\n\r\n        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\r\n        {\r\n            writer.WriteValue(((Guid) value).ConvertToString());\r\n        }\r\n\r\n        public override bool CanRead\r\n        {\r\n            get { return true; }\r\n        }\r\n\r\n        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\r\n        {\r\n            return Convert.ToString(reader.Value).ConvertToGUID();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/JSON/TMapJsonConverter.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing Newtonsoft.Json.Linq;\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Specialized;\r\n\r\n/*\r\n    The code in this file is modified from mattmc3's dotmore @ https://github.com/mattmc3/dotmore/tree/b032bbf871d46bffd698c9b7a233c533d9d2f0ebs for usage in UAssetAPI.\r\n\r\n    The MIT License (MIT)\r\n\r\n    Copyright (c) 2014 mattmc3\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE.\r\n*/\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.JSON\r\n{\r\n    public class TMapJsonConverter<TKey, TValue> : JsonConverter\r\n    {\r\n        public override bool CanConvert(Type objectType)\r\n        {\r\n            return typeof(IOrderedDictionary).IsAssignableFrom(objectType);\r\n        }\r\n\r\n        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\r\n        {\r\n            ICollection keys = ((IOrderedDictionary)value).Keys;\r\n            ICollection values = ((IOrderedDictionary)value).Values;\r\n            IEnumerator valueEnumerator = values.GetEnumerator();\r\n\r\n            writer.WriteStartArray();\r\n            foreach (object key in keys)\r\n            {\r\n                valueEnumerator.MoveNext();\r\n\r\n                writer.WriteStartArray();\r\n                serializer.Serialize(writer, key);\r\n                serializer.Serialize(writer, valueEnumerator.Current);\r\n                writer.WriteEndArray();\r\n            }\r\n            writer.WriteEndArray();\r\n        }\r\n\r\n        public override bool CanRead\r\n        {\r\n            get { return true; }\r\n        }\r\n\r\n        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\r\n        {\r\n            var dictionary = new TMap<TKey, TValue>();\r\n            JToken tokens = JToken.Load(reader);\r\n\r\n            foreach (var eachToken in tokens)\r\n            {\r\n                TKey key = eachToken[0].ToObject<TKey>(serializer);\r\n                TValue value = eachToken[1].ToObject<TValue>(serializer);\r\n                dictionary.Add(key, value);\r\n            }\r\n            return dictionary;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/JSON/UAssetContractResolver.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing Newtonsoft.Json.Serialization;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.JSON\r\n{\r\n    public class UAssetContractResolver : DefaultContractResolver\r\n    {\r\n        public Dictionary<FName, string> ToBeFilled;\r\n\r\n        protected override JsonConverter ResolveContractConverter(Type objectType)\r\n        {\r\n            if (typeof(FName).IsAssignableFrom(objectType))\r\n            {\r\n                return new FNameJsonConverter(ToBeFilled);\r\n            }\r\n            return base.ResolveContractConverter(objectType);\r\n        }\r\n\r\n        public UAssetContractResolver(Dictionary<FName, string> toBeFilled) : base()\r\n        {\r\n            ToBeFilled = toBeFilled;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/EBlueprintTextLiteralType.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode\r\n{\r\n    /// <summary>\r\n    /// Kinds of text literals\r\n    /// </summary>\r\n    public enum EBlueprintTextLiteralType : byte\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Text is an empty string. The bytecode contains no strings, and you should use FText::GetEmpty() to initialize the FText instance.\r\n\t\t/// </summary>\r\n\t\tEmpty,\r\n\t\t/// <summary>\r\n\t\t/// Text is localized. The bytecode will contain three strings - source, key, and namespace - and should be loaded via FInternationalization\r\n\t\t/// </summary>\r\n\t\tLocalizedText,\r\n\t\t/// <summary>\r\n\t\t/// Text is culture invariant. The bytecode will contain one string, and you should use FText::AsCultureInvariant to initialize the FText instance.\r\n\t\t/// </summary>\r\n\t\tInvariantText,\r\n\t\t/// <summary>\r\n\t\t/// Text is a literal FString. The bytecode will contain one string, and you should use FText::FromString to initialize the FText instance.\r\n\t\t/// </summary>\r\n\t\tLiteralString,\r\n\t\t/// <summary>\r\n\t\t/// Text is from a string table. The bytecode will contain an object pointer (not used) and two strings - the table ID, and key - and should be found via FText::FromStringTable\r\n\t\t/// </summary>\r\n\t\tStringTableEntry\r\n\t}\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/EExprToken.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode\r\n{\r\n    /// <summary>\r\n    /// Evaluatable expression item types.\r\n    /// </summary>\r\n    public enum EExprToken\r\n\t{\r\n\t\t/// <summary>A local variable.</summary>\r\n\t\tEX_LocalVariable = 0x00,\r\n\t\t/// <summary>An object variable.</summary>\r\n\t\tEX_InstanceVariable = 0x01,\r\n\t\t/// <summary>Default variable for a class context.</summary>\r\n\t\tEX_DefaultVariable = 0x02,\r\n\t\t/// <summary>Return from function.</summary>\r\n\t\tEX_Return = 0x04,\r\n\t\t/// <summary>Goto a local address in code.</summary>\r\n\t\tEX_Jump = 0x06,\r\n\t\t/// <summary>Goto if not expression.</summary>\r\n\t\tEX_JumpIfNot = 0x07,\r\n\t\t/// <summary>Assertion.</summary>\r\n\t\tEX_Assert = 0x09,\r\n\t\t/// <summary>No operation.</summary>\r\n\t\tEX_Nothing = 0x0B,\r\n\t\t/// <summary>No operation with an int32 argument (useful for debugging script disassembly).</summary>\r\n\t\tEX_NothingInt32 = 0x0C,\r\n\t\t/// <summary>Assign an arbitrary size value to a variable.</summary>\r\n\t\tEX_Let = 0x0F,\r\n\t\t/// <summary>Assign to a single bit, defined by an FProperty.</summary>\r\n\t\tEX_BitFieldConst = 0x11,\r\n\t\t/// <summary>Class default object context.</summary>\r\n\t\tEX_ClassContext = 0x12,\r\n\t\t/// <summary>Metaclass cast.</summary>\r\n\t\tEX_MetaCast = 0x13,\r\n\t\t/// <summary>Let boolean variable.</summary>\r\n\t\tEX_LetBool = 0x14,\r\n\t\t/// <summary>end of default value for optional function parameter</summary>\r\n\t\tEX_EndParmValue = 0x15,\r\n\t\t/// <summary>End of function call parameters.</summary>\r\n\t\tEX_EndFunctionParms = 0x16,\r\n\t\t/// <summary>Self object.</summary>\r\n\t\tEX_Self = 0x17,\r\n\t\t/// <summary>Skippable expression.</summary>\r\n\t\tEX_Skip = 0x18,\r\n\t\t/// <summary>Call a function through an object context.</summary>\r\n\t\tEX_Context = 0x19,\r\n\t\t/// <summary>Call a function through an object context (can fail silently if the context is NULL; only generated for functions that don't have output or return values).</summary>\r\n\t\tEX_Context_FailSilent = 0x1A,\r\n\t\t/// <summary>A function call with parameters.</summary>\r\n\t\tEX_VirtualFunction = 0x1B,\r\n\t\t/// <summary>A prebound function call with parameters.</summary>\r\n\t\tEX_FinalFunction = 0x1C,\r\n\t\t/// <summary>Int constant.</summary>\r\n\t\tEX_IntConst = 0x1D,\r\n\t\t/// <summary>Floating point constant.</summary>\r\n\t\tEX_FloatConst = 0x1E,\r\n\t\t/// <summary>String constant.</summary>\r\n\t\tEX_StringConst = 0x1F,\r\n\t\t/// <summary>An object constant.</summary>\r\n\t\tEX_ObjectConst = 0x20,\r\n\t\t/// <summary>A name constant.</summary>\r\n\t\tEX_NameConst = 0x21,\r\n\t\t/// <summary>A rotation constant.</summary>\r\n\t\tEX_RotationConst = 0x22,\r\n\t\t/// <summary>A vector constant.</summary>\r\n\t\tEX_VectorConst = 0x23,\r\n\t\t/// <summary>A byte constant.</summary>\r\n\t\tEX_ByteConst = 0x24,\r\n\t\t/// <summary>Zero.</summary>\r\n\t\tEX_IntZero = 0x25,\r\n\t\t/// <summary>One.</summary>\r\n\t\tEX_IntOne = 0x26,\r\n\t\t/// <summary>Bool True.</summary>\r\n\t\tEX_True = 0x27,\r\n\t\t/// <summary>Bool False.</summary>\r\n\t\tEX_False = 0x28,\r\n\t\t/// <summary>FText constant</summary>\r\n\t\tEX_TextConst = 0x29,\r\n\t\t/// <summary>NoObject.</summary>\r\n\t\tEX_NoObject = 0x2A,\r\n\t\t/// <summary>A transform constant</summary>\r\n\t\tEX_TransformConst = 0x2B,\r\n\t\t/// <summary>Int constant that requires 1 byte.</summary>\r\n\t\tEX_IntConstByte = 0x2C,\r\n\t\t/// <summary>A null interface (similar to EX_NoObject, but for interfaces)</summary>\r\n\t\tEX_NoInterface = 0x2D,\r\n\t\t/// <summary>Safe dynamic class casting.</summary>\r\n\t\tEX_DynamicCast = 0x2E,\r\n\t\t/// <summary>An arbitrary UStruct constant</summary>\r\n\t\tEX_StructConst = 0x2F,\r\n\t\t/// <summary>End of UStruct constant</summary>\r\n\t\tEX_EndStructConst = 0x30,\r\n\t\t/// <summary>Set the value of arbitrary array</summary>\r\n\t\tEX_SetArray = 0x31,\r\n\t\tEX_EndArray = 0x32,\r\n\t\t/// <summary>FProperty constant.</summary>\r\n\t\tEX_PropertyConst = 0x33,\r\n\t\t/// <summary>Unicode string constant.</summary>\r\n\t\tEX_UnicodeStringConst = 0x34,\r\n\t\t/// <summary>64-bit integer constant.</summary>\r\n\t\tEX_Int64Const = 0x35,\r\n\t\t/// <summary>64-bit unsigned integer constant.</summary>\r\n\t\tEX_UInt64Const = 0x36,\r\n\t\t/// <summary>Double-precision floating point constant.</summary>\r\n\t\tEX_DoubleConst = 0x37,\r\n\t\t/// <summary>A casting operator for primitives which reads the type as the subsequent byte</summary>\r\n\t\tEX_PrimitiveCast = 0x38,\r\n\t\tEX_SetSet = 0x39,\r\n\t\tEX_EndSet = 0x3A,\r\n\t\tEX_SetMap = 0x3B,\r\n\t\tEX_EndMap = 0x3C,\r\n\t\tEX_SetConst = 0x3D,\r\n\t\tEX_EndSetConst = 0x3E,\r\n\t\tEX_MapConst = 0x3F,\r\n\t\tEX_EndMapConst = 0x40,\r\n\t\t/// <summary>A float vector constant.</summary>\r\n\t\tEX_Vector3fConst = 0x41,\r\n\t\t/// <summary>Context expression to address a property within a struct</summary>\r\n\t\tEX_StructMemberContext = 0x42,\r\n\t\t/// <summary>Assignment to a multi-cast delegate</summary>\r\n\t\tEX_LetMulticastDelegate = 0x43,\r\n\t\t/// <summary>Assignment to a delegate</summary>\r\n\t\tEX_LetDelegate = 0x44,\r\n\t\t/// <summary>Special instructions to quickly call a virtual function that we know is going to run only locally</summary>\r\n\t\tEX_LocalVirtualFunction = 0x45,\r\n\t\t/// <summary>Special instructions to quickly call a final function that we know is going to run only locally</summary>\r\n\t\tEX_LocalFinalFunction = 0x46,\r\n\t\t/// <summary>local out (pass by reference) function parameter</summary>\r\n\t\tEX_LocalOutVariable = 0x48,\r\n\t\tEX_DeprecatedOp4A = 0x4A,\r\n\t\t/// <summary>const reference to a delegate or normal function object</summary>\r\n\t\tEX_InstanceDelegate = 0x4B,\r\n\t\t/// <summary>push an address on to the execution flow stack for future execution when a EX_PopExecutionFlow is executed. Execution continues on normally and doesn't change to the pushed address.</summary>\r\n\t\tEX_PushExecutionFlow = 0x4C,\r\n\t\t/// <summary>continue execution at the last address previously pushed onto the execution flow stack.</summary>\r\n\t\tEX_PopExecutionFlow = 0x4D,\r\n\t\t/// <summary>Goto a local address in code, specified by an integer value.</summary>\r\n\t\tEX_ComputedJump = 0x4E,\r\n\t\t/// <summary>continue execution at the last address previously pushed onto the execution flow stack, if the condition is not true.</summary>\r\n\t\tEX_PopExecutionFlowIfNot = 0x4F,\r\n\t\t/// <summary>Breakpoint. Only observed in the editor, otherwise it behaves like EX_Nothing.</summary>\r\n\t\tEX_Breakpoint = 0x50,\r\n\t\t/// <summary>Call a function through a native interface variable</summary>\r\n\t\tEX_InterfaceContext = 0x51,\r\n\t\t/// <summary>Converting an object reference to native interface variable</summary>\r\n\t\tEX_ObjToInterfaceCast = 0x52,\r\n\t\t/// <summary>Last byte in script code</summary>\r\n\t\tEX_EndOfScript = 0x53,\r\n\t\t/// <summary>Converting an interface variable reference to native interface variable</summary>\r\n\t\tEX_CrossInterfaceCast = 0x54,\r\n\t\t/// <summary>Converting an interface variable reference to an object</summary>\r\n\t\tEX_InterfaceToObjCast = 0x55,\r\n\t\t/// <summary>Trace point.  Only observed in the editor, otherwise it behaves like EX_Nothing.</summary>\r\n\t\tEX_WireTracepoint = 0x5A,\r\n\t\t/// <summary>A CodeSizeSkipOffset constant</summary>\r\n\t\tEX_SkipOffsetConst = 0x5B,\r\n\t\t/// <summary>Adds a delegate to a multicast delegate's targets</summary>\r\n\t\tEX_AddMulticastDelegate = 0x5C,\r\n\t\t/// <summary>Clears all delegates in a multicast target</summary>\r\n\t\tEX_ClearMulticastDelegate = 0x5D,\r\n\t\t/// <summary>Trace point.  Only observed in the editor, otherwise it behaves like EX_Nothing.</summary>\r\n\t\tEX_Tracepoint = 0x5E,\r\n\t\t/// <summary>assign to any object ref pointer</summary>\r\n\t\tEX_LetObj = 0x5F,\r\n\t\t/// <summary>assign to a weak object pointer</summary>\r\n\t\tEX_LetWeakObjPtr = 0x60,\r\n\t\t/// <summary>bind object and name to delegate</summary>\r\n\t\tEX_BindDelegate = 0x61,\r\n\t\t/// <summary>Remove a delegate from a multicast delegate's targets</summary>\r\n\t\tEX_RemoveMulticastDelegate = 0x62,\r\n\t\t/// <summary>Call multicast delegate</summary>\r\n\t\tEX_CallMulticastDelegate = 0x63,\r\n\t\tEX_LetValueOnPersistentFrame = 0x64,\r\n\t\tEX_ArrayConst = 0x65,\r\n\t\tEX_EndArrayConst = 0x66,\r\n\t\tEX_SoftObjectConst = 0x67,\r\n\t\t/// <summary>static pure function from on local call space</summary>\r\n\t\tEX_CallMath = 0x68,\r\n\t\tEX_SwitchValue = 0x69,\r\n\t\t/// <summary>Instrumentation event</summary>\r\n\t\tEX_InstrumentationEvent = 0x6A,\r\n\t\tEX_ArrayGetByRef = 0x6B,\r\n\t\t/// <summary>Sparse data variable</summary>\r\n\t\tEX_ClassSparseDataVariable = 0x6C,\r\n\t\tEX_FieldPathConst = 0x6D,\r\n        /// <summary>\r\n        /// AutoRTFM: run following code in a transaction\r\n        /// </summary>\r\n        EX_AutoRtfmTransact = 0x70,\r\n        /// <summary>\r\n        /// AutoRTFM: if in a transaction, abort or break, otherwise no operation\r\n        /// </summary>\r\n        EX_AutoRtfmStopTransact = 0x71,\r\n        /// <summary>\r\n        /// AutoRTFM: evaluate bool condition, abort transaction on false\r\n        /// </summary>\r\n        EX_AutoRtfmAbortIfNot = 0x72,\r\n        EX_Max = 0xFF\r\n\t};\r\n\r\n\tpublic enum ECastToken {\r\n\t\tObjectToInterface = 0x46,\r\n\t\tObjectToBool = 0x47,\r\n\t\tInterfaceToBool = 0x49,\r\n\t\tMax = 0xFF,\r\n\t};\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/EScriptInstrumentationType.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode\r\n{\r\n\tpublic enum EScriptInstrumentationType : byte {\r\n\t\tClass = 0,\r\n\t\tClassScope,\r\n\t\tInstance,\r\n\t\tEvent,\r\n\t\tInlineEvent,\r\n\t\tResumeEvent,\r\n\t\tPureNodeEntry,\r\n\t\tNodeDebugSite,\r\n\t\tNodeEntry,\r\n\t\tNodeExit,\r\n\t\tPushState,\r\n\t\tRestoreState,\r\n\t\tResetState,\r\n\t\tSuspendState,\r\n\t\tPopState,\r\n\t\tTunnelEndOfThread,\r\n\t\tStop\r\n\t}\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/ExpressionSerializer.cs",
    "content": "﻿using System;\r\nusing UAssetAPI.Kismet.Bytecode.Expressions;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode\r\n{\r\n    public static class ExpressionSerializer\r\n    {\r\n        public static KismetExpression ReadExpression(AssetBinaryReader reader)\r\n        {\r\n            KismetExpression res = null;\r\n            EExprToken token = (EExprToken)reader.ReadByte();\r\n            switch (token)\r\n            {\r\n                case EExprToken.EX_LocalVariable:\r\n                    res = new EX_LocalVariable();\r\n                    break;\r\n                case EExprToken.EX_InstanceVariable:\r\n                    res = new EX_InstanceVariable();\r\n                    break;\r\n                case EExprToken.EX_DefaultVariable:\r\n                    res = new EX_DefaultVariable();\r\n                    break;\r\n                case EExprToken.EX_Return:\r\n                    res = new EX_Return();\r\n                    break;\r\n                case EExprToken.EX_Jump:\r\n                    res = new EX_Jump();\r\n                    break;\r\n                case EExprToken.EX_JumpIfNot:\r\n                    res = new EX_JumpIfNot();\r\n                    break;\r\n                case EExprToken.EX_Assert:\r\n                    res = new EX_Assert();\r\n                    break;\r\n                case EExprToken.EX_Nothing:\r\n                    res = new EX_Nothing();\r\n                    break;\r\n                case EExprToken.EX_NothingInt32:\r\n                    res = new EX_NothingInt32();\r\n                    break;\r\n                case EExprToken.EX_Let:\r\n                    res = new EX_Let();\r\n                    break;\r\n                case EExprToken.EX_BitFieldConst:\r\n                    res = new EX_BitFieldConst();\r\n                    break;\r\n                case EExprToken.EX_ClassContext:\r\n                    res = new EX_ClassContext();\r\n                    break;\r\n                case EExprToken.EX_MetaCast:\r\n                    res = new EX_MetaCast();\r\n                    break;\r\n                case EExprToken.EX_LetBool:\r\n                    res = new EX_LetBool();\r\n                    break;\r\n                case EExprToken.EX_EndParmValue:\r\n                    res = new EX_EndParmValue();\r\n                    break;\r\n                case EExprToken.EX_EndFunctionParms:\r\n                    res = new EX_EndFunctionParms();\r\n                    break;\r\n                case EExprToken.EX_Self:\r\n                    res = new EX_Self();\r\n                    break;\r\n                case EExprToken.EX_Skip:\r\n                    res = new EX_Skip();\r\n                    break;\r\n                case EExprToken.EX_Context:\r\n                    res = new EX_Context();\r\n                    break;\r\n                case EExprToken.EX_Context_FailSilent:\r\n                    res = new EX_Context_FailSilent();\r\n                    break;\r\n                case EExprToken.EX_VirtualFunction:\r\n                    res = new EX_VirtualFunction();\r\n                    break;\r\n                case EExprToken.EX_FinalFunction:\r\n                    res = new EX_FinalFunction();\r\n                    break;\r\n                case EExprToken.EX_IntConst:\r\n                    res = new EX_IntConst();\r\n                    break;\r\n                case EExprToken.EX_FloatConst:\r\n                    res = new EX_FloatConst();\r\n                    break;\r\n                case EExprToken.EX_DoubleConst:\r\n                    res = new EX_DoubleConst();\r\n                    break;\r\n                case EExprToken.EX_StringConst:\r\n                    res = new EX_StringConst();\r\n                    break;\r\n                case EExprToken.EX_ObjectConst:\r\n                    res = new EX_ObjectConst();\r\n                    break;\r\n                case EExprToken.EX_NameConst:\r\n                    res = new EX_NameConst();\r\n                    break;\r\n                case EExprToken.EX_RotationConst:\r\n                    res = new EX_RotationConst();\r\n                    break;\r\n                case EExprToken.EX_VectorConst:\r\n                    res = new EX_VectorConst();\r\n                    break;\r\n                case EExprToken.EX_ByteConst:\r\n                    res = new EX_ByteConst();\r\n                    break;\r\n                case EExprToken.EX_IntZero:\r\n                    res = new EX_IntZero();\r\n                    break;\r\n                case EExprToken.EX_IntOne:\r\n                    res = new EX_IntOne();\r\n                    break;\r\n                case EExprToken.EX_True:\r\n                    res = new EX_True();\r\n                    break;\r\n                case EExprToken.EX_False:\r\n                    res = new EX_False();\r\n                    break;\r\n                case EExprToken.EX_TextConst:\r\n                    res = new EX_TextConst();\r\n                    break;\r\n                case EExprToken.EX_NoObject:\r\n                    res = new EX_NoObject();\r\n                    break;\r\n                case EExprToken.EX_TransformConst:\r\n                    res = new EX_TransformConst();\r\n                    break;\r\n                case EExprToken.EX_IntConstByte:\r\n                    res = new EX_IntConstByte();\r\n                    break;\r\n                case EExprToken.EX_NoInterface:\r\n                    res = new EX_NoInterface();\r\n                    break;\r\n                case EExprToken.EX_DynamicCast:\r\n                    res = new EX_DynamicCast();\r\n                    break;\r\n                case EExprToken.EX_StructConst:\r\n                    res = new EX_StructConst();\r\n                    break;\r\n                case EExprToken.EX_EndStructConst:\r\n                    res = new EX_EndStructConst();\r\n                    break;\r\n                case EExprToken.EX_SetArray:\r\n                    res = new EX_SetArray();\r\n                    break;\r\n                case EExprToken.EX_EndArray:\r\n                    res = new EX_EndArray();\r\n                    break;\r\n                case EExprToken.EX_PropertyConst:\r\n                    res = new EX_PropertyConst();\r\n                    break;\r\n                case EExprToken.EX_UnicodeStringConst:\r\n                    res = new EX_UnicodeStringConst();\r\n                    break;\r\n                case EExprToken.EX_Int64Const:\r\n                    res = new EX_Int64Const();\r\n                    break;\r\n                case EExprToken.EX_UInt64Const:\r\n                    res = new EX_UInt64Const();\r\n                    break;\r\n                case EExprToken.EX_PrimitiveCast:\r\n                    res = new EX_PrimitiveCast();\r\n                    break;\r\n                case EExprToken.EX_SetSet:\r\n                    res = new EX_SetSet();\r\n                    break;\r\n                case EExprToken.EX_EndSet:\r\n                    res = new EX_EndSet();\r\n                    break;\r\n                case EExprToken.EX_SetMap:\r\n                    res = new EX_SetMap();\r\n                    break;\r\n                case EExprToken.EX_EndMap:\r\n                    res = new EX_EndMap();\r\n                    break;\r\n                case EExprToken.EX_SetConst:\r\n                    res = new EX_SetConst();\r\n                    break;\r\n                case EExprToken.EX_EndSetConst:\r\n                    res = new EX_EndSetConst();\r\n                    break;\r\n                case EExprToken.EX_MapConst:\r\n                    res = new EX_MapConst();\r\n                    break;\r\n                case EExprToken.EX_EndMapConst:\r\n                    res = new EX_EndMapConst();\r\n                    break;\r\n                case EExprToken.EX_Vector3fConst:\r\n                    res = new EX_Vector3fConst();\r\n                    break;\r\n                case EExprToken.EX_StructMemberContext:\r\n                    res = new EX_StructMemberContext();\r\n                    break;\r\n                case EExprToken.EX_LetMulticastDelegate:\r\n                    res = new EX_LetMulticastDelegate();\r\n                    break;\r\n                case EExprToken.EX_LetDelegate:\r\n                    res = new EX_LetDelegate();\r\n                    break;\r\n                case EExprToken.EX_LocalVirtualFunction:\r\n                    res = new EX_LocalVirtualFunction();\r\n                    break;\r\n                case EExprToken.EX_LocalFinalFunction:\r\n                    res = new EX_LocalFinalFunction();\r\n                    break;\r\n                case EExprToken.EX_LocalOutVariable:\r\n                    res = new EX_LocalOutVariable();\r\n                    break;\r\n                case EExprToken.EX_DeprecatedOp4A:\r\n                    res = new EX_DeprecatedOp4A();\r\n                    break;\r\n                case EExprToken.EX_InstanceDelegate:\r\n                    res = new EX_InstanceDelegate();\r\n                    break;\r\n                case EExprToken.EX_PushExecutionFlow:\r\n                    res = new EX_PushExecutionFlow();\r\n                    break;\r\n                case EExprToken.EX_PopExecutionFlow:\r\n                    res = new EX_PopExecutionFlow();\r\n                    break;\r\n                case EExprToken.EX_ComputedJump:\r\n                    res = new EX_ComputedJump();\r\n                    break;\r\n                case EExprToken.EX_PopExecutionFlowIfNot:\r\n                    res = new EX_PopExecutionFlowIfNot();\r\n                    break;\r\n                case EExprToken.EX_Breakpoint:\r\n                    res = new EX_Breakpoint();\r\n                    break;\r\n                case EExprToken.EX_InterfaceContext:\r\n                    res = new EX_InterfaceContext();\r\n                    break;\r\n                case EExprToken.EX_ObjToInterfaceCast:\r\n                    res = new EX_ObjToInterfaceCast();\r\n                    break;\r\n                case EExprToken.EX_EndOfScript:\r\n                    res = new EX_EndOfScript();\r\n                    break;\r\n                case EExprToken.EX_CrossInterfaceCast:\r\n                    res = new EX_CrossInterfaceCast();\r\n                    break;\r\n                case EExprToken.EX_InterfaceToObjCast:\r\n                    res = new EX_InterfaceToObjCast();\r\n                    break;\r\n                case EExprToken.EX_WireTracepoint:\r\n                    res = new EX_WireTracepoint();\r\n                    break;\r\n                case EExprToken.EX_SkipOffsetConst:\r\n                    res = new EX_SkipOffsetConst();\r\n                    break;\r\n                case EExprToken.EX_AddMulticastDelegate:\r\n                    res = new EX_AddMulticastDelegate();\r\n                    break;\r\n                case EExprToken.EX_ClearMulticastDelegate:\r\n                    res = new EX_ClearMulticastDelegate();\r\n                    break;\r\n                case EExprToken.EX_Tracepoint:\r\n                    res = new EX_Tracepoint();\r\n                    break;\r\n                case EExprToken.EX_LetObj:\r\n                    res = new EX_LetObj();\r\n                    break;\r\n                case EExprToken.EX_LetWeakObjPtr:\r\n                    res = new EX_LetWeakObjPtr();\r\n                    break;\r\n                case EExprToken.EX_BindDelegate:\r\n                    res = new EX_BindDelegate();\r\n                    break;\r\n                case EExprToken.EX_RemoveMulticastDelegate:\r\n                    res = new EX_RemoveMulticastDelegate();\r\n                    break;\r\n                case EExprToken.EX_CallMulticastDelegate:\r\n                    res = new EX_CallMulticastDelegate();\r\n                    break;\r\n                case EExprToken.EX_LetValueOnPersistentFrame:\r\n                    res = new EX_LetValueOnPersistentFrame();\r\n                    break;\r\n                case EExprToken.EX_ArrayConst:\r\n                    res = new EX_ArrayConst();\r\n                    break;\r\n                case EExprToken.EX_EndArrayConst:\r\n                    res = new EX_EndArrayConst();\r\n                    break;\r\n                case EExprToken.EX_SoftObjectConst:\r\n                    res = new EX_SoftObjectConst();\r\n                    break;\r\n                case EExprToken.EX_CallMath:\r\n                    res = new EX_CallMath();\r\n                    break;\r\n                case EExprToken.EX_SwitchValue:\r\n                    res = new EX_SwitchValue();\r\n                    break;\r\n                case EExprToken.EX_InstrumentationEvent:\r\n                    res = new EX_InstrumentationEvent();\r\n                    break;\r\n                case EExprToken.EX_ArrayGetByRef:\r\n                    res = new EX_ArrayGetByRef();\r\n                    break;\r\n                case EExprToken.EX_ClassSparseDataVariable:\r\n                    res = new EX_ClassSparseDataVariable();\r\n                    break;\r\n                case EExprToken.EX_FieldPathConst:\r\n                    res = new EX_FieldPathConst();\r\n                    break;\r\n                default:\r\n                    throw new NotImplementedException(\"Unimplemented token \" + token);\r\n            }\r\n\r\n            if (res != null)\r\n            {\r\n                res.Read(reader);\r\n            }\r\n            return res;\r\n        }\r\n\r\n        public static int WriteExpression(KismetExpression expr, AssetBinaryWriter writer)\r\n        {\r\n            writer.Write((byte)expr.Token);\r\n            return expr.Write(writer) + sizeof(byte);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_AddMulticastDelegate.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_AddMulticastDelegate\"/> instruction.\r\n    /// </summary>\r\n    public class EX_AddMulticastDelegate : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_AddMulticastDelegate; } }\r\n\r\n        /// <summary>\r\n        /// Delegate property to assign to.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression Delegate;\r\n\r\n        /// <summary>\r\n        /// Delegate to add to the MC delegate for broadcast.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression DelegateToAdd;\r\n\r\n        public EX_AddMulticastDelegate()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Delegate = ExpressionSerializer.ReadExpression(reader);\r\n            DelegateToAdd = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            offset += ExpressionSerializer.WriteExpression(Delegate, writer);\r\n            offset += ExpressionSerializer.WriteExpression(DelegateToAdd, writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            Delegate.Visit(asset, ref offset, visitor);\r\n            DelegateToAdd.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_ArrayConst.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_ArrayConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_ArrayConst : KismetExpression<KismetExpression[]>\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_ArrayConst; } }\r\n\r\n        /// <summary>\r\n        /// Pointer to this constant's inner property (FProperty*).\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetPropertyPointer InnerProperty;\r\n\r\n        /// <summary>\r\n        /// Array constant entries.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression[] Elements;\r\n\r\n        public EX_ArrayConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            InnerProperty = reader.XFER_PROP_POINTER();\r\n            int numEntries = reader.ReadInt32(); // Number of elements\r\n            Elements = reader.ReadExpressionArray(EExprToken.EX_EndArrayConst);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            offset += writer.XFER_PROP_POINTER(InnerProperty);\r\n            writer.Write(Elements.Length); offset += sizeof(int);\r\n            for (int i = 0; i < Elements.Length; i++)\r\n            {\r\n                offset += ExpressionSerializer.WriteExpression(Elements[i], writer);\r\n            }\r\n            offset += ExpressionSerializer.WriteExpression(new EX_EndArrayConst(), writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 12; // InnerProperty (8) + NumElements (4)\r\n            foreach (var element in Elements)\r\n            {\r\n                element.Visit(asset, ref offset, visitor);\r\n            }\r\n            offset += 1; // EX_EndArrayConst\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_ArrayGetByRef.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_ArrayGetByRef\"/> instruction.\r\n    /// </summary>\r\n    public class EX_ArrayGetByRef : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_ArrayGetByRef; } }\r\n\r\n        /// <summary>\r\n        /// The array variable.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression ArrayVariable;\r\n\r\n        /// <summary>\r\n        /// The index to access in the array.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression ArrayIndex;\r\n\r\n        public EX_ArrayGetByRef()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            ArrayVariable = ExpressionSerializer.ReadExpression(reader);\r\n            ArrayIndex = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            offset += ExpressionSerializer.WriteExpression(ArrayVariable, writer);\r\n            offset += ExpressionSerializer.WriteExpression(ArrayIndex, writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            ArrayVariable.Visit(asset, ref offset, visitor);\r\n            ArrayIndex.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_Assert.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_Assert\"/> instruction.\r\n    /// </summary>\r\n    public class EX_Assert : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_Assert; } }\r\n\r\n        /// <summary>\r\n        /// Line number.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public ushort LineNumber;\r\n\r\n        /// <summary>\r\n        /// Whether or not this assertion is in debug mode.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public bool DebugMode;\r\n\r\n        /// <summary>\r\n        /// Expression to assert.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression AssertExpression;\r\n\r\n        public EX_Assert()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            LineNumber = reader.ReadUInt16();\r\n            DebugMode = reader.ReadBoolean();\r\n            AssertExpression = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            writer.Write(LineNumber); offset += sizeof(ushort);\r\n            writer.Write(DebugMode); offset += sizeof(bool);\r\n            offset += ExpressionSerializer.WriteExpression(AssertExpression, writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 3; // LineNumber (2) + DebugMode (1)\r\n            AssertExpression.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_BindDelegate.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_BindDelegate\"/> instruction.\r\n    /// </summary>\r\n    public class EX_BindDelegate : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_BindDelegate; } }\r\n\r\n        /// <summary>\r\n        /// The name of the function assigned to the delegate.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public FName FunctionName;\r\n\r\n        /// <summary>\r\n        /// Delegate property to assign to.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression Delegate;\r\n\r\n        /// <summary>\r\n        /// Object to bind.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression ObjectTerm;\r\n\r\n        public EX_BindDelegate()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            FunctionName = reader.XFER_FUNC_NAME();\r\n            Delegate = ExpressionSerializer.ReadExpression(reader);\r\n            ObjectTerm = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            offset += writer.XFER_FUNC_NAME(FunctionName);\r\n            offset += ExpressionSerializer.WriteExpression(Delegate, writer);\r\n            offset += ExpressionSerializer.WriteExpression(ObjectTerm, writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 12; // FunctionName (12)\r\n            Delegate.Visit(asset, ref offset, visitor);\r\n            ObjectTerm.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_BitFieldConst.cs",
    "content": "using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_BitFieldConst\"/> instruction.\r\n    /// Assigns to a single bit, defined by an FProperty.\r\n    /// </summary>\r\n    public class EX_BitFieldConst : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_BitFieldConst; } }\r\n\r\n        /// <summary>\r\n        /// A pointer to the bit property.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetPropertyPointer Property;\r\n\r\n        /// <summary>\r\n        /// The bit value.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public byte Value;\r\n\r\n        public EX_BitFieldConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Property = reader.XFER_PROP_POINTER();\r\n            Value = reader.ReadByte();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = writer.XFER_PROP_POINTER(Property);\r\n            writer.Write(Value);\r\n            return offset + sizeof(byte);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 9; // Property (8) + Value (1)\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_Breakpoint.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_Breakpoint\"/> instruction.\r\n    /// </summary>\r\n    public class EX_Breakpoint : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_Breakpoint; } }\r\n\r\n        public EX_Breakpoint()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_ByteConst.cs",
    "content": "﻿using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_ByteConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_ByteConst : KismetExpression<byte>\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_ByteConst; } }\r\n\r\n        public EX_ByteConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Value = reader.ReadByte();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            writer.Write(Value);\r\n            return sizeof(byte);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 1; // Value\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_CallMath.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_CallMath\"/> instruction.\r\n    /// </summary>\r\n    public class EX_CallMath : EX_FinalFunction\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_CallMath; } }\r\n\r\n        public EX_CallMath() : base()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return base.Write(writer);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_CallMulticastDelegate.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_CallMulticastDelegate\"/> instruction.\r\n    /// </summary>\r\n    public class EX_CallMulticastDelegate : EX_FinalFunction\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_CallMulticastDelegate; } }\r\n\r\n        /// <summary>\r\n        /// Delegate property.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression Delegate;\r\n\r\n        public EX_CallMulticastDelegate()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            StackNode = reader.XFER_FUNC_POINTER();\r\n            Delegate = ExpressionSerializer.ReadExpression(reader);\r\n            Parameters = reader.ReadExpressionArray(EExprToken.EX_EndFunctionParms);\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            offset += writer.XFER_FUNC_POINTER(StackNode);\r\n            offset += ExpressionSerializer.WriteExpression(Delegate, writer);\r\n\r\n            for (int i = 0; i < Parameters.Length; i++)\r\n            {\r\n                offset += ExpressionSerializer.WriteExpression(Parameters[i], writer);\r\n            }\r\n            offset += ExpressionSerializer.WriteExpression(new EX_EndFunctionParms(), writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            visitor(this, offset);\r\n            offset++;\r\n            offset += 8; // StackNode (8)\r\n            Delegate.Visit(asset, ref offset, visitor);\r\n            foreach (var param in Parameters)\r\n            {\r\n                param.Visit(asset, ref offset, visitor);\r\n            }\r\n            offset += 1; // EX_EndFunctionParms\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_CastBase.cs",
    "content": "﻿using Newtonsoft.Json;\nusing System;\nusing UAssetAPI.UnrealTypes;\nusing UAssetAPI.ExportTypes;\n\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\n{\n    /// <summary>\n    /// Base class for several type cast expressions\n    /// </summary>\n    public abstract class EX_CastBase : KismetExpression\n    {\n        /// <summary>\n        /// The interface class to convert to.\n        /// </summary>\n        [JsonProperty]\n        public FPackageIndex ClassPtr;\n\n        /// <summary>\n        /// The target of this expression.\n        /// </summary>\n        [JsonProperty]\n        public KismetExpression Target;\n\n        /// <summary>\n        /// Reads out the expression from a BinaryReader.\n        /// </summary>\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\n        public override void Read(AssetBinaryReader reader)\n        {\n            ClassPtr = reader.XFER_OBJECT_POINTER();\n            Target = ExpressionSerializer.ReadExpression(reader);\n        }\n\n        /// <summary>\n        /// Writes the expression to a BinaryWriter.\n        /// </summary>\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\n        /// <returns>The iCode offset of the data that was written.</returns>\n        public override int Write(AssetBinaryWriter writer)\n        {\n            int offset = 0;\n            offset += writer.XFER_OBJECT_POINTER(ClassPtr);\n            offset += ExpressionSerializer.WriteExpression(Target, writer);\n            return offset;\n        }\n\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\n        {\n            base.Visit(asset, ref offset, visitor);\n            offset += 8; // ClassPtr (8)\n            Target.Visit(asset, ref offset, visitor);\n        }\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_ClassContext.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_ClassContext\"/> instruction.\r\n    /// </summary>\r\n    public class EX_ClassContext : EX_Context\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_ClassContext; } }\r\n\r\n        public EX_ClassContext()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return base.Write(writer);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_ClassSparseDataVariable.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_ClassSparseDataVariable\"/> instruction.\r\n    /// </summary>\r\n    public class EX_ClassSparseDataVariable : EX_VariableBase\n\t{\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_ClassSparseDataVariable; } }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_ClearMulticastDelegate.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_ClearMulticastDelegate\"/> instruction.\r\n    /// </summary>\r\n    public class EX_ClearMulticastDelegate : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_ClearMulticastDelegate; } }\r\n\r\n        /// <summary>\r\n        /// Delegate property to clear.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression DelegateToClear;\r\n\r\n        public EX_ClearMulticastDelegate()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            DelegateToClear = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return ExpressionSerializer.WriteExpression(DelegateToClear, writer);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            DelegateToClear.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_ComputedJump.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_ComputedJump\"/> instruction.\r\n    /// </summary>\r\n    public class EX_ComputedJump : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_ComputedJump; } }\r\n\r\n        /// <summary>\r\n        /// An integer expression corresponding to the offset to jump to.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression CodeOffsetExpression;\r\n\r\n        public EX_ComputedJump()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            CodeOffsetExpression = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return ExpressionSerializer.WriteExpression(CodeOffsetExpression, writer);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            CodeOffsetExpression.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_Context.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_Context\"/> instruction.\r\n    /// </summary>\r\n    public class EX_Context : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_Context; } }\r\n\r\n        /// <summary>\r\n        /// Object expression.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression ObjectExpression;\r\n\r\n        /// <summary>\r\n        /// Code offset for NULL expressions.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public uint Offset;\r\n\r\n        /// <summary>\r\n        /// Old property type.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public byte PropertyType;\r\n\r\n        /// <summary>\r\n        /// Property corresponding to the r-value data, in case the l-value needs to be mem-zero'd. FField*\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetPropertyPointer RValuePointer;\r\n\r\n        /// <summary>\r\n        /// Context expression.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression ContextExpression;\r\n\r\n        public EX_Context()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            ObjectExpression = ExpressionSerializer.ReadExpression(reader);\r\n            Offset = reader.ReadUInt32();\r\n            RValuePointer = reader.XFER_PROP_POINTER();\r\n            if (reader.Asset.ObjectVersion <= ObjectVersion.VER_UE4_SERIALIZE_BLUEPRINT_EVENTGRAPH_FASTCALLS_IN_UFUNCTION)\r\n            {\r\n                PropertyType = reader.ReadByte();\r\n            }\r\n            ContextExpression = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            offset += ExpressionSerializer.WriteExpression(ObjectExpression, writer);\r\n            writer.Write(Offset); offset += sizeof(uint);\r\n            offset += writer.XFER_PROP_POINTER(RValuePointer);\r\n            if (writer.Asset.ObjectVersion <= ObjectVersion.VER_UE4_SERIALIZE_BLUEPRINT_EVENTGRAPH_FASTCALLS_IN_UFUNCTION)\r\n            {\r\n                writer.Write(PropertyType);\r\n                offset += sizeof(byte);\r\n            }\r\n            offset += ExpressionSerializer.WriteExpression(ContextExpression, writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            ObjectExpression.Visit(asset, ref offset, visitor);\r\n            offset += 12; // Offset (4) + RValuePointer (8)\r\n            ContextExpression.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_Context_FailSilent.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_Context_FailSilent\"/> instruction.\r\n    /// </summary>\r\n    public class EX_Context_FailSilent : EX_Context\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_Context_FailSilent; } }\r\n\r\n        public EX_Context_FailSilent()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return base.Write(writer);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_CrossInterfaceCast.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_CrossInterfaceCast\"/> instruction.\r\n    /// </summary>\r\n    public class EX_CrossInterfaceCast : EX_CastBase\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_CrossInterfaceCast; } }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_DefaultVariable.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_DefaultVariable\"/> instruction.\r\n    /// </summary>\r\n    public class EX_DefaultVariable : EX_VariableBase\n\t{\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_DefaultVariable; } }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_DeprecatedOp4A.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_DeprecatedOp4A\"/> instruction.\r\n    /// </summary>\r\n    public class EX_DeprecatedOp4A : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_DeprecatedOp4A; } }\r\n\r\n        public EX_DeprecatedOp4A()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_DoubleConst.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.JSON;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_DoubleConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_DoubleConst : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_DoubleConst; } }\r\n\r\n        /// <summary>\r\n        /// The value of this double constant expression.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        [JsonConverter(typeof(FSignedZeroJsonConverter))]\r\n        public double Value;\r\n\r\n        public EX_DoubleConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Value = reader.ReadDouble();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            writer.Write(Value);\r\n            return sizeof(double);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 8; // Value\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_DynamicCast.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_DynamicCast\"/> instruction.\r\n    /// </summary>\r\n    public class EX_DynamicCast : EX_CastBase\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_DynamicCast; } }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_EndArray.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_EndArray\"/> instruction.\r\n    /// </summary>\r\n    public class EX_EndArray : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_EndArray; } }\r\n\r\n        public EX_EndArray()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_EndArrayConst.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_EndArrayConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_EndArrayConst : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_EndArrayConst; } }\r\n\r\n        public EX_EndArrayConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_EndFunctionParms.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_EndFunctionParms\"/> instruction.\r\n    /// </summary>\r\n    public class EX_EndFunctionParms : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_EndFunctionParms; } }\r\n\r\n        public EX_EndFunctionParms()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_EndMap.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_EndMap\"/> instruction.\r\n    /// </summary>\r\n    public class EX_EndMap : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_EndMap; } }\r\n\r\n        public EX_EndMap()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_EndMapConst.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_EndMapConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_EndMapConst : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_EndMapConst; } }\r\n\r\n        public EX_EndMapConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_EndOfScript.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_EndOfScript\"/> instruction.\r\n    /// </summary>\r\n    public class EX_EndOfScript : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_EndOfScript; } }\r\n\r\n        public EX_EndOfScript()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_EndParmValue.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_EndParmValue\"/> instruction.\r\n    /// </summary>\r\n    public class EX_EndParmValue : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_EndParmValue; } }\r\n\r\n        public EX_EndParmValue()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_EndSet.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_EndSet\"/> instruction.\r\n    /// </summary>\r\n    public class EX_EndSet : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_EndSet; } }\r\n\r\n        public EX_EndSet()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_EndSetConst.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_EndSetConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_EndSetConst : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_EndSetConst; } }\r\n\r\n        public EX_EndSetConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_EndStructConst.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_EndStructConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_EndStructConst : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_EndStructConst; } }\r\n\r\n        public EX_EndStructConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_False.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_False\"/> instruction.\r\n    /// </summary>\r\n    public class EX_False : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_False; } }\r\n\r\n        public EX_False()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_FieldPathConst.cs",
    "content": "﻿using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_FieldPathConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_FieldPathConst : KismetExpression<KismetExpression>\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_FieldPathConst; } }\r\n\r\n        public EX_FieldPathConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Value = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return ExpressionSerializer.WriteExpression(Value, writer);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            Value.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_FinalFunction.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_FinalFunction\"/> instruction.\r\n    /// </summary>\r\n    public class EX_FinalFunction : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_FinalFunction; } }\r\n\r\n        /// <summary>\r\n        /// Stack node.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public FPackageIndex StackNode;\r\n\r\n        /// <summary>\r\n        /// List of parameters for this function.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression[] Parameters;\r\n\r\n        public EX_FinalFunction()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            StackNode = reader.XFER_FUNC_POINTER();\r\n\r\n            Parameters = reader.ReadExpressionArray(EExprToken.EX_EndFunctionParms);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            offset += writer.XFER_FUNC_POINTER(StackNode);\r\n\r\n            for (int i = 0; i < Parameters.Length; i++)\r\n            {\r\n                offset += ExpressionSerializer.WriteExpression(Parameters[i], writer);\r\n            }\r\n            offset += ExpressionSerializer.WriteExpression(new EX_EndFunctionParms(), writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 8; // StackNode (8)\r\n            foreach (var param in Parameters)\r\n            {\r\n                param.Visit(asset, ref offset, visitor);\r\n            }\r\n            offset += 1; // EX_EndFunctionParms\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_FloatConst.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.JSON;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_FloatConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_FloatConst : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_FloatConst; } }\r\n\r\n        /// <summary>\r\n        /// The value of this float constant expression.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        [JsonConverter(typeof(FSignedZeroJsonConverter))]\r\n        public float Value;\r\n\r\n        public EX_FloatConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Value = reader.ReadSingle();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            writer.Write(Value);\r\n            return sizeof(float);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 4; // Value\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_InstanceDelegate.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_InstanceDelegate\"/> instruction.\r\n    /// </summary>\r\n    public class EX_InstanceDelegate : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_InstanceDelegate; } }\r\n\r\n        /// <summary>\r\n        /// The name of the function assigned to the delegate.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public FName FunctionName;\r\n\r\n        public EX_InstanceDelegate()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            FunctionName = reader.XFER_FUNC_NAME();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return writer.XFER_FUNC_NAME(FunctionName);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 12; // FunctionName (FName)\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_InstanceVariable.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_InstanceVariable\"/> instruction.\r\n    /// </summary>\r\n    public class EX_InstanceVariable : EX_VariableBase\n\t{\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_InstanceVariable; } }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_InstrumentationEvent.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_InstrumentationEvent\"/> instruction.\r\n    /// </summary>\r\n    public class EX_InstrumentationEvent : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_InstrumentationEvent; } }\r\n\r\n        [JsonProperty]\r\n        public EScriptInstrumentationType EventType;\r\n        [JsonProperty]\r\n        public FName EventName;\r\n\r\n        public EX_InstrumentationEvent()\r\n        {\r\n            \r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            EventType = (EScriptInstrumentationType)reader.ReadByte();\r\n\r\n            if (EventType.Equals(EScriptInstrumentationType.InlineEvent))\r\n            {\r\n                EventName = reader.XFER_FUNC_NAME();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            writer.Write((byte)EventType);\r\n            if (EventType.Equals(EScriptInstrumentationType.InlineEvent)) {\r\n                writer.XFER_FUNC_NAME(EventName);\r\n                return 1 + 2 * sizeof(int);\r\n            } else {\r\n                return 1;\r\n            }\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 1; // EventType\r\n            if (EventType.Equals(EScriptInstrumentationType.InlineEvent))\r\n            {\r\n                offset += 12; // EventName (FName)\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_Int64Const.cs",
    "content": "﻿using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_Int64Const\"/> instruction.\r\n    /// </summary>\r\n    public class EX_Int64Const : KismetExpression<long>\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_Int64Const; } }\r\n\r\n        public EX_Int64Const()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Value = reader.ReadInt64();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            writer.Write(Value);\r\n            return sizeof(long);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 8; // Value\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_IntConst.cs",
    "content": "﻿using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_IntConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_IntConst : KismetExpression<int>\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_IntConst; } }\r\n\r\n        public EX_IntConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Value = reader.ReadInt32();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            writer.Write(Value);\r\n            return sizeof(int);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 4; // Value\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_IntConstByte.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_IntConstByte\"/> instruction.\r\n    /// </summary>\r\n    public class EX_IntConstByte : KismetExpression<byte>\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_IntConstByte; } }\r\n\r\n        public EX_IntConstByte()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Value = reader.ReadByte();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            writer.Write(Value);\r\n            return sizeof(byte);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_IntOne.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_IntOne\"/> instruction.\r\n    /// </summary>\r\n    public class EX_IntOne : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_IntOne; } }\r\n\r\n        public EX_IntOne()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_IntZero.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_IntZero\"/> instruction.\r\n    /// </summary>\r\n    public class EX_IntZero : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_IntZero; } }\r\n\r\n        public EX_IntZero()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_InterfaceContext.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_InterfaceContext\"/> instruction.\r\n    /// </summary>\r\n    public class EX_InterfaceContext : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_InterfaceContext; } }\r\n\r\n        /// <summary>\r\n        /// Interface value.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression InterfaceValue;\r\n\r\n        public EX_InterfaceContext()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            InterfaceValue = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return ExpressionSerializer.WriteExpression(InterfaceValue, writer);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            InterfaceValue.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_InterfaceToObjCast.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_InterfaceToObjCast\"/> instruction.\r\n    /// </summary>\r\n    public class EX_InterfaceToObjCast : EX_CastBase\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_InterfaceToObjCast; } }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_Jump.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_Jump\"/> instruction.\r\n    /// </summary>\r\n    public class EX_Jump : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_Jump; } }\r\n\r\n        /// <summary>\r\n        /// The offset to jump to.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public uint CodeOffset;\r\n\r\n        public EX_Jump()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            CodeOffset = reader.ReadUInt32();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            writer.Write(CodeOffset);\r\n            return sizeof(uint);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 4; // CodeOffset\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_JumpIfNot.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_JumpIfNot\"/> instruction.\r\n    /// Conditional equivalent of the <see cref=\"EExprToken.EX_Jump\"/> expression.\r\n    /// </summary>\r\n    public class EX_JumpIfNot : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_JumpIfNot; } }\r\n\r\n        /// <summary>\r\n        /// The offset to jump to if the provided expression evaluates to false.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public uint CodeOffset;\r\n\r\n        /// <summary>\r\n        /// Expression to evaluate to determine whether or not a jump should be performed.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression BooleanExpression;\r\n\r\n        public EX_JumpIfNot()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            CodeOffset = reader.ReadUInt32();\r\n            BooleanExpression = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            writer.Write(CodeOffset); offset += sizeof(uint);\r\n            offset += ExpressionSerializer.WriteExpression(BooleanExpression, writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 4; // CodeOffset (4)\r\n            BooleanExpression.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_Let.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_Let\"/> instruction.\r\n    /// </summary>\r\n    public class EX_Let : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_Let; } }\r\n\r\n        /// <summary>\r\n        /// A pointer to the variable.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetPropertyPointer Value;\r\n        [JsonProperty]\r\n        public KismetExpression Variable;\r\n        [JsonProperty]\r\n        public KismetExpression Expression;\r\n\r\n        public EX_Let()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            if (reader.Asset.ObjectVersion > ObjectVersion.VER_UE4_SERIALIZE_BLUEPRINT_EVENTGRAPH_FASTCALLS_IN_UFUNCTION)\r\n            {\r\n                Value = reader.XFER_PROP_POINTER();\r\n            }\r\n            Variable = ExpressionSerializer.ReadExpression(reader);\r\n            Expression = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            if (writer.Asset.ObjectVersion > ObjectVersion.VER_UE4_SERIALIZE_BLUEPRINT_EVENTGRAPH_FASTCALLS_IN_UFUNCTION)\r\n            {\r\n                offset += writer.XFER_PROP_POINTER(Value);\r\n            }\r\n            offset += ExpressionSerializer.WriteExpression(Variable, writer);\r\n            offset += ExpressionSerializer.WriteExpression(Expression, writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 8; // Value (8)\r\n            Variable.Visit(asset, ref offset, visitor);\r\n            Expression.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_LetBase.cs",
    "content": "﻿using Newtonsoft.Json;\nusing System;\nusing UAssetAPI.UnrealTypes;\nusing UAssetAPI.ExportTypes;\n\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\n{\n    /// <summary>\n    /// Base class for several Let (assignment) expressions\n    /// </summary>\n    public abstract class EX_LetBase : KismetExpression\n    {\n        /// <summary>\n        /// The token of this expression.\n        /// </summary>\n        public override EExprToken Token { get { return EExprToken.EX_LetDelegate; } }\n\n        /// <summary>\n        /// Variable expression.\n        /// </summary>\n        [JsonProperty]\n        public KismetExpression VariableExpression;\n\n        /// <summary>\n        /// Assignment expression.\n        /// </summary>\n        [JsonProperty]\n        public KismetExpression AssignmentExpression;\n\n        /// <summary>\n        /// Reads out the expression from a BinaryReader.\n        /// </summary>\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\n        public override void Read(AssetBinaryReader reader)\n        {\n            VariableExpression = ExpressionSerializer.ReadExpression(reader);\n            AssignmentExpression = ExpressionSerializer.ReadExpression(reader);\n        }\n\n        /// <summary>\n        /// Writes the expression to a BinaryWriter.\n        /// </summary>\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\n        /// <returns>The iCode offset of the data that was written.</returns>\n        public override int Write(AssetBinaryWriter writer)\n        {\n            int offset = 0;\n            offset += ExpressionSerializer.WriteExpression(VariableExpression, writer);\n            offset += ExpressionSerializer.WriteExpression(AssignmentExpression, writer);\n            return offset;\n        }\n\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\n        {\n            base.Visit(asset, ref offset, visitor);\n            VariableExpression.Visit(asset, ref offset, visitor);\n            AssignmentExpression.Visit(asset, ref offset, visitor);\n        }\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_LetBool.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_LetBool\"/> instruction.\r\n    /// </summary>\r\n    public class EX_LetBool : EX_LetBase\n\t{\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_LetBool; } }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_LetDelegate.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_LetDelegate\"/> instruction.\r\n    /// </summary>\r\n    public class EX_LetDelegate : EX_LetBase\n\t{\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_LetDelegate; } }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_LetMulticastDelegate.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_LetMulticastDelegate\"/> instruction.\r\n    /// </summary>\r\n    public class EX_LetMulticastDelegate : EX_LetBase\n\t{\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_LetMulticastDelegate; } }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_LetObj.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_LetObj\"/> instruction.\r\n    /// </summary>\r\n    public class EX_LetObj : EX_LetBase\n\t{\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_LetObj; } }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_LetValueOnPersistentFrame.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_LetValueOnPersistentFrame\"/> instruction.\r\n    /// </summary>\r\n    public class EX_LetValueOnPersistentFrame : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_LetValueOnPersistentFrame; } }\r\n\r\n        /// <summary>\r\n        /// Destination property pointer.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetPropertyPointer DestinationProperty;\r\n\r\n        /// <summary>\r\n        /// Assignment expression.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression AssignmentExpression;\r\n\r\n        public EX_LetValueOnPersistentFrame()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            DestinationProperty = reader.XFER_PROP_POINTER();\r\n            AssignmentExpression = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            offset += writer.XFER_PROP_POINTER(DestinationProperty);\r\n            offset += ExpressionSerializer.WriteExpression(AssignmentExpression, writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 8; // DestinationProperty (8)\r\n            AssignmentExpression.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_LetWeakObjPtr.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_LetWeakObjPtr\"/> instruction.\r\n    /// </summary>\r\n    public class EX_LetWeakObjPtr : EX_LetBase\n\t{\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_LetWeakObjPtr; } }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_LocalFinalFunction.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_LocalFinalFunction\"/> instruction.\r\n    /// </summary>\r\n    public class EX_LocalFinalFunction : EX_FinalFunction\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_LocalFinalFunction; } }\r\n\r\n        public EX_LocalFinalFunction() : base()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return base.Write(writer);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_LocalOutVariable.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_LocalOutVariable\"/> instruction.\r\n    /// </summary>\r\n    public class EX_LocalOutVariable : EX_VariableBase\n\t{\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_LocalOutVariable; } }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_LocalVariable.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_LocalVariable\"/> instruction.\r\n    /// </summary>\r\n    public class EX_LocalVariable : EX_VariableBase\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_LocalVariable; } }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_LocalVirtualFunction.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_LocalVirtualFunction\"/> instruction.\r\n    /// </summary>\r\n    public class EX_LocalVirtualFunction : EX_VirtualFunction\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_LocalVirtualFunction; } }\r\n\r\n        public EX_LocalVirtualFunction() : base()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            base.Read(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return base.Write(writer);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_MapConst.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_MapConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_MapConst : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_MapConst; } }\r\n\r\n        /// <summary>\r\n        /// Pointer to this constant's key property (FProperty*).\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetPropertyPointer KeyProperty;\r\n\r\n        /// <summary>\r\n        /// Pointer to this constant's value property (FProperty*).\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetPropertyPointer ValueProperty;\r\n\r\n        /// <summary>\r\n        /// Set constant entries.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression[] Elements;\r\n\r\n        public EX_MapConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            KeyProperty = reader.XFER_PROP_POINTER();\r\n            ValueProperty = reader.XFER_PROP_POINTER();\r\n            int numEntries = reader.ReadInt32(); // Number of elements\r\n            Elements = reader.ReadExpressionArray(EExprToken.EX_EndMapConst);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            offset += writer.XFER_PROP_POINTER(KeyProperty);\r\n            offset += writer.XFER_PROP_POINTER(ValueProperty);\r\n            writer.Write(Elements.Length / 2); offset += sizeof(int);\r\n            for (int i = 0; i < Elements.Length; i++)\r\n            {\r\n                offset += ExpressionSerializer.WriteExpression(Elements[i], writer);\r\n            }\r\n            offset += ExpressionSerializer.WriteExpression(new EX_EndMapConst(), writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 20; // KeyProperty (8) + ValueProperty (8) + NumElements (4)\r\n            foreach (var element in Elements)\r\n            {\r\n                element.Visit(asset, ref offset, visitor);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_MetaCast.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_MetaCast\"/> instruction.\r\n    /// </summary>\r\n    public class EX_MetaCast : EX_CastBase\n\t{\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_MetaCast; } }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_NameConst.cs",
    "content": "﻿using System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_NameConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_NameConst : KismetExpression<FName>\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_NameConst; } }\r\n\r\n        public EX_NameConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Value = reader.XFERNAME();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return writer.XFERNAME(Value);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 12; // FName (Index + Number + ?)\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_NoInterface.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_NoInterface\"/> instruction.\r\n    /// </summary>\r\n    public class EX_NoInterface : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_NoInterface; } }\r\n\r\n        public EX_NoInterface()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_NoObject.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_NoObject\"/> instruction.\r\n    /// </summary>\r\n    public class EX_NoObject : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_NoObject; } }\r\n\r\n        public EX_NoObject()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_Nothing.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_Nothing\"/> instruction.\r\n    /// Represents a no-op.\r\n    /// </summary>\r\n    public class EX_Nothing : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_Nothing; } }\r\n\r\n        public EX_Nothing()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_NothingInt32.cs",
    "content": "using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_NothingInt32\"/> instruction.\r\n    /// No operation with an int32 argument (useful for debugging script disassembly).\r\n    /// </summary>\r\n    public class EX_NothingInt32 : KismetExpression<int>\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_NothingInt32; } }\r\n\r\n        public EX_NothingInt32()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Value = reader.ReadInt32();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            writer.Write(Value);\r\n            return sizeof(int);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 4; // Value\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_ObjToInterfaceCast.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_ObjToInterfaceCast\"/> instruction.\r\n    /// A conversion from an object or interface variable to a native interface variable.\r\n    /// </summary>\r\n    public class EX_ObjToInterfaceCast : EX_CastBase\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_ObjToInterfaceCast; } }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_ObjectConst.cs",
    "content": "﻿using System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_ObjectConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_ObjectConst : KismetExpression<FPackageIndex>\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_ObjectConst; } }\r\n\r\n        public EX_ObjectConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Value = reader.XFER_OBJECT_POINTER();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return writer.XFER_OBJECT_POINTER(Value);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 8; // Value (FPackageIndex)\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_PopExecutionFlow.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_PopExecutionFlow\"/> instruction.\r\n    /// </summary>\r\n    public class EX_PopExecutionFlow : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_PopExecutionFlow; } }\r\n\r\n        public EX_PopExecutionFlow()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_PopExecutionFlowIfNot.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_PopExecutionFlowIfNot\"/> instruction.\r\n    /// Conditional equivalent of the <see cref=\"EExprToken.EX_PopExecutionFlow\"/> expression.\r\n    /// </summary>\r\n    public class EX_PopExecutionFlowIfNot : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_PopExecutionFlowIfNot; } }\r\n\r\n        /// <summary>\r\n        /// Expression to evaluate to determine whether or not a pop should be performed.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression BooleanExpression;\r\n\r\n        public EX_PopExecutionFlowIfNot()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            BooleanExpression = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return ExpressionSerializer.WriteExpression(BooleanExpression, writer);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            BooleanExpression.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_PrimitiveCast.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_PrimitiveCast\"/> instruction.\r\n    /// </summary>\r\n    public class EX_PrimitiveCast : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The type to cast to.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public ECastToken ConversionType;\r\n\r\n        /// <summary>\r\n        /// The target of this expression.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression Target;\r\n\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_PrimitiveCast; } }\r\n\r\n        public EX_PrimitiveCast()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            ConversionType = (ECastToken)reader.ReadByte();\r\n            Target = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            writer.Write((byte)ConversionType); offset += sizeof(byte);\r\n            offset += ExpressionSerializer.WriteExpression(Target, writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 1; // ConversionType (1)\r\n            if (ConversionType == ECastToken.ObjectToInterface)\r\n            {\r\n                offset += 8; // InterfaceClass\r\n            }\r\n            Target.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_PropertyConst.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_PropertyConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_PropertyConst : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_PropertyConst; } }\r\n\r\n        /// <summary>\r\n        /// A pointer to the property in question.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetPropertyPointer Property;\r\n\r\n        public EX_PropertyConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Property = reader.XFER_PROP_POINTER();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return writer.XFER_PROP_POINTER(Property);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 8; // Property (KismetPropertyPointer)\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_PushExecutionFlow.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_PushExecutionFlow\"/> instruction.\r\n    /// </summary>\r\n    public class EX_PushExecutionFlow : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_PushExecutionFlow; } }\r\n\r\n        /// <summary>\r\n        /// The address to push onto the execution flow stack.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public uint PushingAddress;\r\n\r\n        public EX_PushExecutionFlow()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            PushingAddress = reader.ReadUInt32();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            writer.Write(PushingAddress);\r\n            return sizeof(uint);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 4; // PushingAddress\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_RemoveMulticastDelegate.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_RemoveMulticastDelegate\"/> instruction.\r\n    /// </summary>\r\n    public class EX_RemoveMulticastDelegate : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_RemoveMulticastDelegate; } }\r\n\r\n        /// <summary>\r\n        /// Delegate property to assign to.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression Delegate;\r\n\r\n        /// <summary>\r\n        /// Delegate to add to the MC delegate for broadcast.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression DelegateToAdd;\r\n\r\n        public EX_RemoveMulticastDelegate()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Delegate = ExpressionSerializer.ReadExpression(reader);\r\n            DelegateToAdd = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            offset += ExpressionSerializer.WriteExpression(Delegate, writer);\r\n            offset += ExpressionSerializer.WriteExpression(DelegateToAdd, writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            Delegate.Visit(asset, ref offset, visitor);\r\n            DelegateToAdd.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_Return.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_Return\"/> instruction.\r\n    /// </summary>\r\n    public class EX_Return : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_Return; } }\r\n\r\n        /// <summary>\r\n        /// The return expression.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression ReturnExpression;\r\n\r\n        public EX_Return()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            ReturnExpression = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return ExpressionSerializer.WriteExpression(ReturnExpression, writer);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            ReturnExpression.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_RotationConst.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_RotationConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_RotationConst : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_RotationConst; } }\r\n\r\n        [JsonProperty]\r\n        public FRotator Value;\r\n\r\n        public EX_RotationConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES)\r\n            {\r\n                Value = new FRotator(reader.ReadDouble(), reader.ReadDouble(), reader.ReadDouble());\r\n            }\r\n            else\r\n            {\r\n                Value = new FRotator(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            if (writer.Asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES)\r\n            {\r\n                writer.Write(Value.Pitch);\r\n                writer.Write(Value.Yaw);\r\n                writer.Write(Value.Roll);\r\n                return sizeof(double) * 3;\r\n            }\r\n            else\r\n            {\r\n                writer.Write(Value.PitchFloat);\r\n                writer.Write(Value.YawFloat);\r\n                writer.Write(Value.RollFloat);\r\n                return sizeof(float) * 3;\r\n            }\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES ? 24U : 12U;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_Self.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_Self\"/> instruction.\r\n    /// </summary>\r\n    public class EX_Self : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_Self; } }\r\n\r\n        public EX_Self()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_SetArray.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_SetArray\"/> instruction.\r\n    /// </summary>\r\n    public class EX_SetArray : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_SetArray; } }\r\n\r\n        /// <summary>\r\n        /// Array property to assign to\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression AssigningProperty;\r\n\r\n        /// <summary>\r\n        /// Pointer to the array inner property (FProperty*).\r\n        /// Only used in engine versions prior to <see cref=\"ObjectVersion.VER_UE4_CHANGE_SETARRAY_BYTECODE\"/>.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public FPackageIndex ArrayInnerProp;\r\n\r\n        /// <summary>\r\n        /// Array items.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression[] Elements;\r\n\r\n        public EX_SetArray()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            if (reader.Asset.ObjectVersion >= ObjectVersion.VER_UE4_CHANGE_SETARRAY_BYTECODE)\r\n            {\r\n                AssigningProperty = ExpressionSerializer.ReadExpression(reader);\r\n            }\r\n            else\r\n            {\r\n                ArrayInnerProp = reader.XFERPTR();\r\n            }\r\n\r\n            Elements = reader.ReadExpressionArray(EExprToken.EX_EndArray);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            if (writer.Asset.ObjectVersion >= ObjectVersion.VER_UE4_CHANGE_SETARRAY_BYTECODE)\r\n            {\r\n                offset += ExpressionSerializer.WriteExpression(AssigningProperty, writer);\r\n            }\r\n            else\r\n            {\r\n                offset += writer.XFERPTR(ArrayInnerProp);\r\n            }\r\n\r\n            for (int i = 0; i < Elements.Length; i++)\r\n            {\r\n                offset += ExpressionSerializer.WriteExpression(Elements[i], writer);\r\n            }\r\n            offset += ExpressionSerializer.WriteExpression(new EX_EndArray(), writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            AssigningProperty.Visit(asset, ref offset, visitor);\r\n            foreach (var element in Elements)\r\n            {\r\n                element.Visit(asset, ref offset, visitor);\r\n            }\r\n            offset += 1; // EX_EndArray\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_SetConst.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_SetConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_SetConst : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_SetConst; } }\r\n\r\n        /// <summary>\r\n        /// Pointer to this constant's inner property (FProperty*).\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetPropertyPointer InnerProperty;\r\n\r\n        /// <summary>\r\n        /// Set constant entries.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression[] Elements;\r\n\r\n        public EX_SetConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            InnerProperty = reader.XFER_PROP_POINTER();\r\n            int numEntries = reader.ReadInt32(); // Number of elements\r\n            Elements = reader.ReadExpressionArray(EExprToken.EX_EndSetConst);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            offset += writer.XFER_PROP_POINTER(InnerProperty);\r\n            writer.Write(Elements.Length); offset += sizeof(int);\r\n            for (int i = 0; i < Elements.Length; i++)\r\n            {\r\n                offset += ExpressionSerializer.WriteExpression(Elements[i], writer);\r\n            }\r\n            offset += ExpressionSerializer.WriteExpression(new EX_EndSetConst(), writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 12; // InnerProperty (8) + NumElements (4)\r\n            foreach (var e in Elements)\r\n            {\r\n                e.Visit(asset, ref offset, visitor);\r\n            }\r\n            offset += 1; // EX_EndSetConst\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_SetMap.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_SetMap\"/> instruction.\r\n    /// </summary>\r\n    public class EX_SetMap : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_SetMap; } }\r\n\r\n        /// <summary>\r\n        /// Map property.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression MapProperty;\r\n\r\n        /// <summary>\r\n        /// Set entries.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression[] Elements;\r\n\r\n        public EX_SetMap()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            MapProperty = ExpressionSerializer.ReadExpression(reader);\r\n            int numEntries = reader.ReadInt32(); // Number of elements\r\n            Elements = reader.ReadExpressionArray(EExprToken.EX_EndMap);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            offset += ExpressionSerializer.WriteExpression(MapProperty, writer);\r\n            // count is number if pairs so is half the number of elements\r\n            writer.Write(Elements.Length / 2); offset += sizeof(int);\r\n            for (int i = 0; i < Elements.Length; i++)\r\n            {\r\n                offset += ExpressionSerializer.WriteExpression(Elements[i], writer);\r\n            }\r\n            offset += ExpressionSerializer.WriteExpression(new EX_EndMap(), writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            MapProperty.Visit(asset, ref offset, visitor);\r\n            offset += 4; // NumElements\r\n            foreach (var e in Elements)\r\n            {\r\n                e.Visit(asset, ref offset, visitor);\r\n            }\r\n            offset += 1; // EX_EndMap\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_SetSet.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_SetSet\"/> instruction.\r\n    /// </summary>\r\n    public class EX_SetSet : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_SetSet; } }\r\n\r\n        /// <summary>\r\n        /// Set property.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression SetProperty;\r\n\r\n        /// <summary>\r\n        /// Set entries.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression[] Elements;\r\n\r\n        public EX_SetSet()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            SetProperty = ExpressionSerializer.ReadExpression(reader);\r\n            int numEntries = reader.ReadInt32(); // Number of elements\r\n            Elements = reader.ReadExpressionArray(EExprToken.EX_EndSet);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            offset += ExpressionSerializer.WriteExpression(SetProperty, writer);\r\n            writer.Write(Elements.Length); offset += sizeof(int);\r\n            for (int i = 0; i < Elements.Length; i++)\r\n            {\r\n                offset += ExpressionSerializer.WriteExpression(Elements[i], writer);\r\n            }\r\n            offset += ExpressionSerializer.WriteExpression(new EX_EndSet(), writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            SetProperty.Visit(asset, ref offset, visitor);\r\n            offset += 4; // NumElements\r\n            foreach (var e in Elements)\r\n            {\r\n                e.Visit(asset, ref offset, visitor);\r\n            }\r\n            offset += 1; // EX_EndSet\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_Skip.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_Skip\"/> instruction.\r\n    /// </summary>\r\n    public class EX_Skip : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_Skip; } }\r\n\r\n        /// <summary>\r\n        /// The offset to skip to.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public uint CodeOffset;\r\n\r\n        /// <summary>\r\n        /// An expression to possibly skip.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression SkipExpression;\r\n\r\n        public EX_Skip()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            CodeOffset = reader.ReadUInt32();\r\n            SkipExpression = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            writer.Write(CodeOffset); offset += sizeof(uint);\r\n            offset += ExpressionSerializer.WriteExpression(SkipExpression, writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 4; // CodeOffset\r\n            SkipExpression.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_SkipOffsetConst.cs",
    "content": "﻿using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_SkipOffsetConst\"/> instruction.\r\n    /// Represents a code offset constant.\r\n    /// </summary>\r\n    public class EX_SkipOffsetConst : KismetExpression<uint>\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_SkipOffsetConst; } }\r\n\r\n        public EX_SkipOffsetConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Value = reader.ReadUInt32();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            writer.Write(Value);\r\n            return sizeof(uint);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 4; // Value\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_SoftObjectConst.cs",
    "content": "﻿using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_SoftObjectConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_SoftObjectConst : KismetExpression<KismetExpression>\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_SoftObjectConst; } }\r\n\r\n        public EX_SoftObjectConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Value = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return ExpressionSerializer.WriteExpression(Value, writer);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            Value.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_StringConst.cs",
    "content": "﻿using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_StringConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_StringConst : KismetExpression<string>\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_StringConst; } }\r\n\r\n        public EX_StringConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Value = reader.XFERSTRING();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return writer.XFERSTRING(Value);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += (uint)Value.Length + 1; // String + null terminator\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_StructConst.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_StructConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_StructConst : KismetExpression<KismetExpression[]>\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_StructConst; } }\r\n\r\n        /// <summary>\r\n        /// Pointer to the UScriptStruct in question.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public FPackageIndex Struct;\r\n\r\n        /// <summary>\r\n        /// The size of the struct that this constant represents in memory in bytes.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public int StructSize;\r\n\r\n        public EX_StructConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Struct = reader.XFERPTR();\r\n            StructSize = reader.ReadInt32();\r\n            Value = reader.ReadExpressionArray(EExprToken.EX_EndStructConst);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            offset += writer.XFERPTR(Struct);\r\n            writer.Write(StructSize); offset += sizeof(int);\r\n\r\n            for (int i = 0; i < Value.Length; i++)\r\n            {\r\n                offset += ExpressionSerializer.WriteExpression(Value[i], writer);\r\n            }\r\n\r\n            // Write end expression\r\n            offset += ExpressionSerializer.WriteExpression(new EX_EndStructConst(), writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 12; // Struct (8) + StructSize (4)\r\n            foreach (var v in Value)\r\n            {\r\n                v.Visit(asset, ref offset, visitor);\r\n            }\r\n            offset += 1; // EX_EndStructConst\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_StructMemberContext.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_StructMemberContext\"/> instruction.\r\n    /// </summary>\r\n    public class EX_StructMemberContext : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_StructMemberContext; } }\r\n\r\n        /// <summary>\r\n        /// A pointer to the struct member expression (FProperty*).\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetPropertyPointer StructMemberExpression;\r\n\r\n        /// <summary>\r\n        /// Struct expression.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression StructExpression;\r\n\r\n        public EX_StructMemberContext()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            StructMemberExpression = reader.XFER_PROP_POINTER();\r\n            StructExpression = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            offset += writer.XFER_PROP_POINTER(StructMemberExpression);\r\n            offset += ExpressionSerializer.WriteExpression(StructExpression, writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 8; // StructMemberExpression (8)\r\n            StructExpression.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_SwitchValue.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// Represents a case in a Kismet bytecode switch statement.\r\n    /// </summary>\r\n    [JsonObject(MemberSerialization.OptIn)]\r\n    public struct FKismetSwitchCase\r\n    {\r\n        /// <summary>\r\n        /// The index value term of this case.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression CaseIndexValueTerm;\r\n\r\n        /// <summary>\r\n        /// Code offset to the next case.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public uint NextOffset;\r\n\r\n        /// <summary>\r\n        /// The main case term.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression CaseTerm;\r\n\r\n        public FKismetSwitchCase(KismetExpression caseIndexValueTerm, uint nextOffset, KismetExpression caseTerm)\r\n        {\r\n            CaseIndexValueTerm = caseIndexValueTerm;\r\n            NextOffset = nextOffset;\r\n            CaseTerm = caseTerm;\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_SwitchValue\"/> instruction.\r\n    /// </summary>\r\n    public class EX_SwitchValue : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_SwitchValue; } }\r\n\r\n        /// <summary>\r\n        /// Code offset to jump to when finished.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public uint EndGotoOffset;\r\n\r\n        /// <summary>\r\n        /// The index term of this switch statement.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression IndexTerm;\r\n\r\n        /// <summary>\r\n        /// The default term of this switch statement.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression DefaultTerm;\r\n\r\n        /// <summary>\r\n        /// All the cases in this switch statement.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public FKismetSwitchCase[] Cases;\r\n\r\n        public EX_SwitchValue()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            ushort numCases = reader.ReadUInt16(); // number of cases, without default one\r\n            EndGotoOffset = reader.ReadUInt32();\r\n            IndexTerm = ExpressionSerializer.ReadExpression(reader);\r\n\r\n            Cases = new FKismetSwitchCase[numCases];\r\n            for (int i = 0; i < numCases; i++)\r\n            {\r\n                KismetExpression termA = ExpressionSerializer.ReadExpression(reader);\r\n                uint termB = reader.ReadUInt32();\r\n                KismetExpression termC = ExpressionSerializer.ReadExpression(reader);\r\n                Cases[i] = new FKismetSwitchCase(termA, termB, termC);\r\n            }\r\n\r\n            DefaultTerm = ExpressionSerializer.ReadExpression(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            writer.Write((ushort)Cases.Length); offset += sizeof(ushort);\r\n            writer.Write(EndGotoOffset); offset += sizeof(uint);\r\n            offset += ExpressionSerializer.WriteExpression(IndexTerm, writer);\r\n            for (int i = 0; i < Cases.Length; i++)\r\n            {\r\n                offset += ExpressionSerializer.WriteExpression(Cases[i].CaseIndexValueTerm, writer);\r\n                writer.Write(Cases[i].NextOffset); offset += sizeof(uint);\r\n                offset += ExpressionSerializer.WriteExpression(Cases[i].CaseTerm, writer);\r\n            }\r\n            offset += ExpressionSerializer.WriteExpression(DefaultTerm, writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 6; // NumCases (2) + EndGotoOffset (4)\r\n            IndexTerm.Visit(asset, ref offset, visitor);\r\n            foreach (var c in Cases)\r\n            {\r\n                c.CaseIndexValueTerm.Visit(asset, ref offset, visitor);\r\n                offset += 4; // NextOffset\r\n                c.CaseTerm.Visit(asset, ref offset, visitor);\r\n            }\r\n            DefaultTerm.Visit(asset, ref offset, visitor);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_TextConst.cs",
    "content": "﻿using System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_TextConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_TextConst : KismetExpression<FScriptText>\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_TextConst; } }\r\n\r\n        public EX_TextConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Value = new FScriptText();\r\n            Value.Read(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return Value.Write(writer);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 1; // TextLiteralType\r\n            switch (Value.TextLiteralType)\r\n            {\r\n                case EBlueprintTextLiteralType.Empty:\r\n                    break;\r\n                case EBlueprintTextLiteralType.LocalizedText:\r\n                    Value.LocalizedSource.Visit(asset, ref offset, visitor);\r\n                    Value.LocalizedKey.Visit(asset, ref offset, visitor);\r\n                    Value.LocalizedNamespace.Visit(asset, ref offset, visitor);\r\n                    break;\r\n                case EBlueprintTextLiteralType.InvariantText:\r\n                    Value.InvariantLiteralString.Visit(asset, ref offset, visitor);\r\n                    break;\r\n                case EBlueprintTextLiteralType.LiteralString:\r\n                    Value.LiteralString.Visit(asset, ref offset, visitor);\r\n                    break;\r\n                case EBlueprintTextLiteralType.StringTableEntry:\r\n                    offset += 8; // StringTableAsset\r\n                    Value.StringTableId.Visit(asset, ref offset, visitor);\r\n                    Value.StringTableKey.Visit(asset, ref offset, visitor);\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_Tracepoint.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_Tracepoint\"/> instruction.\r\n    /// </summary>\r\n    public class EX_Tracepoint : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_Tracepoint; } }\r\n\r\n        public EX_Tracepoint()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_TransformConst.cs",
    "content": "﻿using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions;\r\n\r\n/// <summary>\r\n/// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_TransformConst\"/> instruction.\r\n/// </summary>\r\npublic class EX_TransformConst : KismetExpression<FTransform>\r\n{\r\n    /// <summary>\r\n    /// The token of this expression.\r\n    /// </summary>\r\n    public override EExprToken Token { get { return EExprToken.EX_TransformConst; } }\r\n\r\n    public EX_TransformConst() { Value = new(); }\r\n\r\n    /// <summary>\r\n    /// Reads out the expression from a BinaryReader.\r\n    /// </summary>\r\n    /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n    public override void Read(AssetBinaryReader reader)\r\n    {\r\n        Value = new FTransform(reader);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Writes the expression to a BinaryWriter.\r\n    /// </summary>\r\n    /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n    /// <returns>The iCode offset of the data that was written.</returns>\r\n    public override int Write(AssetBinaryWriter writer)\r\n    {\r\n        return Value.Write(writer);\r\n    }\r\n\r\n    public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n    {\r\n        base.Visit(asset, ref offset, visitor);\r\n        offset += asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES ? 80U : 40U;\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_True.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_True\"/> instruction.\r\n    /// </summary>\r\n    public class EX_True : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_True; } }\r\n\r\n        public EX_True()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_UInt64Const.cs",
    "content": "﻿using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_UInt64Const\"/> instruction.\r\n    /// </summary>\r\n    public class EX_UInt64Const : KismetExpression<ulong>\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_UInt64Const; } }\r\n\r\n        public EX_UInt64Const()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Value = reader.ReadUInt64();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            writer.Write(Value);\r\n            return sizeof(ulong);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 8; // Value\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_UnicodeStringConst.cs",
    "content": "﻿using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_UnicodeStringConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_UnicodeStringConst : KismetExpression<string>\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_UnicodeStringConst; } }\r\n\r\n        public EX_UnicodeStringConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            Value = reader.XFERUNICODESTRING();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return writer.XFERUNICODESTRING(Value);\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 2 * ((uint)Value.Length + 1); // Unicode string + null terminator (2 bytes per char)\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_VariableBase.cs",
    "content": "﻿using Newtonsoft.Json;\nusing System;\nusing UAssetAPI.UnrealTypes;\nusing UAssetAPI.ExportTypes;\n\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\n{\n    /// <summary>\n    /// Base class for Kismet Variable expressions\n    /// </summary>\n    public abstract class EX_VariableBase : KismetExpression\n    {\n        /// <summary>\n        /// The token of this expression.\n        /// </summary>\n        public override EExprToken Token { get { return EExprToken.EX_ClassSparseDataVariable; } }\n\n        /// <summary>\n        /// A pointer to the variable in question.\n        /// </summary>\n        [JsonProperty]\n        public KismetPropertyPointer Variable;\n\n        /// <summary>\n        /// Reads out the expression from a BinaryReader.\n        /// </summary>\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\n        public override void Read(AssetBinaryReader reader)\n        {\n            Variable = reader.XFER_PROP_POINTER();\n        }\n\n        /// <summary>\n        /// Writes the expression to a BinaryWriter.\n        /// </summary>\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\n        /// <returns>The iCode offset of the data that was written.</returns>\n        public override int Write(AssetBinaryWriter writer)\n        {\n            return writer.XFER_PROP_POINTER(Variable);\n        }\n\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\n        {\n            base.Visit(asset, ref offset, visitor);\n            offset += 8; // Variable (KismetPropertyPointer)\n        }\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_Vector3fConst.cs",
    "content": "using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_Vector3fConst\"/> instruction.\r\n    /// A float vector constant (always 3 floats, regardless of LWC).\r\n    /// </summary>\r\n    public class EX_Vector3fConst : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_Vector3fConst; } }\r\n\r\n        [JsonProperty]\r\n        public float X;\r\n\r\n        [JsonProperty]\r\n        public float Y;\r\n\r\n        [JsonProperty]\r\n        public float Z;\r\n\r\n        public EX_Vector3fConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            X = reader.ReadSingle();\r\n            Y = reader.ReadSingle();\r\n            Z = reader.ReadSingle();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            writer.Write(X);\r\n            writer.Write(Y);\r\n            writer.Write(Z);\r\n            return sizeof(float) * 3;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 12; // 3 floats\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_VectorConst.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_VectorConst\"/> instruction.\r\n    /// </summary>\r\n    public class EX_VectorConst : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_VectorConst; } }\r\n\r\n        [JsonProperty]\r\n        public FVector Value;\r\n\r\n        public EX_VectorConst()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES)\r\n            {\r\n                Value = new FVector(reader.ReadDouble(), reader.ReadDouble(), reader.ReadDouble());\r\n            }\r\n            else\r\n            {\r\n                Value = new FVector(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            if (writer.Asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES)\r\n            {\r\n                writer.Write(Value.X);\r\n                writer.Write(Value.Y);\r\n                writer.Write(Value.Z);\r\n                return sizeof(double) * 3;\r\n            }\r\n            else\r\n            {\r\n                writer.Write(Value.XFloat);\r\n                writer.Write(Value.YFloat);\r\n                writer.Write(Value.ZFloat);\r\n                return sizeof(float) * 3;\r\n            }\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES ? 24U : 12U;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_VirtualFunction.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_VirtualFunction\"/> instruction.\r\n    /// </summary>\r\n    public class EX_VirtualFunction : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_VirtualFunction; } }\r\n\r\n        /// <summary>\r\n        /// Virtual function name.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public FName VirtualFunctionName;\r\n\r\n        /// <summary>\r\n        /// List of parameters for this function.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression[] Parameters;\r\n\r\n        public EX_VirtualFunction()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n            VirtualFunctionName = reader.XFER_FUNC_NAME();\r\n\r\n            Parameters = reader.ReadExpressionArray(EExprToken.EX_EndFunctionParms);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            offset += writer.XFER_FUNC_NAME(VirtualFunctionName);\r\n\r\n            for (int i = 0; i < Parameters.Length; i++)\r\n            {\r\n                offset += ExpressionSerializer.WriteExpression(Parameters[i], writer);\r\n            }\r\n            offset += ExpressionSerializer.WriteExpression(new EX_EndFunctionParms(), writer);\r\n            return offset;\r\n        }\r\n\r\n        public override void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            base.Visit(asset, ref offset, visitor);\r\n            offset += 12; // VirtualFunctionName (12)\r\n            foreach (var param in Parameters)\r\n            {\r\n                param.Visit(asset, ref offset, visitor);\r\n            }\r\n            offset += 1; // EX_EndFunctionParms\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/Expressions/EX_WireTracepoint.cs",
    "content": "﻿namespace UAssetAPI.Kismet.Bytecode.Expressions\r\n{\r\n    /// <summary>\r\n    /// A single Kismet bytecode instruction, corresponding to the <see cref=\"EExprToken.EX_WireTracepoint\"/> instruction.\r\n    /// </summary>\r\n    public class EX_WireTracepoint : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public override EExprToken Token { get { return EExprToken.EX_WireTracepoint; } }\r\n\r\n        public EX_WireTracepoint()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out the expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public override void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public override int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/FScriptText.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode\r\n{\r\n    /// <summary>\r\n    /// Represents an FText as serialized in Kismet bytecode.\r\n    /// </summary>\r\n    [JsonObject(MemberSerialization.OptIn)]\r\n    public class FScriptText\r\n    {\r\n        [JsonProperty]\r\n        public EBlueprintTextLiteralType TextLiteralType;\r\n\r\n        /// <summary>\r\n        /// Source of this text if it is localized text. Used when <see cref=\"TextLiteralType\"/> is <see cref=\"EBlueprintTextLiteralType.InvariantText\"/>.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression LocalizedSource;\r\n\r\n        /// <summary>\r\n        /// Key of this text if it is localized text. Used when <see cref=\"TextLiteralType\"/> is <see cref=\"EBlueprintTextLiteralType.InvariantText\"/>.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression LocalizedKey;\r\n\r\n        /// <summary>\r\n        /// Namespace of this text if it is localized text. Used when <see cref=\"TextLiteralType\"/> is <see cref=\"EBlueprintTextLiteralType.InvariantText\"/>.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression LocalizedNamespace;\r\n\r\n        /// <summary>\r\n        /// Value of this text if it is an invariant string literal. Used when <see cref=\"TextLiteralType\"/> is <see cref=\"EBlueprintTextLiteralType.InvariantText\"/>.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression InvariantLiteralString;\r\n\r\n        /// <summary>\r\n        /// Value of this text if it is a string literal. Used when <see cref=\"TextLiteralType\"/> is <see cref=\"EBlueprintTextLiteralType.LiteralString\"/>.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression LiteralString;\r\n\r\n        /// <summary>\r\n        /// Pointer to this text's UStringTable. Not used at runtime, but exists for asset dependency gathering. Used when <see cref=\"TextLiteralType\"/> is <see cref=\"EBlueprintTextLiteralType.StringTableEntry\"/>.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public FPackageIndex StringTableAsset;\r\n\r\n        /// <summary>\r\n        /// Table ID string literal (namespace). Used when <see cref=\"TextLiteralType\"/> is <see cref=\"EBlueprintTextLiteralType.StringTableEntry\"/>.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression StringTableId;\r\n\r\n        /// <summary>\r\n        /// String table key string literal. Used when <see cref=\"TextLiteralType\"/> is <see cref=\"EBlueprintTextLiteralType.StringTableEntry\"/>.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public KismetExpression StringTableKey;\r\n\r\n        /// <summary>\r\n        /// Reads out an FBlueprintText from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public virtual void Read(AssetBinaryReader reader)\r\n        {\r\n            TextLiteralType = (EBlueprintTextLiteralType)reader.ReadByte();\r\n            switch (TextLiteralType)\r\n            {\r\n                case EBlueprintTextLiteralType.Empty:\r\n                    break;\r\n                case EBlueprintTextLiteralType.LocalizedText:\r\n                    LocalizedSource = ExpressionSerializer.ReadExpression(reader);\r\n                    LocalizedKey = ExpressionSerializer.ReadExpression(reader);\r\n                    LocalizedNamespace = ExpressionSerializer.ReadExpression(reader);\r\n                    break;\r\n                case EBlueprintTextLiteralType.InvariantText: // IsCultureInvariant\r\n                    InvariantLiteralString = ExpressionSerializer.ReadExpression(reader);\r\n                    break;\r\n                case EBlueprintTextLiteralType.LiteralString:\r\n                    LiteralString = ExpressionSerializer.ReadExpression(reader);\r\n                    break;\r\n                case EBlueprintTextLiteralType.StringTableEntry:\r\n                    StringTableAsset = reader.XFER_OBJECT_POINTER();\r\n                    StringTableId = ExpressionSerializer.ReadExpression(reader);\r\n                    StringTableKey = ExpressionSerializer.ReadExpression(reader);\r\n                    break;\r\n                default:\r\n                    throw new NotImplementedException(\"Unimplemented blueprint text literal type \" + TextLiteralType);\r\n            }\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes an FBlueprintText to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public virtual int Write(AssetBinaryWriter writer)\r\n        {\r\n            int offset = 0;\r\n            writer.Write((byte)TextLiteralType); offset += sizeof(byte);\r\n            switch (TextLiteralType)\r\n            {\r\n                case EBlueprintTextLiteralType.Empty:\r\n                    break;\r\n                case EBlueprintTextLiteralType.LocalizedText:\r\n                    offset += ExpressionSerializer.WriteExpression(LocalizedSource, writer);\r\n                    offset += ExpressionSerializer.WriteExpression(LocalizedKey, writer);\r\n                    offset += ExpressionSerializer.WriteExpression(LocalizedNamespace, writer);\r\n                    break;\r\n                case EBlueprintTextLiteralType.InvariantText: // IsCultureInvariant\r\n                    offset += ExpressionSerializer.WriteExpression(InvariantLiteralString, writer);\r\n                    break;\r\n                case EBlueprintTextLiteralType.LiteralString:\r\n                    offset += ExpressionSerializer.WriteExpression(LiteralString, writer);\r\n                    break;\r\n                case EBlueprintTextLiteralType.StringTableEntry:\r\n                    offset += writer.XFER_OBJECT_POINTER(StringTableAsset);\r\n                    offset += ExpressionSerializer.WriteExpression(StringTableId, writer);\r\n                    offset += ExpressionSerializer.WriteExpression(StringTableKey, writer);\r\n                    break;\r\n                default:\r\n                    throw new NotImplementedException(\"Unimplemented blueprint text literal type \" + TextLiteralType);\r\n            }\r\n            return offset;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/KismetExpression.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode\r\n{\r\n    /// <summary>\r\n    /// A Kismet bytecode instruction.\r\n    /// </summary>\r\n    [JsonObject(MemberSerialization.OptIn)]\r\n    public class KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The token of this expression.\r\n        /// </summary>\r\n        public virtual EExprToken Token { get { return EExprToken.EX_Nothing; } }\r\n\r\n        /// <summary>\r\n        /// The token of this instruction expressed as a string.\r\n        /// </summary>\r\n        public string Inst { get { return Token.ToString().Substring(3, Token.ToString().Length - 3); } }\r\n\r\n        /// <summary>\r\n        /// An optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n        /// </summary>\r\n        public object Tag;\r\n\r\n        public object RawValue;\r\n\r\n        public void SetObject(object value)\r\n        {\r\n            RawValue = value;\r\n        }\r\n\r\n        public T GetObject<T>()\r\n        {\r\n            return (T)RawValue;\r\n        }\r\n\r\n        public KismetExpression()\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads out an expression from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        public virtual void Read(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes an expression to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <returns>The iCode offset of the data that was written.</returns>\r\n        public virtual int Write(AssetBinaryWriter writer)\r\n        {\r\n            return 0;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Visits this expression and all child expressions, calling the visitor function for each with the in-memory offset.\r\n        /// Note: The offset is the in-memory offset, not the serialization offset.\r\n        /// </summary>\r\n        /// <param name=\"asset\">The asset containing this expression.</param>\r\n        /// <param name=\"offset\">Reference to the current in-memory offset, which is incremented as expressions are visited.</param>\r\n        /// <param name=\"visitor\">The visitor function to call for each expression with the expression and its offset.</param>\r\n        public virtual void Visit(UAsset asset, ref uint offset, Action<KismetExpression, uint> visitor)\r\n        {\r\n            visitor(this, offset);\r\n            offset++;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the in-memory size of this expression and all child expressions.\r\n        /// </summary>\r\n        /// <param name=\"asset\">The asset containing this expression.</param>\r\n        /// <returns>The size in bytes of this expression.</returns>\r\n        public uint GetSize(UAsset asset)\r\n        {\r\n            uint offset = 0;\r\n            Visit(asset, ref offset, (_, __) => { });\r\n            return offset;\r\n        }\r\n    }\r\n\r\n    public abstract class KismetExpression<T> : KismetExpression\r\n    {\r\n        /// <summary>\r\n        /// The value of this expression if it is a constant.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public T Value\r\n        {\r\n            get => GetObject<T>();\r\n            set => SetObject(value);\r\n        }\r\n\r\n        public KismetExpression() : base()\r\n        {\r\n\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/Bytecode/KismetPropertyPointer.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System.ComponentModel;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.CustomVersions;\r\n\r\nnamespace UAssetAPI.Kismet.Bytecode;\r\n\r\n/// <summary>\r\n/// Represents a Kismet bytecode pointer to an FProperty or FField.\r\n/// </summary>\r\n[JsonObject(MemberSerialization.OptIn)]\r\npublic class KismetPropertyPointer\r\n{\r\n    /// <summary>\r\n    /// The pointer serialized as an FPackageIndex. Used in versions older than <see cref=\"FReleaseObjectVersion.FFieldPathOwnerSerialization\"/>.\r\n    /// </summary>\r\n    [JsonProperty]\r\n    [DefaultValue(null)]\r\n    public FPackageIndex Old;\r\n\r\n    /// <summary>\r\n    /// The pointer serialized as an FFieldPath. Used in versions newer than <see cref=\"FReleaseObjectVersion.FFieldPathOwnerSerialization\"/>.\r\n    /// </summary>\r\n    [JsonProperty]\r\n    [DefaultValue(null)]\r\n    public FFieldPath New;\r\n\r\n    public bool ShouldSerializeOld()\r\n    {\r\n        return Old != null;\r\n    }\r\n\r\n    public bool ShouldSerializeNew()\r\n    {\r\n        return New != null;\r\n    }\r\n\r\n    public KismetPropertyPointer(FPackageIndex older)\r\n    {\r\n        Old = older;\r\n    }\r\n\r\n    public KismetPropertyPointer(FFieldPath newer)\r\n    {\r\n        New = newer;\r\n    }\r\n\r\n    public KismetPropertyPointer()\r\n    {\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Kismet/KismetSerializer.cs",
    "content": "using Newtonsoft.Json.Linq;\r\nusing UAssetAPI.FieldTypes;\r\nusing UAssetAPI.Kismet.Bytecode.Expressions;\r\nusing UAssetAPI.Kismet.Bytecode;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\nusing UAssetAPI.CustomVersions;\r\n\r\nnamespace UAssetAPI.Kismet\r\n{\r\n    public static class KismetSerializer\r\n    {\r\n        public static UAsset asset;\r\n        public struct FSimpleMemberReference\r\n        {\r\n            public string MemberParent;\r\n            public string MemberName;\r\n            public Guid MemberGuid;\r\n        }\r\n\r\n        public struct FEdGraphTerminalType\r\n        {\r\n            public string TerminalCategory;\r\n            public string TerminalSubCategory;\r\n            public string TerminalSubCategoryObject;\r\n            public bool bTerminalIsConst;\r\n            public bool bTerminalIsWeakPointer;\r\n            public bool bTerminalIsUObjectWrapper;\r\n        }\r\n\r\n        public struct FEdGraphPinType\r\n        {\r\n            public string PinCategory;\r\n            public string PinSubCategory;\r\n            public string PinSubCategoryObject;\r\n            public FSimpleMemberReference PinSubCategoryMemberReference;\r\n            public FEdGraphTerminalType PinValueType;\r\n            public EPinContainerType ContainerType;\r\n\r\n            public bool bIsReference;\r\n            public bool bIsConst;\r\n            public bool bIsWeakPointer;\r\n            public bool bIsUObjectWrapper;\r\n        }\r\n\r\n        public enum EPinContainerType : byte\r\n        {\r\n            None,\r\n            Array,\r\n            Set,\r\n            Map\r\n        };\r\n\r\n        const string PC_Boolean = \"Bool\";\r\n        const string PC_Byte = \"Byte\";\r\n        const string PC_Class = \"Class\";\r\n        const string PC_Int = \"Int\";\r\n        const string PC_Int64 = \"Int64\";\r\n        const string PC_Float = \"Float\";\r\n        const string PC_Double = \"Double\";\r\n        const string PC_Name = \"Name\";\r\n        const string PC_Delegate = \"Delegate\";\r\n        const string PC_MCDelegate = \"mcdelegate\";\r\n        const string PC_Object = \"Object\";\r\n        const string PC_Interface = \"Interface\";\r\n        const string PC_String = \"String\";\r\n        const string PC_Text = \"Text\";\r\n        const string PC_Struct = \"Struct\";\r\n        const string PC_Enum = \"Enum\";\r\n        const string PC_SoftObject = \"Softobject\";\r\n        const string PC_SoftClass = \"Softclass\";\r\n        const string PC_None = \"None\";\r\n\r\n        public static JArray SerializeScript(KismetExpression[] code)\r\n        {\r\n            JArray jscript = new JArray();\r\n            int index = 0;\r\n            foreach (KismetExpression instruction in code)\r\n            {\r\n                jscript.Add(SerializeExpression(instruction, ref index, true));\r\n            }\r\n\r\n            return jscript;\r\n        }\r\n\r\n        public static string GetName(int index)\r\n        {\r\n            if (index > 0)\r\n            {\r\n                return asset.Exports[index - 1].ObjectName.ToString();\r\n            }\r\n            else if (index < 0)\r\n            {\r\n                return asset.Imports[-index - 1].ObjectName.ToString();\r\n            }\r\n            else\r\n            {\r\n                return \"\";\r\n            }\r\n        }\r\n\r\n        public static int GetClassIndex()\r\n        {\r\n            for (int i = 1; i <= asset.Exports.Count; i++)\r\n            {\r\n                if (asset.Exports[i - 1] is ClassExport)\r\n                {\r\n                    return i;\r\n                }\r\n            }\r\n            return 0;\r\n        }\r\n\r\n        public static string GetFullName(int index, bool alt = false)\r\n        {\r\n\r\n            if (index > 0 && index < asset.Exports.Count)\r\n            {\r\n                if (asset.Exports[index - 1].OuterIndex.Index != 0)\r\n                {\r\n                    string parent = GetFullName(asset.Exports[index - 1].OuterIndex.Index);\r\n                    return parent + \".\" + asset.Exports[index - 1].ObjectName.ToString();\r\n                }\r\n                else\r\n                {\r\n                    return asset.Exports[index - 1].ObjectName.ToString();\r\n                }\r\n\r\n            }\r\n            else if (index < 0)\r\n            {\r\n\r\n                if (asset.Imports[-index - 1].OuterIndex.Index != 0)\r\n                {\r\n                    string parent = GetFullName(asset.Imports[-index - 1].OuterIndex.Index);\r\n                    return parent + \".\" + asset.Imports[-index - 1].ObjectName.ToString();\r\n                }\r\n                else\r\n                {\r\n                    return asset.Imports[-index - 1].ObjectName.ToString();\r\n                }\r\n\r\n            }\r\n            else\r\n            {\r\n                return \"\";\r\n            }\r\n        }\r\n\r\n        public static string GetParentName(int index)\r\n        {\r\n            if (index > 0)\r\n            {\r\n                if (asset.Exports[index - 1].OuterIndex.Index != 0)\r\n                {\r\n                    string parent = GetFullName(asset.Exports[index - 1].OuterIndex.Index);\r\n                    return parent;\r\n                }\r\n                else\r\n                {\r\n                    return \"\";\r\n                }\r\n\r\n            }\r\n            else if (index < 0)\r\n            {\r\n\r\n                if (asset.Imports[-index - 1].OuterIndex.Index != 0)\r\n                {\r\n                    string parent = GetFullName(asset.Imports[-index - 1].OuterIndex.Index);\r\n                    return parent;\r\n                }\r\n                else\r\n                {\r\n                    return \"\";\r\n                }\r\n\r\n            }\r\n            else\r\n            {\r\n                return \"\";\r\n            }\r\n        }\r\n\r\n        public static bool FindProperty(int index, FName propname, out FProperty property)\r\n        {\r\n            if (index < 0)\r\n            {\r\n\r\n                property = new FObjectProperty();\r\n                return false;\r\n\r\n            }\r\n            Export export = asset.Exports[index - 1];\r\n            if (export is StructExport)\r\n            {\r\n                foreach (FProperty prop in (export as StructExport).LoadedProperties)\r\n                {\r\n                    if (prop.Name == propname)\r\n                    {\r\n                        property = prop;\r\n                        return true;\r\n                    }\r\n                }\r\n            }\r\n            property = new FObjectProperty();\r\n            return false;\r\n        }\r\n\r\n        public static FEdGraphPinType GetPropertyCategoryInfo(FProperty prop)\r\n        {\r\n            FEdGraphPinType pin = new FEdGraphPinType();\r\n            switch (prop)\r\n            {\r\n                case FInterfaceProperty finterface:\r\n                    {\r\n                        pin.PinCategory = PC_Interface;\r\n                        pin.PinSubCategoryObject = GetFullName(finterface.InterfaceClass.Index);\r\n                        break;\r\n                    };\r\n                case FClassProperty fclassprop:\r\n                    {\r\n                        pin.PinCategory = PC_Class;\r\n                        pin.PinSubCategoryObject = GetFullName(fclassprop.MetaClass.Index);\r\n                        break;\r\n                    };\r\n                case FSoftClassProperty fsoftclassprop:\r\n                    {\r\n                        pin.PinCategory = PC_SoftClass;\r\n                        pin.PinSubCategoryObject = GetFullName(fsoftclassprop.MetaClass.Index);\r\n                        break;\r\n                    };\r\n                case FSoftObjectProperty fsoftobjprop:\r\n                    {\r\n                        pin.PinCategory = PC_SoftObject;\r\n                        pin.PinSubCategoryObject = GetFullName(fsoftobjprop.PropertyClass.Index);\r\n                        break;\r\n                    };\r\n                case FObjectProperty fobjprop:\r\n                    {\r\n                        pin.PinCategory = PC_Object;\r\n                        pin.PinSubCategoryObject = GetFullName(fobjprop.PropertyClass.Index);\r\n                        if (fobjprop.PropertyFlags.HasFlag(EPropertyFlags.CPF_AutoWeak))\r\n                        {\r\n                            pin.bIsWeakPointer = true;\r\n                        }\r\n                        break;\r\n                    };\r\n                case FStructProperty fstruct:\r\n                    {\r\n                        pin.PinCategory = PC_Struct;\r\n                        pin.PinSubCategoryObject = GetFullName(fstruct.Struct.Index);\r\n                        break;\r\n                    };\r\n                case FByteProperty fbyte:\r\n                    {\r\n                        pin.PinCategory = PC_Byte;\r\n                        pin.PinSubCategoryObject = GetFullName(fbyte.Enum.Index);\r\n                        break;\r\n                    };\r\n                case FEnumProperty fenum:\r\n                    {\r\n                        if (!(fenum.UnderlyingProp is FByteProperty))\r\n                        {\r\n                            break;\r\n                        }\r\n                        pin.PinCategory = PC_Byte;\r\n                        pin.PinSubCategoryObject = GetFullName(fenum.Enum.Index);\r\n                        break;\r\n                    }\r\n                case FBoolProperty fbool:\r\n                    {\r\n                        pin.PinCategory = PC_Boolean;\r\n                        break;\r\n                    };\r\n                case FGenericProperty fgeneric:\r\n                    {\r\n\r\n                        switch (fgeneric.SerializedType.ToString())\r\n                        {\r\n                            case \"FloatProperty\":\r\n                                {\r\n                                    pin.PinCategory = PC_Float;\r\n                                    break;\r\n                                }\r\n                            case \"DoubleProperty\":\r\n                                {\r\n                                    pin.PinCategory = PC_Double;\r\n                                    break;\r\n                                }\r\n                            case \"Int64Property\":\r\n                                {\r\n                                    pin.PinCategory = PC_Int64;\r\n                                    break;\r\n                                }\r\n                            case \"IntProperty\":\r\n                                {\r\n                                    pin.PinCategory = PC_Int;\r\n                                    break;\r\n                                }\r\n                            case \"NameProperty\":\r\n                                {\r\n                                    pin.PinCategory = PC_Name;\r\n                                    break;\r\n                                }\r\n                            case \"StrProperty\":\r\n                                {\r\n                                    pin.PinCategory = PC_String;\r\n                                    break;\r\n                                }\r\n                            case \"TextProperty\":\r\n                                {\r\n                                    pin.PinCategory = PC_Text;\r\n                                    break;\r\n                                }\r\n                            default: break;\r\n                        };\r\n                        break;\r\n                    }\r\n\r\n                default: break;\r\n            }\r\n\r\n            return pin;\r\n\r\n        }\r\n\r\n        public static FSimpleMemberReference FillSimpleMemberReference(int index)\r\n        {\r\n            FSimpleMemberReference member = new FSimpleMemberReference();\r\n            if (index > 0)\r\n            {\r\n                member.MemberName = asset.Exports[index - 1].ObjectName.ToString();\r\n                member.MemberParent = GetName(asset.Exports[index - 1].OuterIndex.Index);\r\n                member.MemberGuid = asset.Exports[index - 1].PackageGuid;\r\n            }\r\n            else if (index < 0)\r\n            {\r\n                member.MemberName = asset.Imports[-index - 1].ObjectName.ToString();\r\n                member.MemberParent = asset.Imports[-index - 1].ClassPackage.ToString();\r\n                member.MemberGuid = new Guid(\"00000000000000000000000000000000\");\r\n            }\r\n\r\n            return member;\r\n\r\n        }\r\n\r\n        public static JObject SerializeGraphPinType(FEdGraphPinType pin)\r\n        {\r\n\r\n            JObject jpin = new JObject();\r\n            jpin.Add(\"PinCategory\", pin.PinCategory);\r\n            jpin.Add(\"PinSubCategory\", pin.PinCategory);\r\n            if (pin.PinSubCategoryObject == \"\" || pin.PinSubCategoryObject == null)\r\n            {\r\n\r\n            }\r\n            else { jpin.Add(\"PinSubCategoryObject\", pin.PinSubCategoryObject); }\r\n\r\n            if (pin.PinSubCategoryMemberReference.MemberName != null)\r\n            {\r\n                FSimpleMemberReference member = pin.PinSubCategoryMemberReference;\r\n                if (member.MemberGuid.Equals(new Guid(\"00000000000000000000000000000000\")))\r\n                {\r\n                }\r\n                else\r\n                {\r\n                    JObject jmember = new JObject();\r\n                    if (member.MemberParent != \"\" || member.MemberParent != null)\r\n                    {\r\n                        jmember.Add(\"MemberParent\", member.MemberParent);\r\n                    }\r\n                    jmember.Add(\"MemberName\", member.MemberName);\r\n                    jmember.Add(\"MemberGuid\", member.MemberGuid);\r\n                    jpin.Add(\"PinSubCategoryMemberReference\", jmember);\r\n                }\r\n            }\r\n\r\n            if (pin.ContainerType == EPinContainerType.Map)\r\n            {\r\n                FEdGraphTerminalType valuetype = pin.PinValueType;\r\n                JObject jvaluetype = new JObject();\r\n\r\n                jvaluetype.Add(\"TerminalCategory\", valuetype.TerminalCategory);\r\n                if (valuetype.TerminalSubCategory == null || valuetype.TerminalSubCategory == \"\")\r\n                {\r\n                    jvaluetype.Add(\"TerminalSubCategory\", \"None\");\r\n                }\r\n                else\r\n                {\r\n                    jvaluetype.Add(\"TerminalSubCategory\", valuetype.TerminalSubCategory);\r\n                }\r\n                if (valuetype.TerminalSubCategoryObject != \"\" && valuetype.TerminalSubCategoryObject != null)\r\n                {\r\n                    jvaluetype.Add(\"TerminalSubCategoryObject\", valuetype.TerminalSubCategoryObject);\r\n                }\r\n                jvaluetype.Add(\"TerminalIsConst\", valuetype.bTerminalIsConst);\r\n                jvaluetype.Add(\"TerminalIsWeakPointer\", valuetype.bTerminalIsWeakPointer);\r\n                jpin.Add(\"PinValueType\", jvaluetype);\r\n\r\n            }\r\n\r\n            if (pin.ContainerType != EPinContainerType.None)\r\n            {\r\n                jpin.Add(\"ContainerType\", (int)pin.ContainerType);\r\n            }\r\n\r\n            if (pin.bIsReference)\r\n            {\r\n                jpin.Add(\"IsReference\", pin.bIsReference);\r\n            }\r\n            if (pin.bIsConst)\r\n            {\r\n                jpin.Add(\"IsConst\", pin.bIsConst);\r\n            }\r\n            if (pin.bIsWeakPointer)\r\n            {\r\n                jpin.Add(\"IsWeakPointer\", pin.bIsWeakPointer);\r\n            }\r\n            return jpin;\r\n\r\n        }\r\n        public static FEdGraphPinType ConvertPropertyToPinType(FProperty property)\r\n        {\r\n            FEdGraphPinType pin = new FEdGraphPinType();\r\n            FProperty prop = property;\r\n\r\n            if (property is FMapProperty)\r\n            {\r\n                prop = (property as FMapProperty).KeyProp;\r\n                pin.ContainerType = EPinContainerType.Map;\r\n                pin.bIsWeakPointer = false;\r\n                FEdGraphPinType temppin = GetPropertyCategoryInfo((property as FMapProperty).ValueProp);\r\n                pin.PinValueType.TerminalCategory = temppin.PinCategory;\r\n                pin.PinValueType.TerminalSubCategory = temppin.PinSubCategory;\r\n                pin.PinValueType.TerminalSubCategoryObject = temppin.PinSubCategoryObject;\r\n\r\n                pin.PinValueType.bTerminalIsConst = temppin.bIsConst;\r\n                pin.PinValueType.bTerminalIsWeakPointer = temppin.bIsWeakPointer;\r\n\r\n            }\r\n            else if (property is FSetProperty)\r\n            {\r\n                prop = (property as FSetProperty).ElementProp;\r\n                pin.ContainerType = EPinContainerType.Set;\r\n            }\r\n            else if (property is FArrayProperty)\r\n            {\r\n                prop = (property as FArrayProperty).Inner;\r\n                pin.ContainerType = EPinContainerType.Array;\r\n            }\r\n            pin.bIsReference = property.PropertyFlags.HasFlag(EPropertyFlags.CPF_OutParm) && property.PropertyFlags.HasFlag(EPropertyFlags.CPF_ReferenceParm);\r\n            pin.bIsConst = property.PropertyFlags.HasFlag(EPropertyFlags.CPF_ConstParm);\r\n\r\n\r\n            if (prop is FMulticastDelegateProperty)\r\n            {\r\n                pin.PinCategory = PC_MCDelegate;\r\n                pin.PinSubCategoryMemberReference = FillSimpleMemberReference((prop as FMulticastDelegateProperty).SignatureFunction.Index);\r\n\r\n            }\r\n            else if (prop is FDelegateProperty)\r\n            {\r\n                pin.PinCategory = PC_Delegate;\r\n                pin.PinSubCategoryMemberReference = FillSimpleMemberReference((prop as FDelegateProperty).SignatureFunction.Index);\r\n            }\r\n            else\r\n            {\r\n                FEdGraphPinType temppin = GetPropertyCategoryInfo(prop);\r\n                pin.PinCategory = temppin.PinCategory;\r\n                pin.PinSubCategory = temppin.PinSubCategory;\r\n                pin.PinSubCategoryObject = temppin.PinSubCategoryObject;\r\n                pin.bIsWeakPointer = temppin.bIsWeakPointer;\r\n\r\n            }\r\n            return pin;\r\n        }\r\n\r\n        public static JProperty[] SerializePropertyPointer(KismetPropertyPointer pointer, string[] names)\r\n        {\r\n\r\n            JProperty[] jproparray = new JProperty[names.Length];\r\n\r\n            FProperty property;\r\n            if (asset.GetCustomVersion<FReleaseObjectVersion>() >= FReleaseObjectVersion.FFieldPathOwnerSerialization)\r\n            {\r\n                if (pointer != null && pointer.New.ResolvedOwner.Index != 0)\r\n                {\r\n\r\n                    if (FindProperty(pointer.New.ResolvedOwner.Index, pointer.New.Path[0], out property))\r\n                    {\r\n                        FEdGraphPinType PropertyType = ConvertPropertyToPinType(property);\r\n                        jproparray[0] = new JProperty(names[0], SerializeGraphPinType(PropertyType));\r\n                    }\r\n                    else\r\n                    {\r\n                        jproparray[0] = new JProperty(names[0], \"##NOT SERIALIZED##\");\r\n                    }\r\n                    if (names.Length > 1)\r\n                    {\r\n                        jproparray[1] = new JProperty(names[1], pointer.New.Path[0].ToString());\r\n                    }\r\n\r\n                    return jproparray;\r\n\r\n                }\r\n            }\r\n            if (pointer != null && pointer.Old != null && pointer.Old.Index != 0)\r\n            {\r\n                if (names.Length > 1)\r\n                {\r\n                    string[] split = GetFullName(pointer.Old.Index).Split('.');\r\n                    jproparray[0] = new JProperty(names[0], split[0]);\r\n                    string path = \"\";\r\n                    for (int i = 1; i < split.Length; i++)\r\n                    {\r\n                        path += split[i] + \".\";\r\n                    }\r\n                    if (path.EndsWith(\".\"))\r\n                    {\r\n                        path = path.Substring(0, path.Length - 1);\r\n                    }\r\n                    jproparray[1] = new JProperty(names[1], path);\r\n                }\r\n                else\r\n                {\r\n                    jproparray[0] = new JProperty(names[0], GetFullName(pointer.Old.Index));\r\n                }\r\n            }\r\n            else\r\n            {\r\n                jproparray[0] = new JProperty(names[0], \"#Pointer Error#\");\r\n                if (names.Length > 1)\r\n                {\r\n                    jproparray[1] = new JProperty(names[1], \"^^^^^\");\r\n                }\r\n            }\r\n            return jproparray;\r\n\r\n        }\r\n\r\n        private static bool FindProperty(int index, FPackageIndex old, out FProperty property)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public static JObject SerializeExpression(KismetExpression expression, ref int index, bool addindex = false)\r\n        {\r\n\r\n            int savedindex = index;\r\n            JObject jexp = new JObject();\r\n            index++;\r\n            switch (expression)\r\n            {\r\n                case EX_PrimitiveCast exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index++;\r\n                        switch (exp.ConversionType)\r\n                        {\r\n\r\n                            case ECastToken.InterfaceToBool:\r\n                                {\r\n                                    jexp.Add(\"CastType\", \"InterfaceToBool\");\r\n                                    break;\r\n                                }\r\n                            case ECastToken.ObjectToBool:\r\n                                {\r\n                                    jexp.Add(\"CastType\", \"ObjectToBool\");\r\n                                    break;\r\n                                }\r\n                            case ECastToken.ObjectToInterface:\r\n                                {\r\n                                    jexp.Add(\"CastType\", \"ObjectToInterface\");\r\n                                    index += 8;\r\n                                    jexp.Add(\"InterfaceClass\", \"##NOT SERIALIZED##\");\r\n                                    break;\r\n                                }\r\n                            default: break;\r\n                        }\r\n                        jexp.Add(\"Expression\", SerializeExpression(exp.Target, ref index));\r\n                        break;\r\n                    }\r\n                case EX_SetSet exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"LeftSideExpression\", SerializeExpression(exp.SetProperty, ref index));\r\n                        JArray jparams = new JArray();\r\n\r\n                        index += 4;\r\n                        foreach (KismetExpression param in exp.Elements)\r\n                        {\r\n                            jparams.Add(SerializeExpression(param, ref index));\r\n                        }\r\n                        index++;\r\n                        jexp.Add(\"Values\", jparams);\r\n                        break;\r\n                    }\r\n                case EX_SetConst exp:\r\n                    {\r\n                        index += 8;\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(SerializePropertyPointer(exp.InnerProperty, new[] { \"InnerProperty\" }));\r\n\r\n                        index += 4;\r\n                        JArray jparams = new JArray();\r\n                        foreach (KismetExpression param in exp.Elements)\r\n                        {\r\n                            jparams.Add(SerializeExpression(param, ref index));\r\n                        }\r\n                        index++;\r\n                        jexp.Add(\"Values\", jparams);\r\n                        break;\r\n                    }\r\n                case EX_SetMap exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"LeftSideExpression\", SerializeExpression(exp.MapProperty, ref index));\r\n\r\n                        index += 4;\r\n                        JArray jparams = new JArray();\r\n                        for (var j = 1; j <= exp.Elements.Length / 2; j++)\r\n                        {\r\n                            JObject jobject = new JObject();\r\n                            jobject.Add(\"Key\", SerializeExpression(exp.Elements[2 * (j - 1)], ref index));\r\n                            jobject.Add(\"Value\", SerializeExpression(exp.Elements[2 * (j - 1) + 1], ref index));\r\n                            jparams.Add(jobject);\r\n                        }\r\n                        index++;\r\n                        jexp.Add(\"Values\", jparams);\r\n                        break;\r\n                    }\r\n                case EX_MapConst exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(SerializePropertyPointer(exp.KeyProperty, new[] { \"KeyProperty\" }));\r\n                        jexp.Add(SerializePropertyPointer(exp.ValueProperty, new[] { \"ValueProperty\" }));\r\n\r\n                        index += 4;\r\n                        JArray jparams = new JArray();\r\n                        for (var j = 1; j <= exp.Elements.Length / 2; j++)\r\n                        {\r\n                            JObject jobject = new JObject();\r\n                            jobject.Add(\"Key\", SerializeExpression(exp.Elements[2 * (j - 1)], ref index));\r\n                            jobject.Add(\"Value\", SerializeExpression(exp.Elements[2 * (j - 1) + 1], ref index));\r\n                            jparams.Add(jobject);\r\n                        }\r\n                        index++;\r\n                        jexp.Add(\"Values\", jparams);\r\n                        break;\r\n                    }\r\n                case EX_ObjToInterfaceCast exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(\"InterfaceClass\", GetFullName(exp.ClassPtr.Index));\r\n                        jexp.Add(\"Expression\", SerializeExpression(exp.Target, ref index));\r\n                        break;\r\n                    }\r\n                case EX_CrossInterfaceCast exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(\"InterfaceClass\", GetFullName(exp.ClassPtr.Index));\r\n                        jexp.Add(\"Expression\", SerializeExpression(exp.Target, ref index));\r\n                        break;\r\n                    }\r\n                case EX_InterfaceToObjCast exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(\"ObjectClass\", GetFullName(exp.ClassPtr.Index));\r\n                        jexp.Add(\"Expression\", SerializeExpression(exp.Target, ref index));\r\n                        break;\r\n                    }\r\n                case EX_Let exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(\"Variable\", SerializeExpression(exp.Variable, ref index));\r\n                        jexp.Add(\"Expression\", SerializeExpression(exp.Expression, ref index));\r\n                        break;\r\n                    }\r\n                case EX_LetObj exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"Variable\", SerializeExpression(exp.VariableExpression, ref index));\r\n                        jexp.Add(\"Expression\", SerializeExpression(exp.AssignmentExpression, ref index));\r\n                        break;\r\n                    }\r\n                case EX_LetWeakObjPtr exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"Variable\", SerializeExpression(exp.VariableExpression, ref index));\r\n                        jexp.Add(\"Expression\", SerializeExpression(exp.AssignmentExpression, ref index));\r\n                        break;\r\n                    }\r\n                case EX_LetBool exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"Variable\", SerializeExpression(exp.VariableExpression, ref index));\r\n                        jexp.Add(\"Expression\", SerializeExpression(exp.AssignmentExpression, ref index));\r\n                        break;\r\n                    }\r\n                case EX_LetValueOnPersistentFrame exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(SerializePropertyPointer(exp.DestinationProperty, new[] { \"Property Outer\", \"Property Name\" }));\r\n                        jexp.Add(\"Expression\", SerializeExpression(exp.AssignmentExpression, ref index));\r\n                        break;\r\n                    }\r\n                case EX_StructMemberContext exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(SerializePropertyPointer(exp.StructMemberExpression, new[] { \"Property Outer\", \"Property Name\" }));\r\n                        jexp.Add(\"StructExpression\", SerializeExpression(exp.StructExpression, ref index));\r\n                        break;\r\n                    }\r\n                case EX_LetDelegate exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"Variable\", SerializeExpression(exp.VariableExpression, ref index));\r\n                        jexp.Add(\"Expression\", SerializeExpression(exp.AssignmentExpression, ref index));\r\n                        break;\r\n                    }\r\n                case EX_LocalVirtualFunction exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 12;\r\n                        jexp.Add(\"FunctionName\", exp.VirtualFunctionName.ToString());\r\n                        JArray jparams = new JArray();\r\n                        foreach (KismetExpression param in exp.Parameters)\r\n                        {\r\n                            jparams.Add(SerializeExpression(param, ref index));\r\n                        }\r\n                        index++;\r\n                        jexp.Add(\"Parameters\", jparams);\r\n                        break;\r\n                    }\r\n                case EX_LocalFinalFunction exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"Function\", GetName(exp.StackNode.Index));\r\n                        index += 8;\r\n                        JArray jparams = new JArray();\r\n                        foreach (KismetExpression param in exp.Parameters)\r\n                        {\r\n                            jparams.Add(SerializeExpression(param, ref index));\r\n                        }\r\n                        index++;\r\n                        jexp.Add(\"Parameters\", jparams);\r\n                        break;\r\n                    }\r\n                case EX_LetMulticastDelegate exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"Variable\", SerializeExpression(exp.VariableExpression, ref index));\r\n                        jexp.Add(\"Expression\", SerializeExpression(exp.AssignmentExpression, ref index));\r\n                        break;\r\n                    }\r\n                case EX_ComputedJump exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"OffsetExpression\", SerializeExpression(exp.CodeOffsetExpression, ref index));\r\n                        break;\r\n                    }\r\n                case EX_Jump exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 4;\r\n                        jexp.Add(\"Offset\", exp.CodeOffset);\r\n                        break;\r\n                    }\r\n                case EX_LocalVariable exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(SerializePropertyPointer(exp.Variable, new[] { \"Variable Outer\", \"Variable Name\" }));\r\n                        break;\r\n                    }\r\n                case EX_DefaultVariable exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(SerializePropertyPointer(exp.Variable, new[] { \"Variable Outer\", \"Variable Name\" }));\r\n                        break;\r\n                    }\r\n                case EX_InstanceVariable exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(SerializePropertyPointer(exp.Variable, new[] { \"Variable Outer\", \"Variable Name\" }));\r\n                        break;\r\n                    }\r\n                case EX_LocalOutVariable exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(SerializePropertyPointer(exp.Variable, new[] { \"Variable Outer\", \"Variable Name\" }));\r\n                        break;\r\n                    }\r\n                case EX_InterfaceContext exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"Expression\", SerializeExpression(exp.InterfaceValue, ref index));\r\n                        break;\r\n                    }\r\n                case EX_DeprecatedOp4A exp1:\r\n                case EX_Nothing exp2:\r\n                case EX_EndOfScript exp3:\r\n                case EX_IntZero exp4:\r\n                case EX_IntOne exp5:\r\n                case EX_True exp6:\r\n                case EX_False exp7:\r\n                case EX_NoObject exp8:\r\n                case EX_NoInterface exp9:\r\n                case EX_Self exp10:\r\n                    {\r\n                        jexp.Add(\"Inst\", expression.Inst);\r\n                        break;\r\n                    }\r\n                case EX_Return exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"Expression\", SerializeExpression(exp.ReturnExpression, ref index));\r\n                        break;\r\n                    }\r\n                case EX_CallMath exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(\"Function\", GetName(exp.StackNode.Index));\r\n                        jexp.Add(\"ContextClass\", GetParentName(exp.StackNode.Index));\r\n                        JArray jparams = new JArray();\r\n                        foreach (KismetExpression param in exp.Parameters)\r\n                        {\r\n                            jparams.Add(SerializeExpression(param, ref index));\r\n                        }\r\n                        index++;\r\n                        jexp.Add(\"Parameters\", jparams);\r\n                        break;\r\n                    }\r\n                case EX_CallMulticastDelegate exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        JObject jsign = new JObject();\r\n                        bool bIsSelfContext = GetClassIndex() == exp.StackNode.Index;\r\n                        jsign.Add(\"IsSelfContext\", bIsSelfContext);\r\n                        jsign.Add(\"MemberParent\", GetFullName(exp.StackNode.Index));\r\n                        jsign.Add(\"MemberName\", GetName(exp.StackNode.Index));\r\n                        jexp.Add(\"DelegateSignatureFunction\", jsign);\r\n                        jexp.Add(\"Delegate\", SerializeExpression(exp.Delegate, ref index));\r\n\r\n                        JArray jparams = new JArray();\r\n                        foreach (KismetExpression param in exp.Parameters)\r\n                        {\r\n                            jparams.Add(SerializeExpression(param, ref index));\r\n                        }\r\n                        index++;\r\n                        jexp.Add(\"Parameters\", jparams);\r\n                        break;\r\n                    }\r\n                case EX_FinalFunction exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(\"Function\", GetName(exp.StackNode.Index));\r\n                        JArray jparams = new JArray();\r\n                        foreach (KismetExpression param in exp.Parameters)\r\n                        {\r\n                            jparams.Add(SerializeExpression(param, ref index));\r\n                        }\r\n                        index++;\r\n                        jexp.Add(\"Parameters\", jparams);\r\n                        break;\r\n                    }\r\n                case EX_VirtualFunction exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 12;\r\n                        jexp.Add(\"Function\", exp.VirtualFunctionName.ToString());\r\n                        JArray jparams = new JArray();\r\n\r\n                        foreach (KismetExpression param in exp.Parameters)\r\n                        {\r\n                            jparams.Add(SerializeExpression(param, ref index));\r\n                        }\r\n                        index++;\r\n                        jexp.Add(\"Parameters\", jparams);\r\n                        break;\r\n                    }\r\n                //case EX_ClassContext:\r\n                //case EX_Context_FailSilent: {\r\n                case EX_Context exp:\r\n                    {\r\n\r\n                        if (exp is EX_Context_FailSilent)\r\n                        {\r\n                            exp = exp as EX_Context_FailSilent;\r\n                        }\r\n                        else if (exp is EX_ClassContext)\r\n                        {\r\n                            exp = exp as EX_ClassContext;\r\n                        }\r\n                        else\r\n                        {\r\n                        }\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"Context\", SerializeExpression(exp.ObjectExpression, ref index));\r\n                        index += 4;\r\n                        jexp.Add(\"SkipOffsetForNull\", exp.Offset);\r\n                        index += 8;\r\n                        jexp.Add(SerializePropertyPointer(exp.RValuePointer, new[] { \"RValuePropertyOuter\", \"RValuePropertyName\" }));\r\n                        jexp.Add(\"Expression\", SerializeExpression(exp.ContextExpression, ref index));\r\n                        break;\r\n                    }\r\n                case EX_IntConst exp:\r\n                    {\r\n                        index += 4;\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"Value\", exp.Value);\r\n                        break;\r\n                    }\r\n                case EX_SkipOffsetConst exp:\r\n                    {\r\n                        index += 4;\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"Value\", exp.Value);\r\n                        break;\r\n                    }\r\n                case EX_FloatConst exp:\r\n                    {\r\n                        index += 4;\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"Value\", exp.Value);\r\n                        break;\r\n                    }\r\n                case EX_DoubleConst exp:\r\n                    {\r\n                        index += 8;\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"Value\", exp.Value);\r\n                        break;\r\n                    }\r\n                case EX_StringConst exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += exp.Value.Length + 1;\r\n                        jexp.Add(\"Value\", exp.Value);\r\n                        break;\r\n                    }\r\n                case EX_UnicodeStringConst exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 2 * (exp.Value.Length + 1);\r\n                        jexp.Add(\"Value\", exp.Value);\r\n                        break;\r\n                    }\r\n                case EX_TextConst exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index++;\r\n                        switch (exp.Value.TextLiteralType)\r\n                        {\r\n                            case EBlueprintTextLiteralType.Empty:\r\n                                {\r\n                                    jexp.Add(\"TextLiteralType\", \"Empty\");\r\n                                    break;\r\n                                }\r\n                            case EBlueprintTextLiteralType.LocalizedText:\r\n                                {\r\n                                    jexp.Add(\"TextLiteralType\", \"LocalizedText\");\r\n                                    jexp.Add(\"SourceString\", ReadString(exp.Value.LocalizedSource, ref index));\r\n                                    jexp.Add(\"LocalizationKey\", ReadString(exp.Value.LocalizedKey, ref index));\r\n                                    jexp.Add(\"LocalizationNamespace\", ReadString(exp.Value.LocalizedNamespace, ref index));\r\n                                    break;\r\n                                }\r\n                            case EBlueprintTextLiteralType.InvariantText:\r\n                                {\r\n                                    jexp.Add(\"TextLiteralType\", \"InvariantText\");\r\n                                    jexp.Add(\"SourceString\", ReadString(exp.Value.InvariantLiteralString, ref index));\r\n\r\n                                    break;\r\n                                }\r\n                            case EBlueprintTextLiteralType.LiteralString:\r\n                                {\r\n                                    jexp.Add(\"TextLiteralType\", \"LiteralString\");\r\n                                    jexp.Add(\"SourceString\", ReadString(exp.Value.LiteralString, ref index));\r\n                                    break;\r\n                                }\r\n                            case EBlueprintTextLiteralType.StringTableEntry:\r\n                                {\r\n                                    jexp.Add(\"TextLiteralType\", \"StringTableEntry\");\r\n                                    index += 8;\r\n                                    jexp.Add(\"TableId\", ReadString(exp.Value.StringTableId, ref index));\r\n                                    jexp.Add(\"TableKey\", ReadString(exp.Value.StringTableKey, ref index));\r\n                                    break;\r\n                                }\r\n                            default:\r\n                                break;\r\n                        }\r\n                        break;\r\n                    }\r\n                case EX_ObjectConst exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(\"Object\", GetFullName(exp.Value.Index));\r\n                        break;\r\n                    }\r\n                case EX_SoftObjectConst exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"Value\", SerializeExpression(exp.Value, ref index));\r\n                        break;\r\n                    }\r\n                case EX_NameConst exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 12;\r\n                        jexp.Add(\"Value\", exp.Value.ToString());\r\n                        break;\r\n                    }\r\n                case EX_RotationConst exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += ((asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES) ? sizeof(double) : sizeof(float)) * 3;\r\n                        jexp.Add(\"Pitch\", exp.Value.Pitch);\r\n                        jexp.Add(\"Yaw\", exp.Value.Yaw);\r\n                        jexp.Add(\"Roll\", exp.Value.Roll);\r\n                        break;\r\n                    }\r\n                case EX_VectorConst exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += ((asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES) ? sizeof(double) : sizeof(float)) * 3;\r\n                        jexp.Add(\"X\", exp.Value.X);\r\n                        jexp.Add(\"Y\", exp.Value.Y);\r\n                        jexp.Add(\"Z\", exp.Value.Z);\r\n                        break;\r\n                    }\r\n                case EX_TransformConst exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += ((asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES) ? sizeof(double) : sizeof(float)) * 10;\r\n                        JObject jrot = new JObject();\r\n                        JObject jtrans = new JObject();\r\n                        JObject jscale = new JObject();\r\n\r\n                        jrot.Add(\"X\", exp.Value.Rotation.X);\r\n                        jrot.Add(\"Y\", exp.Value.Rotation.Y);\r\n                        jrot.Add(\"Z\", exp.Value.Rotation.Z);\r\n                        jrot.Add(\"W\", exp.Value.Rotation.W);\r\n\r\n                        jtrans.Add(\"X\", exp.Value.Translation.X);\r\n                        jtrans.Add(\"Y\", exp.Value.Translation.Y);\r\n                        jtrans.Add(\"Z\", exp.Value.Translation.Z);\r\n\r\n                        jscale.Add(\"X\", exp.Value.Scale3D.X);\r\n                        jscale.Add(\"Y\", exp.Value.Scale3D.Y);\r\n                        jscale.Add(\"Z\", exp.Value.Scale3D.Z);\r\n\r\n                        jexp.Add(\"Rotation\", jrot);\r\n                        jexp.Add(\"Translation\", jtrans);\r\n                        jexp.Add(\"Scale\", jscale);\r\n                        break;\r\n                    }\r\n                case EX_StructConst exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(\"Struct\", GetFullName(exp.Struct.Index));\r\n\r\n                        index += 4;\r\n                        JObject jstruct = new JObject();\r\n                        int tempindex = 0;\r\n                        foreach (KismetExpression param in exp.Value)\r\n                        {\r\n                            JArray jstructpart = new JArray();\r\n                            jstructpart.Add(SerializeExpression(param, ref index));\r\n                            jstruct.Add(\"Missing property name\" + tempindex, jstructpart);\r\n                            tempindex++;\r\n                        }\r\n                        index++;\r\n                        jexp.Add(\"Properties\", jstruct);\r\n                        break;\r\n                    }\r\n                case EX_SetArray exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"LeftSideExpression\", SerializeExpression(exp.AssigningProperty, ref index));\r\n                        JArray jparams = new JArray();\r\n                        foreach (KismetExpression param in exp.Elements)\r\n                        {\r\n                            jparams.Add(SerializeExpression(param, ref index));\r\n                        }\r\n                        index++;\r\n                        jexp.Add(\"Values\", jparams);\r\n                        break;\r\n                    }\r\n                case EX_ArrayConst exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(SerializePropertyPointer(exp.InnerProperty, new[] { \"Variable Outer\" }));\r\n\r\n                        index += 4;\r\n                        JArray jparams = new JArray();\r\n                        foreach (KismetExpression param in exp.Elements)\r\n                        {\r\n                            jparams.Add(SerializeExpression(param, ref index));\r\n                        }\r\n                        index++;\r\n                        jexp.Add(\"Values\", jparams);\r\n                        break;\r\n                    }\r\n                case EX_ByteConst exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index++;\r\n                        jexp.Add(\"Value\", exp.Value);\r\n                        break;\r\n                    }\r\n                case EX_IntConstByte exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index++;\r\n                        jexp.Add(\"Value\", exp.Value);\r\n                        break;\r\n                    }\r\n                case EX_Int64Const exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(\"Value\", exp.Value);\r\n                        break;\r\n                    }\r\n                case EX_UInt64Const exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(\"Value\", exp.Value);\r\n                        break;\r\n                    }\r\n                case EX_FieldPathConst exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"Expression\", SerializeExpression(exp.Value, ref index));\r\n                        break;\r\n                    }\r\n                case EX_MetaCast exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(\"Class\", GetFullName(exp.ClassPtr.Index));\r\n                        jexp.Add(\"Expression\", SerializeExpression(exp.Target, ref index));\r\n                        break;\r\n                    }\r\n                case EX_DynamicCast exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 8;\r\n                        jexp.Add(\"Class\", GetFullName(exp.ClassPtr.Index));\r\n                        jexp.Add(\"Expression\", SerializeExpression(exp.Target, ref index));\r\n                        break;\r\n                    }\r\n                case EX_JumpIfNot exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 4;\r\n                        jexp.Add(\"Offset\", exp.CodeOffset);\r\n                        jexp.Add(\"Condition\", SerializeExpression(exp.BooleanExpression, ref index));\r\n                        break;\r\n                    }\r\n                case EX_Assert exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 3;\r\n                        jexp.Add(\"LineNumber\", exp.LineNumber);\r\n                        jexp.Add(\"Debug\", exp.DebugMode);\r\n                        jexp.Add(\"Expression\", SerializeExpression(exp.AssertExpression, ref index));\r\n                        break;\r\n                    }\r\n                case EX_InstanceDelegate exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 12;\r\n                        jexp.Add(\"FunctionName\", exp.FunctionName.ToString());\r\n                        break;\r\n                    }\r\n                case EX_AddMulticastDelegate exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"MulticastDelegate\", SerializeExpression(exp.Delegate, ref index));\r\n                        jexp.Add(\"Delegate\", SerializeExpression(exp.DelegateToAdd, ref index));\r\n                        break;\r\n                    }\r\n                case EX_RemoveMulticastDelegate exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"MulticastDelegate\", SerializeExpression(exp.Delegate, ref index));\r\n                        jexp.Add(\"Delegate\", SerializeExpression(exp.DelegateToAdd, ref index));\r\n                        break;\r\n                    }\r\n                case EX_ClearMulticastDelegate exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"MulticastDelegate\", SerializeExpression(exp.DelegateToClear, ref index));\r\n                        break;\r\n                    }\r\n                case EX_BindDelegate exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 12;\r\n                        jexp.Add(\"FunctionName\", exp.FunctionName.ToString());\r\n                        jexp.Add(\"Delegate\", SerializeExpression(exp.Delegate, ref index));\r\n                        jexp.Add(\"Object\", SerializeExpression(exp.ObjectTerm, ref index));\r\n                        break;\r\n                    }\r\n                case EX_PushExecutionFlow exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 4;\r\n                        jexp.Add(\"Offset\", exp.PushingAddress);\r\n                        break;\r\n                    }\r\n                case EX_PopExecutionFlow exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        break;\r\n                    }\r\n                case EX_PopExecutionFlowIfNot exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"Condition\", SerializeExpression(exp.BooleanExpression, ref index));\r\n                        break;\r\n                    }\r\n                case EX_Breakpoint exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        break;\r\n                    }\r\n                case EX_WireTracepoint exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        break;\r\n                    }\r\n                case EX_InstrumentationEvent exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index++;\r\n                        switch (exp.EventType)\r\n                        {\r\n                            case EScriptInstrumentationType.Class:\r\n                                jexp.Add(\"EventType\", \"Class\");\r\n                                break;\r\n                            case EScriptInstrumentationType.ClassScope:\r\n                                jexp.Add(\"EventType\", \"ClassScope\");\r\n                                break;\r\n                            case EScriptInstrumentationType.Instance:\r\n                                jexp.Add(\"EventType\", \"Instance\");\r\n                                break;\r\n                            case EScriptInstrumentationType.Event:\r\n                                jexp.Add(\"EventType\", \"Event\");\r\n                                break;\r\n                            case EScriptInstrumentationType.InlineEvent:\r\n                                {\r\n                                    index += 12;\r\n                                    jexp.Add(\"EventType\", \"InlineEvent\");\r\n                                    jexp.Add(\"EventName\", exp.EventName.ToString());\r\n                                    break;\r\n                                }\r\n                            case EScriptInstrumentationType.ResumeEvent:\r\n                                jexp.Add(\"EventType\", \"ResumeEvent\");\r\n                                break;\r\n                            case EScriptInstrumentationType.PureNodeEntry:\r\n                                jexp.Add(\"EventType\", \"PureNodeEntry\");\r\n                                break;\r\n                            case EScriptInstrumentationType.NodeDebugSite:\r\n                                jexp.Add(\"EventType\", \"NodeDebugSite\");\r\n                                break;\r\n                            case EScriptInstrumentationType.NodeEntry:\r\n                                jexp.Add(\"EventType\", \"NodeEntry\");\r\n                                break;\r\n                            case EScriptInstrumentationType.NodeExit:\r\n                                jexp.Add(\"EventType\", \"NodeExit\");\r\n                                break;\r\n                            case EScriptInstrumentationType.PushState:\r\n                                jexp.Add(\"EventType\", \"PushState\");\r\n                                break;\r\n                            case EScriptInstrumentationType.RestoreState:\r\n                                jexp.Add(\"EventType\", \"RestoreState\");\r\n                                break;\r\n                            case EScriptInstrumentationType.ResetState:\r\n                                jexp.Add(\"EventType\", \"ResetState\");\r\n                                break;\r\n                            case EScriptInstrumentationType.SuspendState:\r\n                                jexp.Add(\"EventType\", \"SuspendState\");\r\n                                break;\r\n                            case EScriptInstrumentationType.PopState:\r\n                                jexp.Add(\"EventType\", \"PopState\");\r\n                                break;\r\n                            case EScriptInstrumentationType.TunnelEndOfThread:\r\n                                jexp.Add(\"EventType\", \"TunnelEndOfThread\");\r\n                                break;\r\n                            case EScriptInstrumentationType.Stop:\r\n                                jexp.Add(\"EventType\", \"Stop\");\r\n                                break;\r\n                            default:\r\n                                break;\r\n                        }\r\n                        break;\r\n                    }\r\n                case EX_Tracepoint exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        break;\r\n                    }\r\n                case EX_SwitchValue exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        index += 6;\r\n\r\n                        jexp.Add(\"Expression\", SerializeExpression(exp.IndexTerm, ref index));\r\n                        jexp.Add(\"OffsetToSwitchEnd\", exp.EndGotoOffset);\r\n                        JArray jcases = new JArray();\r\n\r\n                        for (var j = 0; j < exp.Cases.Length; j++)\r\n                        {\r\n                            JObject jcase = new JObject();\r\n                            jcase.Add(\"CaseValue\", SerializeExpression(exp.Cases[j].CaseIndexValueTerm, ref index));\r\n                            index += 4;\r\n                            jcase.Add(\"OffsetToNextCase\", exp.Cases[j].NextOffset);\r\n                            jcase.Add(\"CaseResult\", SerializeExpression(exp.Cases[j].CaseTerm, ref index));\r\n                            jcases.Add(jcase);\r\n                        }\r\n\r\n                        jexp.Add(\"Cases\", jcases);\r\n                        jexp.Add(\"DefaultResult\", SerializeExpression(exp.DefaultTerm, ref index));\r\n\r\n                        break;\r\n                    }\r\n                case EX_ArrayGetByRef exp:\r\n                    {\r\n                        jexp.Add(\"Inst\", exp.Inst);\r\n                        jexp.Add(\"ArrayExpression\", SerializeExpression(exp.ArrayVariable, ref index));\r\n                        jexp.Add(\"IndexExpression\", SerializeExpression(exp.ArrayIndex, ref index));\r\n                        break;\r\n                    }\r\n                default:\r\n                    {\r\n                        // This should never occur.\r\n                        //checkf(0, TEXT(\"Unknown bytecode 0x%02X\"), (uint8)Opcode);\r\n                        break;\r\n                    }\r\n            }\r\n            if (addindex) { jexp.Add(\"StatementIndex\", savedindex); }\r\n            return jexp;\r\n        }\r\n\r\n        public static string ReadString(KismetExpression expr, ref int index)\r\n        {\r\n\r\n            string result = \"\";\r\n            index++;\r\n            switch (expr)\r\n            {\r\n                case EX_StringConst exp:\r\n                    {\r\n                        result = exp.Value;\r\n                        index += result.Length + 1;\r\n                        break;\r\n                    }\r\n                case EX_UnicodeStringConst exp:\r\n                    {\r\n                        result = exp.Value;\r\n                        index += 2 * (result.Length + 1);\r\n                        break;\r\n                    }\r\n                default:\r\n                    break;\r\n            }\r\n            return result;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/MainSerializer.cs",
    "content": "using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\nusing System.Text.RegularExpressions;\r\nusing UAssetAPI.ExportTypes;\r\nusing UAssetAPI.FieldTypes;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.PropertyTypes.Structs;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.Unversioned;\r\n\r\n#if DEBUGVERBOSE\r\nusing System.Diagnostics;\r\n#endif\r\n\r\nnamespace UAssetAPI\r\n{\r\n    /// <summary>\r\n    /// An entry in the property type registry. Contains the class Type used for standard and struct property serialization.\r\n    /// </summary>\r\n    internal class RegistryEntry\r\n    {\r\n        internal Type PropertyType;\r\n        internal bool HasCustomStructSerialization;\r\n        internal Func<FName, PropertyData> Creator;\r\n\r\n        public RegistryEntry()\r\n        {\r\n\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// The main serializer for most property types in UAssetAPI.\r\n    /// </summary>\r\n    public static class MainSerializer\r\n    {\r\n#if DEBUGVERBOSE\r\n        private static PropertyData lastType;\r\n#endif\r\n        public static string[] AdditionalPropertyRegistry = [\"ClassProperty\", \"SoftClassProperty\", \"AssetClassProperty\"];\r\n\r\n        private static IDictionary<string, RegistryEntry> _propertyTypeRegistry;\r\n\r\n        /// <summary>\r\n        /// The property type registry. Maps serialized property names to their types.\r\n        /// </summary>\r\n        internal static IDictionary<string, RegistryEntry> PropertyTypeRegistry\r\n        {\r\n            get => _propertyTypeRegistry;\r\n            set => _propertyTypeRegistry = value; // I hope you know what you're doing!\r\n        }\r\n\r\n        static MainSerializer()\r\n        {\r\n            InitializePropertyTypeRegistry();\r\n        }\r\n\r\n        private static IEnumerable<Assembly> GetDependentAssemblies(Assembly analyzedAssembly)\r\n        {\r\n            return AppDomain.CurrentDomain.GetAssemblies().Where(a => GetNamesOfAssembliesReferencedBy(a).Contains(analyzedAssembly.FullName));\r\n        }\r\n\r\n        public static IEnumerable<string> GetNamesOfAssembliesReferencedBy(Assembly assembly)\r\n        {\r\n            return assembly.GetReferencedAssemblies().Select(assemblyName => assemblyName.FullName);\r\n        }\r\n\r\n        private static Type registryParentDataType = typeof(PropertyData);\r\n\r\n        /// <summary>\r\n        /// Initializes the property type registry.\r\n        /// </summary>\r\n        private static void InitializePropertyTypeRegistry()\r\n        {\r\n            if (_propertyTypeRegistry != null) return;\r\n            _propertyTypeRegistry = new Dictionary<string, RegistryEntry>();\r\n\r\n            Assembly[] allDependentAssemblies = GetDependentAssemblies(registryParentDataType.Assembly).ToArray();\r\n            Assembly[] allAssemblies = new Assembly[allDependentAssemblies.Length + 1];\r\n            allAssemblies[0] = registryParentDataType.Assembly;\r\n            Array.Copy(allDependentAssemblies, 0, allAssemblies, 1, allDependentAssemblies.Length);\r\n\r\n            for (int i = 0; i < allAssemblies.Length; i++)\r\n            {\r\n                Type[] allPropertyDataTypes = allAssemblies[i].GetTypes().Where(t => t.IsSubclassOf(registryParentDataType)).ToArray();\r\n                for (int j = 0; j < allPropertyDataTypes.Length; j++)\r\n                {\r\n                    Type currentPropertyDataType = allPropertyDataTypes[j];\r\n                    if (currentPropertyDataType == null || currentPropertyDataType.ContainsGenericParameters) continue;\r\n\r\n                    var testInstance = Activator.CreateInstance(currentPropertyDataType);\r\n\r\n                    FString returnedPropType = currentPropertyDataType.GetProperty(\"PropertyType\")?.GetValue(testInstance, null) as FString;\r\n                    if (returnedPropType == null) continue;\r\n                    bool? returnedHasCustomStructSerialization = currentPropertyDataType.GetProperty(\"HasCustomStructSerialization\")?.GetValue(testInstance, null) as bool?;\r\n                    if (returnedHasCustomStructSerialization == null) continue;\r\n                    bool? returnedShouldBeRegistered = currentPropertyDataType.GetProperty(\"ShouldBeRegistered\")?.GetValue(testInstance, null) as bool?;\r\n                    if (returnedShouldBeRegistered == null) continue;\r\n\r\n                    if ((bool)returnedShouldBeRegistered)\r\n                    {\r\n                        RegistryEntry res = new RegistryEntry();\r\n                        res.PropertyType = currentPropertyDataType;\r\n                        res.HasCustomStructSerialization = (bool)returnedHasCustomStructSerialization;\r\n\r\n                        var nameParam = Expression.Parameter(typeof(FName));\r\n                        res.Creator = Expression.Lambda<Func<FName, PropertyData>>(\r\n                           Expression.New(currentPropertyDataType.GetConstructor(new[] { typeof(FName), }), new[] { nameParam, }),\r\n                           nameParam\r\n                        ).Compile();\r\n\r\n                        _propertyTypeRegistry[returnedPropType.Value] = res;\r\n                    }\r\n                }\r\n            }\r\n\r\n            // Fetch the current git commit while we're here\r\n            UAPUtils.CurrentCommit = string.Empty;\r\n            using (Stream stream = registryParentDataType.Assembly.GetManifestResourceStream(\"UAssetAPI.git_commit.txt\"))\r\n            {\r\n                if (stream != null)\r\n                {\r\n                    using (StreamReader reader = new StreamReader(stream))\r\n                    {\r\n                        if (reader != null) UAPUtils.CurrentCommit = reader.ReadToEnd().Trim();\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Generates an unversioned header based on a list of properties, and sorts the list in the correct order to be serialized.\r\n        /// </summary>\r\n        /// <param name=\"data\">The list of properties to sort and generate an unversioned header from.</param>\r\n        /// <param name=\"parentName\">The name of the parent of all the properties.</param>\r\n        /// <param name=\"parentModulePath\">The path to the module that the parent class/struct of this property is contained within.</param>\r\n        /// <param name=\"asset\">The UAsset which the properties are contained within.</param>\r\n        public static FUnversionedHeader GenerateUnversionedHeader(ref List<PropertyData> data, FName parentName, FName parentModulePath, UAsset asset)\r\n        {\r\n            var sortedProps = new List<PropertyData>();\r\n            if (!asset.HasUnversionedProperties) return null; // no point in wasting time generating it\r\n            if (asset.Mappings == null) return null;\r\n\r\n            int firstNumAll = int.MaxValue;\r\n            int lastNumAll = int.MinValue;\r\n            HashSet<int> propertiesToTouch = new HashSet<int>();\r\n            Dictionary<int, PropertyData> propMap = new Dictionary<int, PropertyData>();\r\n            HashSet<int> zeroProps = new HashSet<int>();\r\n            foreach (PropertyData entry in data)\r\n            {\r\n                if (!asset.Mappings.TryGetProperty<UsmapProperty>(entry.Name, entry.Ancestry, entry.ArrayIndex, asset, out _, out int idx)) throw new FormatException(\"No valid property \\\"\" + entry.Name.ToString() + \"\\\" in class \" + entry.Ancestry.Parent.ToString());\r\n                propMap[idx] = entry;\r\n                if (entry.CanBeZero(asset) && entry.IsZero) zeroProps.Add(idx);\r\n\r\n                if (idx < firstNumAll) firstNumAll = idx;\r\n                if (idx > lastNumAll) lastNumAll = idx;\r\n                propertiesToTouch.Add(idx);\r\n            }\r\n\r\n            int lastNumBefore = -1;\r\n            List<FFragment> allFrags = new List<FFragment>();\r\n            if (propertiesToTouch.Count > 0)\r\n            {\r\n                while (true)\r\n                {\r\n                    HashSet<int> fragmentHasAnyZeros = new HashSet<int>(); // add 0 if any zeros from 0 to (FFragment.ValueMax-1), 1 if any zeros from FFragment.ValueMax to (FFragment.ValueMax*2-1), etc.\r\n\r\n                    int firstNum = lastNumBefore + 1;\r\n                    while (!propertiesToTouch.Contains(firstNum) && firstNum <= lastNumAll) firstNum++;\r\n                    if (firstNum > lastNumAll) break;\r\n\r\n#if DEBUGVERBOSE\r\n                    if (allFrags.Count > 0) Debug.WriteLine(\"W: \" + allFrags[allFrags.Count - 1]);\r\n#endif\r\n\r\n                    int lastNum = firstNum;\r\n                    while (propertiesToTouch.Contains(lastNum))\r\n                    {\r\n                        if (zeroProps.Contains(lastNum))\r\n                        {\r\n                            int valueNum = lastNum - firstNum + 1;\r\n                            fragmentHasAnyZeros.Add(valueNum / FFragment.ValueMax);\r\n                        }\r\n                        sortedProps.Add(propMap[lastNum]);\r\n\r\n                        lastNum++;\r\n                    }\r\n                    lastNum--;\r\n\r\n                    var newFrag = FFragment.GetFromBounds(lastNumBefore, firstNum, lastNum, fragmentHasAnyZeros.Contains(0), false);\r\n\r\n                    // add extra 127s if we went over the max for either skip or value\r\n                    while (newFrag.SkipNum > FFragment.SkipMax)\r\n                    {\r\n                        allFrags.Add(new FFragment(FFragment.SkipMax, 0, false, false));\r\n                        newFrag.SkipNum -= FFragment.SkipMax;\r\n                    }\r\n                    int fragIdx = 0;\r\n                    while (newFrag.ValueNum > FFragment.ValueMax)\r\n                    {\r\n                        allFrags.Add(new FFragment(newFrag.SkipNum, FFragment.ValueMax, false, fragmentHasAnyZeros.Contains(fragIdx), firstNum + FFragment.ValueMax * fragIdx));\r\n                        newFrag.ValueNum -= FFragment.ValueMax;\r\n                        newFrag.FirstNum += FFragment.ValueMax;\r\n                        newFrag.SkipNum = 0;\r\n                        newFrag.bHasAnyZeroes = fragmentHasAnyZeros.Contains(++fragIdx);\r\n                    }\r\n\r\n                    allFrags.Add(newFrag);\r\n                    lastNumBefore = lastNum;\r\n                }\r\n                allFrags[allFrags.Count - 1].bIsLast = true;\r\n#if DEBUGVERBOSE\r\n                Debug.WriteLine(\"W: \" + allFrags[allFrags.Count - 1]);\r\n#endif\r\n            }\r\n            else\r\n            {\r\n                // add \"blank\" fragment\r\n                // i'm pretty sure that any SkipNum should work here as long as ValueNum = 0, but this is what the engine does\r\n                string highestSchema = parentName?.ToString();\r\n\r\n                // i doubt that this is true, empirically tested; need more data\r\n                int numSkip = 0;\r\n                if (asset.ObjectVersion >= ObjectVersion.VER_UE4_CORRECT_LICENSEE_FLAG)\r\n                {\r\n                    numSkip = Math.Min(asset.Mappings.GetAllProperties(highestSchema, parentModulePath?.ToString(), asset).Count, FFragment.SkipMax);\r\n                }\r\n                else\r\n                {\r\n                    numSkip = asset.Mappings.Schemas[highestSchema].Properties.Count == 0 ? 0 : Math.Min(asset.Mappings.GetAllProperties(highestSchema, parentModulePath?.ToString(), asset).Count, FFragment.SkipMax);\r\n                }\r\n                allFrags.Add(new FFragment(numSkip, 0, true, false));\r\n            }\r\n\r\n            // generate zero mask\r\n            bool bHasNonZeroValues = false;\r\n            List<bool> zeroMaskList = new List<bool>();\r\n            foreach (var frag in allFrags)\r\n            {\r\n                if (frag.bHasAnyZeroes)\r\n                {\r\n                    for (int i = 0; i < frag.ValueNum; i++)\r\n                    {\r\n                        bool isZero = zeroProps.Contains(frag.FirstNum + i);\r\n                        if (!isZero) bHasNonZeroValues = true;\r\n                        zeroMaskList.Add(isZero);\r\n                    }\r\n                }\r\n            }\r\n            BitArray zeroMask = new BitArray(zeroMaskList.ToArray());\r\n\r\n            var res = new FUnversionedHeader();\r\n            res.Fragments = new LinkedList<FFragment>();\r\n            foreach (var frag in allFrags) res.Fragments.AddLast(frag);\r\n            res.ZeroMask = zeroMask;\r\n            res.bHasNonZeroValues = bHasNonZeroValues;\r\n            if (res.Fragments.Count > 0)\r\n            {\r\n                res.CurrentFragment = res.Fragments.First;\r\n                res.UnversionedPropertyIndex = res.CurrentFragment.Value.FirstNum;\r\n            }\r\n\r\n            data.Clear();\r\n            data.AddRange(sortedProps);\r\n            return res;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initializes the correct PropertyData class based off of serialized name, type, etc.\r\n        /// </summary>\r\n        /// <param name=\"type\">The serialized type of this property.</param>\r\n        /// <param name=\"name\">The serialized name of this property.</param>\r\n        /// <param name=\"ancestry\">The ancestry of the parent of this property.</param>\r\n        /// <param name=\"parentName\">The name of the parent class/struct of this property.</param>\r\n        /// <param name=\"parentModulePath\">The path to the module that the parent class/struct of this property is contained within.</param>\r\n        /// <param name=\"asset\">The UAsset which this property is contained within.</param>\r\n        /// <param name=\"reader\">The BinaryReader to read from. If left unspecified, you must call the <see cref=\"PropertyData.Read(AssetBinaryReader, bool, long, long, PropertySerializationContext)\"/> method manually.</param>\r\n        /// <param name=\"leng\">The length of this property on disk in bytes.</param>\r\n        /// <param name=\"propertyTagFlags\">Property tag flags, if available.</param>\r\n        /// <param name=\"ArrayIndex\">The duplication index of this property.</param>\r\n        /// <param name=\"includeHeader\">Does this property serialize its header in the current context?</param>\r\n        /// <param name=\"isZero\">Is the body of this property empty?</param>\r\n        /// <param name=\"propertyTypeName\">The complete property type name, if available.</param>\r\n        /// <returns>A new PropertyData instance based off of the passed parameters.</returns>\r\n        public static PropertyData TypeToClass(FName type, FName name, AncestryInfo ancestry, FName parentName, FName parentModulePath, UAsset asset, AssetBinaryReader reader = null, int leng = 0, EPropertyTagFlags propertyTagFlags = EPropertyTagFlags.None, int ArrayIndex = 0, bool includeHeader = true, bool isZero = false, FPropertyTypeName propertyTypeName = null)\r\n        {\r\n            long startingOffset = 0;\r\n            if (reader != null) startingOffset = reader.BaseStream.Position;\r\n\r\n            if (type.Value.Value == \"None\") return null;\r\n\r\n            PropertyData data = null;\r\n            if (PropertyTypeRegistry.ContainsKey(type.Value.Value))\r\n            {\r\n                data = PropertyTypeRegistry[type.Value.Value].Creator.Invoke(name);\r\n            }\r\n            else\r\n            {\r\n#if DEBUGVERBOSE\r\n                Debug.WriteLine(\"-----------\");\r\n                Debug.WriteLine(\"Parsing unknown type \" + type.ToString());\r\n                Debug.WriteLine(\"Length: \" + leng);\r\n                if (reader != null) Debug.WriteLine(\"Pos: \" + reader.BaseStream.Position);\r\n                Debug.WriteLine(\"Last type: \" + lastType.PropertyType?.ToString());\r\n                if (lastType is ArrayPropertyData) Debug.WriteLine(\"Last array's type was \" + ((ArrayPropertyData)lastType).ArrayType?.ToString());\r\n                if (lastType is StructPropertyData) Debug.WriteLine(\"Last struct's type was \" + ((StructPropertyData)lastType).StructType?.ToString());\r\n                if (lastType is MapPropertyData lastTypeMap)\r\n                {\r\n                    if (lastTypeMap.Value.Count == 0)\r\n                    {\r\n                        Debug.WriteLine(\"Last map's key type was \" + lastTypeMap.KeyType?.ToString());\r\n                        Debug.WriteLine(\"Last map's value type was \" + lastTypeMap.ValueType?.ToString());\r\n                    }\r\n                    else\r\n                    {\r\n                        Debug.WriteLine(\"Last map's key type was \" + lastTypeMap.Value.Keys.ElementAt(0).PropertyType?.ToString());\r\n                        Debug.WriteLine(\"Last map's value type was \" + lastTypeMap.Value[0].PropertyType?.ToString());\r\n                    }\r\n                }\r\n                Debug.WriteLine(\"-----------\");\r\n#endif\r\n                if (leng > 0)\r\n                {\r\n                    data = new UnknownPropertyData(name);\r\n                    ((UnknownPropertyData)data).SetSerializingPropertyType(type.Value);\r\n                }\r\n                else\r\n                {\r\n                    if (reader == null) throw new FormatException(\"Unknown property type: \" + type.ToString() + \" (on \" + name.ToString() + \")\");\r\n                    throw new FormatException(\"Unknown property type: \" + type.ToString() + \" (on \" + name.ToString() + \" at \" + reader.BaseStream.Position + \")\");\r\n                }\r\n            }\r\n\r\n#if DEBUGVERBOSE\r\n            lastType = data;\r\n#endif\r\n\r\n            data.IsZero = isZero;\r\n            data.PropertyTagFlags = propertyTagFlags;\r\n            data.Ancestry.Initialize(ancestry, parentName, parentModulePath);\r\n            data.ArrayIndex = ArrayIndex;\r\n            data.PropertyTypeName = propertyTypeName;\r\n            if (reader != null && !isZero)\r\n            {\r\n                long posBefore = reader.BaseStream.Position;\r\n                try\r\n                {\r\n                    data.Read(reader, includeHeader, leng);\r\n                }\r\n                catch (Exception)\r\n                {\r\n                    // if asset is unversioned, bubble the error up to make the whole export fail\r\n                    // because unversioned headers aren't properly reconstructed currently\r\n                    if (data is StructPropertyData && !reader.Asset.HasUnversionedProperties)\r\n                    {\r\n                        reader.BaseStream.Position = posBefore;\r\n                        data = new RawStructPropertyData(name);\r\n                        data.Ancestry.Initialize(ancestry, parentName, parentModulePath);\r\n                        data.ArrayIndex = ArrayIndex;\r\n                        data.PropertyTypeName = propertyTypeName;\r\n                        data.Read(reader, includeHeader, leng);\r\n                    }\r\n                    else\r\n                    {\r\n                        throw;\r\n                    }\r\n                }\r\n                if (data.Offset == 0) data.Offset = startingOffset; // fallback\r\n            }\r\n            else if (reader != null && isZero)\r\n            {\r\n                data.InitializeZero(reader);\r\n            }\r\n\r\n            return data;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads a property into memory.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from. The underlying stream should be at the position of the property to be read.</param>\r\n        /// <param name=\"ancestry\">The ancestry of the parent of this property.</param>\r\n        /// <param name=\"parentName\">The name of the parent class/struct of this property.</param>\r\n        /// <param name=\"parentModulePath\">The path to the module that the parent class/struct of this property is contained within.</param>\r\n        /// <param name=\"header\">The unversioned header to be used when reading this property. Leave null if none exists.</param>\r\n        /// <param name=\"includeHeader\">Does this property serialize its header in the current context?</param>\r\n        /// <returns>The property read from disk.</returns>\r\n        public static PropertyData Read(AssetBinaryReader reader, AncestryInfo ancestry, FName parentName, FName parentModulePath, FUnversionedHeader header, bool includeHeader)\r\n        {\r\n            long startingOffset = reader.BaseStream.Position;\r\n            FName name = null;\r\n            FName type = null;\r\n            int leng = 0;\r\n            EPropertyTagFlags propertyTagFlags = EPropertyTagFlags.None;\r\n            FPropertyTypeName typeName = null;\r\n            int ArrayIndex = 0;\r\n            string structType = null;\r\n            bool isZero = false;\r\n\r\n            if (reader.Asset.HasUnversionedProperties)\r\n            {\r\n                if (reader.Asset.Mappings == null)\r\n                {\r\n                    throw new InvalidMappingsException();\r\n                }\r\n\r\n                UsmapSchema relevantSchema = reader.Asset.Mappings.GetSchemaFromName(parentName?.ToString(), reader.Asset, parentModulePath?.ToString());\r\n                while (header.UnversionedPropertyIndex > header.CurrentFragment.Value.LastNum)\r\n                {\r\n                    if (header.CurrentFragment.Value.bIsLast) return null;\r\n                    header.CurrentFragment = header.CurrentFragment.Next;\r\n                    header.UnversionedPropertyIndex = header.CurrentFragment.Value.FirstNum;\r\n                }\r\n\r\n                int practicingUnversionedPropertyIndex = header.UnversionedPropertyIndex;\r\n                while (practicingUnversionedPropertyIndex >= relevantSchema.PropCount) // if needed, go to parent struct\r\n                {\r\n                    practicingUnversionedPropertyIndex -= relevantSchema.PropCount;\r\n\r\n                    if (relevantSchema.SuperType != null && relevantSchema.SuperTypeModulePath != null && reader.Asset.Mappings.Schemas.ContainsKey(relevantSchema.SuperTypeModulePath + \".\" + relevantSchema.SuperType))\r\n                    {\r\n                        relevantSchema = reader.Asset.Mappings.Schemas[relevantSchema.SuperTypeModulePath + \".\" + relevantSchema.SuperType];\r\n                    }\r\n                    else if (relevantSchema.SuperType != null && reader.Asset.Mappings.Schemas.ContainsKey(relevantSchema.SuperType) && relevantSchema.Name != relevantSchema.SuperType) // name is insufficient if name of super is same as name of child\r\n                    {\r\n                        relevantSchema = reader.Asset.Mappings.Schemas[relevantSchema.SuperType];\r\n                    }\r\n                    else\r\n                    {\r\n                        relevantSchema = null;\r\n                    }\r\n\r\n                    if (relevantSchema == null) throw new FormatException(\"Failed to find a valid property for schema index \" + header.UnversionedPropertyIndex + \" in the class \" + parentName.ToString());\r\n                }\r\n                UsmapProperty relevantProperty = relevantSchema.Properties[practicingUnversionedPropertyIndex];\r\n                header.UnversionedPropertyIndex += 1;\r\n\r\n                name = FName.DefineDummy(reader.Asset, relevantProperty.Name);\r\n                type = FName.DefineDummy(reader.Asset, relevantProperty.PropertyData.Type.ToString());\r\n                leng = 1; // not serialized\r\n                ArrayIndex = relevantProperty.ArrayIndex;\r\n                if (relevantProperty.PropertyData is UsmapStructData usmapStruc) structType = usmapStruc.StructType;\r\n\r\n                // check if property is zero\r\n                if (header.CurrentFragment.Value.bHasAnyZeroes)\r\n                {\r\n                    isZero = header.ZeroMaskIndex >= header.ZeroMask.Count ? false : header.ZeroMask.Get(header.ZeroMaskIndex);\r\n                    header.ZeroMaskIndex++;\r\n                }\r\n            }\r\n            else if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n            {\r\n                name = reader.ReadFName();\r\n                if (name.Value.Value == \"None\") return null;\r\n\r\n                typeName = new FPropertyTypeName(reader);\r\n                type = typeName.GetName();\r\n                leng = reader.ReadInt32();\r\n                propertyTagFlags = (EPropertyTagFlags)reader.ReadByte();\r\n\r\n                if (propertyTagFlags.HasFlag(EPropertyTagFlags.HasArrayIndex))\r\n                {\r\n                    ArrayIndex = reader.ReadInt32();\r\n                }\r\n            }\r\n            else\r\n            {\r\n                name = reader.ReadFName();\r\n                if (name.Value.Value == \"None\") return null;\r\n\r\n                type = reader.ReadFName();\r\n\r\n                leng = reader.ReadInt32();\r\n                ArrayIndex = reader.ReadInt32();\r\n            }\r\n\r\n            PropertyData result = TypeToClass(type, name, ancestry, parentName, parentModulePath, reader.Asset, reader, leng, propertyTagFlags, ArrayIndex, includeHeader, isZero, typeName);\r\n            if (structType != null && result is StructPropertyData strucProp) strucProp.StructType = FName.DefineDummy(reader.Asset, structType);\r\n            result.Offset = startingOffset;\r\n            //Debug.WriteLine(type);\r\n            return result;\r\n        }\r\n\r\n        internal static readonly Regex allNonLetters = new Regex(\"[^a-zA-Z]\", RegexOptions.Compiled);\r\n\r\n        /// <summary>\r\n        /// Reads an FProperty into memory. Primarily used as a part of <see cref=\"StructExport\"/> serialization.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from. The underlying stream should be at the position of the FProperty to be read.</param>\r\n        /// <returns>The FProperty read from disk.</returns>\r\n        public static FProperty ReadFProperty(AssetBinaryReader reader)\r\n        {\r\n            FName serializedType = reader.ReadFName();\r\n            Type requestedType = Type.GetType(\"UAssetAPI.FieldTypes.F\" + allNonLetters.Replace(serializedType.Value.Value, string.Empty));\r\n            if (requestedType == null) requestedType = typeof(FGenericProperty);\r\n            var res = (FProperty)Activator.CreateInstance(requestedType);\r\n            res.SerializedType = serializedType;\r\n            res.Read(reader);\r\n            return res;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Serializes an FProperty from memory.\r\n        /// </summary>\r\n        /// <param name=\"prop\">The FProperty to serialize.</param>\r\n        /// <param name=\"writer\">The BinaryWriter to serialize the FProperty to.</param>\r\n        public static void WriteFProperty(FProperty prop, AssetBinaryWriter writer)\r\n        {\r\n            writer.Write(prop.SerializedType);\r\n            prop.Write(writer);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads a UProperty into memory. Primarily used as a part of <see cref=\"PropertyExport\"/> serialization.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from. The underlying stream should be at the position of the UProperty to be read.</param>\r\n        /// <param name=\"serializedType\">The type of UProperty to be read.</param>\r\n        /// <returns>The FProperty read from disk.</returns>\r\n        public static UProperty ReadUProperty(AssetBinaryReader reader, FName serializedType)\r\n        {\r\n            return ReadUProperty(reader, Type.GetType(\"UAssetAPI.FieldTypes.U\" + allNonLetters.Replace(serializedType.Value.Value, string.Empty)));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads a UProperty into memory. Primarily used as a part of <see cref=\"PropertyExport\"/> serialization.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from. The underlying stream should be at the position of the UProperty to be read.</param>\r\n        /// <param name=\"requestedType\">The type of UProperty to be read.</param>\r\n        /// <returns>The FProperty read from disk.</returns>\r\n        public static UProperty ReadUProperty(AssetBinaryReader reader, Type requestedType)\r\n        {\r\n            if (requestedType == null) requestedType = typeof(UGenericProperty);\r\n            var res = (UProperty)Activator.CreateInstance(requestedType);\r\n            res.Read(reader);\r\n            return res;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads a UProperty into memory. Primarily used as a part of <see cref=\"PropertyExport\"/> serialization.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from. The underlying stream should be at the position of the UProperty to be read.</param>\r\n        /// <returns>The FProperty read from disk.</returns>\r\n        public static T ReadUProperty<T>(AssetBinaryReader reader) where T : UProperty\r\n        {\r\n            var res = (UProperty)Activator.CreateInstance(typeof(T));\r\n            res.Read(reader);\r\n            return (T)res;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Serializes a UProperty from memory.\r\n        /// </summary>\r\n        /// <param name=\"prop\">The UProperty to serialize.</param>\r\n        /// <param name=\"writer\">The BinaryWriter to serialize the UProperty to.</param>\r\n        public static void WriteUProperty(UProperty prop, AssetBinaryWriter writer)\r\n        {\r\n            prop.Write(writer);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Serializes a property from memory.\r\n        /// </summary>\r\n        /// <param name=\"property\">The property to serialize.</param>\r\n        /// <param name=\"writer\">The BinaryWriter to serialize the property to.</param>\r\n        /// <param name=\"includeHeader\">Does this property serialize its header in the current context?</param>\r\n        /// <returns>The serial offset where the length of the property is stored.</returns>\r\n        public static int Write(PropertyData property, AssetBinaryWriter writer, bool includeHeader)\r\n        {\r\n            if (property == null) return -1;\r\n\r\n            property.Offset = writer.BaseStream.Position;\r\n\r\n            if (writer.Asset.HasUnversionedProperties)\r\n            {\r\n                if (!property.IsZero || !property.CanBeZero(writer.Asset)) property.Write(writer, includeHeader);\r\n                return -1; // length is not serialized\r\n            }\r\n            else if (writer.Asset.ObjectVersionUE5 >= ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n            {\r\n                writer.Write(property.Name);\r\n                if (property is UnknownPropertyData unknownProp)\r\n                {\r\n                    writer.Write(new FName(writer.Asset, unknownProp.SerializingPropertyType));\r\n                    writer.Write((int)0);\r\n                }\r\n                else\r\n                {\r\n                    property.PropertyTypeName.Write(writer);\r\n                }\r\n\r\n                // update flags appropriately\r\n                if (property is BoolPropertyData bProp)\r\n                {\r\n                    if (bProp.Value) property.PropertyTagFlags |= EPropertyTagFlags.BoolTrue;\r\n                    else property.PropertyTagFlags &= ~EPropertyTagFlags.BoolTrue;\r\n                }\r\n\r\n                if (property.ArrayIndex != 0) property.PropertyTagFlags |= EPropertyTagFlags.HasArrayIndex;\r\n                else property.PropertyTagFlags &= ~EPropertyTagFlags.HasArrayIndex;\r\n\r\n                if (property.PropertyGuid != null) property.PropertyTagFlags |= EPropertyTagFlags.HasPropertyGuid;\r\n                else property.PropertyTagFlags &= ~EPropertyTagFlags.HasPropertyGuid;\r\n\r\n                int oldLoc = (int)writer.BaseStream.Position;\r\n                writer.Write((int)0); // initial length\r\n                writer.Write((byte)property.PropertyTagFlags);\r\n                if (property.ArrayIndex != 0) writer.Write(property.ArrayIndex);\r\n                int realLength = property.Write(writer, includeHeader);\r\n                int newLoc = (int)writer.BaseStream.Position;\r\n\r\n                writer.Seek(oldLoc, SeekOrigin.Begin);\r\n                writer.Write(realLength);\r\n                writer.Seek(newLoc, SeekOrigin.Begin);\r\n                return oldLoc;\r\n            }\r\n            else\r\n            {\r\n                writer.Write(property.Name);\r\n                if (property is UnknownPropertyData unknownProp)\r\n                {\r\n                    writer.Write(new FName(writer.Asset, unknownProp.SerializingPropertyType));\r\n                }\r\n                else if (property is RawStructPropertyData)\r\n                {\r\n                    writer.Write(new FName(writer.Asset, FString.FromString(\"StructProperty\")));\r\n                }\r\n                else\r\n                {\r\n                    writer.Write(new FName(writer.Asset, property.PropertyType));\r\n                }\r\n                int oldLoc = (int)writer.BaseStream.Position;\r\n                writer.Write((int)0); // initial length\r\n                writer.Write(property.ArrayIndex);\r\n                int realLength = property.Write(writer, includeHeader);\r\n                int newLoc = (int)writer.BaseStream.Position;\r\n\r\n                writer.Seek(oldLoc, SeekOrigin.Begin);\r\n                writer.Write(realLength);\r\n                writer.Seek(newLoc, SeekOrigin.Begin);\r\n                return oldLoc;\r\n            }\r\n\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Pak/Interop.cs",
    "content": "/*\r\n    This code was written by @trumank as part of the repak crate: https://github.com/trumank/repak\r\n\r\n    MIT License\r\n\r\n    Copyright 2024 Truman Kilen, spuds\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE.\r\n*/\r\n\r\nnamespace UAssetAPI;\r\n\r\nusing System;\r\nusing System.Runtime.InteropServices;\r\n\r\npublic static class RePakInterop\r\n{\r\n    public const string NativeLib = \"repak_bind\";\r\n\r\n    [DllImport(NativeLib, CallingConvention = CallingConvention.Cdecl)]\r\n    public static extern IntPtr pak_setup_allocator();\r\n    [DllImport(NativeLib, CallingConvention = CallingConvention.Cdecl)]\r\n    public static extern IntPtr pak_teardown_allocator();\r\n\r\n    [DllImport(NativeLib, CallingConvention = CallingConvention.Cdecl)]\r\n    public static extern IntPtr pak_builder_new();\r\n\r\n    [DllImport(NativeLib, CallingConvention = CallingConvention.Cdecl)]\r\n    public static extern void pak_builder_drop(IntPtr builder);\r\n    [DllImport(NativeLib, CallingConvention = CallingConvention.Cdecl)]\r\n    public static extern void pak_reader_drop(IntPtr reader);\r\n    [DllImport(NativeLib, CallingConvention = CallingConvention.Cdecl)]\r\n    public static extern void pak_writer_drop(IntPtr writer);\r\n    [DllImport(NativeLib, CallingConvention = CallingConvention.Cdecl)]\r\n    public static extern void pak_buffer_drop(IntPtr buffer, ulong length);\r\n    [DllImport(NativeLib, CallingConvention = CallingConvention.Cdecl)]\r\n    public static extern void pak_cstring_drop(IntPtr cstrign);\r\n\r\n    [DllImport(NativeLib, CallingConvention = CallingConvention.Cdecl)]\r\n    public static extern IntPtr pak_builder_key(IntPtr builder, byte[] key);\r\n    [DllImport(NativeLib, CallingConvention = CallingConvention.Cdecl)]\r\n    public static extern IntPtr pak_builder_compression(IntPtr builder, byte[] compressions, int length);\r\n    [DllImport(NativeLib, CallingConvention = CallingConvention.Cdecl)]\r\n    public static extern IntPtr pak_builder_reader(IntPtr builder, StreamCallbacks ctx);\r\n    [DllImport(NativeLib, CallingConvention = CallingConvention.Cdecl)]\r\n    public static extern IntPtr pak_builder_writer(IntPtr builder, StreamCallbacks ctx, PakVersion version, string mount_point, ulong path_hash_seed = 0);\r\n\r\n    [DllImport(NativeLib, CallingConvention = CallingConvention.Cdecl)]\r\n    public static extern PakVersion pak_reader_version(IntPtr reader);\r\n    [DllImport(NativeLib, CallingConvention = CallingConvention.Cdecl)]\r\n    public static extern IntPtr pak_reader_mount_point(IntPtr reader);\r\n    [DllImport(NativeLib, CallingConvention = CallingConvention.Cdecl)]\r\n    public static extern int pak_reader_get(IntPtr reader, string path, StreamCallbacks ctx, out IntPtr buffer, out ulong length);\r\n    [DllImport(NativeLib, CallingConvention = CallingConvention.Cdecl)]\r\n    public static extern IntPtr pak_reader_files(IntPtr reader, out ulong length);\r\n    [DllImport(NativeLib, CallingConvention = CallingConvention.Cdecl)]\r\n    public static extern IntPtr pak_drop_files(IntPtr buffer, ulong length);\r\n\r\n    [DllImport(NativeLib, CallingConvention = CallingConvention.Cdecl)]\r\n    public static extern int pak_writer_write_file(IntPtr writer, string path, byte[] data, int data_len);\r\n    [DllImport(NativeLib, CallingConvention = CallingConvention.Cdecl)]\r\n    public static extern int pak_writer_write_index(IntPtr writer);\r\n\r\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\r\n    public delegate long ReadCallback(IntPtr context, IntPtr buffer, ulong bufferLen);\r\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\r\n    public delegate int WriteCallback(IntPtr context, IntPtr buffer, int bufferLen);\r\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\r\n    public delegate ulong SeekCallback(IntPtr context, long offset, int origin);\r\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\r\n    public delegate int FlushCallback(IntPtr context);\r\n\r\n    [StructLayout(LayoutKind.Sequential)]\r\n    public struct StreamCallbacks\r\n    {\r\n        public IntPtr Context;\r\n        public ReadCallback ReadCb;\r\n        public WriteCallback WriteCb;\r\n        public SeekCallback SeekCb;\r\n        public FlushCallback FlushCb;\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Pak/RePak.cs",
    "content": "﻿/*\r\n    This code has been slightly adapted from code written by @trumank as part of the repak crate: https://github.com/trumank/repak\r\n\r\n    MIT License\r\n\r\n    Copyright 2024 Truman Kilen, spuds\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE.\r\n*/\r\n\r\nnamespace UAssetAPI;\r\n\r\nusing Microsoft.Win32.SafeHandles;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.IO.Compression;\r\nusing System.Linq;\r\nusing System.Runtime.InteropServices;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\n\r\npublic enum PakVersion : byte\r\n{\r\n    V0 = 0,\r\n    V1 = 1,\r\n    V2 = 2,\r\n    V3 = 3,\r\n    V4 = 4,\r\n    V5 = 5,\r\n    V6 = 6,\r\n    V7 = 7,\r\n    V8A = 8,\r\n    V8B = 9,\r\n    V9 = 10,\r\n    V10 = 11,\r\n    V11 = 12\r\n}\r\n\r\npublic enum PakCompression : byte\r\n{\r\n    Zlib,\r\n    Gzip,\r\n    Oodle,\r\n    Zstd\r\n}\r\n\r\npublic class PakBuilder : SafeHandleZeroOrMinusOneIsInvalid\r\n{\r\n    public PakBuilder() : base(true)\r\n    {\r\n        try\r\n        {\r\n            SetHandle(RePakInterop.pak_builder_new());\r\n        }\r\n        catch (Exception ex)\r\n        {\r\n            if (ex is DllNotFoundException || ex is BadImageFormatException)\r\n            {\r\n                // extract dll if needed\r\n                string outPath = Path.Combine(AppContext.BaseDirectory, RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? \"repak_bind.so\" : \"repak_bind.dll\");\r\n                string resourceName = RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? \"UAssetAPI.repak_bind.so.gz\" : \"UAssetAPI.repak_bind.dll.gz\";\r\n                using (var resource = typeof(PropertyData).Assembly.GetManifestResourceStream(resourceName))\r\n                {\r\n                    if (resource != null)\r\n                    {\r\n                        using (var file = new FileStream(outPath, FileMode.Create, FileAccess.Write))\r\n                        {\r\n                            using (var gzipStream = new GZipStream(resource, CompressionMode.Decompress))\r\n                            {\r\n                                gzipStream.CopyTo(file);\r\n                            }\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        throw new DllNotFoundException(\"Failed to find resource: \" + resourceName);\r\n                    }\r\n                }\r\n\r\n                NativeLibrary.Load(outPath);\r\n\r\n                SetHandle(RePakInterop.pak_builder_new());\r\n            }\r\n            else\r\n            {\r\n                throw;\r\n            }\r\n        }\r\n    }\r\n    protected override bool ReleaseHandle()\r\n    {\r\n        RePakInterop.pak_builder_drop(handle);\r\n        return true;\r\n    }\r\n\r\n    public PakBuilder Key(byte[] key)\r\n    {\r\n        if (key.Length != 32) throw new Exception(\"Invalid AES key length\");\r\n        SetHandle(RePakInterop.pak_builder_key(handle, key));\r\n        return this;\r\n    }\r\n\r\n    public PakBuilder Compression(PakCompression[] compressions)\r\n    {\r\n        SetHandle(RePakInterop.pak_builder_compression(handle, compressions.Select(c => Convert.ToByte(c)).ToArray(), compressions.Length));\r\n        return this;\r\n    }\r\n\r\n    public PakWriter Writer(Stream stream, PakVersion version = PakVersion.V11, string mountPoint = \"../../../\", ulong pathHashSeed = 0)\r\n    {\r\n        if (handle == IntPtr.Zero) throw new Exception(\"PakBuilder handle invalid\");\r\n\r\n        var streamCtx = StreamCallbacks.Create(stream);\r\n\r\n        IntPtr writerHandle = RePakInterop.pak_builder_writer(handle, streamCtx, version, mountPoint, pathHashSeed);\r\n\r\n        // pak_builder_reader consumes the builder\r\n        SetHandleAsInvalid();\r\n        SetHandle(IntPtr.Zero);\r\n\r\n        return new PakWriter(writerHandle, streamCtx.Context);\r\n    }\r\n\r\n    public PakReader Reader(Stream stream)\r\n    {\r\n        if (handle == IntPtr.Zero) throw new Exception(\"PakBuilder handle invalid\");\r\n\r\n        var streamCtx = StreamCallbacks.Create(stream);\r\n\r\n        IntPtr readerHandle = RePakInterop.pak_builder_reader(handle, streamCtx);\r\n        StreamCallbacks.Free(streamCtx.Context);\r\n\r\n        // pak_builder_reader consumes the builder\r\n        SetHandleAsInvalid();\r\n        SetHandle(IntPtr.Zero);\r\n\r\n        if (readerHandle == IntPtr.Zero) throw new Exception(\"Failed to create PakReader\");\r\n        return new PakReader(readerHandle, stream);\r\n    }\r\n}\r\n\r\npublic class PakWriter : SafeHandleZeroOrMinusOneIsInvalid\r\n{\r\n    private IntPtr _streamCtx;\r\n\r\n    public PakWriter(IntPtr handle, IntPtr streamCtx) : base(true)\r\n    {\r\n        SetHandle(handle);\r\n        _streamCtx = streamCtx;\r\n    }\r\n    protected override bool ReleaseHandle()\r\n    {\r\n        RePakInterop.pak_writer_drop(handle);\r\n        StreamCallbacks.Free(_streamCtx);\r\n        return true;\r\n    }\r\n\r\n    public void WriteFile(string path, byte[] data)\r\n    {\r\n        if (handle == IntPtr.Zero) throw new Exception(\"PakWriter handle invalid\");\r\n        int result = RePakInterop.pak_writer_write_file(handle, path, data, data.Length);\r\n        if (result != 0) throw new Exception(\"Failed to write file\");\r\n    }\r\n\r\n    public void WriteIndex()\r\n    {\r\n        int result = RePakInterop.pak_writer_write_index(handle);\r\n\r\n        // write_index drops the writer\r\n        SetHandleAsInvalid();\r\n        SetHandle(IntPtr.Zero);\r\n        StreamCallbacks.Free(_streamCtx);\r\n\r\n        if (result != 0) throw new Exception(\"Failed to write index\");\r\n    }\r\n}\r\n\r\npublic class PakReader : SafeHandleZeroOrMinusOneIsInvalid\r\n{\r\n    public PakReader(IntPtr handle, Stream stream) : base(true)\r\n    {\r\n        SetHandle(handle);\r\n    }\r\n\r\n    protected override bool ReleaseHandle()\r\n    {\r\n        RePakInterop.pak_reader_drop(handle);\r\n        return true;\r\n    }\r\n\r\n    public string GetMountPoint()\r\n    {\r\n        if (handle == IntPtr.Zero) throw new Exception(\"PakReader handle invalid\");\r\n\r\n        var cstring = RePakInterop.pak_reader_mount_point(handle);\r\n        var mountPoint = Marshal.PtrToStringAnsi(cstring);\r\n\r\n        RePakInterop.pak_cstring_drop(cstring);\r\n\r\n        return mountPoint;\r\n    }\r\n\r\n    public PakVersion GetVersion()\r\n    {\r\n        if (handle == IntPtr.Zero) throw new Exception(\"PakReader handle invalid\");\r\n\r\n        return RePakInterop.pak_reader_version(handle);\r\n    }\r\n\r\n    public byte[] Get(Stream stream, string path)\r\n    {\r\n        if (handle == IntPtr.Zero) throw new Exception(\"PakReader handle invalid\");\r\n\r\n        var streamCtx = StreamCallbacks.Create(stream);\r\n\r\n        IntPtr bufferPtr;\r\n        ulong length;\r\n        int result = RePakInterop.pak_reader_get(handle, path, streamCtx, out bufferPtr, out length);\r\n\r\n        StreamCallbacks.Free(streamCtx.Context);\r\n\r\n        if (result != 0) return null;\r\n\r\n        byte[] buffer = new byte[length];\r\n        Marshal.Copy(bufferPtr, buffer, 0, (int)length);\r\n\r\n        RePakInterop.pak_buffer_drop(bufferPtr, length);\r\n\r\n        return buffer;\r\n    }\r\n\r\n    public string[] Files()\r\n    {\r\n        if (handle == IntPtr.Zero) throw new Exception(\"PakReader handle invalid\");\r\n\r\n        ulong length;\r\n        IntPtr filesPtr = RePakInterop.pak_reader_files(handle, out length);\r\n        var files = new List<string>();\r\n        for (ulong i = 0; i < length; i++)\r\n        {\r\n            IntPtr currentPtr = Marshal.ReadIntPtr(filesPtr, (int)i * IntPtr.Size);\r\n            files.Add(Marshal.PtrToStringAnsi(currentPtr));\r\n        }\r\n        RePakInterop.pak_drop_files(filesPtr, length);\r\n        return files.ToArray();\r\n    }\r\n}\r\n\r\n\r\npublic static class StreamCallbacks\r\n{\r\n    public static RePakInterop.StreamCallbacks Create(Stream stream)\r\n    {\r\n        return new RePakInterop.StreamCallbacks\r\n        {\r\n            Context = GCHandle.ToIntPtr(GCHandle.Alloc(stream)),\r\n            ReadCb = StreamCallbacks.ReadCallback,\r\n            WriteCb = StreamCallbacks.WriteCallback,\r\n            SeekCb = StreamCallbacks.SeekCallback,\r\n            FlushCb = StreamCallbacks.FlushCallback\r\n        };\r\n    }\r\n    public static void Free(IntPtr streamCtx)\r\n    {\r\n        GCHandle.FromIntPtr(streamCtx).Free();\r\n    }\r\n\r\n    public static long ReadCallback(IntPtr context, IntPtr buffer, ulong bufferLen)\r\n    {\r\n        var stream = (Stream)GCHandle.FromIntPtr(context).Target;\r\n        try\r\n        {\r\n            byte[] bufferManaged = new byte[bufferLen];\r\n            int bytesRead = stream.Read(bufferManaged, 0, (int)bufferLen);\r\n            Marshal.Copy(bufferManaged, 0, buffer, bytesRead);\r\n            return bytesRead;\r\n        }\r\n        catch (Exception e)\r\n        {\r\n            Console.WriteLine($\"Error during read {e}\");\r\n            return -1;\r\n        }\r\n    }\r\n\r\n    public static int WriteCallback(IntPtr context, IntPtr buffer, int bufferLen)\r\n    {\r\n        var stream = (Stream)GCHandle.FromIntPtr(context).Target;\r\n        var bufferManaged = new byte[bufferLen];\r\n        Marshal.Copy(buffer, bufferManaged, 0, bufferLen);\r\n\r\n        try\r\n        {\r\n            stream.Write(bufferManaged, 0, bufferLen);\r\n            return bufferLen;\r\n        }\r\n        catch (Exception e)\r\n        {\r\n            Console.WriteLine($\"Error during write {e}\");\r\n            return -1;\r\n        }\r\n    }\r\n\r\n    public static ulong SeekCallback(IntPtr context, long offset, int origin)\r\n    {\r\n        var stream = (Stream)GCHandle.FromIntPtr(context).Target;\r\n        try\r\n        {\r\n            long newPosition = stream.Seek(offset, (SeekOrigin)origin);\r\n            return (ulong)newPosition;\r\n        }\r\n        catch (Exception e)\r\n        {\r\n            Console.WriteLine($\"Error during seek {e}\");\r\n            return ulong.MaxValue;\r\n        }\r\n    }\r\n\r\n    public static int FlushCallback(IntPtr context)\r\n    {\r\n        var stream = (Stream)GCHandle.FromIntPtr(context).Target;\r\n        try\r\n        {\r\n            stream.Flush();\r\n            return 0;\r\n        }\r\n        catch (Exception e)\r\n        {\r\n            Console.WriteLine($\"Error during flush {e}\");\r\n            return 1;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n#if DEBUGTRACING\r\nusing PostSharp.Patterns.Diagnostics;\r\nusing PostSharp.Extensibility;\r\n#endif\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible\r\n// to COM components.  If you need to access a type in this assembly from\r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"178417ec-1177-413e-be85-c83aecd64279\")]\r\n\r\n#if DEBUGTRACING\r\n[assembly: UAssetAPI.Trace.LoggingAspect]\r\n[assembly: UAssetAPI.Trace.LoggingAspect(AttributeTargetTypes=\"UAssetAPI.Trace.*\", AttributeExclude = true)]\r\n#endif"
  },
  {
    "path": "UAssetAPI/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.42000\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Properties {\r\n    using System;\r\n    \r\n    \r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    internal class Resources {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal Resources() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"UAssetAPI.Properties.Resources\", typeof(Resources).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Byte[].\r\n        /// </summary>\r\n        internal static byte[] AC7Key {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"AC7Key\", resourceCulture);\r\n                return ((byte[])(obj));\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\r\n  <data name=\"AC7Key\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\r\n    <value>..\\Resources\\AC7Key.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/ArrayPropertyData.cs",
    "content": "using Newtonsoft.Json;\r\nusing System;\r\nusing System.IO;\r\nusing UAssetAPI.PropertyTypes.Structs;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.Unversioned;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes an array.\r\n/// </summary>\r\npublic class ArrayPropertyData : PropertyData<PropertyData[]>\r\n{\r\n    [JsonProperty]\r\n    public FName ArrayType;\r\n    [JsonProperty]\r\n    public StructPropertyData DummyStruct;\r\n\r\n    internal bool ShouldSerializeStructsDifferently = true;\r\n\r\n    public bool ShouldSerializeDummyStruct()\r\n    {\r\n        return Value.Length == 0;\r\n    }\r\n\r\n    public ArrayPropertyData(FName name) : base(name)\r\n    {\r\n        Value = [];\r\n    }\r\n\r\n    public ArrayPropertyData()\r\n    {\r\n        Value = [];\r\n    }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"ArrayProperty\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader && !reader.Asset.HasUnversionedProperties)\r\n        {\r\n            if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n            {\r\n                if (PropertyTypeName is null) throw new FormatException(\"PropertyTypeName is required to read ArrayProperty with complete type names.\");\r\n                ArrayType = PropertyTypeName.GetParameter(0).GetName();\r\n            }\r\n            else\r\n            {\r\n                ArrayType = reader.ReadFName();\r\n            }\r\n                \r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        FName arrayStructType = null;\r\n        if (reader.Asset.Mappings != null && ArrayType == null && reader.Asset.Mappings.TryGetPropertyData(Name, Ancestry, reader.Asset, out UsmapArrayData strucDat1))\r\n        {\r\n            ArrayType = FName.DefineDummy(reader.Asset, strucDat1.InnerType.Type.ToString());\r\n            if (strucDat1.InnerType is UsmapStructData strucDat2) arrayStructType = FName.DefineDummy(reader.Asset, strucDat2.StructType);\r\n        }\r\n\r\n        if (reader.Asset.HasUnversionedProperties && ArrayType == null)\r\n        {\r\n            throw new InvalidOperationException(\"Unable to determine array type for array \" + Name.Value.Value + \" in class \" + Ancestry.Parent.Value.Value);\r\n        }\r\n\r\n        int numEntries = reader.ReadInt32();\r\n        if (ArrayType.Value.Value == \"StructProperty\" && ShouldSerializeStructsDifferently && !reader.Asset.HasUnversionedProperties)\r\n        {\r\n            var results = new PropertyData[numEntries];\r\n\r\n            FName name = this.Name;\r\n            long structLength = 1;\r\n            FName fullType = FName.DefineDummy(reader.Asset, \"Generic\");\r\n            Guid structGUID = new Guid();\r\n\r\n            bool isSpecialCase = false;\r\n            if (reader.Asset is UAsset asset)\r\n            {\r\n                isSpecialCase = reader.Asset.ObjectVersion == ObjectVersion.VER_UE4_INNER_ARRAY_TAG_INFO && asset.WillSerializeNameHashes == true;\r\n            }\r\n\r\n            if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n            {\r\n                fullType = PropertyTypeName.GetParameter(0).GetParameter(0).GetName();\r\n            }\r\n            else if (reader.Asset.ObjectVersion >= ObjectVersion.VER_UE4_INNER_ARRAY_TAG_INFO && !isSpecialCase)\r\n            {\r\n                name = reader.ReadFName();\r\n                if (name.Value.Value.Equals(\"None\"))\r\n                {\r\n                    Value = results;\r\n                    return;\r\n                }\r\n\r\n                FName thisArrayType = reader.ReadFName();\r\n                if (thisArrayType.Value.Value.Equals(\"None\"))\r\n                {\r\n                    Value = results;\r\n                    return;\r\n                }\r\n\r\n                if (thisArrayType.Value.Value != ArrayType.Value.Value) throw new FormatException(\"Invalid array type: \" + thisArrayType.ToString() + \" vs \" + ArrayType.ToString());\r\n\r\n                structLength = reader.ReadInt64(); // length value\r\n                fullType = reader.ReadFName();\r\n                structGUID = new Guid(reader.ReadBytes(16));\r\n                reader.ReadPropertyGuid();\r\n            }\r\n            else\r\n            {\r\n                // override using mappings or ArrayStructTypeOverride if applicable\r\n                if (arrayStructType != null)\r\n                {\r\n                    fullType = arrayStructType;\r\n                }\r\n                else if (reader.Asset.ArrayStructTypeOverride.ContainsKey(this.Name.Value.Value))\r\n                {\r\n                    fullType = FName.DefineDummy(reader.Asset, reader.Asset.ArrayStructTypeOverride[this.Name.Value.Value]);\r\n                }\r\n            }\r\n\r\n            if (numEntries == 0)\r\n            {\r\n                DummyStruct = new StructPropertyData(name, fullType)\r\n                {\r\n                    StructGUID = structGUID\r\n                };\r\n            }\r\n            else\r\n            {\r\n                var propTypeName = PropertyTypeName?.GetParameter(0);\r\n                for (int i = 0; i < numEntries; i++)\r\n                {\r\n                    var data = new StructPropertyData(name, fullType);\r\n                    data.Offset = reader.BaseStream.Position;\r\n                    data.Ancestry.Initialize(Ancestry, Name);\r\n                    data.PropertyTypeName = propTypeName;\r\n                    data.Read(reader, false, structLength, 0, PropertySerializationContext.Array);\r\n                    data.StructGUID = structGUID;\r\n                    results[i] = data;\r\n                }\r\n                DummyStruct = (StructPropertyData)results[0];\r\n            }\r\n            Value = results;\r\n        }\r\n        else\r\n        {\r\n            if (numEntries == 0)\r\n            {\r\n                Value = [];\r\n                return;\r\n            }\r\n\r\n            int averageSizeEstimate = (int)((leng1 - 4) / numEntries);\r\n            if (averageSizeEstimate <= 0) averageSizeEstimate = 1; // missing possible edge case where leng1 = 4 and numEntries = 2, may result is wrong size\r\n\r\n            var propTypeName = PropertyTypeName?.GetParameter(0);\r\n            var results = new PropertyData[numEntries];\r\n            for (int i = 0; i < numEntries; i++)\r\n            {\r\n                results[i] = MainSerializer.TypeToClass(ArrayType, FName.DefineDummy(reader.Asset, i.ToString(), int.MinValue), Ancestry, Name, null, reader.Asset, propertyTypeName: propTypeName);\r\n                results[i].Offset = reader.BaseStream.Position;\r\n                if (results[i] is StructPropertyData data) data.StructType = arrayStructType == null ? FName.DefineDummy(reader.Asset, \"Generic\") : arrayStructType;\r\n                results[i].Read(reader, false, averageSizeEstimate, 0, PropertySerializationContext.Array);\r\n            }\r\n\r\n            Value = results;\r\n        }\r\n    }\r\n\r\n    public override void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n    {\r\n        var ancestryNew = (AncestryInfo)ancestrySoFar.Clone();\r\n        ancestryNew.SetAsParent(Name);\r\n\r\n        if (Value != null)\r\n        {\r\n            for (int i = 0; i < Value.Length; i++) Value[i].ResolveAncestries(asset, ancestryNew);\r\n        }\r\n        base.ResolveAncestries(asset, ancestrySoFar);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (Value == null) Value = [];\r\n\r\n        // let's get our ArrayType if we don't already know it\r\n        // if Value has entries, take it from there\r\n        if (Value.Length > 0)\r\n        {\r\n            ArrayType = writer.Asset.HasUnversionedProperties ? FName.DefineDummy(writer.Asset, Value[0].PropertyType) : new FName(writer.Asset, Value[0].PropertyType);\r\n        }\r\n\r\n        // otherwise, let's check mappings\r\n        FName arrayStructType = null;\r\n        if (writer.Asset.Mappings != null && ArrayType == null && writer.Asset.Mappings.TryGetPropertyData(Name, Ancestry, writer.Asset, out UsmapArrayData strucDat1))\r\n        {\r\n            ArrayType = FName.DefineDummy(writer.Asset, strucDat1.InnerType.Type.ToString());\r\n            if (strucDat1.InnerType is UsmapStructData strucDat2) arrayStructType = FName.DefineDummy(writer.Asset, strucDat2.StructType);\r\n        }\r\n\r\n        // at this point, if we couldn't get our ArrayType and we're using unversioned properties, we can't continue; otherwise, not needed\r\n        if (writer.Asset.HasUnversionedProperties && ArrayType == null)\r\n        {\r\n            throw new InvalidOperationException(\"Unable to determine array type for array \" + Name.Value.Value + \" in class \" + Ancestry.Parent.Value.Value);\r\n        }\r\n\r\n        // begin actual serialization\r\n        if (includeHeader && !writer.Asset.HasUnversionedProperties)\r\n        {\r\n            if (writer.Asset.ObjectVersionUE5 < ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n            {\r\n                writer.Write(ArrayType);\r\n            }\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        int here = (int)writer.BaseStream.Position;\r\n        writer.Write(Value.Length);\r\n        if (ArrayType?.Value?.Value == \"StructProperty\" && ShouldSerializeStructsDifferently && !writer.Asset.HasUnversionedProperties)\r\n        {\r\n            if (Value.Length == 0 && DummyStruct == null)\r\n            {\r\n                // let's try and reconstruct DummyStruct, if we can\r\n                if (arrayStructType == null && writer.Asset.ArrayStructTypeOverride.ContainsKey(this.Name.Value.Value))\r\n                {\r\n                    arrayStructType = FName.DefineDummy(writer.Asset, writer.Asset.ArrayStructTypeOverride[this.Name.Value.Value]);\r\n                }\r\n\r\n                if (arrayStructType == null)\r\n                {\r\n                    throw new InvalidOperationException(\"Unable to reconstruct DummyStruct within empty StructProperty array \" + Name.Value.Value + \" in class \" + Ancestry.Parent.Value.Value);\r\n                }\r\n\r\n                DummyStruct = new StructPropertyData(this.Name, arrayStructType)\r\n                {\r\n                    StructGUID = Guid.Empty // not sure what else to use here...\r\n                };\r\n            }\r\n            if (Value.Length > 0) DummyStruct = (StructPropertyData)Value[0];\r\n\r\n            FName fullType = DummyStruct.StructType;\r\n\r\n            int lengthLoc = -1;\r\n\r\n            bool isSpecialCase = false;\r\n            if (writer.Asset is UAsset)\r\n            {\r\n                isSpecialCase = writer.Asset.ObjectVersion == ObjectVersion.VER_UE4_INNER_ARRAY_TAG_INFO && ((UAsset)writer.Asset).WillSerializeNameHashes == true;\r\n            }\r\n\r\n            if (writer.Asset.ObjectVersionUE5 < ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME && writer.Asset.ObjectVersion >= ObjectVersion.VER_UE4_INNER_ARRAY_TAG_INFO && !isSpecialCase)\r\n            {\r\n                writer.Write(DummyStruct.Name);\r\n                writer.Write(new FName(writer.Asset, \"StructProperty\"));\r\n                lengthLoc = (int)writer.BaseStream.Position;\r\n                writer.Write((long)0);\r\n                writer.Write(fullType);\r\n                if (writer.Asset.ObjectVersion >= ObjectVersion.VER_UE4_STRUCT_GUID_IN_PROPERTY_TAG) writer.Write(DummyStruct.StructGUID.ToByteArray());\r\n                if (writer.Asset.ObjectVersion >= ObjectVersion.VER_UE4_PROPERTY_GUID_IN_PROPERTY_TAG) writer.Write((byte)0);\r\n            }\r\n\r\n            for (int i = 0; i < Value.Length; i++)\r\n            {\r\n                ((StructPropertyData)Value[i]).StructType = fullType;\r\n                Value[i].Offset = writer.BaseStream.Position;\r\n                Value[i].Write(writer, false);\r\n            }\r\n\r\n            if (writer.Asset.ObjectVersionUE5 < ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME && writer.Asset.ObjectVersion >= ObjectVersion.VER_UE4_INNER_ARRAY_TAG_INFO && !isSpecialCase)\r\n            {\r\n                int fullLen = (int)writer.BaseStream.Position - lengthLoc;\r\n                int newLoc = (int)writer.BaseStream.Position;\r\n                writer.Seek(lengthLoc, SeekOrigin.Begin);\r\n                writer.Write(fullLen - 32 - (includeHeader ? 1 : 0));\r\n                writer.Seek(newLoc, SeekOrigin.Begin);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            for (int i = 0; i < Value.Length; i++)\r\n            {\r\n                Value[i].Offset = writer.BaseStream.Position;\r\n                Value[i].Write(writer, false, PropertySerializationContext.Array);\r\n            }\r\n        }\r\n\r\n        return (int)writer.BaseStream.Position - here;\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        if (d[4] != null) ArrayType = FName.FromString(asset, d[4]);\r\n    }\r\n\r\n    protected override void HandleCloned(PropertyData res)\r\n    {\r\n        ArrayPropertyData cloningProperty = (ArrayPropertyData)res;\r\n        cloningProperty.ArrayType = (FName)this.ArrayType?.Clone();\r\n        cloningProperty.DummyStruct = (StructPropertyData)this.DummyStruct?.Clone();\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/BoolPropertyData.cs",
    "content": "using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes a boolean (<see cref=\"bool\"/>).\r\n/// </summary>\r\npublic class BoolPropertyData : PropertyData<bool>\r\n{\r\n    public BoolPropertyData(FName name) : base(name) { }\r\n\r\n    public BoolPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"BoolProperty\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n    public override object DefaultValue => false;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (reader.Asset.HasUnversionedProperties || reader.Asset.ObjectVersionUE5 < ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n        {\r\n            Value = reader.ReadBoolean();\r\n        }\r\n        else\r\n        {\r\n            if (serializationContext is PropertySerializationContext.Map or PropertySerializationContext.Array)\r\n                Value = reader.ReadBoolean();\r\n            else\r\n                Value = this.PropertyTagFlags.HasFlag(EPropertyTagFlags.BoolTrue);\r\n        }\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (writer.Asset.HasUnversionedProperties || writer.Asset.ObjectVersionUE5 < ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n        {\r\n            writer.Write(Value);\r\n        }\r\n        else if (serializationContext is PropertySerializationContext.Map or PropertySerializationContext.Array)\r\n        {\r\n            writer.Write(Value);\r\n        }\r\n\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return Convert.ToString(Value);\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        Value = d[0].Equals(\"1\") || d[0].ToLowerInvariant().Equals(\"true\");\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/BytePropertyData.cs",
    "content": "using Newtonsoft.Json;\r\nusing Newtonsoft.Json.Converters;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.Unversioned;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\npublic enum BytePropertyType\r\n{\r\n    Byte,\r\n    FName,\r\n}\r\n\r\n/// <summary>\r\n/// Describes a byte or an enumeration value.\r\n/// </summary>\r\npublic class BytePropertyData : PropertyData\r\n{\r\n    [JsonProperty]\r\n    [JsonConverter(typeof(StringEnumConverter))]\r\n    public BytePropertyType ByteType;\r\n\r\n    [JsonProperty]\r\n    public FName EnumType;\r\n    [JsonProperty]\r\n    public byte Value;\r\n    [JsonProperty]\r\n    public FName EnumValue;\r\n\r\n    public bool ShouldSerializeValue()\r\n    {\r\n        return ByteType == BytePropertyType.Byte;\r\n    }\r\n\r\n    public bool ShouldSerializeEnumValue()\r\n    {\r\n        return ByteType == BytePropertyType.FName;\r\n    }\r\n\r\n    public BytePropertyData(FName name) : base(name) { }\r\n\r\n    public BytePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"ByteProperty\");\r\n    public override FString PropertyType { get { return CurrentPropertyType; } }\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        ReadCustom(reader, includeHeader, leng1, leng2, true);\r\n    }\r\n\r\n    private void ReadCustom(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, bool canRepeat)\r\n    {\r\n        if (includeHeader && !reader.Asset.HasUnversionedProperties)\r\n        {\r\n            if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n            {\r\n                if (PropertyTypeName is null) throw new FormatException(\"PropertyTypeName is required to read ByteProperty with complete type names.\");\r\n                EnumType = PropertyTypeName.GetParameter(0).GetName();\r\n            }\r\n            else\r\n            {\r\n                EnumType = reader.ReadFName();\r\n            }\r\n            \r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        bool useFailsafe = true;\r\n        if (reader.Asset.Mappings != null && reader.Asset.Mappings.TryGetPropertyData(Name, Ancestry, reader.Asset, out UsmapPropertyData propDat))\r\n        {\r\n            useFailsafe = false;\r\n            ByteType = propDat is UsmapEnumData ? BytePropertyType.FName : BytePropertyType.Byte; // TODO: not always accurate?\r\n        }\r\n\r\n        // override with length if it makes sense to do so\r\n        if (!reader.Asset.HasUnversionedProperties)\r\n        {\r\n            switch (leng1)\r\n            {\r\n                case 1:\r\n                    ByteType = BytePropertyType.Byte;\r\n                    useFailsafe = false;\r\n                    break;\r\n                case 8:\r\n                    ByteType = BytePropertyType.FName;\r\n                    useFailsafe = false;\r\n                    break;\r\n            }\r\n        }\r\n        \r\n        if (useFailsafe)\r\n        {\r\n            switch (leng1)\r\n            {\r\n                case 0: // Should be only seen in maps; fallback \"make our best guess and pray we're right\" behavior\r\n                    int nameMapPointer = reader.ReadInt32();\r\n                    int nameMapIndex = reader.ReadInt32();\r\n                    reader.BaseStream.Position -= sizeof(int) * 2;\r\n\r\n                    // In the case of it being serialized as just a byte, it will probably try to parse part of the next property and produce something too big for the name map\r\n                    if (nameMapPointer >= 0 && nameMapPointer < reader.Asset.GetNameMapIndexList().Count && nameMapIndex == 0 && !reader.Asset.GetNameReference(nameMapPointer).ToString().Contains(\"/\"))\r\n                    {\r\n                        ByteType = BytePropertyType.FName;\r\n                        break;\r\n                    }\r\n                    else\r\n                    {\r\n                        ByteType = BytePropertyType.Byte;\r\n                        break;\r\n                    }\r\n                default:\r\n                    if (canRepeat)\r\n                    {\r\n                        ReadCustom(reader, false, leng2, 0, false);\r\n                        return;\r\n                    }\r\n                    throw new FormatException(\"Invalid length \" + leng1 + \" for ByteProperty\");\r\n            }\r\n        }\r\n\r\n        if (ByteType == BytePropertyType.Byte)\r\n        {\r\n            Value = reader.ReadByte();\r\n        }\r\n        else if (ByteType == BytePropertyType.FName)\r\n        {\r\n            EnumValue = reader.ReadFName();\r\n        }\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader && !writer.Asset.HasUnversionedProperties)\r\n        {\r\n            if (writer.Asset.ObjectVersionUE5 < ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n            {\r\n                writer.Write(EnumType);\r\n            }\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        switch (ByteType)\r\n        {\r\n            case BytePropertyType.Byte:\r\n                writer.Write((byte)Value);\r\n                return 1;\r\n            case BytePropertyType.FName:\r\n                writer.Write(EnumValue);\r\n                return 8;\r\n            default:\r\n                throw new FormatException(\"Invalid BytePropertyType \" + ByteType);\r\n        }\r\n    }\r\n\r\n    public FName GetEnumBase()\r\n    {\r\n        return EnumType;\r\n    }\r\n\r\n    public FName GetEnumFull()\r\n    {\r\n        return EnumValue;\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        if (ByteType == BytePropertyType.Byte) return Convert.ToString(Value);\r\n        //return GetEnumFull().Value;\r\n        return Value.ToString();\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        EnumType = FName.FromString(asset, d[0]);\r\n        if (byte.TryParse(d[1], out byte res))\r\n        {\r\n            ByteType = BytePropertyType.Byte;\r\n            Value = res;\r\n        }\r\n        else\r\n        {\r\n            ByteType = BytePropertyType.FName;\r\n            EnumValue = FName.FromString(asset, d[1]);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/DelegatePropertyData.cs",
    "content": "using Newtonsoft.Json;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes a function bound to an Object.\r\n/// </summary>\r\n[JsonObject(MemberSerialization.OptIn)]\r\npublic class FDelegate\r\n{\r\n    /// <summary>\r\n    /// References the main actor export\r\n    /// </summary>\r\n    [JsonProperty]\r\n    public FPackageIndex Object;\r\n    /// <summary>\r\n    /// The name of the delegate\r\n    /// </summary>\r\n    [JsonProperty]\r\n    public FName Delegate;\r\n\r\n    public FDelegate(FPackageIndex _object, FName @delegate)\r\n    {\r\n        Object = _object;\r\n        Delegate = @delegate;\r\n    }\r\n\r\n    public FDelegate() { }\r\n\r\n    public FDelegate(AssetBinaryReader reader)\r\n    {\r\n        Object = new FPackageIndex(reader);\r\n        Delegate = reader.ReadFName();\r\n    }\r\n\r\n    public int Write(AssetBinaryWriter writer)\r\n    {\r\n        writer.XFERPTR(Object);\r\n        int size = sizeof(int);\r\n        writer.Write(Delegate);\r\n        size += 8;\r\n        return size;\r\n    }\r\n}\r\n\r\n/// <summary>\r\n/// Describes a function bound to an Object.\r\n/// </summary>\r\npublic class DelegatePropertyData : PropertyData<FDelegate>\r\n{\r\n    public DelegatePropertyData(FName name) : base(name) { }\r\n\r\n    public DelegatePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"DelegateProperty\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = new FDelegate(reader);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        Value ??= new FDelegate(FPackageIndex.FromRawIndex(0), null);\r\n        return Value.Write(writer);\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return null;\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n\r\n    }\r\n\r\n    protected override void HandleCloned(PropertyData res)\r\n    {\r\n        DelegatePropertyData cloningProperty = (DelegatePropertyData)res;\r\n\r\n        cloningProperty.Value = new FDelegate(this.Value.Object, this.Value.Delegate);\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/DoublePropertyData.cs",
    "content": "using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.JSON;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes an IEEE 64-bit floating point variable (<see cref=\"double\"/>).\r\n/// </summary>\r\npublic class DoublePropertyData : PropertyData\r\n{\r\n    /// <summary>\r\n    /// The double that this property represents.\r\n    /// </summary>\r\n    [JsonProperty]\r\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\r\n    public double Value\r\n    {\r\n        get => GetObject<double>();\r\n        set => SetObject(value);\r\n    }\r\n\r\n    public DoublePropertyData(FName name) : base(name) { }\r\n\r\n    public DoublePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"DoubleProperty\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n    public override object DefaultValue => (double)0;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = reader.ReadDouble();\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        writer.Write(Value);\r\n        return sizeof(double);\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return Convert.ToString(Value);\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        Value = 0;\r\n        if (double.TryParse(d[0], out double res)) Value = res;\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/EnumPropertyData.cs",
    "content": "using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.Unversioned;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes an enumeration value.\r\n/// </summary>\r\npublic class EnumPropertyData : PropertyData<FName>\r\n{\r\n    [JsonProperty]\r\n    public FName EnumType;\r\n    /// <summary>\r\n    /// Only used with unversioned properties.\r\n    /// </summary>\r\n    [JsonProperty]\r\n    public FName InnerType;\r\n\r\n    public EnumPropertyData(FName name) : base(name) { }\r\n\r\n    public EnumPropertyData() { }\r\n\r\n    private static readonly List<string> ValidEnumInnerTypeList = [\"ByteProperty\", \"UInt16Property\", \"UInt32Property\", \"Int8Property\", \"Int16Property\", \"IntProperty\", \"Int64Property\"];\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"EnumProperty\");\r\n    public override FString PropertyType { get { return CurrentPropertyType; } }\r\n\r\n    public static readonly string InvalidEnumIndexFallbackPrefix = \"UASSETAPI_INVALID_ENUM_IDX_\";\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (reader.Asset.Mappings != null && reader.Asset.Mappings.TryGetPropertyData(Name, Ancestry, reader.Asset, out UsmapEnumData enumDat1))\r\n        {\r\n            EnumType = reader.Asset.HasUnversionedProperties ? FName.DefineDummy(reader.Asset, enumDat1.Name) : new FName(reader.Asset, enumDat1.Name);\r\n            InnerType = reader.Asset.HasUnversionedProperties ? FName.DefineDummy(reader.Asset, enumDat1.InnerType.Type.ToString()) : new FName(reader.Asset, enumDat1.Name);\r\n        }\r\n\r\n        if (reader.Asset.HasUnversionedProperties && serializationContext == PropertySerializationContext.Normal)\r\n        {\r\n            Value = null;\r\n            if (InnerType?.Value.Value == \"ByteProperty\" || InnerType?.Value.Value == \"UInt16Property\" || InnerType?.Value.Value == \"UInt32Property\")\r\n            {\r\n                long enumIndice = 0;\r\n\r\n                switch (InnerType?.Value.Value)\r\n                {\r\n                    case \"ByteProperty\":\r\n                        enumIndice = reader.ReadByte();\r\n                        if (enumIndice == byte.MaxValue) return;\r\n                        break;\r\n                    case \"UInt16Property\":\r\n                        enumIndice = reader.ReadUInt16();\r\n                        if (enumIndice == ushort.MaxValue) return;\r\n                        break;\r\n                    case \"UInt32Property\":\r\n                        enumIndice = reader.ReadUInt32();\r\n                        if (enumIndice == uint.MaxValue) return;\r\n                        break;\r\n                }\r\n\r\n                var listOfValues = reader.Asset.Mappings.EnumMap[EnumType.Value.Value].Values;\r\n                if (enumIndice < listOfValues.Count)\r\n                {\r\n                    Value = FName.DefineDummy(reader.Asset, listOfValues[enumIndice]);\r\n                }\r\n                else\r\n                {\r\n                    // fallback\r\n                    Value = FName.DefineDummy(reader.Asset, InvalidEnumIndexFallbackPrefix + enumIndice.ToString());\r\n                }\r\n                return;\r\n            }\r\n\r\n            if (InnerType?.Value.Value == \"Int8Property\" || InnerType?.Value.Value == \"Int16Property\" || \r\n                InnerType?.Value.Value == \"IntProperty\" || InnerType?.Value.Value == \"Int64Property\")\r\n            {\r\n                long enumIndice = 0;\r\n\r\n                switch (InnerType?.Value.Value)\r\n                {\r\n                    case \"Int8Property\":\r\n                        enumIndice = reader.ReadSByte();\r\n                        break;\r\n                    case \"Int16Property\":\r\n                        enumIndice = reader.ReadInt16();\r\n                        break;\r\n                    case \"IntProperty\":\r\n                        enumIndice = reader.ReadInt32();\r\n                        break;\r\n                    case \"Int64Property\":\r\n                        enumIndice = reader.ReadInt64();\r\n                        break;\r\n                }\r\n\r\n                var listOfValues = reader.Asset.Mappings.EnumMap[EnumType.Value.Value].Values;\r\n                if (enumIndice < listOfValues.Count)\r\n                {\r\n                    Value = FName.DefineDummy(reader.Asset, listOfValues[enumIndice]);\r\n                }\r\n                else\r\n                {\r\n                    // fallback\r\n                    Value = FName.DefineDummy(reader.Asset, InvalidEnumIndexFallbackPrefix + enumIndice.ToString());\r\n                }\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (includeHeader && !reader.Asset.HasUnversionedProperties)\r\n        {\r\n            if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n            {\r\n                if (PropertyTypeName is null) throw new FormatException(\"PropertyTypeName is required to read EnumProperty with complete type names.\");\r\n                EnumType = PropertyTypeName.GetParameter(0).GetName();\r\n            }\r\n            else\r\n            {\r\n                EnumType = reader.ReadFName();\r\n            }\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = reader.ReadFName();\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (writer.Asset.Mappings != null && writer.Asset.Mappings.TryGetPropertyData(Name, Ancestry, writer.Asset, out UsmapEnumData enumDat1))\r\n        {\r\n            EnumType = writer.Asset.HasUnversionedProperties ? FName.DefineDummy(writer.Asset, enumDat1.Name) : new FName(writer.Asset, enumDat1.Name);\r\n            InnerType = writer.Asset.HasUnversionedProperties ? FName.DefineDummy(writer.Asset, enumDat1.InnerType.Type.ToString()) : new FName(writer.Asset, enumDat1.Name);\r\n        }\r\n\r\n        if (writer.Asset.HasUnversionedProperties && serializationContext == PropertySerializationContext.Normal)\r\n        {\r\n            if (ValidEnumInnerTypeList.Contains(InnerType?.Value?.Value))\r\n            {\r\n                long enumIndice = 0;\r\n                var listOfEnums = writer.Asset.Mappings.EnumMap[EnumType.Value.Value].Values;\r\n                var validIndices = listOfEnums.Where(pair => pair.Value == Value.Value.Value).Select(pair => pair.Key);\r\n                if (Value == null)\r\n                {\r\n                    enumIndice = -1;\r\n                }\r\n                else if (validIndices.Count() == 0)\r\n                {\r\n                    bool success = false;\r\n                    if (Value.Value.Value.StartsWith(InvalidEnumIndexFallbackPrefix))\r\n                    {\r\n                        success = long.TryParse(Value.Value.Value.Substring(InvalidEnumIndexFallbackPrefix.Length), out enumIndice);\r\n                    }\r\n\r\n                    if (!success)\r\n                    {\r\n                        throw new FormatException(\"Could not serialize EnumProperty value \" + Value.Value.Value + \" as \" + InnerType?.Value?.Value);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    enumIndice = validIndices.FirstOrDefault();\r\n                }\r\n\r\n                switch (InnerType?.Value?.Value)\r\n                {\r\n                    case \"ByteProperty\":\r\n                        writer.Write((byte)enumIndice);\r\n                        return sizeof(byte);\r\n                    case \"UInt16Property\":\r\n                        writer.Write((ushort)enumIndice);\r\n                        return sizeof(ushort);\r\n                    case \"UInt32Property\":\r\n                        writer.Write((uint)enumIndice);\r\n                        return sizeof(uint);\r\n                    case \"Int8Property\":\r\n                        writer.Write((sbyte)enumIndice);\r\n                        return sizeof(sbyte);\r\n                    case \"Int16Property\":\r\n                        writer.Write((short)enumIndice);\r\n                        return sizeof(short);\r\n                    case \"IntProperty\":\r\n                        writer.Write((int)enumIndice);\r\n                        return sizeof(int);\r\n                    case \"Int64Property\":\r\n                        writer.Write((long)enumIndice);\r\n                        return sizeof(long);\r\n                }\r\n            }\r\n        }\r\n\r\n        if (includeHeader && !writer.Asset.HasUnversionedProperties)\r\n        {\r\n            if (writer.Asset.ObjectVersionUE5 < ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n            {\r\n                writer.Write(EnumType);\r\n            }\r\n            \r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n        writer.Write(Value);\r\n        return sizeof(int) * 2;\r\n    }\r\n\r\n    internal override void InitializeZero(AssetBinaryReader reader)\r\n    {\r\n        if (reader.Asset.Mappings.TryGetPropertyData(Name, Ancestry, reader.Asset, out UsmapEnumData enumDat1))\r\n        {\r\n            EnumType = FName.DefineDummy(reader.Asset, enumDat1.Name);\r\n            InnerType = FName.DefineDummy(reader.Asset, enumDat1.InnerType.Type.ToString());\r\n        }\r\n\r\n        // fill in data for enumIndice = 0 to provide clarity for end-user\r\n        if (ValidEnumInnerTypeList.Contains(InnerType?.Value?.Value))\r\n        {\r\n            long enumIndice = 0;\r\n            var listOfValues = reader.Asset.Mappings.EnumMap[EnumType.Value.Value].Values;\r\n            if (enumIndice == byte.MaxValue)\r\n            {\r\n                Value = null;\r\n            }\r\n            else if (enumIndice < listOfValues.Count)\r\n            {\r\n                Value = FName.DefineDummy(reader.Asset, listOfValues[enumIndice]);\r\n            }\r\n            else\r\n            {\r\n                // fallback\r\n                Value = FName.DefineDummy(reader.Asset, InvalidEnumIndexFallbackPrefix + enumIndice.ToString());\r\n            }\r\n        }\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return Value.ToString();\r\n    }\r\n\r\n    // note: Value must be overridden manually after this is called in cases where serializationContext != PropertySerializationContext.Normal, to ensure not dummy\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        if (d[0] != \"null\" && d[0] != null)\r\n        {\r\n            EnumType = asset.HasUnversionedProperties ? FName.DefineDummy(asset, d[0]) : FName.FromString(asset, d[0]);\r\n        }\r\n        else\r\n        {\r\n            EnumType = null;\r\n        }\r\n\r\n        if (d[1] != \"null\" && d[1] != null)\r\n        {\r\n            Value = (asset.HasUnversionedProperties && (ValidEnumInnerTypeList.Contains(InnerType?.Value?.Value))) ? FName.DefineDummy(asset, d[1]) : FName.FromString(asset, d[1]);\r\n        }\r\n        else\r\n        {\r\n            Value = null;\r\n        }\r\n    }\r\n\r\n    protected override void HandleCloned(PropertyData res)\r\n    {\r\n        EnumPropertyData cloningProperty = (EnumPropertyData)res;\r\n        cloningProperty.EnumType = (FName)this.EnumType?.Clone();\r\n        cloningProperty.InnerType = (FName)this.InnerType?.Clone();\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/FieldPathPropertyData.cs",
    "content": "using UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Objects;\n\n/// <summary>\n/// Describes a reference variable to another object which may be null, and may become valid or invalid at any point. Near synonym for <see cref=\"SoftObjectPropertyData\"/>.\n/// </summary>\npublic class FieldPathPropertyData : BasePropertyData<FFieldPath>\n{\n    public FieldPathPropertyData(FName name) : base(name) { }\n\n    public FieldPathPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"FieldPathProperty\");\n    public override FString PropertyType => CurrentPropertyType;\n    public override bool HasCustomStructSerialization => false;\n    public override object DefaultValue => new FFieldPath();\n\n    public override string ToString()\n    {\n        // Expected format is: FullPackageName.Subobject[:Subobject:...]:FieldName\n        return \"\";\n    }\n\n    public override void FromString(string[] d, UAsset asset)\n    {\n        // Expected format is: FullPackageName.Subobject[:Subobject:...]:FieldName\n        Value = new FFieldPath();\n    }\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/FloatPropertyData.cs",
    "content": "using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.JSON;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes an IEEE 32-bit floating point variable (<see cref=\"float\"/>).\r\n/// </summary>\r\npublic class FloatPropertyData : PropertyData\r\n{\r\n    /// <summary>\r\n    /// The float that this property represents.\r\n    /// </summary>\r\n    [JsonProperty]\r\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\r\n    public float Value\r\n    {\r\n        get => GetObject<float>();\r\n        set => SetObject(value);\r\n    }\r\n\r\n    public FloatPropertyData(FName name) : base(name) { }\r\n\r\n    public FloatPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"FloatProperty\");\r\n    public override FString PropertyType { get { return CurrentPropertyType; } }\r\n    public override object DefaultValue { get { return (float)0; } }\r\n\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = reader.ReadSingle();\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        writer.Write(Value);\r\n        return sizeof(float);\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return Convert.ToString(Value); // maybe: , System.Globalization.CultureInfo.InvariantCulture\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        Value = 0;\r\n        if (float.TryParse(d[0], out float res)) Value = res;\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/Int16PropertyData.cs",
    "content": "using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes a 16-bit signed integer variable (<see cref=\"short\"/>).\r\n/// </summary>\r\npublic class Int16PropertyData : PropertyData<short>\r\n{\r\n    public Int16PropertyData(FName name) : base(name) { }\r\n\r\n    public Int16PropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"Int16Property\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n    public override object DefaultValue => (short)0;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = (reader.Asset.HasUnversionedProperties && serializationContext != PropertySerializationContext.Normal) ? (short)reader.ReadInt64() : reader.ReadInt16();\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        if (writer.Asset.HasUnversionedProperties && serializationContext != PropertySerializationContext.Normal)\r\n        {\r\n            writer.Write((long)Value);\r\n            return sizeof(long);\r\n        }\r\n\r\n        writer.Write(Value);\r\n        return sizeof(short);\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return Convert.ToString(Value);\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        Value = 0;\r\n        if (short.TryParse(d[0], out short res)) Value = res;\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/Int64PropertyData.cs",
    "content": "using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes a 64-bit signed integer variable (<see cref=\"long\"/>).\r\n/// </summary>\r\npublic class Int64PropertyData : PropertyData<long>\r\n{\r\n    public Int64PropertyData(FName name) : base(name) { }\r\n\r\n    public Int64PropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"Int64Property\");\r\n    public override FString PropertyType { get { return CurrentPropertyType; } }\r\n    public override object DefaultValue { get { return (long)0; } }\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = reader.ReadInt64();\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        writer.Write(Value);\r\n        return sizeof(long);\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return Convert.ToString(Value);\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        Value = 0;\r\n        if (long.TryParse(d[0], out long res)) Value = res;\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/Int8PropertyData.cs",
    "content": "using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes an 8-bit signed integer variable (<see cref=\"sbyte\"/>).\r\n/// </summary>\r\npublic class Int8PropertyData : PropertyData<sbyte>\r\n{\r\n    public Int8PropertyData(FName name) : base(name) { }\r\n\r\n    public Int8PropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"Int8Property\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n    public override object DefaultValue => (sbyte)0;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = reader.ReadSByte();\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        writer.Write(Value);\r\n        return sizeof(sbyte);\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return Convert.ToString(Value);\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        Value = 0;\r\n        if (sbyte.TryParse(d[0], out sbyte res)) Value = res;\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/IntPropertyData.cs",
    "content": "using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes a 32-bit signed integer variable (<see cref=\"int\"/>).\r\n/// </summary>\r\npublic class IntPropertyData : PropertyData<int>\r\n{\r\n    public IntPropertyData(FName name) : base(name) { }\r\n\r\n    public IntPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"IntProperty\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n    public override object DefaultValue => (int)0;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = reader.ReadInt32();\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        writer.Write(Value);\r\n        return sizeof(int);\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return Convert.ToString(Value);\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        Value = 0;\r\n        if (int.TryParse(d[0], out int res)) Value = res;\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/InterfacePropertyData.cs",
    "content": "using UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes a reference variable to another object (import/export) which may be null (<see cref=\"FPackageIndex\"/>).\r\n/// </summary>\r\npublic class InterfacePropertyData : ObjectPropertyData\r\n{\r\n    public InterfacePropertyData(FName name) : base(name) { }\r\n\r\n    public InterfacePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"InterfaceProperty\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/MapPropertyData.cs",
    "content": "using Newtonsoft.Json;\r\nusing System;\r\nusing System.Linq;\r\nusing UAssetAPI.JSON;\r\nusing UAssetAPI.PropertyTypes.Structs;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.Unversioned;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes a map.\r\n/// </summary>\r\npublic class MapPropertyData : PropertyData\r\n{\r\n    /// <summary>\r\n    /// The map that this property represents.\r\n    /// </summary>\r\n    [JsonProperty]\r\n    [JsonConverter(typeof(TMapJsonConverter<PropertyData, PropertyData>))]\r\n    public TMap<PropertyData, PropertyData> Value;\r\n\r\n    /// <summary>\r\n    /// Used when the length of the map is zero.\r\n    /// </summary>]\r\n    [JsonProperty]\r\n    public FName KeyType;\r\n\r\n    /// <summary>\r\n    /// Used when the length of the map is zero.\r\n    /// </summary>\r\n    [JsonProperty]\r\n    public FName ValueType;\r\n\r\n    public bool ShouldSerializeKeyType() => Value.Count == 0;\r\n\r\n    public bool ShouldSerializeValueType() => Value.Count == 0;\r\n\r\n    [JsonProperty]\r\n    public PropertyData[] KeysToRemove = null;\r\n\r\n    public MapPropertyData(FName name) : base(name)\r\n    {\r\n        Value = new TMap<PropertyData, PropertyData>();\r\n    }\r\n\r\n    public MapPropertyData()\r\n    {\r\n        Value = new TMap<PropertyData, PropertyData>();\r\n    }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MapProperty\");\r\n    public override FString PropertyType { get { return CurrentPropertyType; } }\r\n\r\n    private PropertyData MapTypeToClass(FName type, FName name, AssetBinaryReader reader, int leng, bool includeHeader, bool isKey)\r\n    {\r\n        switch (type.Value.Value)\r\n        {\r\n            case \"StructProperty\":\r\n                FName strucType = null;\r\n                FPropertyTypeName propertyTypeNameLocal = PropertyTypeName?.GetParameter(isKey ? 0 : 1);\r\n                if (!reader.Asset.HasUnversionedProperties && reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n                {\r\n                    strucType = propertyTypeNameLocal?.GetParameter(0).GetName();\r\n                }\r\n                else if (reader.Asset.Mappings != null && reader.Asset.Mappings.TryGetPropertyData(Name, Ancestry, reader.Asset, out UsmapMapData mapDat))\r\n                {\r\n                    if (isKey && mapDat.InnerType is UsmapStructData strucDat1)\r\n                    {\r\n                        strucType = FName.DefineDummy(reader.Asset, strucDat1.StructType);\r\n                    }\r\n                    else if (mapDat.ValueType is UsmapStructData strucDat2)\r\n                    {\r\n                        strucType = FName.DefineDummy(reader.Asset, strucDat2.StructType);\r\n                    }\r\n                }\r\n                else if (reader.Asset.MapStructTypeOverride.ContainsKey(name.Value.Value))\r\n                {\r\n                    if (isKey)\r\n                    {\r\n                        strucType = FName.DefineDummy(reader.Asset, reader.Asset.MapStructTypeOverride[name.Value.Value].Item1);\r\n                    }\r\n                    else\r\n                    {\r\n                        strucType = FName.DefineDummy(reader.Asset, reader.Asset.MapStructTypeOverride[name.Value.Value].Item2);\r\n                        if (name.Value.Value == \"TrackSignatureToTrackIdentifier\" && reader.Asset.GetEngineVersion() <= EngineVersion.VER_UE4_18)\r\n                            strucType = FName.DefineDummy(reader.Asset, \"Generic\");\r\n                    }\r\n                }\r\n\r\n                if (strucType?.Value == null) strucType = FName.DefineDummy(reader.Asset, \"Generic\");\r\n\r\n                StructPropertyData data = new StructPropertyData(name, strucType);\r\n                data.Ancestry.Initialize(Ancestry, Name);\r\n                data.Offset = reader.BaseStream.Position;\r\n                data.PropertyTypeName = propertyTypeNameLocal;\r\n                data.Read(reader, false, 1, 0, PropertySerializationContext.Map);\r\n                return data;\r\n            default:\r\n                var res = MainSerializer.TypeToClass(type, name, Ancestry, Name, null, reader.Asset, null, leng, propertyTypeName: PropertyTypeName?.GetParameter(0));\r\n                res.Ancestry.Initialize(Ancestry, Name);\r\n                res.Read(reader, includeHeader, leng, 0, PropertySerializationContext.Map);\r\n                return res;\r\n        }\r\n    }\r\n\r\n    private TMap<PropertyData, PropertyData> ReadRawMap(AssetBinaryReader reader, FName type1, FName type2, int numEntries)\r\n    {\r\n        var resultingDict = new TMap<PropertyData, PropertyData>();\r\n\r\n        PropertyData data1 = null;\r\n        PropertyData data2 = null;\r\n        for (int i = 0; i < numEntries; i++)\r\n        {\r\n            data1 = MapTypeToClass(type1, Name, reader, 0, false, true);\r\n            data2 = MapTypeToClass(type2, Name, reader, 0, false, false);\r\n\r\n            resultingDict.Add(data1, data2);\r\n        }\r\n\r\n        return resultingDict;\r\n    }\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        FName type1 = null, type2 = null;\r\n        if (includeHeader && !reader.Asset.HasUnversionedProperties)\r\n        {\r\n            if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n            {\r\n                if (PropertyTypeName is null) throw new FormatException(\"PropertyTypeName is required to read MapProperty with complete type names.\");\r\n                type1 = PropertyTypeName.GetParameter(0).GetName();\r\n                type2 = PropertyTypeName.GetParameter(1).GetName();\r\n            }\r\n            else\r\n            {\r\n                type1 = reader.ReadFName();\r\n                type2 = reader.ReadFName();\r\n            }\r\n\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        if (reader.Asset.Mappings != null && type1 == null && type2 == null && reader.Asset.Mappings.TryGetPropertyData(Name, Ancestry, reader.Asset, out UsmapMapData strucDat1))\r\n        {\r\n            type1 = FName.DefineDummy(reader.Asset, strucDat1.InnerType.Type.ToString());\r\n            type2 = FName.DefineDummy(reader.Asset, strucDat1.ValueType.Type.ToString());\r\n        }\r\n\r\n        int numKeysToRemove = reader.ReadInt32();\r\n        KeysToRemove = new PropertyData[numKeysToRemove];\r\n        for (int i = 0; i < numKeysToRemove; i++)\r\n        {\r\n            KeysToRemove[i] = MapTypeToClass(type1, Name, reader, 0, false, true);\r\n        }\r\n\r\n        int numEntries = reader.ReadInt32();\r\n        if (numEntries == 0)\r\n        {\r\n            KeyType = type1;\r\n            ValueType = type2;\r\n        }\r\n\r\n        Value = ReadRawMap(reader, type1, type2, numEntries);\r\n    }\r\n\r\n    public override void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n    {\r\n        var ancestryNew = (AncestryInfo)ancestrySoFar.Clone();\r\n        ancestryNew.SetAsParent(Name);\r\n\r\n        if (Value != null)\r\n        {\r\n            foreach (var entry in Value)\r\n            {\r\n                entry.Key.ResolveAncestries(asset, ancestryNew);\r\n                entry.Value.ResolveAncestries(asset, ancestryNew);\r\n            }\r\n        }\r\n        base.ResolveAncestries(asset, ancestrySoFar);\r\n    }\r\n\r\n    private void WriteRawMap(AssetBinaryWriter writer, TMap<PropertyData, PropertyData> map)\r\n    {\r\n        if (map == null) return;\r\n        foreach (var entry in map)\r\n        {\r\n            entry.Key.Offset = writer.BaseStream.Position;\r\n            entry.Key.Write(writer, false, PropertySerializationContext.Map);\r\n            entry.Value.Offset = writer.BaseStream.Position;\r\n            entry.Value.Write(writer, false, PropertySerializationContext.Map);\r\n        }\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader && !writer.Asset.HasUnversionedProperties)\r\n        {\r\n            if (writer.Asset.ObjectVersionUE5 < ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n            {\r\n                if (Value.Count > 0)\r\n                {\r\n                    writer.Write(new FName(writer.Asset, Value.Keys.ElementAt(0).PropertyType));\r\n                    writer.Write(new FName(writer.Asset, Value[0].PropertyType));\r\n                }\r\n                else\r\n                {\r\n                    writer.Write(KeyType);\r\n                    writer.Write(ValueType);\r\n                }\r\n            }\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        int here = (int)writer.BaseStream.Position;\r\n        writer.Write(KeysToRemove?.Length ?? 0);\r\n        if (KeysToRemove != null)\r\n        {\r\n            for (int i = 0; i < KeysToRemove.Length; i++)\r\n            {\r\n                var entry = KeysToRemove[i];\r\n                entry.Offset = writer.BaseStream.Position;\r\n                entry.Write(writer, false, PropertySerializationContext.Array);\r\n            }\r\n        }\r\n\r\n        writer.Write(Value?.Count ?? 0);\r\n        WriteRawMap(writer, Value);\r\n        return (int)writer.BaseStream.Position - here;\r\n    }\r\n\r\n    protected override void HandleCloned(PropertyData res)\r\n    {\r\n        MapPropertyData cloningProperty = (MapPropertyData)res;\r\n\r\n        if (this.Value != null)\r\n        {\r\n            var newDict = new TMap<PropertyData, PropertyData>();\r\n            foreach (var entry in this.Value)\r\n            {\r\n                newDict[(PropertyData)entry.Key.Clone()] = (PropertyData)entry.Value.Clone();\r\n            }\r\n            cloningProperty.Value = newDict;\r\n        }\r\n        else\r\n        {\r\n            cloningProperty.Value = null;\r\n        }\r\n\r\n        cloningProperty.KeysToRemove = (PropertyData[])this.KeysToRemove?.Clone();\r\n        cloningProperty.KeyType = (FName)this.KeyType?.Clone();\r\n        cloningProperty.ValueType = (FName)this.ValueType?.Clone();\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/MulticastDelegatePropertyData.cs",
    "content": "using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes a list of functions bound to an Object.\r\n/// </summary>\r\npublic class MulticastDelegatePropertyData : PropertyData<FDelegate[]>\r\n{\r\n    public MulticastDelegatePropertyData(FName name) : base(name) { }\r\n\r\n    public MulticastDelegatePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MulticastDelegateProperty\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = reader.ReadArray(() => new FDelegate(reader));\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        Value ??= [];\r\n        writer.Write(Value.Length);\r\n        var size = 4;\r\n        for (int i = 0; i < Value.Length; i++)\r\n        {\r\n            size += Value[i].Write(writer);\r\n        }\r\n        return size;\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        string oup = \"(\";\r\n        for (int i = 0; i < Value.Length; i++)\r\n        {\r\n            oup += \"(\" + Convert.ToString(Value[i].Object.Index) + \", \" + Value[i].Delegate.Value.Value + \"), \";\r\n        }\r\n        return oup.Substring(0, oup.Length - 2) + \")\";\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n\r\n    }\r\n\r\n    protected override void HandleCloned(PropertyData res)\r\n    {\r\n        MulticastDelegatePropertyData cloningProperty = (MulticastDelegatePropertyData)res;\r\n\r\n        if (Value != null)\r\n        {\r\n            FDelegate[] newData = new FDelegate[Value.Length];\r\n            for (int i = 0; i < Value.Length; i++)\r\n            {\r\n                newData[i] = new FDelegate(Value[i].Object, (FName)Value[i].Delegate.Clone());\r\n            }\r\n\r\n            cloningProperty.Value = newData;\r\n        }\r\n        else\r\n        {\r\n            cloningProperty.Value = null;\r\n        }\r\n    }\r\n}\r\n\r\n\r\n/// <summary>\r\n/// Describes a list of functions bound to an Object.\r\n/// </summary>\r\npublic class MulticastSparseDelegatePropertyData : MulticastDelegatePropertyData\r\n{\r\n    public MulticastSparseDelegatePropertyData(FName name) : base(name) { }\r\n\r\n    public MulticastSparseDelegatePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MulticastSparseDelegateProperty\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n}\r\n\r\n\r\n/// <summary>\r\n/// Describes a list of functions bound to an Object.\r\n/// </summary>\r\npublic class MulticastInlineDelegatePropertyData : MulticastDelegatePropertyData\r\n{\r\n    public MulticastInlineDelegatePropertyData(FName name) : base(name) { }\r\n\r\n    public MulticastInlineDelegatePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MulticastInlineDelegateProperty\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/NamePropertyData.cs",
    "content": "using UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes an <see cref=\"FName\"/>.\r\n/// </summary>\r\npublic class NamePropertyData : PropertyData<FName>\r\n{\r\n    public NamePropertyData(FName name) : base(name) { }\r\n\r\n    public NamePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"NameProperty\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = reader.ReadFName();\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        writer.Write(Value);\r\n        return sizeof(int) * 2;\r\n    }\r\n\r\n    public override bool CanBeZero(UAsset asset)\r\n    {\r\n        return Value?.Value?.Value == null; // if the index is 0, we need to serialize it anyways\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return Value == null ? \"null\" : Value.ToString();\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        Value = FName.FromString(asset, d[0]);\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/ObjectPropertyData.cs",
    "content": "using UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes a reference variable to another object (import/export) which may be null (<see cref=\"FPackageIndex\"/>).\r\n/// </summary>\r\npublic class ObjectPropertyData : PropertyData<FPackageIndex>\r\n{\r\n    public ObjectPropertyData(FName name) : base(name) { }\r\n\r\n    public ObjectPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"ObjectProperty\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n    public override object DefaultValue => FPackageIndex.FromRawIndex(0);\r\n\r\n    /// <summary>\r\n    /// Returns true if this ObjectProperty represents an import.\r\n    /// </summary>\r\n    /// <returns>Is this ObjectProperty an import?</returns>\r\n    public bool IsImport() => Value.IsImport();\r\n\r\n    /// <summary>\r\n    /// Returns true if this ObjectProperty represents an export.\r\n    /// </summary>\r\n    /// <returns>Is this ObjectProperty an export?</returns>\r\n    public bool IsExport() => Value.IsExport();\r\n\r\n    /// <summary>\r\n    /// Return true if this ObjectProperty represents null (i.e. neither an import nor an export)\r\n    /// </summary>\r\n    /// <returns>Does this ObjectProperty represent null?</returns>\r\n    public bool IsNull() => Value.IsNull();\r\n\r\n    /// <summary>\r\n    /// Check that this ObjectProperty is an import index and return the corresponding import.\r\n    /// </summary>\r\n    /// <returns>The import that this ObjectProperty represents in the import map.</returns>\r\n    /// <exception cref=\"System.InvalidOperationException\">Thrown when this is not an index into the import map.</exception>\r\n    public Import ToImport(UAsset asset) => Value.ToImport(asset);\r\n\r\n    /// <summary>\r\n    /// Check that this ObjectProperty is an export index and return the corresponding export.\r\n    /// </summary>\r\n    /// <returns>The export that this ObjectProperty represents in the the export map.</returns>\r\n    /// <exception cref=\"System.InvalidOperationException\">Thrown when this is not an index into the export map.</exception>\r\n    public Export ToExport(UAsset asset) => Value.ToExport(asset);\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = new FPackageIndex(reader);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        writer.Write(Value.Index);\r\n        return sizeof(int);\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return Value.ToString();\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        if (int.TryParse(d[0], out int res))\r\n        {\r\n            Value = new FPackageIndex(res);\r\n            return;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/PropertyData.cs",
    "content": "using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects\r\n{\r\n    public enum PropertySerializationContext\r\n    {\r\n        Normal,\r\n        Array,\r\n        Map,\r\n        StructFallback // a StructPropertyData with custom struct serialization falling back to standard serialization before/after reading custom data\r\n    }\r\n\r\n    [Flags]\r\n    public enum EPropertyTagFlags\r\n    {\r\n        None\t\t\t\t\t\t= 0x00,\r\n        HasArrayIndex\t\t\t\t= 0x01,\r\n        HasPropertyGuid\t\t\t\t= 0x02,\r\n        HasPropertyExtensions\t\t= 0x04,\r\n        HasBinaryOrNativeSerialize\t= 0x08,\r\n        BoolTrue\t\t\t\t\t= 0x10,\r\n        SkippedSerialize            = 0x20,\r\n    }\r\n\r\n    [Flags]\r\n    public enum EPropertyTagExtension : byte\r\n    {\r\n        NoExtension = 0x00,\r\n        ReserveForFutureUse = 0x01,\r\n        OverridableInformation = 0x02,\r\n    }\r\n\r\n    public enum EOverriddenPropertyOperation\r\n    {\r\n        /// <summary>\r\n        /// no overridden operation was recorded on this property\r\n        /// </summary>\r\n        None =\t0,\r\n        /// <summary>\r\n        /// some sub property has recorded overridden operation\r\n        /// </summary>\r\n        Modified,\r\n        /// <summary>\r\n        /// everything has been overridden from this property down to every sub property/sub object\r\n        /// </summary>\r\n        Replace,\r\n        /// <summary>\r\n        /// this element was added in the container\r\n        /// </summary>\r\n        Add,\r\n        /// <summary>\r\n        /// this element was removed from the container\r\n        /// </summary>\r\n        Remove\r\n    };\r\n\r\n    public class AncestryInfo : ICloneable\r\n    {\r\n        public List<FName> Ancestors = new List<FName>(5);\r\n        public FName Parent\r\n        {\r\n            get\r\n            {\r\n                if (Ancestors.Count == 0) return null;\r\n                return Ancestors[Ancestors.Count - 1];\r\n            }\r\n            set\r\n            {\r\n                Ancestors[Ancestors.Count - 1] = value;\r\n            }\r\n        }\r\n\r\n        public object Clone() // shallow\r\n        {\r\n            var res = new AncestryInfo();\r\n            res.Ancestors.AddRange(Ancestors);\r\n            return res;\r\n        }\r\n\r\n        public AncestryInfo CloneWithoutParent()\r\n        {\r\n            AncestryInfo res = (AncestryInfo)this.Clone();\r\n            res.Ancestors.RemoveAt(res.Ancestors.Count - 1);\r\n            return res;\r\n        }\r\n\r\n        public void Initialize(AncestryInfo ancestors, FName dad, FName modulePath = null)\r\n        {\r\n            Ancestors.Clear();\r\n            if (ancestors != null) Ancestors.AddRange(ancestors.Ancestors);\r\n            SetAsParent(dad, modulePath);\r\n        }\r\n\r\n        public void SetAsParent(FName dad, FName modulePath = null)\r\n        {\r\n            if (dad != null) Ancestors.Add(string.IsNullOrEmpty(modulePath?.Value?.Value) ? dad : FName.DefineDummy(null, modulePath.ToString() + \".\" + dad.ToString()));\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Generic Unreal property class.\r\n    /// </summary>\r\n    [JsonObject(MemberSerialization.OptIn)]\r\n    public abstract class PropertyData : ICloneable\r\n    {\r\n        /// <summary>\r\n        /// The name of this property.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public FName Name = null;\r\n\r\n        /// <summary>\r\n        /// The ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n        /// </summary>\r\n        [JsonIgnore]\r\n        public AncestryInfo Ancestry = new AncestryInfo();\r\n\r\n        /// <summary>\r\n        /// The array index of this property. Used to distinguish properties with the same name in the same struct.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public int ArrayIndex = 0;\r\n\r\n        /// <summary>\r\n        /// An optional property GUID. Nearly always null.\r\n        /// </summary>\r\n        public Guid? PropertyGuid = null;\r\n\r\n        /// <summary>\r\n        /// Whether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes. <para/>\r\n        /// This field will always be treated as if it is false if <see cref=\"CanBeZero(UAsset)\"/> does not return true.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public bool IsZero;\r\n\r\n        [JsonProperty]\r\n        public EPropertyTagFlags PropertyTagFlags;\r\n\r\n        [JsonProperty]\r\n        public FPropertyTypeName PropertyTypeName = null;\r\n\r\n        /// <summary>\r\n        /// Optional extensions to serialize with this property.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public EPropertyTagExtension PropertyTagExtensions; // always serialize just cuz we cant guarantee access to Asset here to check for versions between PROPERTY_TAG_EXTENSION_AND_OVERRIDABLE_SERIALIZATION and PROPERTY_TAG_COMPLETE_TYPE_NAME\r\n\r\n        [JsonProperty]\r\n        public EOverriddenPropertyOperation OverrideOperation;\r\n        [JsonProperty]\r\n        public bool bExperimentalOverridableLogic;\r\n        public bool ShouldSerializeOverrideOperation()\r\n        {\r\n            return PropertyTagExtensions.HasFlag(EPropertyTagExtension.OverridableInformation);\r\n        }\r\n        public bool ShouldSerializebExperimentalOverridableLogic()\r\n        {\r\n            return PropertyTagExtensions.HasFlag(EPropertyTagExtension.OverridableInformation);\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// The offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n        /// </summary>\r\n        public long Offset = -1;\r\n\r\n        /// <summary>\r\n        /// An optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n        /// </summary>\r\n        public object Tag;\r\n\r\n        protected object _rawValue;\r\n        public virtual object RawValue\r\n        {\r\n            get\r\n            {\r\n                if (_rawValue == null && DefaultValue != null) _rawValue = DefaultValue;\r\n                return _rawValue;\r\n            }\r\n            set\r\n            {\r\n                _rawValue = value;\r\n            }\r\n        }\r\n\r\n        public void SetObject(object value)\r\n        {\r\n            RawValue = value;\r\n        }\r\n\r\n        public T GetObject<T>()\r\n        {\r\n            if (RawValue is null) return default;\r\n            return (T)RawValue;\r\n        }\r\n\r\n        public PropertyData(FName name)\r\n        {\r\n            Name = name;\r\n        }\r\n\r\n        public PropertyData()\r\n        {\r\n\r\n        }\r\n\r\n        private static FString FallbackPropertyType = new FString(string.Empty);\r\n        /// <summary>\r\n        /// Determines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n        /// </summary>\r\n        public virtual bool ShouldBeRegistered { get { return true; } }\r\n        /// <summary>\r\n        /// Determines whether or not this particular property has custom serialization within a StructProperty.\r\n        /// </summary>\r\n        public virtual bool HasCustomStructSerialization { get { return false; } }\r\n        /// <summary>\r\n        /// The type of this property as an FString.\r\n        /// </summary>\r\n        public virtual FString PropertyType { get { return FallbackPropertyType; } }\r\n        /// <summary>\r\n        /// The default value of this property, used as a fallback when no value is defined. Null by default.\r\n        /// </summary>\r\n        public virtual object DefaultValue { get { return null; } }\r\n\r\n        /// <summary>\r\n        /// Reads out a property from a BinaryReader.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        /// <param name=\"includeHeader\">Whether or not to also read the \"header\" of the property, which is data considered by the Unreal Engine to be data that is part of the PropertyData base class rather than any particular child class.</param>\r\n        /// <param name=\"leng1\">An estimate for the length of the data being read out.</param>\r\n        /// <param name=\"leng2\">A second estimate for the length of the data being read out.</param>\r\n        /// <param name=\"serializationContext\">The context in which this property is being read.</param>\r\n        public virtual void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Resolves the ancestry of all child properties of this property.\r\n        /// </summary>\r\n        public virtual void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n        {\r\n            Ancestry = ancestrySoFar;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Complete reading the property tag of this property.\r\n        /// </summary>\r\n        protected virtual void ReadEndPropertyTag(AssetBinaryReader reader)\r\n        {\r\n            if (reader.Asset.HasUnversionedProperties) return;\r\n\r\n            if (reader.Asset.ObjectVersionUE5 < ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n            {\r\n                PropertyGuid = reader.ReadPropertyGuid();\r\n            }\r\n            else if (PropertyTagFlags.HasFlag(EPropertyTagFlags.HasPropertyGuid))\r\n            {\r\n                PropertyGuid = new Guid(reader.ReadBytes(16));\r\n            }\r\n\r\n            if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.PROPERTY_TAG_EXTENSION_AND_OVERRIDABLE_SERIALIZATION)\r\n            {\r\n                if (reader.Asset.ObjectVersionUE5 < ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME || PropertyTagFlags.HasFlag(EPropertyTagFlags.HasPropertyExtensions))\r\n                {\r\n                    PropertyTagExtensions = (EPropertyTagExtension)reader.ReadByte();\r\n\r\n                    if (PropertyTagExtensions.HasFlag(EPropertyTagExtension.OverridableInformation))\r\n                    {\r\n                        OverrideOperation = (EOverriddenPropertyOperation)reader.ReadByte();\r\n                        bExperimentalOverridableLogic = reader.ReadBooleanInt();\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes a property to a BinaryWriter.\r\n        /// </summary>\r\n        /// <param name=\"writer\">The BinaryWriter to write from.</param>\r\n        /// <param name=\"includeHeader\">Whether or not to also write the \"header\" of the property, which is data considered by the Unreal Engine to be data that is part of the PropertyData base class rather than any particular child class.</param>\r\n        /// <param name=\"serializationContext\">The context in which this property is being written.</param>\r\n        /// <returns>The length in bytes of the data that was written.</returns>\r\n        public virtual int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n        {\r\n            return 0;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initialize this property when serialized as zero.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The BinaryReader to read from.</param>\r\n        internal virtual void InitializeZero(AssetBinaryReader reader)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Complete writing the property tag of this property.\r\n        /// </summary>\r\n        protected virtual void WriteEndPropertyTag(AssetBinaryWriter writer)\r\n        {\r\n            if (writer.Asset.HasUnversionedProperties) return;\r\n\r\n            if (writer.Asset.ObjectVersionUE5 < ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n                writer.WritePropertyGuid(PropertyGuid);\r\n            if (writer.Asset.ObjectVersionUE5 >= ObjectVersionUE5.PROPERTY_TAG_EXTENSION_AND_OVERRIDABLE_SERIALIZATION)\r\n            {\r\n                if (writer.Asset.ObjectVersionUE5 < ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME || PropertyTagFlags.HasFlag(EPropertyTagFlags.HasPropertyExtensions))\r\n                {\r\n                    writer.Write((byte)PropertyTagExtensions);\r\n\r\n                    if (PropertyTagExtensions.HasFlag(EPropertyTagExtension.OverridableInformation))\r\n                    {\r\n                        writer.Write((byte)OverrideOperation);\r\n                        writer.Write(bExperimentalOverridableLogic ? 1 : 0);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Does the body of this property entirely consist of null bytes? If so, the body can be skipped during serialization in unversioned properties.\r\n        /// </summary>\r\n        /// <param name=\"asset\">The asset to test serialization within.</param>\r\n        /// <returns>Whether or not the property can be serialized as zero.</returns>\r\n        public virtual bool CanBeZero(UAsset asset)\r\n        {\r\n            MemoryStream testStrm = new MemoryStream(32); this.Write(new AssetBinaryWriter(testStrm, asset), false); byte[] testByteArray = testStrm.ToArray();\r\n            foreach (byte entry in testByteArray)\r\n            {\r\n                if (entry != 0) return false;\r\n            }\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets certain fields of the property based off of an array of strings.\r\n        /// </summary>\r\n        /// <param name=\"d\">An array of strings to derive certain fields from.</param>\r\n        /// <param name=\"asset\">The asset that the property belongs to.</param>\r\n        public virtual void FromString(string[] d, UAsset asset)\r\n        {\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Performs a deep clone of the current PropertyData instance.\r\n        /// </summary>\r\n        /// <returns>A deep copy of the current property.</returns>\r\n        public object Clone()\r\n        {\r\n            var res = (PropertyData)MemberwiseClone();\r\n            res.Name = (FName)this.Name.Clone();\r\n            if (res.RawValue is ICloneable cloneableValue) res.RawValue = cloneableValue.Clone();\r\n\r\n            HandleCloned(res);\r\n            return res;\r\n        }\r\n\r\n        protected virtual void HandleCloned(PropertyData res)\r\n        {\r\n            // Child classes can implement this for custom cloning behavior\r\n        }\r\n    }\r\n\r\n    public abstract class PropertyData<T> : PropertyData\r\n    {\r\n        /// <summary>\r\n        /// The \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n        /// </summary>\r\n        [JsonProperty]\r\n        public T Value\r\n        {\r\n            get => GetObject<T>();\r\n            set => SetObject(value);\r\n        }\r\n\r\n        public PropertyData(FName name) : base(name) { }\r\n\r\n        public PropertyData() : base() { }\r\n    }\r\n\r\n    public interface IStruct<T>\r\n    {\r\n        abstract static T Read(AssetBinaryReader reader);\r\n        abstract static T FromString(string[] d, UAsset asset);\r\n\r\n        int Write(AssetBinaryWriter writer);\r\n    }\r\n\r\n    public abstract class BasePropertyData<T> : PropertyData<T> where T : IStruct<T>, new()\r\n    {\r\n        public BasePropertyData(FName name) : base(name) { }\r\n\r\n        public BasePropertyData() : base() { }\r\n\r\n        public override bool HasCustomStructSerialization => true;\r\n\r\n        public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n        {\r\n            if (includeHeader)\r\n            {\r\n                this.ReadEndPropertyTag(reader);\r\n            }\r\n\r\n            Value = T.Read(reader);\r\n        }\r\n\r\n        public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n        {\r\n\r\n            if (includeHeader)\r\n            {\r\n                this.WriteEndPropertyTag(writer);\r\n            }\r\n\r\n            Value ??= new T();\r\n            return Value.Write(writer);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return Value.ToString();\r\n        }\r\n\r\n        public override void FromString(string[] d, UAsset asset)\r\n        {\r\n            Value = T.FromString(d, asset);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/SetPropertyData.cs",
    "content": "using System;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.Unversioned;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes a set.\r\n/// </summary>\r\npublic class SetPropertyData : ArrayPropertyData\r\n{\r\n    public PropertyData[] ElementsToRemove = null;\r\n\r\n    public SetPropertyData(FName name) : base(name)\r\n    {\r\n        Value = [];\r\n        ElementsToRemove = [];\r\n    }\r\n\r\n    public SetPropertyData()\r\n    {\r\n        Value = [];\r\n        ElementsToRemove = [];\r\n    }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"SetProperty\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        ShouldSerializeStructsDifferently = false;\r\n\r\n        if (includeHeader && !reader.Asset.HasUnversionedProperties)\r\n        {\r\n            if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n            {\r\n                if (PropertyTypeName is null) throw new FormatException(\"PropertyTypeName is required to read SetProperty with complete type names.\");\r\n                ArrayType = PropertyTypeName.GetParameter(0).GetName();\r\n            }\r\n            else\r\n            {\r\n                ArrayType = reader.ReadFName();\r\n            }\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        if (reader.Asset.Mappings != null && ArrayType == null && reader.Asset.Mappings.TryGetPropertyData(Name, Ancestry, reader.Asset, out UsmapArrayData strucDat1))\r\n        {\r\n            ArrayType = FName.DefineDummy(reader.Asset, strucDat1.InnerType.Type.ToString());\r\n        }\r\n\r\n        if (reader.Asset.HasUnversionedProperties && ArrayType == null)\r\n        {\r\n            throw new InvalidOperationException(\"Unable to determine array type for array \" + Name.Value.Value + \" in class \" + Ancestry.Parent.Value.Value);\r\n        }\r\n\r\n        var removedItemsDummy = new ArrayPropertyData(FName.DefineDummy(reader.Asset, \"ElementsToRemove\"));\r\n        removedItemsDummy.Ancestry.Initialize(Ancestry, Name);\r\n        removedItemsDummy.ShouldSerializeStructsDifferently = false;\r\n        removedItemsDummy.ArrayType = ArrayType;\r\n        removedItemsDummy.PropertyTypeName = PropertyTypeName;\r\n        removedItemsDummy.Read(reader, false, leng1, leng2);\r\n        ElementsToRemove = removedItemsDummy.Value;\r\n\r\n        base.Read(reader, false, leng1-4, leng2);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        ShouldSerializeStructsDifferently = false;\r\n\r\n        if (Value.Length > 0) ArrayType = writer.Asset.HasUnversionedProperties ? FName.DefineDummy(writer.Asset, Value[0].PropertyType) : new FName(writer.Asset, Value[0].PropertyType);\r\n\r\n        if (includeHeader && !writer.Asset.HasUnversionedProperties)\r\n        {\r\n            if (writer.Asset.ObjectVersionUE5 < ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n            {\r\n                writer.Write(ArrayType);\r\n            }\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        var removedItemsDummy = new ArrayPropertyData(FName.DefineDummy(writer.Asset, \"ElementsToRemove\"));\r\n        removedItemsDummy.ShouldSerializeStructsDifferently = false;\r\n        removedItemsDummy.ArrayType = ArrayType;\r\n        removedItemsDummy.Value = ElementsToRemove;\r\n\r\n        int leng1 = removedItemsDummy.Write(writer, false);\r\n        return leng1 + base.Write(writer, false);\r\n    }\r\n\r\n    protected override void HandleCloned(PropertyData res)\r\n    {\r\n        base.HandleCloned(res);\r\n        SetPropertyData cloningProperty = (SetPropertyData)res;\r\n\r\n        if (this.ElementsToRemove != null)\r\n        {\r\n            PropertyData[] newData = new PropertyData[this.ElementsToRemove.Length];\r\n            for (int i = 0; i < this.Value.Length; i++)\r\n            {\r\n                newData[i] = (PropertyData)this.Value[i].Clone();\r\n            }\r\n            cloningProperty.ElementsToRemove = newData;\r\n        }\r\n        else\r\n        {\r\n            cloningProperty.ElementsToRemove = null;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/SoftObjectPropertyData.cs",
    "content": "using System;\r\nusing UAssetAPI.CustomVersions;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes a reference variable to another object which may be null, and may become valid or invalid at any point. Near synonym for <see cref=\"SoftObjectPropertyData\"/>.\r\n/// </summary>\r\npublic class AssetObjectPropertyData : PropertyData<FString>\r\n{\r\n    public uint ID = 0;\r\n\r\n    public AssetObjectPropertyData(FName name) : base(name) { }\r\n\r\n    public AssetObjectPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"AssetObjectProperty\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = reader.ReadFString();\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        return writer.Write(Value);\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return \"(\" + Value + \", \" + ID + \")\";\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        //asset.AddNameReference(FString.FromString(d[0]));\r\n        Value = FString.FromString(d[0]);\r\n    }\r\n}\r\n\r\npublic struct FTopLevelAssetPath\r\n{\r\n    /// <summary>\r\n    /// Name of the package containing the asset e.g. /Path/To/Package\r\n    /// If less than 5.1, this is null\r\n    /// </summary>\r\n    public FName PackageName;\r\n    /// <summary>\r\n    /// Name of the asset within the package e.g. 'AssetName'.\r\n    /// If less than 5.1, this contains the full path instead\r\n    /// </summary>\r\n    public FName AssetName;\r\n\r\n    public FTopLevelAssetPath(FName packageName, FName assetName)\r\n    {\r\n        PackageName = packageName;\r\n        AssetName = assetName;\r\n    }\r\n}\r\n\r\n/// <summary>\r\n/// A reference variable to another object which may be null, and may become valid or invalid at any point.\r\n/// </summary>\r\npublic struct FSoftObjectPath : IEquatable<FSoftObjectPath>, IStruct<FSoftObjectPath>\r\n{\r\n    /// <summary>\r\n    /// Asset path, patch to a top level object in a package. This is /package/path.assetname/\r\n    /// </summary>\r\n    public FTopLevelAssetPath AssetPath;\r\n    /// <summary>\r\n    /// Optional FString for subobject within an asset. This is the sub path after the :\r\n    /// </summary>\r\n    public FString SubPathString;\r\n\r\n    public FSoftObjectPath(FName packageName, FName assetName, FString subPathString)\r\n    {\r\n        AssetPath = new FTopLevelAssetPath(packageName, assetName);\r\n        SubPathString = subPathString;\r\n    }\r\n\r\n    public FSoftObjectPath(FTopLevelAssetPath assetPath, FString subPathString)\r\n    {\r\n        AssetPath = assetPath;\r\n        SubPathString = subPathString;\r\n    }\r\n\r\n    public FSoftObjectPath(AssetBinaryReader reader, bool allowIndex = true)\r\n    {\r\n        if (allowIndex && reader.Asset.SoftObjectPathList != null && reader.Asset.SoftObjectPathList.Count > 0)\r\n        {\r\n            // serialize as idx\r\n            int idx = reader.ReadInt32();\r\n\r\n            FSoftObjectPath target = reader.Asset.SoftObjectPathList[idx];\r\n            this.AssetPath = target.AssetPath;\r\n            this.SubPathString = target.SubPathString;\r\n        }\r\n        else\r\n        {\r\n            if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.FSOFTOBJECTPATH_REMOVE_ASSET_PATH_FNAMES)\r\n            {\r\n                AssetPath = new FTopLevelAssetPath(reader.ReadFName(), reader.ReadFName());\r\n            }\r\n            else if (reader.Asset.ObjectVersion >= ObjectVersion.VER_UE4_ADDED_SOFT_OBJECT_PATH)\r\n            {\r\n                AssetPath = new FTopLevelAssetPath(null, reader.ReadFName());\r\n            }\r\n            else\r\n            {\r\n                AssetPath = new FTopLevelAssetPath(null, null);\r\n            } \r\n            SubPathString = reader.Asset.GetCustomVersion<FFortniteMainBranchObjectVersion>() < FFortniteMainBranchObjectVersion.SoftObjectPathUtf8SubPaths\r\n                ? reader.ReadFString()\r\n                : reader.ReadUtf8String();\r\n        }\r\n    }\r\n\r\n    public static FSoftObjectPath Read(AssetBinaryReader reader) => new FSoftObjectPath(reader);\r\n\r\n    public int Write(AssetBinaryWriter writer, bool allowIndex = true)\r\n    {\r\n        if (allowIndex && writer.Asset.SoftObjectPathList != null && writer.Asset.SoftObjectPathList.Count > 0)\r\n        {\r\n            // serialize as idx\r\n            int idx = -1;\r\n            for (int i = 0; i < writer.Asset.SoftObjectPathList.Count; i++)\r\n            {\r\n                FSoftObjectPath testingEntry = writer.Asset.SoftObjectPathList[i];\r\n                if (testingEntry == this)\r\n                {\r\n                    idx = i;\r\n                    break;\r\n                }\r\n            }\r\n            if (idx < 0) throw new FormatException(\"Failed to find AssetPath in SoftObjectPathList\");\r\n\r\n            writer.Write(idx);\r\n            return sizeof(int);\r\n        }\r\n\r\n        if (writer.Asset.ObjectVersion < ObjectVersion.VER_UE4_ADDED_SOFT_OBJECT_PATH)\r\n            return writer.Write(SubPathString);\r\n\r\n        var offset = writer.BaseStream.Position;\r\n        if (writer.Asset.ObjectVersionUE5 >= ObjectVersionUE5.FSOFTOBJECTPATH_REMOVE_ASSET_PATH_FNAMES) writer.Write(AssetPath.PackageName);\r\n        writer.Write(AssetPath.AssetName);\r\n\r\n        if (writer.Asset.GetCustomVersion<FFortniteMainBranchObjectVersion>() < FFortniteMainBranchObjectVersion.SoftObjectPathUtf8SubPaths)\r\n            writer.Write(SubPathString);\r\n        else\r\n            writer.WriteUtf8String(SubPathString);\r\n\r\n        return (int)(writer.BaseStream.Position - offset);\r\n    }\r\n\r\n    public int Write(AssetBinaryWriter writer) => Write(writer, true);\r\n\r\n    public static bool operator ==(FSoftObjectPath lhs, FSoftObjectPath rhs)\r\n    {\r\n        return lhs.Equals(rhs);\r\n    }\r\n\r\n    public static bool operator !=(FSoftObjectPath lhs, FSoftObjectPath rhs)\r\n    {\r\n        return !lhs.Equals(rhs);\r\n    }\r\n\r\n    public bool Equals(FSoftObjectPath other)\r\n    {\r\n        return AssetPath.PackageName == other.AssetPath.PackageName &&\r\n               AssetPath.AssetName == other.AssetPath.AssetName &&\r\n               SubPathString == other.SubPathString;\r\n    }\r\n\r\n    public override bool Equals(object obj)\r\n    {\r\n        return obj is FSoftObjectPath other && Equals(other);\r\n    }\r\n\r\n    public override int GetHashCode()\r\n    {\r\n        return HashCode.Combine(AssetPath.PackageName, AssetPath.AssetName, SubPathString);\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return $\"({AssetPath.PackageName}, {AssetPath.AssetName}, {SubPathString})\";\r\n    }\r\n\r\n    public static FSoftObjectPath FromString(string[] d, UAsset asset)\r\n    {\r\n        FName one = FName.FromString(asset, d[0]);\r\n        FName two = FName.FromString(asset, d[1]);\r\n        FString three = string.IsNullOrEmpty(d[2]) ? null : FString.FromString(d[2]);\r\n\r\n        return new FSoftObjectPath(one, two, three);\r\n    }\r\n}\r\n\r\n/// <summary>\r\n/// Describes a reference variable to another object which may be null, and may become valid or invalid at any point. Near synonym for <see cref=\"AssetObjectPropertyData\"/>.\r\n/// </summary>\r\npublic class SoftObjectPropertyData : BasePropertyData<FSoftObjectPath>\r\n{\r\n    public SoftObjectPropertyData(FName name) : base(name) { }\r\n\r\n    public SoftObjectPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"SoftObjectProperty\");\r\n\r\n    public override bool HasCustomStructSerialization => false;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/StrPropertyData.cs",
    "content": "using System.Text;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes an <see cref=\"FString\"/>.\r\n/// </summary>\r\npublic class StrPropertyData : PropertyData<FString>\r\n{\r\n    public StrPropertyData(FName name) : base(name) { }\r\n\r\n    public StrPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"StrProperty\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = reader.ReadFString();\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        int here = (int)writer.BaseStream.Position;\r\n        writer.Write(Value);\r\n        return (int)writer.BaseStream.Position - here;\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return Value.ToString();\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        var encoding = Encoding.UTF8;\r\n        if (d.Length >= 5) encoding = (d[4].Equals(Encoding.Unicode.HeaderName) ? Encoding.Unicode : Encoding.UTF8);\r\n        Value = FString.FromString(d[0], encoding);\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/TextHistoryType.cs",
    "content": "namespace UAssetAPI.PropertyTypes.Objects;\r\n\r\npublic enum TextHistoryType\r\n{\r\n    None = -1,\r\n    Base = 0,\r\n    NamedFormat,\r\n    OrderedFormat,\r\n    ArgumentFormat,\r\n    AsNumber,\r\n    AsPercent,\r\n    AsCurrency,\r\n    AsDate,\r\n    AsTime,\r\n    AsDateTime,\r\n    Transform,\r\n    StringTableEntry,\r\n    TextGenerator,\r\n\r\n    RawText // Uncertain, Back 4 Blood specific serialization\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/TextPropertyData.cs",
    "content": "using Newtonsoft.Json;\r\nusing Newtonsoft.Json.Converters;\r\nusing System;\r\nusing UAssetAPI.CustomVersions;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.UnrealTypes.EngineEnums;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n[Flags]\r\npublic enum ETextFlag\r\n{\r\n    Transient = 1 << 0,\r\n    CultureInvariant = 1 << 1,\r\n    ConvertedProperty = 1 << 2,\r\n    Immutable = 1 << 3,\r\n    InitializedFromString = 1 << 4\r\n}\r\n\r\npublic enum ETransformType : byte\r\n{\r\n    ToLower = 0,\r\n    ToUpper,\r\n}\r\n\r\npublic class FNumberFormattingOptions\r\n{\r\n    public bool AlwaysSign;\r\n    public bool UseGrouping;\r\n    public ERoundingMode RoundingMode;\r\n    public int MinimumIntegralDigits;\r\n    public int MaximumIntegralDigits;\r\n    public int MinimumFractionalDigits;\r\n    public int MaximumFractionalDigits;\r\n\r\n    public FNumberFormattingOptions()\r\n    {\r\n        AlwaysSign = false;\r\n        UseGrouping = true;\r\n        RoundingMode = ERoundingMode.HalfToEven;\r\n        MinimumIntegralDigits = 1;\r\n        MaximumIntegralDigits = 316;\r\n        MinimumFractionalDigits = 0;\r\n        MaximumFractionalDigits = 3;\r\n    }\r\n\r\n    public FNumberFormattingOptions(AssetBinaryReader reader)\r\n    {\r\n        if (reader.Asset.GetCustomVersion<FEditorObjectVersion>() >= FEditorObjectVersion.AddedAlwaysSignNumberFormattingOption)\r\n            AlwaysSign = reader.ReadBooleanInt();\r\n        UseGrouping = reader.ReadBooleanInt();\r\n        RoundingMode = (ERoundingMode)reader.ReadByte();\r\n        MinimumIntegralDigits = reader.ReadInt32();\r\n        MaximumIntegralDigits = reader.ReadInt32();\r\n        MinimumFractionalDigits = reader.ReadInt32();\r\n        MaximumFractionalDigits = reader.ReadInt32();\r\n    }\r\n\r\n    public void Write(AssetBinaryWriter writer)\r\n    {\r\n        if (writer.Asset.GetCustomVersion<FEditorObjectVersion>() >= FEditorObjectVersion.AddedAlwaysSignNumberFormattingOption)\r\n            writer.Write(AlwaysSign ? 1 : 0);\r\n        writer.Write(UseGrouping ? 1 : 0);\r\n        writer.Write((byte)RoundingMode);\r\n        writer.Write(MinimumIntegralDigits);\r\n        writer.Write(MaximumIntegralDigits);\r\n        writer.Write(MinimumFractionalDigits);\r\n        writer.Write(MaximumFractionalDigits);\r\n    }\r\n}\r\n\r\n\r\npublic class FFormatArgumentValue\r\n{\r\n    public EFormatArgumentType Type;\r\n    public object Value;\r\n\r\n    public FFormatArgumentValue() { }\r\n\r\n    public FFormatArgumentValue(EFormatArgumentType type, object value)\r\n    {\r\n        Type = type;\r\n        Value = value;\r\n    }\r\n\r\n    public FFormatArgumentValue(AssetBinaryReader reader, bool isArgumentData = false)\r\n    {\r\n        Type = (EFormatArgumentType)reader.ReadByte();\r\n        switch (Type)\r\n        {\r\n            case EFormatArgumentType.Int:\r\n                Value = isArgumentData && reader.Asset.GetCustomVersion<FUE5ReleaseStreamObjectVersion>() < FUE5ReleaseStreamObjectVersion.TextFormatArgumentData64bitSupport ? reader.ReadInt32() : reader.ReadInt64();\r\n                break;\r\n            case EFormatArgumentType.UInt:\r\n                Value = reader.ReadUInt64();\r\n                break;\r\n            case EFormatArgumentType.Double:\r\n                Value = reader.ReadDouble();\r\n                break;\r\n            case EFormatArgumentType.Float:\r\n                Value = reader.ReadSingle();\r\n                break;\r\n            case EFormatArgumentType.Text:\r\n                var val = new TextPropertyData(FName.DefineDummy(reader.Asset, \"Value\"));\r\n                val.Read(reader, false, 1, 0, PropertySerializationContext.Normal);\r\n                Value = val;\r\n                break;\r\n            default:\r\n                throw new NotImplementedException(\"EFormatArgumentType type \" + Type.ToString() + \" is not implemented for reading\");\r\n        }\r\n    }\r\n\r\n    public int Write(AssetBinaryWriter writer, bool isArgumentData = false)\r\n    {\r\n        int sz = 0;\r\n        writer.Write((byte)Type); sz += sizeof(byte);\r\n        switch (Type)\r\n        {\r\n            case EFormatArgumentType.Int:\r\n                if (isArgumentData && writer.Asset.GetCustomVersion<FUE5ReleaseStreamObjectVersion>() < FUE5ReleaseStreamObjectVersion.TextFormatArgumentData64bitSupport)\r\n                {\r\n                    writer.Write((int)(long)Value);\r\n                    sz += sizeof(int);\r\n                }\r\n                else\r\n                {\r\n                    writer.Write((long)Value);\r\n                    sz += sizeof(long);\r\n                }\r\n                break;\r\n            case EFormatArgumentType.UInt:\r\n                writer.Write((ulong)Value);\r\n                sz += sizeof(ulong);\r\n                break;\r\n            case EFormatArgumentType.Double:\r\n                writer.Write((double)Value);\r\n                sz += sizeof(double);\r\n                break;\r\n            case EFormatArgumentType.Float:\r\n                writer.Write((float)Value);\r\n                sz += sizeof(float);\r\n                break;\r\n            case EFormatArgumentType.Text:\r\n                int here = (int)writer.BaseStream.Position;\r\n                var val = (TextPropertyData)Value;\r\n                val.Write(writer, false);\r\n                sz += (int)writer.BaseStream.Position - here;\r\n                break;\r\n            default:\r\n                throw new NotImplementedException(\"EFormatArgumentType type \" + Type.ToString() + \" is not implemented for writing\");\r\n        }\r\n\r\n        return sz;\r\n    }\r\n}\r\n\r\npublic class FFormatArgumentData\r\n{\r\n    public FString ArgumentName;\r\n    public FFormatArgumentValue ArgumentValue;\r\n\r\n    public FFormatArgumentData() { }\r\n\r\n    public FFormatArgumentData(FString name, FFormatArgumentValue value)\r\n    {\r\n        ArgumentName = name;\r\n        ArgumentValue = value;\r\n    }\r\n\r\n    public FFormatArgumentData(AssetBinaryReader reader)\r\n    {\r\n        Read(reader);\r\n    }\r\n\r\n    public void Read(AssetBinaryReader reader)\r\n    {\r\n        ArgumentName = reader.ReadFString();\r\n        ArgumentValue = new FFormatArgumentValue(reader, true);\r\n    }\r\n\r\n    public int Write(AssetBinaryWriter writer)\r\n    {\r\n        int sz = writer.Write(ArgumentName);\r\n        sz += ArgumentValue.Write(writer, true);\r\n        return sz;\r\n    }\r\n}\r\n\r\n/// <summary>\r\n/// Describes an FText.\r\n/// </summary>\r\npublic class TextPropertyData : PropertyData<FString>\r\n{\r\n    /// <summary>Flags with various information on what sort of FText this is</summary>\r\n    [JsonProperty]\r\n    public ETextFlag Flags = 0;\r\n    /// <summary>The HistoryType of this FText.</summary>\r\n    [JsonProperty]\r\n    [JsonConverter(typeof(StringEnumConverter))]\r\n    public TextHistoryType HistoryType = TextHistoryType.Base;\r\n    /// <summary>The string table ID being referenced, if applicable</summary>\r\n    [JsonProperty]\r\n    public FName TableId = null;\r\n    /// <summary>A namespace to use when parsing texts that use LOCTEXT</summary>\r\n    [JsonProperty]\r\n    public FString Namespace = null;\r\n    /// <summary>The source string for this FText. In the Unreal Engine, this is also known as SourceString.</summary>\r\n    [JsonProperty]\r\n    public FString CultureInvariantString = null;\r\n\r\n    // OrderedFormat\r\n    [JsonProperty]\r\n    public TextPropertyData SourceFmt;\r\n    [JsonProperty]\r\n    public FFormatArgumentValue[] Arguments;\r\n    //ArgumentFormat\r\n    [JsonProperty]\r\n    public FFormatArgumentData[] ArgumentsData;\r\n    //Transform\r\n    [JsonProperty]\r\n    public ETransformType TransformType;\r\n    //AsNumber\r\n    [JsonProperty]\r\n    FFormatArgumentValue SourceValue;\r\n    [JsonProperty]\r\n    FNumberFormattingOptions FormatOptions;\r\n    [JsonProperty]\r\n    FString TargetCulture;\r\n\r\n    public bool ShouldSerializeTableId()\r\n    {\r\n        return HistoryType == TextHistoryType.StringTableEntry;\r\n    }\r\n\r\n    public TextPropertyData(FName name) : base(name) { }\r\n\r\n    public TextPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"TextProperty\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        if (reader.Asset.ObjectVersion < ObjectVersion.VER_UE4_FTEXT_HISTORY)\r\n        {\r\n            CultureInvariantString = reader.ReadFString();\r\n            if (reader.Asset.ObjectVersion >= ObjectVersion.VER_UE4_ADDED_NAMESPACE_AND_KEY_DATA_TO_FTEXT)\r\n            {\r\n                Namespace = reader.ReadFString();\r\n                Value = reader.ReadFString();\r\n            }\r\n            else\r\n            {\r\n                Namespace = null;\r\n                Value = reader.ReadFString();\r\n            }\r\n        }\r\n\r\n        Flags = (ETextFlag)reader.ReadUInt32();\r\n\r\n        if (reader.Asset.ObjectVersion >= ObjectVersion.VER_UE4_FTEXT_HISTORY)\r\n        {\r\n            HistoryType = (TextHistoryType)reader.ReadSByte();\r\n\r\n            switch (HistoryType)\r\n            {\r\n                case TextHistoryType.None:\r\n                    Value = null;\r\n                    if (reader.Asset.GetCustomVersion<FEditorObjectVersion>() >= FEditorObjectVersion.CultureInvariantTextSerializationKeyStability)\r\n                    {\r\n                        bool bHasCultureInvariantString = reader.ReadInt32() == 1;\r\n                        if (bHasCultureInvariantString)\r\n                        {\r\n                            CultureInvariantString = reader.ReadFString();\r\n                        }\r\n                    }\r\n                    break;\r\n                case TextHistoryType.Base:\r\n                    Namespace = reader.ReadFString();\r\n                    Value = reader.ReadFString(); // Key\r\n                    CultureInvariantString = reader.ReadFString(); // SourceString\r\n                    break;\r\n                case TextHistoryType.StringTableEntry:\r\n                    TableId = reader.ReadFName();\r\n                    Value = reader.ReadFString();\r\n                    break;\r\n                case TextHistoryType.RawText:\r\n                    Value = reader.ReadFString();\r\n                    break;\r\n                case TextHistoryType.OrderedFormat:\r\n                    SourceFmt = new TextPropertyData(FName.DefineDummy(reader.Asset, \"SourceFmt\"));\r\n                    SourceFmt.Read(reader, false, 1, 0, serializationContext);\r\n                    int ArgumentsSize = reader.ReadInt32();\r\n                    Arguments = new FFormatArgumentValue[ArgumentsSize];\r\n                    for (int i = 0; i < ArgumentsSize; i++)\r\n                    {\r\n                        Arguments[i] = new FFormatArgumentValue(reader);\r\n                    }\r\n                    break;\r\n                case TextHistoryType.ArgumentFormat:\r\n                    SourceFmt = new TextPropertyData(FName.DefineDummy(reader.Asset, \"SourceFmt\"));\r\n                    SourceFmt.Read(reader, false, 1, 0, serializationContext);\r\n                    ArgumentsSize = reader.ReadInt32();\r\n                    ArgumentsData = new FFormatArgumentData[ArgumentsSize];\r\n                    for (int i = 0; i < ArgumentsSize; i++)\r\n                    {\r\n                        ArgumentsData[i] = new FFormatArgumentData(reader);\r\n                    }\r\n                    break;\r\n                case TextHistoryType.Transform:\r\n                    SourceFmt = new TextPropertyData(FName.DefineDummy(reader.Asset, \"SourceFmt\"));\r\n                    SourceFmt.Read(reader, false, 1, 0, serializationContext);\r\n                    TransformType = (ETransformType)reader.ReadByte();\r\n                    break;\r\n                case TextHistoryType.AsNumber:\r\n                    SourceValue = new FFormatArgumentValue(reader);\r\n                    if (reader.ReadBooleanInt())\r\n                    {\r\n                        FormatOptions = new FNumberFormattingOptions(reader);\r\n                    }\r\n                    TargetCulture = reader.ReadFString();\r\n                    break;\r\n                default:\r\n                    throw new NotImplementedException(\"Unimplemented reader for \" + HistoryType.ToString() + \" @ \" + reader.BaseStream.Position);\r\n            }\r\n        }\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        var here = writer.BaseStream.Position;\r\n\r\n        if (writer.Asset.ObjectVersion < ObjectVersion.VER_UE4_FTEXT_HISTORY)\r\n        {\r\n            writer.Write(CultureInvariantString);\r\n            if (writer.Asset.ObjectVersion >= ObjectVersion.VER_UE4_ADDED_NAMESPACE_AND_KEY_DATA_TO_FTEXT)\r\n            {\r\n                writer.Write(Namespace);\r\n                writer.Write(Value);\r\n            }\r\n            else\r\n            {\r\n                writer.Write(Value);\r\n            }\r\n        }\r\n\r\n        writer.Write((uint)Flags);\r\n\r\n        if (writer.Asset.ObjectVersion >= ObjectVersion.VER_UE4_FTEXT_HISTORY)\r\n        {\r\n            writer.Write((sbyte)HistoryType);\r\n\r\n            switch (HistoryType)\r\n            {\r\n                case TextHistoryType.None:\r\n                    if (writer.Asset.GetCustomVersion<FEditorObjectVersion>() >= FEditorObjectVersion.CultureInvariantTextSerializationKeyStability)\r\n                    {\r\n                        if (CultureInvariantString == null || string.IsNullOrEmpty(CultureInvariantString.Value))\r\n                        {\r\n                            writer.Write(0);\r\n                        }\r\n                        else\r\n                        {\r\n                            writer.Write(1);\r\n                            writer.Write(CultureInvariantString);\r\n                        }\r\n                    }\r\n                    break;\r\n                case TextHistoryType.Base:\r\n                    writer.Write(Namespace);\r\n                    writer.Write(Value);\r\n                    writer.Write(CultureInvariantString);\r\n                    break;\r\n                case TextHistoryType.StringTableEntry:\r\n                    writer.Write(TableId);\r\n                    writer.Write(Value);\r\n                    break;\r\n                case TextHistoryType.RawText:\r\n                    writer.Write(Value);\r\n                    break;\r\n                case TextHistoryType.OrderedFormat:\r\n                    SourceFmt.Write(writer, false, serializationContext);\r\n                    writer.Write(Arguments.Length);\r\n                    for (int i = 0; i < Arguments.Length; i++)\r\n                    {\r\n                        Arguments[i].Write(writer);\r\n                    }\r\n                    break;\r\n                case TextHistoryType.ArgumentFormat:\r\n                    SourceFmt.Write(writer, false, serializationContext);\r\n                    writer.Write(ArgumentsData.Length);\r\n                    for (int i = 0; i < ArgumentsData.Length; i++)\r\n                    {\r\n                        ArgumentsData[i].Write(writer);\r\n                    }\r\n                    break;\r\n                case TextHistoryType.Transform:\r\n                    SourceFmt.Write(writer, false, serializationContext);\r\n                    writer.Write((byte)TransformType);\r\n                    break;\r\n                case TextHistoryType.AsNumber:\r\n                    SourceValue.Write(writer);\r\n                    if (FormatOptions != null)\r\n                    {\r\n                        writer.Write(1);\r\n                        FormatOptions.Write(writer);\r\n                    }\r\n                    else\r\n                    {\r\n                        writer.Write(0);\r\n                    }\r\n                    writer.Write(TargetCulture);\r\n                    break;\r\n                default:\r\n                    throw new NotImplementedException(\"Unimplemented writer for \" + HistoryType.ToString());\r\n            }\r\n        }\r\n\r\n        return (int)(writer.BaseStream.Position - here);\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        if (Value == null) return \"null\";\r\n\r\n        switch (HistoryType)\r\n        {\r\n            case TextHistoryType.None:\r\n                return \"None, \" + CultureInvariantString;\r\n            case TextHistoryType.Base:\r\n                return \"Base, \" + Namespace + \", \" + Value + \", \" + CultureInvariantString;\r\n            case TextHistoryType.StringTableEntry:\r\n                return \"StringTableEntry, \" + TableId + \", \" + Value;\r\n            default:\r\n                throw new NotImplementedException(\"Unimplemented display for \" + HistoryType.ToString());\r\n        }\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        throw new NotImplementedException(\"TextPropertyData.FromString is currently unimplemented\");\r\n    }\r\n\r\n    protected override void HandleCloned(PropertyData res)\r\n    {\r\n        TextPropertyData cloningProperty = (TextPropertyData)res;\r\n\r\n        cloningProperty.TableId = (FName)TableId?.Clone();\r\n        cloningProperty.Namespace = (FString)Namespace?.Clone();\r\n        cloningProperty.CultureInvariantString = (FString)CultureInvariantString?.Clone();\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/UInt16PropertyData.cs",
    "content": "using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes a 16-bit unsigned integer variable (<see cref=\"ushort\"/>).\r\n/// </summary>\r\npublic class UInt16PropertyData : PropertyData<ushort>\r\n{\r\n    public UInt16PropertyData(FName name) : base(name) { }\r\n\r\n    public UInt16PropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"UInt16Property\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n    public override object DefaultValue => (ushort)0;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = (reader.Asset.HasUnversionedProperties && serializationContext != PropertySerializationContext.Normal) ? (ushort)reader.ReadInt64() : reader.ReadUInt16();\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        if (writer.Asset.HasUnversionedProperties && serializationContext != PropertySerializationContext.Normal)\r\n        {\r\n            writer.Write((long)Value);\r\n            return sizeof(long);\r\n        }\r\n        writer.Write(Value);\r\n        return sizeof(ushort);\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return Convert.ToString(Value);\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        Value = 0;\r\n        if (ushort.TryParse(d[0], out ushort res)) Value = res;\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/UInt32PropertyData.cs",
    "content": "using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes a 32-bit unsigned integer variable (<see cref=\"uint\"/>).\r\n/// </summary>\r\npublic class UInt32PropertyData : PropertyData<uint>\r\n{\r\n    public UInt32PropertyData(FName name) : base(name) { }\r\n\r\n    public UInt32PropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"UInt32Property\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n    public override object DefaultValue => (uint)0;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = reader.ReadUInt32();\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        writer.Write(Value);\r\n        return sizeof(uint);\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return Convert.ToString(Value);\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        Value = 0;\r\n        if (uint.TryParse(d[0], out uint res)) Value = res;\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/UInt64PropertyData.cs",
    "content": "using System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes a 64-bit unsigned integer variable (<see cref=\"ulong\"/>).\r\n/// </summary>\r\npublic class UInt64PropertyData : PropertyData<ulong>\r\n{\r\n    public UInt64PropertyData(FName name) : base(name) { }\r\n\r\n    public UInt64PropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"UInt64Property\");\r\n    public override FString PropertyType { get { return CurrentPropertyType; } }\r\n    public override object DefaultValue { get { return (ulong)0; } }\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = reader.ReadUInt64();\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        writer.Write(Value);\r\n        return sizeof(ulong);\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return Convert.ToString(Value);\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        Value = 0;\r\n        if (ulong.TryParse(d[0], out ulong res)) Value = res;\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/UnknownPropertyData.cs",
    "content": "using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects;\r\n\r\n/// <summary>\r\n/// Describes a property which UAssetAPI has no specific serialization for, and is instead represented as an array of bytes as a fallback.\r\n/// </summary>\r\npublic class UnknownPropertyData : PropertyData<byte[]>\r\n{\r\n    [JsonProperty]\r\n    public FString SerializingPropertyType = CurrentPropertyType;\r\n\r\n    public UnknownPropertyData(FName name) : base(name) { }\r\n\r\n    public UnknownPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"UnknownProperty\");\r\n    public override FString PropertyType { get { return CurrentPropertyType; } }\r\n\r\n    public void SetSerializingPropertyType(FString newType)\r\n    {\r\n        SerializingPropertyType = newType;\r\n    }\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = reader.ReadBytes((int)leng1);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        writer.Write(Value);\r\n        return Value.Length;\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return Convert.ToString(Value);\r\n    }\r\n\r\n    protected override void HandleCloned(PropertyData res)\r\n    {\r\n        UnknownPropertyData cloningProperty = (UnknownPropertyData)res;\r\n\r\n        cloningProperty.SerializingPropertyType = (FString)SerializingPropertyType?.Clone();\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Objects/WeakObjectPropertyData.cs",
    "content": "﻿using UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Objects\n{\n    public class WeakObjectPropertyData : ObjectPropertyData\n    {\n        public WeakObjectPropertyData(FName name) : base(name)\n        {\n\n        }\n\n        public WeakObjectPropertyData()\n        {\n\n        }\n\n        private static readonly FString CurrentPropertyType = new FString(\"WeakObjectProperty\");\n        public override FString PropertyType { get { return CurrentPropertyType; } }\n        public override object DefaultValue { get { return FPackageIndex.FromRawIndex(0); } }\n    }\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/ClothLODDataPropertyData.cs",
    "content": "﻿using UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\n/// <summary>\r\n/// A structure for holding mesh-to-mesh triangle influences to skin one mesh to another (similar to a wrap deformer)\r\n/// </summary>\r\npublic class FMeshToMeshVertData\r\n{\r\n    /// <summary>\r\n    /// Barycentric coords and distance along normal for the position of the final vert\r\n    /// </summary>\r\n    public Vector4fPropertyData PositionBaryCoordsAndDist;\r\n\r\n    /// <summary>\r\n    /// Barycentric coords and distance along normal for the location of the unit normal endpoint.\r\n    /// Actual normal = ResolvedNormalPosition - ResolvedPosition\r\n    /// </summary>\r\n    public Vector4fPropertyData NormalBaryCoordsAndDist;\r\n\r\n    /// <summary>\r\n    /// Barycentric coords and distance along normal for the location of the unit Tangent endpoint.\r\n    /// Actual normal = ResolvedNormalPosition - ResolvedPosition\r\n    /// </summary>\r\n    public Vector4fPropertyData TangentBaryCoordsAndDist;\r\n\r\n    /// <summary>\r\n    /// Contains the 3 indices for verts in the source mesh forming a triangle, the last element\r\n    /// is a flag to decide how the skinning works, 0xffff uses no simulation, and just normal\r\n    /// skinning, anything else uses the source mesh and the above skin data to get the final position\r\n    /// </summary>\r\n    public ushort[] SourceMeshVertIndices;\r\n\r\n    /// <summary>\r\n    /// For weighted averaging of multiple triangle influences\r\n    /// </summary>\r\n    public float Weight = 0.0f;\r\n\r\n    /// <summary>\r\n    /// Dummy for alignment\r\n    /// </summary>\r\n    public uint Padding;\r\n\r\n    public void Read(AssetBinaryReader reader)\r\n    {\r\n        PositionBaryCoordsAndDist = new Vector4fPropertyData(FName.DefineDummy(reader.Asset, \"PositionBaryCoordsAndDist\"));\r\n        PositionBaryCoordsAndDist.Offset = reader.BaseStream.Position;\r\n        PositionBaryCoordsAndDist.Read(reader, false, 0);\r\n\r\n        NormalBaryCoordsAndDist = new Vector4fPropertyData(FName.DefineDummy(reader.Asset, \"NormalBaryCoordsAndDist\"));\r\n        NormalBaryCoordsAndDist.Offset = reader.BaseStream.Position;\r\n        NormalBaryCoordsAndDist.Read(reader, false, 0);\r\n\r\n        TangentBaryCoordsAndDist = new Vector4fPropertyData(FName.DefineDummy(reader.Asset, \"TangentBaryCoordsAndDist\"));\r\n        TangentBaryCoordsAndDist.Offset = reader.BaseStream.Position;\r\n        TangentBaryCoordsAndDist.Read(reader, false, 0);\r\n\r\n        SourceMeshVertIndices = new ushort[4];\r\n        for (int i = 0; i < 4; i++)\r\n        {\r\n            SourceMeshVertIndices[i] = reader.ReadUInt16();\r\n        }\r\n\r\n        Weight = reader.ReadSingle();\r\n\r\n        Padding = reader.ReadUInt32();\r\n    }\r\n\r\n    public int Write(AssetBinaryWriter writer)\r\n    {\r\n        int res = 0;\r\n        res += PositionBaryCoordsAndDist.Write(writer, false);\r\n        res += NormalBaryCoordsAndDist.Write(writer, false);\r\n        res += TangentBaryCoordsAndDist.Write(writer, false);\r\n\r\n        for (int i = 0; i < 4; i++)\r\n        {\r\n            writer.Write(SourceMeshVertIndices.Length > i ? SourceMeshVertIndices[i] : (ushort)0); res += sizeof(ushort);\r\n        }\r\n\r\n        writer.Write(Weight); res += sizeof(float);\r\n        writer.Write(Padding); res += sizeof(uint);\r\n\r\n        return res;\r\n    }\r\n\r\n    public FMeshToMeshVertData(AssetBinaryReader reader)\r\n    {\r\n        Read(reader);\r\n    }\r\n\r\n    public FMeshToMeshVertData(Vector4fPropertyData positionBaryCoordsAndDist, Vector4fPropertyData normalBaryCoordsAndDist, Vector4fPropertyData tangentBaryCoordsAndDist, ushort[] sourceMeshVertIndices, float weight, uint padding)\r\n    {\r\n        PositionBaryCoordsAndDist = positionBaryCoordsAndDist;\r\n        NormalBaryCoordsAndDist = normalBaryCoordsAndDist;\r\n        TangentBaryCoordsAndDist = tangentBaryCoordsAndDist;\r\n        SourceMeshVertIndices = sourceMeshVertIndices;\r\n        Weight = weight;\r\n        Padding = padding;\r\n    }\r\n\r\n    public FMeshToMeshVertData() { }\r\n}\r\n\r\n/// <summary>\r\n/// Common Cloth LOD representation for all clothing assets.\r\n/// </summary>\r\npublic class ClothLODDataPropertyData : StructPropertyData\r\n{\r\n    /// <summary>\r\n    /// Skinning data for transitioning from a higher detail LOD to this one\r\n    /// </summary>\r\n    public FMeshToMeshVertData[] TransitionUpSkinData;\r\n\r\n    /// <summary>\r\n    /// Skinning data for transitioning from a lower detail LOD to this one\r\n    /// </summary>\r\n    public FMeshToMeshVertData[] TransitionDownSkinData;\r\n\r\n    public ClothLODDataPropertyData(FName name, FName forcedType) : base(name, forcedType) { }\r\n    public ClothLODDataPropertyData(FName name) : base(name) { }\r\n    public ClothLODDataPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"ClothLODData\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        StructType = FName.DefineDummy(reader.Asset, PropertyType);\r\n        base.Read(reader, includeHeader, 1, leng2, PropertySerializationContext.StructFallback);\r\n\r\n        int sizeUpData = reader.ReadInt32();\r\n        TransitionUpSkinData = new FMeshToMeshVertData[sizeUpData];\r\n        for (int i = 0; i < sizeUpData; i++)\r\n        {\r\n            TransitionUpSkinData[i] = new FMeshToMeshVertData(reader);\r\n        }\r\n\r\n        int sizeDownData = reader.ReadInt32();\r\n        TransitionDownSkinData = new FMeshToMeshVertData[sizeDownData];\r\n        for (int i = 0; i < sizeDownData; i++)\r\n        {\r\n            TransitionDownSkinData[i] = new FMeshToMeshVertData(reader);\r\n        }\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        StructType = FName.DefineDummy(writer.Asset, PropertyType);\r\n        int res = base.Write(writer, includeHeader, PropertySerializationContext.StructFallback);\r\n\r\n        if (TransitionUpSkinData == null) TransitionUpSkinData = [];\r\n        writer.Write(TransitionUpSkinData.Length); res += sizeof(int);\r\n        for (int i = 0; i < TransitionUpSkinData.Length; i++)\r\n        {\r\n            res += TransitionUpSkinData[i].Write(writer);\r\n        }\r\n\r\n        if (TransitionDownSkinData == null) TransitionDownSkinData = [];\r\n        writer.Write(TransitionDownSkinData.Length); res += sizeof(int);\r\n        for (int i = 0; i < TransitionDownSkinData.Length; i++)\r\n        {\r\n            res += TransitionDownSkinData[i].Write(writer);\r\n        }\r\n\r\n        return res;\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return base.ToString();\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        base.FromString(d, asset);\r\n    }\r\n}\r\n\r\npublic class ClothLODDataCommonPropertyData : ClothLODDataPropertyData\r\n{\r\n    public ClothLODDataCommonPropertyData(FName name, FName forcedType) : base(name, forcedType) { }\r\n    public ClothLODDataCommonPropertyData(FName name) : base(name) { }\r\n    public ClothLODDataCommonPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"ClothLODDataCommon\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/ClothTetherDataPropertyData.cs",
    "content": "﻿using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\n/// <summary>\n/// Long range attachment tether pathfinding based on Dijkstra's algorithm.\n/// </summary>\npublic class ClothTetherDataPropertyData : StructPropertyData\n{\n    public (int, int, float)[][] Tethers;\n\n    public ClothTetherDataPropertyData(FName name, FName forcedType) : base(name, forcedType) { }\n    public ClothTetherDataPropertyData(FName name) : base(name) { }\n    public ClothTetherDataPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"ClothTetherData\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n    \n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        StructType = FName.DefineDummy(reader.Asset, CurrentPropertyType);\n        base.Read(reader, false, 1, 0, PropertySerializationContext.StructFallback);\n\n        int numElements = reader.ReadInt32();\n        Tethers = new (int, int, float)[numElements][];\n        for (int i = 0; i < numElements; i++)\n        {\n            int numInnerElements = reader.ReadInt32();\n            Tethers[i] = new (int, int, float)[numInnerElements];\n            for (int j = 0; j < numInnerElements; j++)\n            {\n                Tethers[i][j] = (reader.ReadInt32(), reader.ReadInt32(), reader.ReadSingle());\n            }\n        }\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        StructType = FName.DefineDummy(writer.Asset, CurrentPropertyType);\n        int totalSize = base.Write(writer, includeHeader, PropertySerializationContext.StructFallback);\n\n        if (Tethers == null) Tethers = [];\n        writer.Write(Tethers.Length);\n        totalSize += sizeof(int);\n        for (int i = 0; i < Tethers.Length; i++)\n        {\n            writer.Write(Tethers[i].Length);\n            totalSize += sizeof(int);\n            for (int j = 0; j < Tethers[i].Length; j++)\n            {\n                writer.Write(Tethers[i][j].Item1);\n                writer.Write(Tethers[i][j].Item2);\n                writer.Write(Tethers[i][j].Item3);\n                totalSize += sizeof(int) * 2 + sizeof(float);\n            }\n        }\n\n        return totalSize;\n    }\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Core/ColorPropertyData.cs",
    "content": "﻿using System.Drawing;\nusing UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\n/// <summary>\n/// Describes a color with 8 bits of precision per channel.\n/// </summary>\npublic class ColorPropertyData : PropertyData<Color> // R, G, B, A\n{\n    public ColorPropertyData(FName name) : base(name) { }\n\n    public ColorPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"Color\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        Value = Color.FromArgb(reader.ReadInt32());\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        writer.Write(Value.ToArgb());\n        return sizeof(int);\n    }\n\n    public override string ToString()\n    {\n        return Value.ToString();\n    }\n\n    public override void FromString(string[] d, UAsset asset)\n    {\n        if (!int.TryParse(d[0], out int colorR)) return;\n        if (!int.TryParse(d[1], out int colorG)) return;\n        if (!int.TryParse(d[2], out int colorB)) return;\n        if (!int.TryParse(d[3], out int colorA)) return;\n        Value = Color.FromArgb(colorA, colorR, colorG, colorB);\n    }\n\n    protected override void HandleCloned(PropertyData res)\n    {\n        ColorPropertyData cloningProperty = (ColorPropertyData)res;\n        cloningProperty.Value = Color.FromArgb(this.Value.ToArgb());\n    }\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Core/DateTimePropertyData.cs",
    "content": "﻿using System;\nusing UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\n/// <summary>\n/// Implements a date and time.\n///\n/// Values of this type represent dates and times between Midnight 00:00:00, January 1, 0001 and\n/// Midnight 23:59:59.9999999, December 31, 9999 in the Gregorian calendar. Internally, the time\n/// values are stored in ticks of 0.1 microseconds (= 100 nanoseconds) since January 1, 0001.\n///\n/// The companion class <see cref=\"TimespanPropertyData\"/> (<see cref=\"TimeSpan\"/>) is provided for\n/// enabling date and time based arithmetic, such as calculating the difference between two dates\n/// or adding a certain amount of time to a given date.\n/// </summary>\npublic class DateTimePropertyData : PropertyData<DateTime>\n{\n    public DateTimePropertyData(FName name) : base(name) { }\n\n    public DateTimePropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"DateTime\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        Value = new DateTime(reader.ReadInt64()); // number of ticks since January 1, 0001\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        writer.Write(Value.Ticks);\n        return sizeof(long);\n    }\n\n    public override void FromString(string[] d, UAsset asset)\n    {\n        Value = DateTime.Parse(d[0]);\n    }\n\n    public override string ToString()\n    {\n        return Value.ToString();\n    }\n\n    protected override void HandleCloned(PropertyData res)\n    {\n        DateTimePropertyData cloningProperty = (DateTimePropertyData)res;\n        cloningProperty.Value = new DateTime(this.Value.Ticks);\n    }\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Core/GuidPropertyData.cs",
    "content": "﻿using System;\nusing UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\n/// <summary>\n/// Describes a 128-bit <see cref=\"Guid\"/>.\n/// </summary>\npublic class GuidPropertyData : PropertyData<Guid>\n{\n    public GuidPropertyData(FName name) : base(name) { }\n\n    public GuidPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"Guid\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        Value = new Guid(reader.ReadBytes(16));\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        writer.Write(Value.ToByteArray());\n        return 16;\n    }\n\n    public override string ToString()\n    {\n        return Value.ConvertToString();\n    }\n\n    public override void FromString(string[] d, UAsset asset)\n    {\n        Value = d[0].ConvertToGUID();\n    }\n\n    protected override void HandleCloned(PropertyData res)\n    {\n        GuidPropertyData cloningProperty = (GuidPropertyData)res;\n\n        cloningProperty.Value = new Guid(Value.ToByteArray());\n    }\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Core/TimespanPropertyData.cs",
    "content": "﻿using System;\nusing UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\n/// <summary>\n/// Implements a time span.\n/// A time span is the difference between two dates and times. For example, the time span between\n/// 12:00:00 January 1, 2000 and 18:00:00 January 2, 2000 is 30.0 hours. Time spans are measured in\n/// positive or negative ticks depending on whether the difference is measured forward or backward.\n/// Each tick has a resolution of 0.1 microseconds (= 100 nanoseconds).\n/// \n/// In conjunction with the companion class <see cref=\"DateTimePropertyData\"/> (<see cref=\"DateTime\"/>),\n/// time spans can be used to perform date and time based arithmetic, such as calculating the\n/// difference between two dates or adding a certain amount of time to a given date.\n/// </summary>\npublic class TimespanPropertyData : PropertyData<TimeSpan>\n{\n    public TimespanPropertyData(FName name) : base(name) { }\n\n    public TimespanPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"Timespan\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        Value = new TimeSpan(reader.ReadInt64()); // number of ticks\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        writer.Write(Value.Ticks);\n        return sizeof(long);\n    }\n\n    public override void FromString(string[] d, UAsset asset)\n    {\n        Value = TimeSpan.Parse(d[0]);\n    }\n\n    public override string ToString()\n    {\n        return Value.ToString();\n    }\n\n    protected override void HandleCloned(PropertyData res)\n    {\n        TimespanPropertyData cloningProperty = (TimespanPropertyData)res;\n        cloningProperty.Value = new TimeSpan(this.Value.Ticks);\n    }\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Engine/FontCharacterPropertyData.cs",
    "content": "﻿using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic class FontCharacterPropertyData : PropertyData<FFontCharacter>\n{\n    public FontCharacterPropertyData(FName name) : base(name) { }\n\n    public FontCharacterPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"FontCharacter\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        Value = new FFontCharacter(reader);\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader) {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        return Value.Write(writer);\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Engine/KeyHandleMapPropertyData.cs",
    "content": "﻿using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic class KeyHandleMapPropertyData : PropertyData\n{\n    public KeyHandleMapPropertyData(FName name) : base(name) { }\n\n    public KeyHandleMapPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"KeyHandleMap\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        // map is only saved to the transaction buffer, otherwise completely empty\n        return;\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader && !writer.Asset.HasUnversionedProperties)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        // map is only saved to the transaction buffer, otherwise completely empty\n        return 0;\n    }\n\n    public override void FromString(string[] d, UAsset asset)\n    {\n\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Engine/MaterialInputProperties.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\nusing UAssetAPI.CustomVersions;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic abstract class MaterialInputPropertyData<T> : PropertyData<T>\n{\n    public FPackageIndex Expression;\n    public int OutputIndex;\n    public FName InputName;\n    public FString InputNameOld;\n    public int Mask;\n    public int MaskR;\n    public int MaskG;\n    public int MaskB;\n    public int MaskA;\n    public FName ExpressionName;\n\n    public MaterialInputPropertyData() { }\n\n    public MaterialInputPropertyData(FName name) : base(name) { }\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        //if (reader.Asset.GetCustomVersion<FCoreObjectVersion>() < FCoreObjectVersion.MaterialInputNativeSerialize)\n        //{\n        //    StructType = FName.DefineDummy(reader.Asset, PropertyType);\n        //    base.Read(reader, false, 1, 0, PropertySerializationContext.StructFallback);\n        //    return;\n        //}\n\n        if ((reader.Asset.GetEngineVersion() <= EngineVersion.VER_UE5_1 && !reader.Asset.IsFilterEditorOnly) || reader.Asset.GetEngineVersion() >= EngineVersion.VER_UE5_1)\n            Expression = reader.XFERPTR();\n        OutputIndex = reader.ReadInt32();\n        InputName = reader.Asset.GetCustomVersion<FFrameworkObjectVersion>() >= FFrameworkObjectVersion.PinsStoreFName ? reader.ReadFName() : null;\n        InputNameOld = reader.Asset.GetCustomVersion<FFrameworkObjectVersion>() >= FFrameworkObjectVersion.PinsStoreFName ? null : reader.ReadFString();\n        Mask = reader.ReadInt32();\n        MaskR = reader.ReadInt32();\n        MaskG = reader.ReadInt32();\n        MaskB = reader.ReadInt32();\n        MaskA = reader.ReadInt32();\n        ExpressionName = reader.Asset.GetEngineVersion() <= EngineVersion.VER_UE5_1 && reader.Asset.IsFilterEditorOnly ? reader.ReadFName() : null;\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        return WriteExpressionInput(writer, false);\n    }\n\n    protected int WriteExpressionInput(AssetBinaryWriter writer, bool includeHeader)\n    {\n        int totalSize = 0;\n        if (writer.Asset.GetCustomVersion<FCoreObjectVersion>() >= FCoreObjectVersion.MaterialInputNativeSerialize)\n        {\n            if ((writer.Asset.GetEngineVersion() <= EngineVersion.VER_UE5_1 && !writer.Asset.IsFilterEditorOnly) || writer.Asset.GetEngineVersion() >= EngineVersion.VER_UE5_1)\n            {\n                writer.XFERPTR(Expression);\n                totalSize += sizeof(int);\n            }\n\n            writer.Write(OutputIndex); totalSize += sizeof(int);\n            if (writer.Asset.GetCustomVersion<FFrameworkObjectVersion>() >= FFrameworkObjectVersion.PinsStoreFName)\n            {\n                writer.Write(InputName); totalSize += sizeof(int) * 2;\n            }\n            else\n            {\n                totalSize += writer.Write(InputNameOld);\n            }\n            writer.Write(Mask);\n            writer.Write(MaskR);\n            writer.Write(MaskG);\n            writer.Write(MaskB);\n            writer.Write(MaskA);\n            totalSize += sizeof(int) * 5;\n            if (writer.Asset.GetEngineVersion() <= EngineVersion.VER_UE5_1 && writer.Asset.IsFilterEditorOnly)\n            {\n                writer.Write(ExpressionName);\n                totalSize += sizeof(int) * 2;\n            }\n            \n        }\n        return totalSize;\n    }\n\n    protected override void HandleCloned(PropertyData res)\n    {\n        MaterialInputPropertyData<T> cloningProperty = (MaterialInputPropertyData<T>)res;\n        cloningProperty.InputName = (FName)this.InputName?.Clone();\n        cloningProperty.InputNameOld = (FString)this.InputNameOld?.Clone();\n        cloningProperty.ExpressionName = (FName)this.ExpressionName?.Clone();\n    }\n}\n\npublic class ExpressionInputPropertyData : MaterialInputPropertyData<int>\n{\n    public ExpressionInputPropertyData(FName name) : base(name) { }\n\n    public ExpressionInputPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"ExpressionInput\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n}\n\npublic class MaterialAttributesInputPropertyData : MaterialInputPropertyData<int>\n{\n    public MaterialAttributesInputPropertyData(FName name) : base(name) { }\n\n    public MaterialAttributesInputPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"MaterialAttributesInput\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n}\n\npublic class ColorMaterialInputPropertyData : MaterialInputPropertyData<ColorPropertyData>\n{\n    public ColorMaterialInputPropertyData(FName name) : base(name) { }\n\n    public ColorMaterialInputPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"ColorMaterialInput\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        base.Read(reader, includeHeader, leng1, leng2, serializationContext);\n\n        reader.ReadInt32(); // bUseConstantValue; always false\n        Value = new ColorPropertyData(Name);\n        Value.Ancestry.Initialize(Ancestry, Name);\n        Value.Read(reader, false, 0);\n    }\n\n    public override void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\n    {\n        var ancestryNew = (AncestryInfo)ancestrySoFar.Clone();\n        ancestryNew.SetAsParent(Name);\n\n        Value.ResolveAncestries(asset, ancestryNew);\n        base.ResolveAncestries(asset, ancestrySoFar);\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        int expLength = base.Write(writer, includeHeader, serializationContext);\n        writer.Write(0);\n        return expLength + Value.Write(writer, false) + sizeof(int);\n    }\n}\n\npublic class ScalarMaterialInputPropertyData : MaterialInputPropertyData<float>\n{\n    public ScalarMaterialInputPropertyData(FName name) : base(name) { }\n\n    public ScalarMaterialInputPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"ScalarMaterialInput\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        base.Read(reader, includeHeader, leng1, leng2, serializationContext);\n\n        reader.ReadInt32(); // bUseConstantValue; always false\n        Value = reader.ReadSingle();\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        int expLength = WriteExpressionInput(writer, false);\n        writer.Write(0);\n        writer.Write(Value);\n        return expLength + sizeof(float) + sizeof(int);\n    }\n}\n\npublic class VectorMaterialInputPropertyData : MaterialInputPropertyData<VectorPropertyData>\n{\n    public VectorMaterialInputPropertyData(FName name) : base(name) { }\n\n    public VectorMaterialInputPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"VectorMaterialInput\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        base.Read(reader, includeHeader, leng1, leng2, serializationContext);\n\n        reader.ReadInt32(); // bUseConstantValue; always false\n        Value = new VectorPropertyData(Name);\n        Value.Ancestry.Initialize(Ancestry, Name);\n        Value.Read(reader, false, 0);\n    }\n\n    public override void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\n    {\n        var ancestryNew = (AncestryInfo)ancestrySoFar.Clone();\n        ancestryNew.SetAsParent(Name);\n\n        Value.ResolveAncestries(asset, ancestryNew);\n        base.ResolveAncestries(asset, ancestrySoFar);\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        int expLength = WriteExpressionInput(writer, false);\n        writer.Write(0);\n        return expLength + Value.Write(writer, false) + sizeof(int);\n    }\n}\n\npublic class Vector2MaterialInputPropertyData : MaterialInputPropertyData<Vector2DPropertyData>\n{\n    public Vector2MaterialInputPropertyData(FName name) : base(name) { }\n\n    public Vector2MaterialInputPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"Vector2MaterialInput\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        base.Read(reader, includeHeader, leng1, leng2, serializationContext);\n\n        reader.ReadInt32(); // bUseConstantValue; always false\n        Value = new Vector2DPropertyData(Name);\n        Value.Ancestry.Initialize(Ancestry, Name);\n        Value.Read(reader, false, 0);\n    }\n\n    public override void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\n    {\n        var ancestryNew = (AncestryInfo)ancestrySoFar.Clone();\n        ancestryNew.SetAsParent(Name);\n\n        Value.ResolveAncestries(asset, ancestryNew);\n        base.ResolveAncestries(asset, ancestrySoFar);\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        int expLength = WriteExpressionInput(writer, false);\n        writer.Write(0);\n        return expLength + Value.Write(writer, false) + sizeof(int);\n    }\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Engine/MaterialOverrideNanitePropertyData.cs",
    "content": "using UAssetAPI.CustomVersions;\nusing UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic class MaterialOverrideNanitePropertyData : StructPropertyData\n{\n    public FSoftObjectPath OverrideMaterialRef;\n    public bool bEnableOverride;\n    public FPackageIndex OverrideMaterial;\n    public bool bSerializeAsCookedData;\n\n    public MaterialOverrideNanitePropertyData(FName name, FName forcedType) : base(name, forcedType) { }\n    public MaterialOverrideNanitePropertyData(FName name) : base(name) { }\n    public MaterialOverrideNanitePropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"MaterialOverrideNanite\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        if (reader.Asset.GetCustomVersion<FFortniteReleaseBranchCustomObjectVersion>() < FFortniteReleaseBranchCustomObjectVersion.NaniteMaterialOverrideUsesEditorOnly)\n        {\n            OverrideMaterialRef = new FSoftObjectPath(reader);\n            bEnableOverride = reader.ReadBooleanInt();\n            OverrideMaterial = FPackageIndex.FromRawIndex(reader.ReadInt32());\n            return;\n        }\n\n        bSerializeAsCookedData = reader.ReadBooleanInt();\n        if (bSerializeAsCookedData) OverrideMaterial = FPackageIndex.FromRawIndex(reader.ReadInt32());\n\n        StructType = FName.DefineDummy(reader.Asset, CurrentPropertyType);\n        base.Read(reader, includeHeader, 1, 0, PropertySerializationContext.StructFallback);\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader && !writer.Asset.HasUnversionedProperties)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        int here = (int)writer.BaseStream.Position;\n\n        if (writer.Asset.GetCustomVersion<FFortniteReleaseBranchCustomObjectVersion>() < FFortniteReleaseBranchCustomObjectVersion.NaniteMaterialOverrideUsesEditorOnly)\n        {\n            OverrideMaterialRef.Write(writer);\n            writer.Write(bEnableOverride ? 1 : 0);\n            writer.Write(OverrideMaterial?.Index ?? 0);\n        }\n\n        writer.Write(bSerializeAsCookedData ? 1 : 0);\n        if (bSerializeAsCookedData) writer.Write(OverrideMaterial?.Index ?? 0);\n\n        StructType = FName.DefineDummy(writer.Asset, CurrentPropertyType);\n        base.Write(writer, includeHeader, PropertySerializationContext.StructFallback);\n\n        return (int)writer.BaseStream.Position - here;\n    }\n\n    public override void FromString(string[] d, UAsset asset)\n    {\n\n    }\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Engine/NavAgentSelectorPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic struct FNavAgentSelector : IStruct<FNavAgentSelector>\n{\n    public uint PackedBits;\n\n    public FNavAgentSelector(uint packedBits)\n    {\n        PackedBits = packedBits;\n    }\n\n    public FNavAgentSelector(AssetBinaryReader reader)\n    {\n        PackedBits = reader.ReadUInt32();\n    }\n\n    public static FNavAgentSelector Read(AssetBinaryReader reader) => new FNavAgentSelector(reader);\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        writer.Write(PackedBits);\n        return sizeof(uint);\n    }\n\n    public override string ToString()\n    {\n        return PackedBits.ToString();\n    }\n\n    public static FNavAgentSelector FromString(string[] d, UAsset asset)\n    {\n        uint.TryParse(d[0], out uint res);\n        return new FNavAgentSelector(res);\n    }\n}\n\npublic class NavAgentSelectorPropertyData : BasePropertyData<FNavAgentSelector>\n{\n    public NavAgentSelectorPropertyData(FName name) : base(name) { }\n\n    public NavAgentSelectorPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"NavAgentSelector\");\n    public override FString PropertyType => CurrentPropertyType;\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Engine/PerPlatformProperties.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic abstract class TPerPlatformPropertyData<T> : PropertyData<T[]>\n{\n    public TPerPlatformPropertyData(FName name) : base(name)\n    {\n        Value = [];\n    }\n\n    public TPerPlatformPropertyData()\n    {\n        Value = [];\n    }\n}\n\n/// <summary>\n/// <see cref=\"BoolPropertyData\"/> (<see cref=\"bool\"/>) property with per-platform overrides.\n/// </summary>\npublic class PerPlatformBoolPropertyData : TPerPlatformPropertyData<bool>\n{\n    public PerPlatformBoolPropertyData(FName name) : base(name) { }\n\n    public PerPlatformBoolPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"PerPlatformBool\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        int numEntries = reader.ReadInt32();\n        Value = new bool[numEntries];\n        for (int i = 0; i < numEntries; i++)\n        {\n            Value[i] = reader.ReadInt32() == 1;\n        }\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        writer.Write(Value.Length);\n        for (int i = 0; i < Value.Length; i++)\n        {\n            writer.Write(Value[i] ? 1 : 0);\n        }\n        return sizeof(int) + sizeof(int) * Value.Length;\n    }\n\n    public override void FromString(string[] d, UAsset asset)\n    {\n        var valueList = new List<bool>();\n        if (bool.TryParse(d[0], out bool res1)) valueList.Add(res1);\n        if (bool.TryParse(d[1], out bool res2)) valueList.Add(res2);\n        if (bool.TryParse(d[2], out bool res3)) valueList.Add(res3);\n        if (bool.TryParse(d[3], out bool res4)) valueList.Add(res4);\n        Value = valueList.ToArray();\n    }\n\n    public override string ToString()\n    {\n        string oup = \"(\";\n        for (int i = 0; i < Value.Length; i++)\n        {\n            oup += Convert.ToString(Value[i]) + \", \";\n        }\n        return oup.Remove(oup.Length - 2) + \")\";\n    }\n}\n\n/// <summary>\n/// <see cref=\"FloatPropertyData\"/> (<see cref=\"float\"/>) property with per-platform overrides.\n/// </summary>\npublic class PerPlatformFloatPropertyData : TPerPlatformPropertyData<float>\n{\n    public PerPlatformFloatPropertyData(FName name) : base(name) { }\n\n    public PerPlatformFloatPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"PerPlatformFloat\");\n    public override bool HasCustomStructSerialization { get { return true; } }\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        int numEntries = reader.ReadInt32();\n        Value = new float[numEntries];\n        for (int i = 0; i < numEntries; i++)\n        {\n            Value[i] = reader.ReadSingle();\n        }\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        writer.Write(Value.Length);\n        for (int i = 0; i < Value.Length; i++)\n        {\n            writer.Write(Value[i]);\n        }\n        return sizeof(int) + sizeof(float) * Value.Length;\n    }\n\n    public override void FromString(string[] d, UAsset asset)\n    {\n        var valueList = new List<float>();\n        if (float.TryParse(d[0], out float res1)) valueList.Add(res1);\n        if (float.TryParse(d[1], out float res2)) valueList.Add(res2);\n        if (float.TryParse(d[2], out float res3)) valueList.Add(res3);\n        if (float.TryParse(d[3], out float res4)) valueList.Add(res4);\n        Value = valueList.ToArray();\n    }\n\n    public override string ToString()\n    {\n        string oup = \"(\";\n        for (int i = 0; i < Value.Length; i++)\n        {\n            oup += Convert.ToString(Value[i]) + \", \";\n        }\n        return oup.Remove(oup.Length - 2) + \")\";\n    }\n}\n\n/// <summary>\n/// <see cref=\"IntPropertyData\"/> (<see cref=\"int\"/>) property with per-platform overrides.\n/// </summary>\npublic class PerPlatformIntPropertyData : TPerPlatformPropertyData<int>\n{\n    public PerPlatformIntPropertyData(FName name) : base(name) { }\n\n    public PerPlatformIntPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"PerPlatformInt\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        int numEntries = reader.ReadInt32();\n        Value = new int[numEntries];\n        for (int i = 0; i < numEntries; i++)\n        {\n            Value[i] = reader.ReadInt32();\n        }\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        writer.Write(Value.Length);\n        for (int i = 0; i < Value.Length; i++)\n        {\n            writer.Write(Value[i]);\n        }\n        return sizeof(int) + sizeof(int) * Value.Length;\n    }\n\n    public override void FromString(string[] d, UAsset asset)\n    {\n        var valueList = new List<int>();\n        if (int.TryParse(d[0], out int res1)) valueList.Add(res1);\n        if (int.TryParse(d[1], out int res2)) valueList.Add(res2);\n        if (int.TryParse(d[2], out int res3)) valueList.Add(res3);\n        if (int.TryParse(d[3], out int res4)) valueList.Add(res4);\n        Value = valueList.ToArray();\n    }\n\n    public override string ToString()\n    {\n        string oup = \"(\";\n        for (int i = 0; i < Value.Length; i++)\n        {\n            oup += Convert.ToString(Value[i]) + \", \";\n        }\n        return oup.Remove(oup.Length - 2) + \")\";\n    }\n}\n\n/// <summary>\n/// <see cref=\"PerPlatformFrameRatePropertyData\"/> (<see cref=\"FFrameRate\"/>) property with per-platform overrides.\n/// </summary>\npublic class PerPlatformFrameRatePropertyData : TPerPlatformPropertyData<FFrameRate>\n{\n    public PerPlatformFrameRatePropertyData(FName name) : base(name) { }\n\n    public PerPlatformFrameRatePropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"PerPlatformFrameRate\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        int numEntries = reader.ReadInt32();\n        Value = new FFrameRate[numEntries];\n        for (int i = 0; i < numEntries; i++)\n        {\n            Value[i] = new FFrameRate(reader.ReadInt32(), reader.ReadInt32());\n        }\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        writer.Write(Value.Length);\n        for (int i = 0; i < Value.Length; i++)\n        {\n            writer.Write(Value[i].Numerator);\n            writer.Write(Value[i].Denominator);\n        }\n        return sizeof(int) + sizeof(int) * 2 * Value.Length;\n    }\n\n    public override void FromString(string[] d, UAsset asset)\n    {\n        var valueList = new List<FFrameRate>();\n        if (FFrameRate.TryParse(d[0], out FFrameRate res1)) valueList.Add(res1);\n        if (FFrameRate.TryParse(d[1], out FFrameRate res2)) valueList.Add(res2);\n        if (FFrameRate.TryParse(d[2], out FFrameRate res3)) valueList.Add(res3);\n        if (FFrameRate.TryParse(d[3], out FFrameRate res4)) valueList.Add(res4);\n        Value = valueList.ToArray();\n    }\n\n    public override string ToString()\n    {\n        string oup = \"(\";\n        for (int i = 0; i < Value.Length; i++)\n        {\n            oup += Convert.ToString(Value[i]) + \", \";\n        }\n        return oup.Remove(oup.Length - 2) + \")\";\n    }\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Engine/PerQualityProperties.cs",
    "content": "﻿using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic abstract class TPerQualityLevelPropertyData<T> : PropertyData<TPerQualityLevel<T>>\n{\n    public TPerQualityLevelPropertyData(FName name) : base(name) { }\n\n    public TPerQualityLevelPropertyData() { }\n}\n\npublic class PerQualityLevelFloatPropertyData : TPerQualityLevelPropertyData<float>\n{\n    public PerQualityLevelFloatPropertyData(FName name) : base(name) { }\n\n    public PerQualityLevelFloatPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"PerQualityLevelFloat\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        Value = new(reader, reader.ReadSingle);\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        return Value.Write(writer, writer.Write);\n    }\n}\n\npublic class PerQualityLevelIntPropertyData : TPerQualityLevelPropertyData<int>\n{\n    public PerQualityLevelIntPropertyData(FName name) : base(name) { }\n\n    public PerQualityLevelIntPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"PerQualityLevelInt\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        Value = new(reader, reader.ReadInt32);\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        return Value.Write(writer, writer.Write);\n    }\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Engine/RichCurveKeyPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic class RichCurveKeyPropertyData : BasePropertyData<FRichCurveKey>\n{\n    public RichCurveKeyPropertyData(FName name) : base(name) { }\n\n    public RichCurveKeyPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"RichCurveKey\");\n    public override FString PropertyType => CurrentPropertyType;\n}\n"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Engine/SkeletalMeshSamplingLODBuiltDataPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\npublic class SkeletalMeshSamplingLODBuiltDataPropertyData : PropertyData<SkeletalMeshAreaWeightedTriangleSamplerPropertyData>\r\n{\r\n    public SkeletalMeshSamplingLODBuiltDataPropertyData(FName name) : base(name) { }\r\n\r\n    public SkeletalMeshSamplingLODBuiltDataPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"SkeletalMeshSamplingLODBuiltData\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = new SkeletalMeshAreaWeightedTriangleSamplerPropertyData(FName.DefineDummy(reader.Asset, \"AreaWeightedTriangleSampler\"));\r\n        Value.Ancestry.Initialize(Ancestry, Name);\r\n        Value.Read(reader, false, 0);\r\n    }\r\n\r\n    public override void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n    {\r\n        var ancestryNew = (AncestryInfo)ancestrySoFar.Clone();\r\n        ancestryNew.SetAsParent(Name);\r\n\r\n        if (Value == null) Value = new SkeletalMeshAreaWeightedTriangleSamplerPropertyData();\r\n        Value.ResolveAncestries(asset, ancestryNew);\r\n        base.ResolveAncestries(asset, ancestrySoFar);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        if (Value == null) Value = new SkeletalMeshAreaWeightedTriangleSamplerPropertyData();\r\n        return Value.Write(writer, false);\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return Value.ToString();\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Engine/SkeletalMeshSamplingRegionBuiltDataPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.StructTypes;\n\npublic class SkeletalMeshSamplingRegionBuiltDataPropertyData : BasePropertyData<FSkeletalMeshSamplingRegionBuiltData>\n{\n    public SkeletalMeshSamplingRegionBuiltDataPropertyData(FName name) : base(name) { }\n\n    public SkeletalMeshSamplingRegionBuiltDataPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"SkeletalMeshSamplingRegionBuiltData\");\n    public override FString PropertyType => CurrentPropertyType;\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Engine/SmartNamePropertyData.cs",
    "content": "﻿using System;\nusing UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\nusing UAssetAPI.CustomVersions;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\n/// <summary>\n/// Special FName struct used within animations.\n/// </summary>\npublic class SmartNamePropertyData : PropertyData\n{\n    /// <summary>\n    /// The display name of this FSmartName.\n    /// </summary>\n    public FName DisplayName;\n\n    /// <summary>\n    /// SmartName::UID_Type - for faster access\n    /// </summary>\n    public ushort SmartNameID;\n\n    /// <summary>\n    /// Uncertain\n    /// </summary>\n    public Guid TempGUID;\n\n    public SmartNamePropertyData(FName name) : base(name) { }\n\n    public SmartNamePropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"SmartName\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        DisplayName = reader.ReadFName();\n        if (reader.Asset.GetCustomVersion<FAnimPhysObjectVersion>() < FAnimPhysObjectVersion.RemoveUIDFromSmartNameSerialize)\n        {\n            SmartNameID = reader.ReadUInt16();\n        }\n        if (reader.Asset.GetCustomVersion<FAnimPhysObjectVersion>() < FAnimPhysObjectVersion.SmartNameRefactorForDeterministicCooking && !reader.Asset.IsFilterEditorOnly)\n        {\n            TempGUID = new Guid(reader.ReadBytes(16));\n        }\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        long here = writer.BaseStream.Position;\n\n        writer.Write(DisplayName);\n        if (writer.Asset.GetCustomVersion<FAnimPhysObjectVersion>() < FAnimPhysObjectVersion.RemoveUIDFromSmartNameSerialize)\n        {\n            writer.Write(SmartNameID);\n        }\n        if (writer.Asset.GetCustomVersion<FAnimPhysObjectVersion>() < FAnimPhysObjectVersion.SmartNameRefactorForDeterministicCooking && !writer.Asset.IsFilterEditorOnly)\n        {\n            writer.Write(TempGUID.ToByteArray());\n        }\n\n        return (int)(writer.BaseStream.Position - here);\n    }\n\n    public override void FromString(string[] d, UAsset asset)\n    {\n        DisplayName = FName.FromString(asset, d[0]);\n        if (ushort.TryParse(d[1], out ushort rawSmartNameID)) SmartNameID = rawSmartNameID;\n        TempGUID = d[2].ConvertToGUID();\n    }\n\n    public override string ToString()\n    {\n        return \"(\" + \")\";\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Engine/StringCurveKeyPropertyData.cs",
    "content": "﻿using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic struct FStringCurveKey : IStruct<FStringCurveKey>\n{\n    public float Time;\n    public FString Value;\n\n    public FStringCurveKey(float time, FString value)\n    {\n        Time = time;\n        Value = value;\n    }\n\n    public FStringCurveKey(AssetBinaryReader reader)\n    {\n        Time = reader.ReadSingle();\n        Value = reader.ReadFString();\n    }\n\n    public static FStringCurveKey Read(AssetBinaryReader reader) => new FStringCurveKey(reader);\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        var offset = writer.BaseStream.Position;\n\n        writer.Write(Time);\n        writer.Write(Value);\n\n        return (int)(writer.BaseStream.Position - offset);\n    }\n\n    public override string ToString() => $\"({Time}, {Value})\";\n\n    public static FStringCurveKey FromString(string[] d, UAsset asset)\n    {\n        float.TryParse(d[0], out float Time);\n        FString Value = FString.FromString(d[1]);\n        return new FStringCurveKey(Time, Value);\n    }\n}\n\npublic class StringCurveKeyPropertyData : BasePropertyData<FStringCurveKey>\n{\n    public StringCurveKeyPropertyData(FName name) : base(name) { }\n    public StringCurveKeyPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"StringCurveKey\");\n    public override FString PropertyType => CurrentPropertyType;\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Engine/ViewTargetBlendParamsPropertyData.cs",
    "content": "﻿using Newtonsoft.Json;\nusing Newtonsoft.Json.Converters;\nusing System;\nusing UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\n/// <summary>\n/// Options that define how to blend when changing view targets in <see cref=\"ViewTargetBlendParamsPropertyData\"/>.\n/// </summary>\npublic enum ViewTargetBlendFunction\n{\n    /** Camera does a simple linear interpolation. */\n    VTBlend_Linear,\n    /** Camera has a slight ease in and ease out, but amount of ease cannot be tweaked. */\n    VTBlend_Cubic,\n    /** Camera immediately accelerates, but smoothly decelerates into the target.  Ease amount controlled by BlendExp. */\n    VTBlend_EaseIn,\n    /** Camera smoothly accelerates, but does not decelerate into the target.  Ease amount controlled by BlendExp. */\n    VTBlend_EaseOut,\n    /** Camera smoothly accelerates and decelerates.  Ease amount controlled by BlendExp. */\n    VTBlend_EaseInOut,\n    VTBlend_MAX,\n}\n\n/// <summary>\n/// A set of parameters to describe how to transition between view targets.\n/// Referred to as FViewTargetTransitionParams in the Unreal Engine.\n/// </summary>\npublic class ViewTargetBlendParamsPropertyData : PropertyData\n{\n    [JsonProperty]\n    public float BlendTime;\n    [JsonProperty]\n    [JsonConverter(typeof(StringEnumConverter))]\n    public ViewTargetBlendFunction BlendFunction;\n    [JsonProperty]\n    public float BlendExp;\n    [JsonProperty]\n    public bool bLockOutgoing;\n\n    public ViewTargetBlendParamsPropertyData(FName name) : base(name) { }\n\n    public ViewTargetBlendParamsPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"ViewTargetBlendParams\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        BlendTime = reader.ReadSingle();\n        BlendFunction = (ViewTargetBlendFunction)reader.ReadByte();\n        BlendExp = reader.ReadSingle();\n        bLockOutgoing = reader.ReadInt32() != 0;\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        writer.Write(BlendTime);\n        writer.Write((byte)BlendFunction);\n        writer.Write(BlendExp);\n        writer.Write(bLockOutgoing ? 1 : 0);\n        return sizeof(float) * 2 + sizeof(byte) + sizeof(int);\n    }\n\n    public override void FromString(string[] d, UAsset asset)\n    {\n        if (float.TryParse(d[0], out float res1)) BlendTime = res1;\n        if (Enum.TryParse(d[1], out ViewTargetBlendFunction res2)) BlendFunction = res2;\n        if (float.TryParse(d[2], out float res3)) BlendExp = res3;\n        if (bool.TryParse(d[3], out bool res4)) bLockOutgoing = res4;\n    }\n\n    public override string ToString()\n    {\n        string oup = \"(\";\n        oup += BlendTime + \", \";\n        oup += BlendFunction + \", \";\n        oup += BlendExp + \", \";\n        oup += bLockOutgoing + \", \";\n        return oup.Remove(oup.Length - 2) + \")\";\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Engine/WeightedRandomSamplerPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic class WeightedRandomSamplerPropertyData : BasePropertyData<FWeightedRandomSampler>\n{\n    public WeightedRandomSamplerPropertyData(FName name) : base(name) { }\n\n    public WeightedRandomSamplerPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"WeightedRandomSampler\");\n    public override FString PropertyType => CurrentPropertyType;\n}\n\npublic class SkeletalMeshAreaWeightedTriangleSamplerPropertyData : WeightedRandomSamplerPropertyData\n{\n    public SkeletalMeshAreaWeightedTriangleSamplerPropertyData(FName name) : base(name) { }\n\n    public SkeletalMeshAreaWeightedTriangleSamplerPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"SkeletalMeshAreaWeightedTriangleSampler\");\n    public override FString PropertyType => CurrentPropertyType;\n}\n"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/GameplayTagContainerPropertyData.cs",
    "content": "﻿using System;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\npublic class GameplayTagContainerPropertyData : PropertyData<FName[]>\r\n{\r\n    public GameplayTagContainerPropertyData(FName name) : base(name)\r\n    {\r\n        Value = [];\r\n    }\r\n\r\n    public GameplayTagContainerPropertyData()\r\n    {\r\n        Value = [];\r\n    }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"GameplayTagContainer\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        int numEntries = reader.ReadInt32();\r\n        Value = new FName[numEntries];\r\n        for (int i = 0; i < numEntries; i++)\r\n        {\r\n            Value[i] = reader.ReadFName();\r\n        }\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        if (Value == null) Value = [];\r\n        writer.Write(Value.Length);\r\n        int totalSize = sizeof(int);\r\n        for (int i = 0; i < Value.Length; i++)\r\n        {\r\n            writer.Write(Value[i]);\r\n            totalSize += sizeof(int) * 2;\r\n        }\r\n        return totalSize;\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        string oup = \"(\";\r\n        for (int i = 0; i < Value.Length; i++)\r\n        {\r\n            oup += Convert.ToString(Value[i]) + \", \";\r\n        }\r\n        return oup.Remove(oup.Length - 2) + \")\";\r\n    }\r\n\r\n    protected override void HandleCloned(PropertyData res)\r\n    {\r\n        GameplayTagContainerPropertyData cloningProperty = (GameplayTagContainerPropertyData)res;\r\n\r\n        if (this.Value != null)\r\n        {\r\n            FName[] newData = new FName[this.Value.Length];\r\n            for (int i = 0; i < this.Value.Length; i++)\r\n            {\r\n                newData[i] = (FName)this.Value[i].Clone();\r\n            }\r\n            cloningProperty.Value = newData;\r\n        }\r\n        else\r\n        {\r\n            cloningProperty.Value = null;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/LevelSequenceObjectReferenceMapPropertyData.cs",
    "content": "﻿using System;\nusing UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic class FLevelSequenceLegacyObjectReference\n{\n    public Guid ObjectId;\n    public FString ObjectPath;\n\n    public FLevelSequenceLegacyObjectReference(Guid objectId, FString objectPath)\n    {\n        ObjectId = objectId;\n        ObjectPath = objectPath;\n    }\n    \n    public FLevelSequenceLegacyObjectReference(AssetBinaryReader reader)\n    {\n        ObjectId = new Guid(reader.ReadBytes(16));\n        ObjectPath = reader.ReadFString();\n    }\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        writer.Write(ObjectId.ToByteArray());\n        var size = 16;\n        size += writer.Write(ObjectPath);\n        return size;\n    }\n}\n\npublic class LevelSequenceObjectReferenceMapPropertyData : PropertyData<TMap<Guid, FLevelSequenceLegacyObjectReference>>\n{\n    public LevelSequenceObjectReferenceMapPropertyData(FName name) : base(name) { }\n\n    public LevelSequenceObjectReferenceMapPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"LevelSequenceObjectReferenceMap\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n    \n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        var num = reader.ReadInt32();\n        Value = new TMap<Guid, FLevelSequenceLegacyObjectReference>();\n        for (int i = 0; i < num; i++)\n        {\n            Value[new Guid(reader.ReadBytes(16))] = new FLevelSequenceLegacyObjectReference(reader);\n        }\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        var offset = writer.BaseStream.Position;\n\n        if (Value == null) Value = [];\n        writer.Write(Value.Count);\n\n        foreach (var pair in Value)\n        {\n            writer.Write(pair.Key.ToByteArray());\n            pair.Value.Write(writer);\n        }\n\n        return (int)(writer.BaseStream.Position - offset);\n    }\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Math/BoxPropertyData.cs",
    "content": "﻿using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic abstract class TBoxPropertyData<T> : PropertyData<TBox<T>>\n{\n    public TBoxPropertyData(FName name) : base(name) { }\n\n    public TBoxPropertyData() { }\n}\n\npublic class BoxPropertyData : TBoxPropertyData<FVector>\n{\n    public BoxPropertyData(FName name) : base(name) { }\n\n    public BoxPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"Box\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        Value = new(reader, () => new FVector(reader));\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        return Value.Write(writer, entry => entry.Write(writer));\n    }\n}\n\npublic class Box2fPropertyData : TBoxPropertyData<FVector2f>\n{\n    public Box2fPropertyData(FName name) : base(name) { }\n\n    public Box2fPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"Box2f\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        Value = new(reader, () => new FVector2f(reader));\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        return Value.Write(writer, entry => entry.Write(writer));\n    }\n}\n\npublic class Box2DPropertyData : TBoxPropertyData<FVector2D>\n{\n    public Box2DPropertyData(FName name) : base(name) { }\n\n    public Box2DPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"Box2D\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        Value = new TBox<FVector2D>(reader, () => new FVector2D(reader));\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        return Value.Write(writer, entry => entry.Write(writer));\n    }\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Math/IntPointPropertyData.cs",
    "content": "﻿using System;\nusing UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic class IntPointPropertyData : PropertyData<int[]> // X, Y\n{\n    public IntPointPropertyData(FName name) : base(name) { }\n\n    public IntPointPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"IntPoint\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        Value = new int[2];\n        for (int i = 0; i < 2; i++)\n        {\n            Value[i] = reader.ReadInt32();\n        }\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        if (Value == null) Value = new int[2];\n        for (int i = 0; i < 2; i++)\n        {\n            writer.Write(Value[i]);\n        }\n        return sizeof(int) * 2;\n    }\n\n    public override void FromString(string[] d, UAsset asset)\n    {\n        Value = new int[2];\n        if (int.TryParse(d[0], out int res1)) Value[0] = res1;\n        if (int.TryParse(d[1], out int res2)) Value[1] = res2;\n    }\n\n    public override string ToString()\n    {\n        string oup = \"(\";\n        for (int i = 0; i < Value.Length; i++)\n        {\n            oup += Convert.ToString(Value[i]) + \", \";\n        }\n        return oup.Remove(oup.Length - 2) + \")\";\n    }\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Math/IntVector2PropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic class IntVector2PropertyData : BasePropertyData<FIntVector2>\n{\n    public IntVector2PropertyData(FName name) : base(name) { }\n\n    public IntVector2PropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"IntVector2\");\n    public override FString PropertyType => CurrentPropertyType;\n}\n"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Math/IntVectorPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic class IntVectorPropertyData : BasePropertyData<FIntVector>\n{\n    public IntVectorPropertyData(FName name) : base(name) { }\n\n    public IntVectorPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"IntVector\");\n    public override FString PropertyType => CurrentPropertyType;\n}\n\n"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Math/LinearColorPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic class LinearColorPropertyData : BasePropertyData<FLinearColor> // R, G, B, A\n{\n    public LinearColorPropertyData(FName name) : base(name) { }\n\n    public LinearColorPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"LinearColor\");\n    public override FString PropertyType => CurrentPropertyType;\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Math/MatrixPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic class MatrixPropertyData : BasePropertyData<FMatrix>\n{\n    public MatrixPropertyData(FName name) : base(name) { }\n\n    public MatrixPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"Matrix\");\n    public override FString PropertyType => CurrentPropertyType;\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Math/PlanePropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\n/// <summary>\n/// A plane in 3-D space stores the coeffecients as Xx+Yy+Zz=W.\n/// </summary>\npublic class PlanePropertyData : BasePropertyData<FPlane>\n{\n    public PlanePropertyData(FName name) : base(name) { }\n\n    public PlanePropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"Plane\");\n    public override FString PropertyType => CurrentPropertyType;\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Math/QuatPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\n/// <summary>\n/// Floating point quaternion that can represent a rotation about an axis in 3-D space.\n/// The X, Y, Z, W components also double as the Axis/Angle format.\n/// </summary>\npublic class QuatPropertyData : BasePropertyData<FQuat>\n{\n    public QuatPropertyData(FName name) : base(name) { }\n\n    public QuatPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"Quat\");\n    public override FString PropertyType => CurrentPropertyType;\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Math/RotatorPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\n/// <summary>\n/// Implements a container for rotation information.\n/// All rotation values are stored in degrees.\n/// </summary>\npublic class RotatorPropertyData : BasePropertyData<FRotator>\n{        \n    public RotatorPropertyData(FName name) : base(name) { }\n\n    public RotatorPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"Rotator\");\n    public override FString PropertyType => CurrentPropertyType;\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Math/TwoVectorsPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic class TwoVectorsPropertyData : BasePropertyData<FTwoVectors>\n{\n    public TwoVectorsPropertyData(FName name) : base(name) { }\n\n    public TwoVectorsPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"TwoVectors\");\n    public override FString PropertyType => CurrentPropertyType;\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Math/Vector2DPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\n/// <summary>\n/// A vector in 2-D space composed of components (X, Y) with floating/double point precision.\n/// </summary>\npublic class Vector2DPropertyData : BasePropertyData<FVector2D>\n{\n    public Vector2DPropertyData(FName name) : base(name) { }\n\n    public Vector2DPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"Vector2D\");\n    public override FString PropertyType => CurrentPropertyType;\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Math/Vector2fPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\n/// <summary>\n/// A vector in 2-D space composed of components (X, Y) with floating/double point precision.\n/// </summary>\npublic class Vector2fPropertyData : BasePropertyData<FVector2f>\n{\n    public Vector2fPropertyData(FName name) : base(name) { }\n\n    public Vector2fPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"Vector2f\");\n    public override FString PropertyType => CurrentPropertyType;\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Math/Vector3fPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\n/// <summary>\n/// A vector in 3-D space composed of components (X, Y, Z) with floating point precision.\n/// </summary>\npublic class Vector3fPropertyData : BasePropertyData<FVector3f>\n{\n    public Vector3fPropertyData(FName name) : base(name) { }\n\n    public Vector3fPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"Vector3f\");\n    public override FString PropertyType => CurrentPropertyType;\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Math/Vector4PropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\n/// <summary>\n/// A vector in 4-D space composed of components (X, Y, Z, W) with floating/double point precision.\n/// </summary>\npublic class Vector4PropertyData : BasePropertyData<FVector4>\n{\n    public Vector4PropertyData(FName name) : base(name) { }\n\n    public Vector4PropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"Vector4\");\n    public override FString PropertyType => CurrentPropertyType;\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Math/Vector4fPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\n/// <summary>\n/// A vector in 4-D space composed of components (X, Y, Z, W) with floating point precision.\n/// </summary>\npublic class Vector4fPropertyData : BasePropertyData<FVector4f>\n{\n    public Vector4fPropertyData(FName name) : base(name) { }\n\n    public Vector4fPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"Vector4f\");\n    public override FString PropertyType => CurrentPropertyType;\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Math/VectorNetQuantizePropertyData.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\npublic class VectorNetQuantizePropertyData : StructPropertyData\r\n{\r\n    public VectorNetQuantizePropertyData(FName name, FName forcedType) : base(name, forcedType)\r\n    {\r\n        Value.Add(new VectorPropertyData(name)); //backup for isZero\r\n    }\r\n\r\n    public VectorNetQuantizePropertyData(FName name) : base(name)\r\n    {\r\n        Value.Add(new VectorPropertyData(name));\r\n    }\r\n\r\n    public VectorNetQuantizePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"Vector_NetQuantize\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        Value = [];\r\n        //either this or 5.0+ or unversioned\r\n        if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES)\r\n        {\r\n            var data = new VectorPropertyData(Name);\r\n            data.Read(reader, includeHeader, leng1, leng2, serializationContext);\r\n            Value.Add(data);\r\n        }\r\n        else\r\n        {\r\n            StructType = FName.DefineDummy(reader.Asset, PropertyType);\r\n            base.Read(reader, includeHeader, 1, leng2, PropertySerializationContext.StructFallback);\r\n        }\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (writer.Asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES)\r\n        {\r\n            if (Value == null)\r\n            {\r\n                Value = new List<PropertyData>();\r\n                Value.Add(new VectorPropertyData(Name));\r\n            }\r\n\r\n            if (Value.Count == 1 && Value[0] is VectorPropertyData vector)\r\n            {\r\n                return Value[0].Write(writer, includeHeader, serializationContext);\r\n            }\r\n            throw new FormatException($\"{PropertyType} must have a VectorPropertyData child\");\r\n        }\r\n        else\r\n        {\r\n            StructType = FName.DefineDummy(writer.Asset, PropertyType);\r\n            return base.Write(writer, includeHeader, PropertySerializationContext.StructFallback);\r\n        }\r\n    }\r\n}\r\n\r\npublic class VectorNetQuantizeNormalPropertyData : VectorNetQuantizePropertyData\r\n{\r\n    public VectorNetQuantizeNormalPropertyData(FName name) : base(name) { }\r\n\r\n    public VectorNetQuantizeNormalPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"Vector_NetQuantizeNormal\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n}\r\n\r\npublic class VectorNetQuantize10PropertyData : VectorNetQuantizePropertyData\r\n{\r\n    public VectorNetQuantize10PropertyData(FName name) : base(name) { }\r\n\r\n    public VectorNetQuantize10PropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"Vector_NetQuantize10\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n}\r\n\r\npublic class VectorNetQuantize100PropertyData : VectorNetQuantizePropertyData\r\n{\r\n    public VectorNetQuantize100PropertyData(FName name) : base(name) { }\r\n\r\n    public VectorNetQuantize100PropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"Vector_NetQuantize100\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Math/VectorPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\n/// <summary>\n/// A vector in 3-D space composed of components (X, Y, Z) with floating/double point precision.\n/// </summary>\npublic class VectorPropertyData : BasePropertyData<FVector>\n{\n    public VectorPropertyData(FName name) : base(name) { }\n\n    public VectorPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"Vector\");\n    public override FString PropertyType => CurrentPropertyType;\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Movies/FrameNumberPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\npublic class FrameNumberPropertyData : BasePropertyData<FFrameNumber>\r\n{\r\n    public FrameNumberPropertyData(FName name) : base(name) { }\r\n\r\n    public FrameNumberPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"FrameNumber\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Movies/MovieScene.cs",
    "content": "﻿using System;\r\nusing UAssetAPI.CustomVersions;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\npublic enum ESectionEvaluationFlags : byte {\r\n    None = 0,\r\n    PreRoll = 1,\r\n    PostRoll = 2,\r\n    ForceKeepState = 4,\r\n    ForceRestoreState = 8,\r\n};\r\n\r\n/// <summary>\r\n/// Keyable struct that represents a particular entity within an evaluation template (either a section/template or a track)\r\n/// </summary>\r\npublic struct FMovieSceneEvaluationKey\r\n{\r\n    /// <summary> ID of the sequence that the entity is contained within </summary>\r\n    public uint SequenceID;\r\n    /// <summary> ID of the track this key relates to </summary>\r\n    public uint TrackIdentifier;\r\n    /// <summary> Index of the section template within the track this key relates to (or -1 where this key relates to a track) </summary>\r\n    public uint SectionIndex;\r\n\r\n    public FMovieSceneEvaluationKey(uint _SequenceID, uint _TrackIdentifier, uint _SectionIndex)\r\n    {\r\n        SequenceID = _SequenceID;\r\n        TrackIdentifier = _TrackIdentifier;\r\n        SectionIndex = _SectionIndex;\r\n    }\r\n\r\n    public FMovieSceneEvaluationKey(AssetBinaryReader reader)\r\n    {\r\n        if (reader != null)\r\n        {\r\n            SequenceID = reader.ReadUInt32();\r\n            TrackIdentifier = reader.ReadUInt32();\r\n            SectionIndex = reader.ReadUInt32();\r\n        }\r\n    }\r\n\r\n    public int Write(AssetBinaryWriter writer)\r\n    {\r\n        writer.Write(SequenceID);\r\n        writer.Write(TrackIdentifier);\r\n        writer.Write(SectionIndex);\r\n        return sizeof(uint) * 3;\r\n    }\r\n}\r\n\r\n/// <summary>\r\n/// Data that represents a single sub-section\r\n/// </summary>\r\npublic struct FMovieSceneSubSectionData\r\n{\r\n    /// <summary> The sub section itself  </summary>\r\n    public FPackageIndex Section;\r\n    /// <summary> The object binding that the sub section belongs to (usually zero) </summary>\r\n    public Guid ObjectBindingId;\r\n    /// <summary> Evaluation flags for the section </summary>\r\n    public ESectionEvaluationFlags Flags;\r\n\r\n    public FMovieSceneSubSectionData(FPackageIndex section, Guid objectBindingId, ESectionEvaluationFlags flags)\r\n    {\r\n        Section = section;\r\n        ObjectBindingId = objectBindingId;\r\n        Flags = flags;\r\n    }\r\n\r\n    public FMovieSceneSubSectionData(AssetBinaryReader reader)\r\n    {\r\n        if (reader != null)\r\n        {\r\n            Section = new FPackageIndex(reader);\r\n            ObjectBindingId = new Guid(reader.ReadBytes(16));\r\n            Flags = (ESectionEvaluationFlags)reader.ReadByte();\r\n        }\r\n    }\r\n\r\n    public int Write(AssetBinaryWriter writer)\r\n    {\r\n        Section.Write(writer);\r\n        writer.Write(ObjectBindingId.ToByteArray());\r\n        writer.Write((byte)Flags);\r\n        return sizeof(int) + 16 + sizeof(byte);\r\n    }\r\n}\r\n\r\npublic struct FEntityAndMetaDataIndex\r\n{\r\n    public int EntityIndex;\r\n    public int MetaDataIndex;\r\n\r\n    public FEntityAndMetaDataIndex(int entityIndex, int metaDataIndex)\r\n    {\r\n        EntityIndex = entityIndex;\r\n        MetaDataIndex = metaDataIndex;\r\n    }\r\n\r\n    public FEntityAndMetaDataIndex(AssetBinaryReader reader)\r\n    {\r\n        if (reader != null)\r\n        {\r\n            EntityIndex = reader.ReadInt32();\r\n            MetaDataIndex = reader.ReadInt32();\r\n        }\r\n    }\r\n\r\n    public void Write(AssetBinaryWriter writer)\r\n    {\r\n        writer.Write(EntityIndex);\r\n        writer.Write(MetaDataIndex);\r\n    }\r\n}\r\n\r\npublic struct FMovieSceneSubSequenceTreeEntry\r\n{\r\n    public uint SequenceID;\r\n    public ESectionEvaluationFlags Flags;\r\n    public StructPropertyData RootToSequenceWarpCounter = null;\r\n\r\n    public FMovieSceneSubSequenceTreeEntry(uint sequenceID, byte flags, StructPropertyData _struct = null)\r\n    {\r\n        SequenceID = sequenceID;\r\n        Flags = (ESectionEvaluationFlags)flags;\r\n        RootToSequenceWarpCounter = _struct;\r\n    }\r\n\r\n    public FMovieSceneSubSequenceTreeEntry(AssetBinaryReader reader)\r\n    {\r\n        if (reader != null)\r\n        {\r\n            SequenceID = reader.ReadUInt32();\r\n            Flags = (ESectionEvaluationFlags)reader.ReadByte();\r\n            if (reader.Asset.GetCustomVersion<FReleaseObjectVersion>() >= FReleaseObjectVersion.AddedSubSequenceEntryWarpCounter ||\r\n                reader.Asset.GetCustomVersion<FFortniteMainBranchObjectVersion>() >= FFortniteMainBranchObjectVersion.AddedSubSequenceEntryWarpCounter)\r\n            {\r\n                var data = new StructPropertyData(FName.DefineDummy(reader.Asset, \"RootToSequenceWarpCounter\"), FName.DefineDummy(reader.Asset, \"MovieSceneWarpCounter\"));\r\n                data.Read(reader, false, 1, 0, PropertySerializationContext.StructFallback);\r\n                RootToSequenceWarpCounter = data;\r\n            }\r\n        }\r\n    }\r\n\r\n    public void Write(AssetBinaryWriter writer)\r\n    {\r\n        writer.Write(SequenceID);\r\n        writer.Write((byte)Flags);\r\n        if (writer.Asset.GetCustomVersion<FReleaseObjectVersion>() >= FReleaseObjectVersion.AddedSubSequenceEntryWarpCounter ||\r\n            writer.Asset.GetCustomVersion<FFortniteMainBranchObjectVersion>() >= FFortniteMainBranchObjectVersion.AddedSubSequenceEntryWarpCounter)\r\n        {\r\n            RootToSequenceWarpCounter?.Write(writer, false, PropertySerializationContext.StructFallback);\r\n        }\r\n    }\r\n}\r\n\r\npublic struct FMovieSceneSubSectionFieldData(AssetBinaryReader reader)\r\n{\r\n    public TMovieSceneEvaluationTree<FMovieSceneSubSectionData> Field = new(reader, () => new FMovieSceneSubSectionData(reader));\r\n\r\n    public int Write(AssetBinaryWriter writer)\r\n    {\r\n        var offset = writer.BaseStream.Position;\r\n\r\n        Field.Write(writer, entry => entry.Write(writer));\r\n\r\n        return (int)(writer.BaseStream.Position - offset);\r\n    }\r\n}\r\n\r\npublic struct FMovieSceneEvaluationFieldEntityTree(AssetBinaryReader reader)\r\n{\r\n    public TMovieSceneEvaluationTree<FEntityAndMetaDataIndex> SerializedData = new(reader, () => new FEntityAndMetaDataIndex(reader));\r\n\r\n    public int Write(AssetBinaryWriter writer)\r\n    {\r\n        var offset = writer.BaseStream.Position;\r\n\r\n        SerializedData.Write(writer, entry => entry.Write(writer));\r\n\r\n        return (int)(writer.BaseStream.Position - offset);\r\n    }\r\n}\r\n\r\npublic struct FMovieSceneSubSequenceTree(AssetBinaryReader reader)\r\n{\r\n    public TMovieSceneEvaluationTree<FMovieSceneSubSequenceTreeEntry> Data = new(reader, () => new FMovieSceneSubSequenceTreeEntry(reader));\r\n\r\n    public int Write(AssetBinaryWriter writer)\r\n    {\r\n        var offset = writer.BaseStream.Position;\r\n\r\n        Data.Write(writer, entry => entry.Write(writer));\r\n\r\n        return (int)(writer.BaseStream.Position - offset);\r\n    }\r\n}\r\n\r\npublic struct FSectionEvaluationDataTree\r\n{\r\n    public TMovieSceneEvaluationTree<StructPropertyData> Tree;\r\n\r\n    public FSectionEvaluationDataTree(AssetBinaryReader reader)\r\n    {\r\n        if (reader != null)\r\n        {\r\n            Tree = new(reader, () => ReadTree(reader));\r\n\r\n            static StructPropertyData ReadTree(AssetBinaryReader reader)\r\n            {\r\n                var data = new StructPropertyData(FName.DefineDummy(reader.Asset, \"Tree\"), FName.DefineDummy(reader.Asset, \"SectionEvaluationDataTree\"));\r\n                data.Read(reader, false, 1, 0, PropertySerializationContext.StructFallback);\r\n                return data;\r\n            }\r\n        }\r\n    }\r\n\r\n    public int Write(AssetBinaryWriter writer)\r\n    {\r\n        static void WriteTree(AssetBinaryWriter writer, StructPropertyData data)\r\n        {\r\n            if (data != null)\r\n            {\r\n                data.StructType = FName.DefineDummy(writer.Asset, \"SectionEvaluationDataTree\");\r\n                data.Write(writer, false, PropertySerializationContext.StructFallback);\r\n            }\r\n        }\r\n\r\n        var offset = writer.BaseStream.Position;\r\n        Tree.Write(writer, entry => WriteTree(writer, entry));\r\n        return (int)(writer.BaseStream.Position - offset);\r\n    }\r\n}\r\n\r\npublic struct FMovieSceneTrackFieldData(AssetBinaryReader reader)\r\n{\r\n    public TMovieSceneEvaluationTree<uint> Field = new (reader, reader.ReadUInt32);\r\n\r\n    public int Write(AssetBinaryWriter writer)\r\n    {\r\n        var offset = writer.BaseStream.Position;\r\n\r\n        Field.Write(writer, writer.Write);\r\n\r\n        return (int)(writer.BaseStream.Position - offset);\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Movies/MovieSceneChannel.cs",
    "content": "using System;\r\nusing UAssetAPI.CustomVersions;\r\nusing UAssetAPI.UnrealTypes.EngineEnums;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\npublic class FMovieSceneChannel<T>\r\n{\r\n    public ERichCurveExtrapolation PreInfinityExtrap;\r\n    public ERichCurveExtrapolation PostInfinityExtrap;\r\n    public int TimesStructLength;\r\n    public FFrameNumber[] Times;\r\n    public int ValuesStructLength;\r\n    public FMovieSceneValue<T>[] Values;\r\n    public T DefaultValue;\r\n    public bool bHasDefaultValue;\r\n    public FFrameRate TickResolution;\r\n    public bool bShowCurve;\r\n\r\n    public FMovieSceneChannel()\r\n    {\r\n        PreInfinityExtrap = ERichCurveExtrapolation.RCCE_Constant;\r\n        PostInfinityExtrap = ERichCurveExtrapolation.RCCE_Constant;\r\n        Times = [];\r\n        Values = [];\r\n        DefaultValue = default;\r\n        bHasDefaultValue = false;\r\n        TickResolution = new FFrameRate(60000, 1);\r\n        bShowCurve = false;\r\n    }\r\n\r\n    public FMovieSceneChannel(AssetBinaryReader reader, Func<T> valueReader)\r\n    {\r\n        if (reader != null && valueReader != null)\r\n        {\r\n            PreInfinityExtrap = (ERichCurveExtrapolation)reader.ReadByte();\r\n            PostInfinityExtrap = (ERichCurveExtrapolation)reader.ReadByte();\r\n\r\n            TimesStructLength = reader.ReadInt32();\r\n            Times = reader.ReadArray(() => new FFrameNumber(reader));\r\n\r\n            ValuesStructLength = reader.ReadInt32();\r\n            Values = reader.ReadArray(() => new FMovieSceneValue<T>(reader, valueReader()));\r\n\r\n            DefaultValue = valueReader();\r\n            bHasDefaultValue = reader.ReadBooleanInt();\r\n            TickResolution = new FFrameRate(reader);\r\n            bShowCurve = reader.Asset.GetCustomVersion<FFortniteMainBranchObjectVersion>() > FFortniteMainBranchObjectVersion.SerializeFloatChannelShowCurve && reader.ReadBooleanInt();\r\n        }\r\n    }\r\n\r\n    public void Write(AssetBinaryWriter writer, Action<T> valueWriter)\r\n    {\r\n        writer.Write((byte)PreInfinityExtrap);\r\n        writer.Write((byte)PostInfinityExtrap);\r\n\r\n        writer.Write(TimesStructLength);\r\n        writer.Write(Times.Length);\r\n        for (int i = 0; i < Times.Length; i++)\r\n        {\r\n            Times[i].Write(writer);\r\n        }\r\n\r\n        writer.Write(ValuesStructLength);\r\n        writer.Write(Values.Length);\r\n        for (int i = 0; i < Values.Length; i++)\r\n        {\r\n            Values[i].Write(writer, valueWriter);\r\n        }\r\n\r\n        valueWriter(DefaultValue);\r\n        writer.Write(bHasDefaultValue ? 1 : 0);\r\n        TickResolution.Write(writer);\r\n        if (writer.Asset.GetCustomVersion<FFortniteMainBranchObjectVersion>() > FFortniteMainBranchObjectVersion.SerializeFloatChannelShowCurve)\r\n            writer.Write(bShowCurve ? 1 : 0);\r\n    }\r\n}\r\n\r\npublic class FMovieSceneFloatChannel(AssetBinaryReader reader) : FMovieSceneChannel<float>(reader, reader == null ? null : reader.ReadSingle) { }\r\n\r\npublic class FMovieSceneDoubleChannel(AssetBinaryReader reader) : FMovieSceneChannel<double>(reader, reader == null ? null : reader.ReadDouble) { }"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Movies/MovieSceneDoubleChannelPropertyData.cs",
    "content": "﻿using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic class MovieSceneDoubleChannelPropertyData : PropertyData<FMovieSceneDoubleChannel>\n{\n    public MovieSceneDoubleChannelPropertyData(FName name) : base(name) { }\n\n    public MovieSceneDoubleChannelPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"MovieSceneDoubleChannel\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        Value = new FMovieSceneDoubleChannel(reader);\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n        \n        var offset = writer.BaseStream.Position;\n\n        Value.Write(writer, writer.Write);\n\n        return (int)(writer.BaseStream.Position - offset);\n    }\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Movies/MovieSceneEvalTemplatePtrPropertyData.cs",
    "content": "﻿using System;\r\nusing System.Linq;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\npublic class MovieSceneTemplatePropertyData : StructPropertyData \r\n{\r\n    public MovieSceneTemplatePropertyData(FName name, FName forcedType) : base(name, forcedType) { }\r\n    public MovieSceneTemplatePropertyData(FName name) : base(name) { }\r\n    public MovieSceneTemplatePropertyData() { }\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        StrPropertyData type = new StrPropertyData(FName.DefineDummy(reader.Asset, \"TypeName\"));\r\n        type.Ancestry.Initialize(Ancestry, Name);\r\n        type.Read(reader, includeHeader, leng1);\r\n        \r\n        if (type.Value != null)\r\n        {\r\n            StructType = FName.DefineDummy(reader.Asset, type.Value.ToString().Split(\".\")[1]);\r\n            base.Read(reader, false, 1, 0, PropertySerializationContext.StructFallback);\r\n        }\r\n\r\n        Value.Insert(0, type);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        var offset = writer.BaseStream.Position;\r\n\r\n        if (Value != null)\r\n        {\r\n            var type = (StrPropertyData)Value.Find(x => x.Name.ToString() == \"TypeName\");\r\n            if (type is null) throw new FormatException($\"TypeName property not found in {PropertyType}\");\r\n            writer.Write(type.Value);\r\n            if (type.Value != null)\r\n            {\r\n                var dat = Value.Except([type]).ToList();\r\n                MainSerializer.GenerateUnversionedHeader(ref dat, Name, null, writer.Asset)?.Write(writer);\r\n\r\n                foreach (var t in dat)\r\n                {\r\n                    MainSerializer.Write(t, writer, true);\r\n                }\r\n                if (!writer.Asset.HasUnversionedProperties) writer.Write(new FName(writer.Asset, \"None\"));\r\n            }\r\n        }\r\n\r\n        return (int)(writer.BaseStream.Position - offset);\r\n    }\r\n}\r\n\r\npublic class MovieSceneEvalTemplatePtrPropertyData : MovieSceneTemplatePropertyData\r\n{\r\n    public MovieSceneEvalTemplatePtrPropertyData(FName name, FName forcedType) : base(name, forcedType) {}\r\n    public MovieSceneEvalTemplatePtrPropertyData(FName name) : base(name) { }\r\n    public MovieSceneEvalTemplatePtrPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MovieSceneEvalTemplatePtr\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n}\r\n\r\npublic class MovieSceneTrackImplementationPtrPropertyData : MovieSceneTemplatePropertyData\r\n{\r\n    public MovieSceneTrackImplementationPtrPropertyData(FName name, FName forcedType) : base(name, forcedType) { }\r\n    public MovieSceneTrackImplementationPtrPropertyData(FName name) : base(name) { }\r\n    public MovieSceneTrackImplementationPtrPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MovieSceneTrackImplementationPtr\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Movies/MovieSceneEvaluationFieldEntityTreePropertyData.cs",
    "content": "﻿using UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\npublic class MovieSceneSubSectionFieldDataPropertyData : PropertyData<FMovieSceneSubSectionFieldData>\r\n{\r\n    public MovieSceneSubSectionFieldDataPropertyData(FName name) : base(name) { }\r\n\r\n    public MovieSceneSubSectionFieldDataPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MovieSceneSubSectionFieldData\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = new FMovieSceneSubSectionFieldData(reader);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        return Value.Write(writer);\r\n    }\r\n}\r\n\r\npublic class MovieSceneEvaluationFieldEntityTreePropertyData : PropertyData<FMovieSceneEvaluationFieldEntityTree>\r\n{\r\n    public MovieSceneEvaluationFieldEntityTreePropertyData(FName name) : base(name) { }\r\n\r\n    public MovieSceneEvaluationFieldEntityTreePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MovieSceneEvaluationFieldEntityTree\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = new FMovieSceneEvaluationFieldEntityTree(reader);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        return Value.Write(writer);\r\n    }\r\n}\r\n\r\npublic class MovieSceneSubSequenceTreePropertyData : PropertyData<FMovieSceneSubSequenceTree>\r\n{\r\n    public MovieSceneSubSequenceTreePropertyData(FName name) : base(name) { }\r\n\r\n    public MovieSceneSubSequenceTreePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MovieSceneSubSequenceTree\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = new FMovieSceneSubSequenceTree(reader);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader) {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        return Value.Write(writer);\r\n    }\r\n}\r\n\r\npublic class MovieSceneSequenceInstanceDataPtrPropertyData : PropertyData<FPackageIndex>\r\n{\r\n    public MovieSceneSequenceInstanceDataPtrPropertyData(FName name) : base(name) { }\r\n\r\n    public MovieSceneSequenceInstanceDataPtrPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MovieSceneSequenceInstanceDataPtr\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n        Value = new FPackageIndex(reader);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        writer.Write(Value.Index);\r\n        return sizeof(int);\r\n    }\r\n}\r\n\r\npublic class SectionEvaluationDataTreePropertyData : PropertyData<FSectionEvaluationDataTree>\r\n{\r\n    public SectionEvaluationDataTreePropertyData(FName name) : base(name) { }\r\n\r\n    public SectionEvaluationDataTreePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"SectionEvaluationDataTree\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = new FSectionEvaluationDataTree(reader);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        return Value.Write(writer);\r\n    }\r\n}\r\n\r\npublic class MovieSceneTrackFieldDataPropertyData : PropertyData<FMovieSceneTrackFieldData>\r\n{\r\n    public MovieSceneTrackFieldDataPropertyData(FName name) : base(name) { }\r\n\r\n    public MovieSceneTrackFieldDataPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MovieSceneTrackFieldData\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = new FMovieSceneTrackFieldData(reader);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader) {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        return Value.Write(writer);\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Movies/MovieSceneEvaluationTree.cs",
    "content": "﻿using System;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic struct FEntry\n{\n    /// <summary>\n    /// The index into Items of the first item\n    /// </summary>\n    public int StartIndex;\n    /// <summary>\n    /// The number of currently valid items\n    /// </summary>\n    public int Size;\n    /// <summary>\n    /// The total capacity of allowed items before reallocating\n    /// </summary>\n    public int Capacity;\n\n    public FEntry(int startIndex, int size, int capacity)\n    {\n        StartIndex = startIndex;\n        Size = size;\n        Capacity = capacity;\n    }\n\n    public FEntry(AssetBinaryReader reader)\n    {\n        if (reader != null)\r\n        {\r\n            StartIndex = reader.ReadInt32();\r\n            Size = reader.ReadInt32();\r\n            Capacity = reader.ReadInt32();\r\n        }\n    }\n\n    public void Write(AssetBinaryWriter writer)\n    {\n        writer.Write(StartIndex);\n        writer.Write(Size);\n        writer.Write(Capacity);\n    }\n}\n\npublic struct TEvaluationTreeEntryContainer<T>\n{\n    /// <summary>\n    /// List of allocated entries for each allocated entry. Should only ever grow, never shrink. Shrinking would cause previously established handles to become invalid. */\n    /// </summary>\n    public FEntry[] Entries;\n    /// <summary>\n    /// Linear array of allocated entry contents. Once allocated, indices are never invalidated until Compact is called. Entries needing more capacity are re-allocated on the end of the array.\n    /// </summary>\n    public T[] Items;\n\n    public TEvaluationTreeEntryContainer(FEntry[] entries, T[] items)\n    {\n        Entries = entries;\n        Items = items;\n    }\n\n    public TEvaluationTreeEntryContainer(AssetBinaryReader reader, Func<T> valueReader)\n    {\n        if (reader != null)\r\n        {\r\n            var entriesamount = reader.ReadInt32();\r\n            Entries = new FEntry[entriesamount];\r\n            for (int i = 0; i < entriesamount; i++)\r\n            {\r\n                Entries[i] = new FEntry(reader);\r\n            }\r\n\r\n            int itemsamount = reader.ReadInt32();\r\n            Items = new T[itemsamount];\r\n            for (int i = 0; i < itemsamount; i++)\r\n            {\r\n                Items[i] = valueReader();\r\n            }\r\n        }\n    }\n\n    public void Write(AssetBinaryWriter writer, Action<T> valueWriter)\n    {\n        writer.Write(Entries.Length);\n        for (int i = 0; i < Entries.Length; i++)\n        {\n            Entries[i].Write(writer);\n        }\n\n        writer.Write(Items.Length);\n        for (int i = 0; i < Items.Length; i++)\n        {\n            valueWriter(Items[i]);\n        }\n    }\n}\n\npublic class FMovieSceneEvaluationTree(AssetBinaryReader reader)\n{\n    /// <summary> \n    /// This tree's root node\n    /// </summary>\n    public FMovieSceneEvaluationTreeNode RootNode = new FMovieSceneEvaluationTreeNode(reader);\n    /// <summary>\n    /// Segmented array of all child nodes within this tree (in no particular order)\n    /// </summary>\n    public TEvaluationTreeEntryContainer<FMovieSceneEvaluationTreeNode> ChildNodes = new(reader, () => new FMovieSceneEvaluationTreeNode(reader));\n\n    public void Write(AssetBinaryWriter writer)\n    {\n        RootNode.Write(writer);\n        ChildNodes.Write(writer, node => node.Write(writer));\n    }\n}\n\npublic class TMovieSceneEvaluationTree<T> : FMovieSceneEvaluationTree\n{\n    /// <summary>\n    /// Tree data container that corresponds to FMovieSceneEvaluationTreeNode::DataID\n    /// </summary>\n    public TEvaluationTreeEntryContainer<T> Data;\n\n    public TMovieSceneEvaluationTree(AssetBinaryReader reader, Func<T> valueReader) : base(reader)\n    {\n        if (reader != null) Data = new(reader, valueReader);\n    }\n\n    public void Write(AssetBinaryWriter writer, Action<T> valueWriter)\n    {\n        base.Write(writer);\n        Data.Write(writer, valueWriter);\n    }\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Movies/MovieSceneEvaluationTreeNode.cs",
    "content": "﻿using UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\n/// <summary>\n/// A structure that uniquely identifies an entry within a TEvaluationTreeEntryContaine\n/// </summary>\npublic struct FEvaluationTreeEntryHandle\n{\n    /// <summary>\n    /// Specifies an index into TEvaluationTreeEntryContainer::Entries\n    /// </summary>\n    public int EntryIndex;\n\n    public FEvaluationTreeEntryHandle(int _EntryIndex)\n    {\n        EntryIndex = _EntryIndex;\n    }\n\n    public FEvaluationTreeEntryHandle(AssetBinaryReader reader)\n    {\n        EntryIndex = reader.ReadInt32();\n    }\n\n    public void Write(AssetBinaryWriter writer)\n    {\n        writer.Write(EntryIndex);\n    }\n}\n\n/// <summary>\n/// A handle to a node in an FMovieSceneEvaluationTree, defined in terms of an entry handle (corrsponding to FMovieSceneEvaluationTree::ChildNodes), and its child index\n/// </summary>\npublic struct FMovieSceneEvaluationTreeNodeHandle\n{\n    /// <summary>\n    /// Entry handle for the parent's children in FMovieSceneEvaluationTree::ChildNodes\n    /// </summary>\n    public FEvaluationTreeEntryHandle ChildrenHandle;\n    /// <summary>\n    /// The index of this child within its parent's children\n    /// </summary>\n    public int Index;\n\n    public FMovieSceneEvaluationTreeNodeHandle(int _ChildrenHandle, int _Index)\n    {\n        ChildrenHandle.EntryIndex = _ChildrenHandle;\n        Index = _Index;\n    }\n\n    public FMovieSceneEvaluationTreeNodeHandle(AssetBinaryReader reader)\n    {\n        ChildrenHandle = new FEvaluationTreeEntryHandle(reader.ReadInt32());\n        Index = reader.ReadInt32();\n    }\n\n    public void Write(AssetBinaryWriter writer)\n    {\n        writer.Write(ChildrenHandle.EntryIndex);\n        writer.Write(Index);\n    }\n}\n\npublic class FMovieSceneEvaluationTreeNode\n{\n    /// <summary>\n    /// The time-range that this node represents\n    /// </summary>\n    public TRange<FFrameNumber> Range;\n    public FMovieSceneEvaluationTreeNodeHandle Parent;\n    /// <summary>\n    /// Identifier for the child node entries associated with this node (FMovieSceneEvaluationTree::ChildNodes)\n    /// </summary>\n    public FEvaluationTreeEntryHandle ChildrenID;\n    /// <summary>\n    /// Identifier for externally stored data entries associated with this node\n    /// </summary>\n    public FEvaluationTreeEntryHandle DataID;\n\n    public FMovieSceneEvaluationTreeNode(AssetBinaryReader reader)\n    {\n        if (reader != null)\r\n        {\r\n            Range = new(reader, () => new FFrameNumber(reader));\r\n            Parent = new FMovieSceneEvaluationTreeNodeHandle(reader.ReadInt32(), reader.ReadInt32());\r\n            ChildrenID = new FEvaluationTreeEntryHandle(reader.ReadInt32());\r\n            DataID = new FEvaluationTreeEntryHandle(reader.ReadInt32());\r\n        }\n    }\n\n    public void Write(AssetBinaryWriter writer)\n    {\n        Range.Write(writer, frame => frame.Write(writer));\n        writer.Write(Parent.ChildrenHandle.EntryIndex);\n        writer.Write(Parent.Index);\n        writer.Write(ChildrenID.EntryIndex);\n        writer.Write(DataID.EntryIndex);\n    }\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Movies/MovieSceneEventParametersPropertyData.cs",
    "content": "﻿using UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\npublic struct FMovieSceneEventParameters\r\n{\r\n    /** Soft object path to the type of this parameter payload */\r\n    public FSoftObjectPath StructType;\r\n\r\n    /** Serialized bytes that represent the payload. Serialized internally with FEventParameterArchive */\r\n    public byte[] StructBytes;\r\n\r\n    public FMovieSceneEventParameters(FSoftObjectPath structType, byte[] structBytes)\r\n    {\r\n        StructType = structType;\r\n        StructBytes = structBytes;\r\n    }\r\n\r\n    public FMovieSceneEventParameters(AssetBinaryReader reader)\r\n    {\r\n        if (reader != null)\r\n        {\r\n            StructType = new FSoftObjectPath(reader);\r\n            var length = reader.ReadInt32();\r\n            StructBytes = reader.ReadBytes(length);\r\n        }\r\n    }\r\n\r\n    public int Write(AssetBinaryWriter writer)\r\n    {\r\n        var size = StructType.Write(writer);\r\n        writer.Write(StructBytes.Length);\r\n        size += sizeof(int);\r\n        writer.Write(StructBytes);\r\n        size += StructBytes.Length;\r\n        return size;\r\n    }\r\n}\r\n\r\npublic class MovieSceneEventParametersPropertyData : PropertyData<FMovieSceneEventParameters>\r\n{\r\n    public MovieSceneEventParametersPropertyData(FName name) : base(name) { }\r\n\r\n    public MovieSceneEventParametersPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MovieSceneEventParameters\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = new FMovieSceneEventParameters(reader); \r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        return Value.Write(writer);\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Movies/MovieSceneFloatChannelPropertyData.cs",
    "content": "﻿using UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\npublic class MovieSceneFloatChannelPropertyData : PropertyData<FMovieSceneFloatChannel>\r\n{\r\n    public MovieSceneFloatChannelPropertyData(FName name) : base(name) { }\r\n\r\n    public MovieSceneFloatChannelPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MovieSceneFloatChannel\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = new FMovieSceneFloatChannel(reader);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        var offset = writer.BaseStream.Position;\r\n\r\n        Value.Write(writer, writer.Write);\r\n\r\n        return (int)(writer.BaseStream.Position - offset);\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Movies/MovieSceneFloatValuePropertyData.cs",
    "content": "﻿using UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\npublic class MovieSceneFloatValuePropertyData : PropertyData<FMovieSceneFloatValue>\r\n{\r\n    public MovieSceneFloatValuePropertyData(FName name) : base(name) { }\r\n\r\n    public MovieSceneFloatValuePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MovieSceneFloatValue\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = new FMovieSceneFloatValue(reader);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        var offset = writer.BaseStream.Position;\r\n\r\n        Value.Write(writer, writer.Write);\r\n\r\n        return (int)(writer.BaseStream.Position - offset);\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Movies/MovieSceneFrameRangePropertyData.cs",
    "content": "﻿using UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\npublic class MovieSceneFrameRangePropertyData : PropertyData<TRange<FFrameNumber>>\r\n{\r\n    public MovieSceneFrameRangePropertyData(FName name) : base(name) { }\r\n\r\n    public MovieSceneFrameRangePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MovieSceneFrameRange\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = new(reader, () => new FFrameNumber(reader));\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        var offset = writer.BaseStream.Position;\r\n\r\n        Value.Write(writer, frame => frame.Write(writer));\r\n\r\n        return (int)(writer.BaseStream.Position - offset);\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Movies/MovieSceneGenerationLedgerPropertyData.cs",
    "content": "﻿using System;\nusing UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic class MovieSceneGenerationLedgerPropertyData : PropertyData\n{\n    /** Map of track identifiers to number of references within th template (generally 1, maybe >1 for shared tracks) */\n    TMap<StructPropertyData, int> TrackReferenceCounts;\n\n    /** Map of track signature to array of track identifiers that it created */\n    TMap<Guid, StructPropertyData> TrackSignatureToTrackIdentifier;\n\n    public MovieSceneGenerationLedgerPropertyData(FName name) : base(name) { }\n    public MovieSceneGenerationLedgerPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"MovieSceneGenerationLedger\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        var NumReferenceCounts = reader.ReadInt32();\n        TrackReferenceCounts = new TMap<StructPropertyData, int>();\n\n        for (int i = 0; i < NumReferenceCounts; i++)\n        {\n            var identifier = new StructPropertyData(FName.DefineDummy(reader.Asset, \"MovieSceneTrackIdentifier\"), FName.DefineDummy(reader.Asset, \"Generic\"));\n            identifier.Ancestry.Initialize(Ancestry, Name);\n            identifier.Read(reader, false, 1, 0, PropertySerializationContext.StructFallback);\n            TrackReferenceCounts.Add(identifier, reader.ReadInt32());\n        }\n        var SignatureToTrackIDs = reader.ReadInt32();\n        TrackSignatureToTrackIdentifier = new TMap<Guid, StructPropertyData>();\n        for (int i = 0; i < SignatureToTrackIDs; i++)\n        {\n            var guid = new Guid(reader.ReadBytes(16));\n            var counts = reader.ReadInt32();\n            if (counts != 1) throw new FormatException(\"Invalid TrackSignatureToTrackIdentifier count\");\n            var identifier = new StructPropertyData(FName.DefineDummy(reader.Asset, \"MovieSceneTrackIdentifier\"), FName.DefineDummy(reader.Asset, \"Generic\"));\n            identifier.Ancestry.Initialize(Ancestry, Name);\n            identifier.Read(reader, false, 1, 0, PropertySerializationContext.StructFallback);\n            TrackSignatureToTrackIdentifier.Add(guid, identifier);\n        }\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        var offset = writer.BaseStream.Position;\n\n        writer.Write(TrackReferenceCounts.Count);\n        foreach (var kvp in TrackReferenceCounts)\n        {\n            kvp.Key.Write(writer, false, PropertySerializationContext.StructFallback);\n            writer.Write(kvp.Value);\n        }\n\n        writer.Write(TrackSignatureToTrackIdentifier.Count);\n        foreach (var kvp in TrackSignatureToTrackIdentifier)\n        {\n            writer.Write(kvp.Key.ToByteArray());\n            writer.Write(1);\n            kvp.Value.Write(writer, false, PropertySerializationContext.StructFallback);\n        }\n\n        return (int)(writer.BaseStream.Position - offset);\n    }\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Movies/MovieSceneSegment.cs",
    "content": "﻿using UAssetAPI.CustomVersions;\nusing UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\n/// <summary>\n/// Information about a single segment of an evaluation track\n/// </summary>\npublic class FMovieSceneSegment\n{\n    /// <summary> The segment's range </summary>\n    public TRange<float> RangeOld;\n    public TRange<FFrameNumber> Range;\n    public int ID;\n    /// <summary> Whether this segment has been generated yet or not </summary>\n    public bool bAllowEmpty;\n    /// <summary> Array of implementations that reside at the segment's range </summary>\n    public StructPropertyData[] Impls;\n\n    public FMovieSceneSegment()\r\n    {\r\n\r\n    }\n\n    public FMovieSceneSegment(AssetBinaryReader reader)\n    {\n        if (reader != null)\r\n        {\r\n            if (reader.Asset.GetCustomVersion<FSequencerObjectVersion>() < FSequencerObjectVersion.FloatToIntConversion)\r\n            {\r\n                RangeOld = new TRange<float>(reader, reader.ReadSingle);\r\n            }\r\n            else\r\n            {\r\n                Range = new(reader, () => new FFrameNumber(reader));\r\n            }\r\n\r\n            if (reader.Asset.GetCustomVersion<FSequencerObjectVersion>() > FSequencerObjectVersion.EvaluationTree)\r\n            {\r\n                ID = reader.ReadInt32();\r\n                bAllowEmpty = reader.ReadBooleanInt();\r\n            }\r\n\r\n            int length = reader.ReadInt32();\r\n            Impls = new StructPropertyData[length];\r\n            for (int i = 0; i < length; i++)\r\n            {\r\n                var data = new StructPropertyData(FName.DefineDummy(reader.Asset, \"Impls\"), FName.DefineDummy(reader.Asset, \"SectionEvaluationData\"));\r\n                data.Read(reader, false, 1, 0, PropertySerializationContext.StructFallback);\r\n                Impls[i] = data;\r\n            }\r\n        }\n    }\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        var offset = writer.BaseStream.Position;\n        if (writer.Asset.GetCustomVersion<FSequencerObjectVersion>() < FSequencerObjectVersion.FloatToIntConversion)\n        {\n            RangeOld.Write(writer, writer.Write);\n        }\n        else\n        {\n            Range.Write(writer, frame => frame.Write(writer));\n        }\n\n        if (writer.Asset.GetCustomVersion<FSequencerObjectVersion>() > FSequencerObjectVersion.EvaluationTree)\n        {\n            writer.Write(ID);\n            writer.Write(bAllowEmpty ? 1 : 0);\n        }\n\n        writer.Write(Impls.Length);\n        for (int i = 0; i < Impls.Length; i++)\n        {\n            Impls[i]?.Write(writer, false, PropertySerializationContext.StructFallback);\n        }\n\n        return (int)(writer.BaseStream.Position - offset);\n    }\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Movies/MovieSceneSegmentPropertyData.cs",
    "content": "﻿using UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\npublic class MovieSceneSegmentPropertyData : PropertyData<FMovieSceneSegment>\r\n{\r\n    public MovieSceneSegmentPropertyData(FName name) : base(name) { }\r\n    \r\n    public MovieSceneSegmentPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MovieSceneSegment\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = new FMovieSceneSegment(reader);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        return Value.Write(writer);\r\n    }\r\n}\r\n\r\npublic class MovieSceneSegmentIdentifierPropertyData : PropertyData<int>\r\n{\r\n    public MovieSceneSegmentIdentifierPropertyData(FName name) : base(name) { }\r\n\r\n    public MovieSceneSegmentIdentifierPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MovieSceneSegmentIdentifier\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = reader.ReadInt32();\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        writer.Write(Value);\r\n        return sizeof(int);\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Movies/MovieSceneTrackIdentifierPropertyData.cs",
    "content": "﻿using UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\npublic class MovieSceneTrackIdentifierPropertyData : PropertyData<uint>\r\n{\r\n    public MovieSceneTrackIdentifierPropertyData(FName name) : base(name) { }\r\n\r\n    public MovieSceneTrackIdentifierPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MovieSceneTrackIdentifier\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = reader.ReadUInt32();\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        writer.Write(Value);\r\n        return sizeof(uint);\r\n    }\r\n}\r\n\r\npublic class MovieSceneSequenceIDPropertyData : PropertyData<uint>\r\n{\r\n    public MovieSceneSequenceIDPropertyData(FName name) : base(name) { }\r\n\r\n    public MovieSceneSequenceIDPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MovieSceneSequenceID\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = reader.ReadUInt32();\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        writer.Write(Value);\r\n        return sizeof(uint);\r\n    }\r\n}\r\n\r\npublic class MovieSceneEvaluationKeyPropertyData : PropertyData<FMovieSceneEvaluationKey>\r\n{\r\n    public MovieSceneEvaluationKeyPropertyData(FName name) : base(name) { }\r\n\r\n    public MovieSceneEvaluationKeyPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"MovieSceneEvaluationKey\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = new FMovieSceneEvaluationKey(reader);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n        \r\n        return Value.Write(writer);\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Movies/MovieSceneValue.cs",
    "content": "﻿using System;\nusing UAssetAPI.UnrealTypes.EngineEnums;\nusing UAssetAPI.CustomVersions;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic class FMovieSceneTangentData\n{\n    public float ArriveTangent;\n    public float LeaveTangent;\n    public float ArriveTangentWeight;\n    public float LeaveTangentWeight;\n    public ERichCurveTangentWeightMode TangentWeightMode;\n    public byte[] padding;\n\n    public FMovieSceneTangentData()\r\n    {\r\n\r\n    }\n\n    public FMovieSceneTangentData(AssetBinaryReader reader)\n    {\n        if (reader != null)\r\n        {\r\n            ArriveTangent = reader.ReadSingle();\r\n            LeaveTangent = reader.ReadSingle();\r\n            if (reader.Asset.GetCustomVersion<FSequencerObjectVersion>() < FSequencerObjectVersion.SerializeFloatChannelCompletely)\r\n            {\r\n                TangentWeightMode = (ERichCurveTangentWeightMode)reader.ReadByte();\r\n                ArriveTangentWeight = reader.ReadSingle();\r\n                LeaveTangentWeight = reader.ReadSingle();\r\n                padding = [];\r\n            }\r\n            else\r\n            {\r\n                ArriveTangentWeight = reader.ReadSingle();\r\n                LeaveTangentWeight = reader.ReadSingle();\r\n                TangentWeightMode = (ERichCurveTangentWeightMode)reader.ReadByte();\r\n                padding = reader.ReadBytes(3);\r\n            }\r\n        }\n    }\n\n    public void Write(AssetBinaryWriter writer)\n    {\n        writer.Write(ArriveTangent);\n        writer.Write(LeaveTangent);\n        if (writer.Asset.GetCustomVersion<FSequencerObjectVersion>() < FSequencerObjectVersion.SerializeFloatChannelCompletely)\n        {\n            writer.Write((byte)TangentWeightMode);\n            writer.Write(ArriveTangentWeight);\n            writer.Write(LeaveTangentWeight);\n        }\n        else\n        {\n            writer.Write(ArriveTangentWeight);\n            writer.Write(LeaveTangentWeight);\n            writer.Write((byte)TangentWeightMode);\n        }\n        writer.Write(padding);\n    }\n}\n\npublic class FMovieSceneValue<T>\n{\n    public T Value;\n    public FMovieSceneTangentData Tangent;\n    public ERichCurveInterpMode InterpMode;\n    public ERichCurveTangentMode TangentMode;\n    public byte[] padding;\n\n    public FMovieSceneValue(AssetBinaryReader reader, T value)\n    {\r\n        Value = value;\n        if (reader != null)\r\n        {\r\n            if (reader.Asset.GetCustomVersion<FSequencerObjectVersion>() < FSequencerObjectVersion.SerializeFloatChannelCompletely)\r\n            {\r\n                InterpMode = (ERichCurveInterpMode)reader.ReadByte();\r\n                TangentMode = (ERichCurveTangentMode)reader.ReadByte();\r\n                Tangent = new FMovieSceneTangentData(reader);\r\n                padding = [];\r\n            }\r\n            else\r\n            {\r\n                Tangent = new FMovieSceneTangentData(reader);\r\n                InterpMode = (ERichCurveInterpMode)reader.ReadByte();\r\n                TangentMode = (ERichCurveTangentMode)reader.ReadByte();\r\n                padding = reader.ReadBytes(2);\r\n            }\r\n        }\n    }\n\n    public void Write(AssetBinaryWriter writer, Action<T> valueWriter)\n    {\n        valueWriter(Value);\n        if (writer.Asset.GetCustomVersion<FSequencerObjectVersion>() < FSequencerObjectVersion.SerializeFloatChannelCompletely)\n        {\n            writer.Write((byte)InterpMode);\n            writer.Write((byte)TangentMode);\n            Tangent.Write(writer);\n        }\n        else\n        {\n            Tangent.Write(writer);\n            writer.Write((byte)InterpMode);\n            writer.Write((byte)TangentMode);\n        }\n        writer.Write(padding);\n    }\n}\n\npublic class FMovieSceneFloatValue(AssetBinaryReader reader) : FMovieSceneValue<float>(reader, reader?.ReadSingle() ?? 0) { }\n\npublic class FMovieSceneDoubleValue(AssetBinaryReader reader) : FMovieSceneValue<double>(reader, reader?.ReadDouble() ?? 0) { }"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Movies/NameCurveKeyPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic struct FNameCurveKey : IStruct<FNameCurveKey>\n{\n    public float Time;\n    public FName Value;\n\n    public FNameCurveKey(float time, FName value)\n    {\n        Time = time;\n        Value = value;\n    }\n\n    public FNameCurveKey(AssetBinaryReader reader)\n    {\n        Time = reader.ReadSingle();\n        Value = reader.ReadFName();\n    }\n\n    public static FNameCurveKey Read(AssetBinaryReader reader) => new FNameCurveKey(reader);\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        var offset = writer.BaseStream.Position;\n\n        writer.Write(Time);\n        writer.Write(Value);\n\n        return (int)(writer.BaseStream.Position - offset);\n    }\n\n    public override string ToString() => $\"({Time}, {Value})\";\n\n    public static FNameCurveKey FromString(string[] d, UAsset asset)\n    {\n        float.TryParse(d[0], out float time);\n        FName value = FName.FromString(asset, d[1]);\n        return new FNameCurveKey(time, value);\n    }\n}\n\npublic class NameCurveKeyPropertyData : BasePropertyData<FNameCurveKey>\n{\n    public NameCurveKeyPropertyData(FName name) : base(name) { }\n    public NameCurveKeyPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"NameCurveKey\");\n    public override FString PropertyType => CurrentPropertyType;\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Niagara/NiagaraDataInterfaceGPUParamInfoPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic class NiagaraDataInterfaceGPUParamInfoPropertyData : BasePropertyData<FNiagaraDataInterfaceGPUParamInfo>\n{\n    public NiagaraDataInterfaceGPUParamInfoPropertyData(FName name) : base(name) { }\n\n    public NiagaraDataInterfaceGPUParamInfoPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"NiagaraDataInterfaceGPUParamInfo\");\n    public override FString PropertyType => CurrentPropertyType;\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Niagara/NiagaraVariablePropertyData.cs",
    "content": "using System;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\npublic class NiagaraDataChannelVariablePropertyData : NiagaraVariableBasePropertyData\r\n{\r\n    public NiagaraDataChannelVariablePropertyData(FName name, FName forcedType) : base(name, forcedType) { }\r\n    public NiagaraDataChannelVariablePropertyData(FName name) : base(name) { }\r\n    public NiagaraDataChannelVariablePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"NiagaraDataChannelVariable\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n}\r\n\r\npublic class NiagaraVariableBasePropertyData : StructPropertyData\r\n{\r\n    public FName VariableName;\r\n    public StructPropertyData TypeDef;\r\n\r\n    public NiagaraVariableBasePropertyData(FName name, FName forcedType) : base(name, forcedType) { }\r\n    public NiagaraVariableBasePropertyData(FName name) : base(name) { }\r\n    public NiagaraVariableBasePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"NiagaraVariableBase\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (reader.Asset.GetEngineVersion() <= EngineVersion.VER_UE4_25)\r\n        {\r\n            StructType = FName.DefineDummy(reader.Asset, PropertyType);\r\n            base.Read(reader, includeHeader, 1, 0, PropertySerializationContext.StructFallback);\r\n            return;\r\n        }\r\n\r\n        VariableName = reader.ReadFName();\r\n        TypeDef = new StructPropertyData(FName.DefineDummy(reader.Asset, \"TypeDef\"), FName.DefineDummy(reader.Asset, \"NiagaraTypeDefinition\"));\r\n        TypeDef.Read(reader, false, 1, 0, serializationContext);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (writer.Asset.GetEngineVersion() <= EngineVersion.VER_UE4_25)\r\n        {\r\n            StructType = FName.DefineDummy(writer.Asset, PropertyType);\r\n            return base.Write(writer, includeHeader, PropertySerializationContext.StructFallback);\r\n        }\r\n\r\n        var offset = writer.BaseStream.Position;\r\n        writer.Write(VariableName);\r\n        if (TypeDef == null) TypeDef = new StructPropertyData(FName.DefineDummy(writer.Asset, \"TypeDef\"), FName.DefineDummy(writer.Asset, \"NiagaraTypeDefinition\"));\r\n        TypeDef.Write(writer, false);\r\n        return (int)(writer.BaseStream.Position - offset);\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        VariableName = FName.FromString(asset, d[0]);\r\n    }\r\n}\r\n\r\npublic class NiagaraVariablePropertyData : NiagaraVariableBasePropertyData\r\n{\r\n    public byte[] VarData;\r\n\r\n    public NiagaraVariablePropertyData(FName name, FName forcedType) : base(name, forcedType) { }\r\n    public NiagaraVariablePropertyData(FName name) : base(name) { }\r\n    public NiagaraVariablePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"NiagaraVariable\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        base.Read(reader, includeHeader, leng1, leng2, serializationContext);\r\n\r\n        if (reader.Asset.GetEngineVersion() >= EngineVersion.VER_UE4_26)\r\n        {\r\n            int varDataSize = reader.ReadInt32();\r\n            VarData = reader.ReadBytes(varDataSize);\r\n        }\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        int sz = base.Write(writer, includeHeader, serializationContext);\r\n        if (writer.Asset.GetEngineVersion() <= EngineVersion.VER_UE4_25)\r\n            return sz;\r\n\r\n        if (VarData == null) VarData = Array.Empty<byte>();\r\n        writer.Write(VarData.Length); sz += sizeof(int);\r\n        writer.Write(VarData); sz += VarData.Length;\r\n        return sz;\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        base.FromString(d, asset);\r\n        VarData = d[2].ConvertStringToByteArray();\r\n    }\r\n}\r\n\r\npublic class NiagaraVariableWithOffsetPropertyData : NiagaraVariableBasePropertyData\r\n{\r\n    public int VariableOffset;\r\n\r\n    public NiagaraVariableWithOffsetPropertyData(FName name, FName forcedType) : base(name, forcedType) { }\r\n    public NiagaraVariableWithOffsetPropertyData(FName name) : base(name) { }\r\n    public NiagaraVariableWithOffsetPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"NiagaraVariableWithOffset\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        base.Read(reader, includeHeader, leng1, leng2, serializationContext);\r\n\r\n        if (reader.Asset.GetEngineVersion() >= EngineVersion.VER_UE4_26)\r\n            VariableOffset = reader.ReadInt32();\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        int sz = base.Write(writer, includeHeader);\r\n        if (writer.Asset.GetEngineVersion() <= EngineVersion.VER_UE4_25)\r\n            return sz;\r\n\r\n        writer.Write(VariableOffset);\r\n        sz += sizeof(int);\r\n        return sz;\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        base.FromString(d, asset);\r\n        VariableOffset = 0;\r\n        if (int.TryParse(d[2], out int res)) VariableOffset = res;\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Ranges/FloatRangePropertyData.cs",
    "content": "﻿using UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\npublic class FloatRangePropertyData : PropertyData\r\n{\r\n    public float LowerBound;\r\n    public float UpperBound;\r\n\r\n    public FloatRangePropertyData(FName name) : base(name) { }\r\n\r\n    public FloatRangePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"FloatRange\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        LowerBound = reader.ReadSingle();\r\n        UpperBound = reader.ReadSingle();\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        writer.Write(LowerBound);\r\n        writer.Write(UpperBound);\r\n        return sizeof(float) * 2;\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        if (float.TryParse(d[0], out float res1)) LowerBound = res1;\r\n        if (float.TryParse(d[1], out float res2)) UpperBound = res2;\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return \"(\" + LowerBound + \", \" + UpperBound + \")\";\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/RawStructPropertyData.cs",
    "content": "using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\npublic class RawStructPropertyData : PropertyData<byte[]>\r\n{\r\n    [JsonProperty]\r\n    public FName StructType = null;\r\n    [JsonProperty]\r\n    public bool SerializeNone = true;\r\n    [JsonProperty]\r\n    public Guid StructGUID = Guid.Empty; // usually set to 0\r\n\r\n    public RawStructPropertyData(FName name) : base(name) { }\r\n\r\n    public RawStructPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"RawStructProperty\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader && !reader.Asset.HasUnversionedProperties)\r\n        {\r\n            if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n            {\r\n                if (PropertyTypeName is null) throw new FormatException(\"PropertyTypeName is required to read MapProperty with complete type names.\");\r\n                StructType = PropertyTypeName.GetParameter(0).GetName();\r\n                //StructGUID\r\n            }\r\n            else\r\n            {\r\n                StructType = reader.ReadFName();\r\n                if (reader.Asset.ObjectVersion >= ObjectVersion.VER_UE4_STRUCT_GUID_IN_PROPERTY_TAG) StructGUID = new Guid(reader.ReadBytes(16));\r\n            }\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = reader.ReadBytes((int)leng1);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader && !writer.Asset.HasUnversionedProperties)\r\n        {\r\n            if (writer.Asset.ObjectVersionUE5 < ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n            {\r\n                writer.Write(StructType);\r\n                if (writer.Asset.ObjectVersion >= ObjectVersion.VER_UE4_STRUCT_GUID_IN_PROPERTY_TAG) writer.Write(StructGUID.ToByteArray());\r\n            }\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        writer.Write(Value);\r\n        return Value.Length;\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Slate/DeprecateSlateVector2DPropertyData.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic class DeprecateSlateVector2DPropertyData : BasePropertyData<FVector2f>\n{\n    public DeprecateSlateVector2DPropertyData(FName name) : base(name) { }\n\n    public DeprecateSlateVector2DPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"DeprecateSlateVector2D\");\n    public override FString PropertyType => CurrentPropertyType;\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/Slate/FontDataPropertyData.cs",
    "content": "﻿using Newtonsoft.Json;\nusing UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.PropertyTypes.Structs;\n\npublic class FontDataPropertyData : PropertyData<FFontData>\n{\n    public FontDataPropertyData(FName name) : base(name) { }\n\n    public FontDataPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"FontData\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.ReadEndPropertyTag(reader);\n        }\n\n        Value = new FFontData(reader);\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        if (includeHeader)\n        {\n            this.WriteEndPropertyTag(writer);\n        }\n\n        if (Value == null) Value = new FFontData();\n        return Value.Write(writer);\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/SoftObjectPathPropertyData.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\n/// <summary>\r\n/// A struct that contains a string reference to an object, either a top level asset or a subobject.\r\n/// This can be used to make soft references to assets that are loaded on demand.\r\n/// This is stored internally as an FName pointing to the top level asset (/package/path.assetname) and an option a string subobject path.\r\n/// </summary>\r\npublic class SoftObjectPathPropertyData : PropertyData<FSoftObjectPath>\r\n{\r\n    /// <summary>Used in older versions of the Unreal Engine.</summary>\r\n    [JsonProperty]\r\n    public FString Path;\r\n\r\n    public SoftObjectPathPropertyData(FName name) : base(name) { }\r\n\r\n    public SoftObjectPathPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"SoftObjectPath\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        if (reader.Asset.ObjectVersion < ObjectVersion.VER_UE4_ADDED_SOFT_OBJECT_PATH)\r\n        {\r\n            Path = reader.ReadFString();\r\n        }\r\n        else\r\n        {\r\n            Value = new FSoftObjectPath(reader);\r\n        }\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        int here = (int)writer.BaseStream.Position;\r\n\r\n        if (writer.Asset.ObjectVersion < ObjectVersion.VER_UE4_ADDED_SOFT_OBJECT_PATH)\r\n        {\r\n            writer.Write(Path);\r\n        }\r\n        else\r\n        {\r\n            Value.Write(writer);\r\n        }\r\n\r\n        return (int)writer.BaseStream.Position - here;\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return \"(\" + Value.AssetPath.PackageName.ToString() + \", \" + Value.AssetPath.AssetName.ToString() + \", \" + Value.SubPathString.ToString() + \")\";\r\n    }\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        if (asset.ObjectVersion < ObjectVersion.VER_UE4_ADDED_SOFT_OBJECT_PATH)\r\n        {\r\n            Path = FString.FromString(d[0]);\r\n        }\r\n        else\r\n        {\r\n            FName one = FName.FromString(asset, d[0]);\r\n            FName two = FName.FromString(asset, d[1]);\r\n            FString three = string.IsNullOrEmpty(d[2]) ? null : FString.FromString(d[2]);\r\n\r\n            Value = new FSoftObjectPath(one, two, three);\r\n        }\r\n    }\r\n}\r\n\r\n\r\n/// <summary>\r\n/// A struct that contains a string reference to a class. Can be used to make soft references to classes.\r\n/// </summary>\r\npublic class SoftClassPathPropertyData : SoftObjectPathPropertyData\r\n{\r\n    public SoftClassPathPropertyData(FName name) : base(name) { }\r\n\r\n    public SoftClassPathPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"SoftClassPath\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n}\r\n\r\n\r\npublic class SoftAssetPathPropertyData : SoftObjectPathPropertyData\r\n{\r\n    public SoftAssetPathPropertyData(FName name) : base(name) { }\r\n\r\n    public SoftAssetPathPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"SoftAssetPath\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n}\r\n\r\n/// <summary>\r\n/// A struct that contains a string reference to a class. Can be used to make soft references to classes.\r\n/// </summary>\r\npublic class StringAssetReferencePropertyData : SoftObjectPathPropertyData\r\n{\r\n    public StringAssetReferencePropertyData(FName name) : base(name) { }\r\n\r\n    public StringAssetReferencePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"StringAssetReference\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n}\r\n\r\npublic class StringClassReferencePropertyData : SoftObjectPathPropertyData\r\n{\r\n    public StringClassReferencePropertyData(FName name) : base(name) { }\r\n\r\n    public StringClassReferencePropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"StringClassReference\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n}"
  },
  {
    "path": "UAssetAPI/PropertyTypes/Structs/StructPropertyData.cs",
    "content": "using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing UAssetAPI.CustomVersions;\r\nusing UAssetAPI.ExportTypes;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.Unversioned;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Structs;\r\n\r\npublic class StructPropertyData : PropertyData<List<PropertyData>>\r\n{\r\n    [JsonProperty]\r\n    public FName StructType = null;\r\n    [JsonProperty]\r\n    public bool SerializeNone = true;\r\n    [JsonProperty]\r\n    public Guid StructGUID = Guid.Empty; // usually set to 0\r\n    [JsonProperty]\r\n    public EClassSerializationControlExtension SerializationControl;\r\n    [JsonProperty]\r\n    public EOverriddenPropertyOperation Operation;\r\n\r\n    /// <summary>\r\n    /// Gets or sets the value associated with the specified key. This operation loops linearly, so it may not be suitable for high-performance environments.\r\n    /// </summary>\r\n    /// <param name=\"key\">The key associated with the value to get or set.</param>\r\n    public virtual PropertyData this[FName key]\r\n    {\r\n        get\r\n        {\r\n            if (Value == null) return null;\r\n\r\n            for (int i = 0; i < Value.Count; i++)\r\n            {\r\n                if (Value[i].Name == key) return Value[i];\r\n            }\r\n            return null;\r\n        }\r\n        set\r\n        {\r\n            if (Value == null) Value = [];\r\n            value.Name = key;\r\n\r\n            for (int i = 0; i < Value.Count; i++)\r\n            {\r\n                if (Value[i].Name == key)\r\n                {\r\n                    Value[i] = value;\r\n                    return;\r\n                }\r\n            }\r\n\r\n            Value.Add(value);\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Gets or sets the value associated with the specified key. This operation loops linearly, so it may not be suitable for high-performance environments.\r\n    /// </summary>\r\n    /// <param name=\"key\">The key associated with the value to get or set.</param>\r\n    public virtual PropertyData this[string key]\r\n    {\r\n        get\r\n        {\r\n            return this[FName.FromString(Name?.Asset, key)];\r\n        }\r\n        set\r\n        {\r\n            this[FName.FromString(Name?.Asset, key)] = value;\r\n        }\r\n    }\r\n\r\n    public StructPropertyData(FName name) : base(name)\r\n    {\r\n        Value = [];\r\n    }\r\n\r\n    public StructPropertyData(FName name, FName forcedType) : base(name)\r\n    {\r\n        StructType = forcedType;\r\n        Value = [];\r\n    }\r\n\r\n    public StructPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"StructProperty\");\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    private void ReadOnce(AssetBinaryReader reader, Type T, long offset, long leng1)\r\n    {\r\n        if (Activator.CreateInstance(T, Name) is not PropertyData data) return;\r\n        data.Offset = offset;\r\n        data.Ancestry.Initialize(Ancestry, Name);\r\n        // i think it's unnecessary\r\n        data.PropertyTypeName = PropertyTypeName?.GetParameter(0);\r\n        data.Read(reader, false, leng1);\r\n        Value = new List<PropertyData> { data };\r\n    }\r\n\r\n    private void ReadNTPL(AssetBinaryReader reader, bool resetValue = true)\r\n    {\r\n        List<PropertyData> resultingList = resetValue ? new List<PropertyData>() : Value;\r\n        PropertyData data = null;\r\n\r\n        var unversionedHeader = new FUnversionedHeader(reader);\r\n        while ((data = MainSerializer.Read(reader, Ancestry, StructType, FName.DefineDummy(reader.Asset, reader.Asset.InternalAssetPath + ((Ancestry?.Ancestors?.Count ?? 0) == 0 ? string.Empty : (\".\" + Ancestry.Parent))), unversionedHeader, true)) != null)\r\n        {\r\n            resultingList.Add(data);\r\n        }\r\n\r\n        Value = resultingList;\r\n    }\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader && !reader.Asset.HasUnversionedProperties) // originally !isForced\r\n        {\r\n            if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n            {\r\n                if (PropertyTypeName is null) throw new FormatException(\"PropertyTypeName is required to read StructProperty with complete type names.\");\r\n                StructType = PropertyTypeName.GetParameter(0).GetName();\r\n            }\r\n            else\r\n            {\r\n                StructType = reader.ReadFName();\r\n                if (reader.Asset.ObjectVersion >= ObjectVersion.VER_UE4_STRUCT_GUID_IN_PROPERTY_TAG) StructGUID = new Guid(reader.ReadBytes(16));\r\n            }\r\n\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        if (reader.Asset.Mappings != null && (StructType == null || StructType.Value.Value == \"Generic\") && reader.Asset.Mappings.TryGetPropertyData(Name, Ancestry, reader.Asset, out UsmapStructData strucDat1))\r\n        {\r\n            StructType = FName.DefineDummy(reader.Asset, strucDat1.StructType);\r\n        }\r\n\r\n        if (reader.Asset.HasUnversionedProperties && StructType?.Value?.Value == null)\r\n        {\r\n            throw new InvalidOperationException(\"Unable to determine struct type for struct \" + Name.Value.Value + \" in class \" + Ancestry.Parent.Value.Value);\r\n        }\r\n\r\n        RegistryEntry targetEntry = null;\r\n        string structTypeVal = StructType?.Value?.Value;\r\n        if (structTypeVal != null) MainSerializer.PropertyTypeRegistry.TryGetValue(structTypeVal, out targetEntry);\r\n        bool hasCustomStructSerialization = targetEntry != null && targetEntry.HasCustomStructSerialization && serializationContext != PropertySerializationContext.StructFallback;\r\n\r\n        if (structTypeVal == \"FloatRange\")\r\n        {\r\n            // FloatRange is a special case; it can either be manually serialized as two floats (TRange<float>) or as a regular struct (FFloatRange), but the first is overridden to use the same name as the second\r\n            // The best solution is to just check and see if the next bit is an FName or not\r\n\r\n            int nextFourBytes = reader.ReadInt32();\r\n            reader.BaseStream.Position -= sizeof(int);\r\n            hasCustomStructSerialization = !(reader.Asset.HasUnversionedProperties || (nextFourBytes >= 0 && nextFourBytes < reader.Asset.GetNameMapIndexList().Count && reader.Asset.GetNameReference(nextFourBytes).Value.EndsWith(\"Bound\")));\r\n        }\r\n        if (structTypeVal == \"RichCurveKey\" && reader.Asset.ObjectVersion < ObjectVersion.VER_UE4_SERIALIZE_RICH_CURVE_KEY) hasCustomStructSerialization = false;\r\n        if (structTypeVal == \"MovieSceneTrackIdentifier\" && reader.Asset.GetCustomVersion<FEditorObjectVersion>() < FEditorObjectVersion.MovieSceneMetaDataSerialization) hasCustomStructSerialization = false;\r\n        if (structTypeVal == \"MovieSceneFloatChannel\" && reader.Asset.GetCustomVersion<FSequencerObjectVersion>() < FSequencerObjectVersion.SerializeFloatChannelCompletely) hasCustomStructSerialization = false;\r\n        if (structTypeVal == \"MovieSceneFloatValue\" && reader.Asset.GetCustomVersion<FSequencerObjectVersion>() < FSequencerObjectVersion.SerializeFloatChannel) hasCustomStructSerialization = false;\r\n        if (structTypeVal == \"MovieSceneTangentData\" && reader.Asset.GetCustomVersion<FSequencerObjectVersion>() < FSequencerObjectVersion.SerializeFloatChannel) hasCustomStructSerialization = false;\r\n        if (structTypeVal == \"FontData\" && reader.Asset.GetCustomVersion<FEditorObjectVersion>() < FEditorObjectVersion.AddedFontFaceAssets) hasCustomStructSerialization = false;\r\n\r\n        if (leng1 == 0)\r\n        {\r\n            SerializeNone = false;\r\n            Value = [];\r\n            return;\r\n        }\r\n\r\n        if (targetEntry != null && hasCustomStructSerialization)\r\n        {\r\n            ReadOnce(reader, targetEntry.PropertyType, reader.BaseStream.Position, leng1);\r\n        }\r\n        else\r\n        {\r\n            ReadNTPL(reader);\r\n        }\r\n    }\r\n\r\n    public override void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n    {\r\n        var ancestryNew = (AncestryInfo)ancestrySoFar.Clone();\r\n        ancestryNew.SetAsParent(StructType, FName.DefineDummy(asset, asset.InternalAssetPath + (ancestrySoFar.Ancestors.Count == 0 ? string.Empty : (\".\" + ancestrySoFar.Parent))));\r\n\r\n        if (Value != null)\r\n        {\r\n            foreach (var entry in Value) entry?.ResolveAncestries(asset, ancestryNew);\r\n        }\r\n        base.ResolveAncestries(asset, ancestrySoFar);\r\n    }\r\n\r\n    private int WriteOnce(AssetBinaryWriter writer)\r\n    {\r\n        if (Value.Count > 1) throw new InvalidOperationException(\"Structs with type \" + StructType.Value.Value + \" cannot have more than one entry\");\r\n\r\n        if (Value.Count == 0)\r\n        {\r\n            // populate fallback zero entry \r\n            if (Value == null) Value = new List<PropertyData>();\r\n            Value.Clear();\r\n            Value.Add(MainSerializer.TypeToClass(StructType, Name, Ancestry, Name, null, writer.Asset, null, 0, EPropertyTagFlags.None, 0, false));\r\n        }\r\n        Value[0].Offset = writer.BaseStream.Position;\r\n        return Value[0].Write(writer, false);\r\n    }\r\n\r\n    private int WriteNTPL(AssetBinaryWriter writer)\r\n    {\r\n        int here = (int)writer.BaseStream.Position;\r\n\r\n        List<PropertyData> allDat = Value;\r\n        MainSerializer.GenerateUnversionedHeader(ref allDat, StructType, FName.DefineDummy(writer.Asset, writer.Asset.InternalAssetPath + ((Ancestry?.Ancestors?.Count ?? 0) == 0 ? string.Empty : (\".\" + Ancestry.Parent))), writer.Asset)?.Write(writer);\r\n        foreach (var t in allDat)\r\n        {\r\n            MainSerializer.Write(t, writer, true);\r\n        }\r\n        if (!writer.Asset.HasUnversionedProperties) writer.Write(new FName(writer.Asset, \"None\"));\r\n        return (int)writer.BaseStream.Position - here;\r\n    }\r\n\r\n    internal bool DetermineIfSerializeWithCustomStructSerialization(UAsset Asset, PropertySerializationContext serializationContext, out RegistryEntry targetEntry)\r\n    {\r\n        targetEntry = null;\r\n        string structTypeVal = StructType?.Value?.Value;\r\n        if (structTypeVal != null) MainSerializer.PropertyTypeRegistry.TryGetValue(structTypeVal, out targetEntry);\r\n        bool hasCustomStructSerialization = targetEntry != null && targetEntry.HasCustomStructSerialization && serializationContext != PropertySerializationContext.StructFallback;\r\n\r\n        if (structTypeVal == \"FloatRange\") hasCustomStructSerialization = Value.Count == 1 && Value[0] is FloatRangePropertyData;\r\n        if (structTypeVal == \"RichCurveKey\" && Asset.ObjectVersion < ObjectVersion.VER_UE4_SERIALIZE_RICH_CURVE_KEY) hasCustomStructSerialization = false;\r\n        if (structTypeVal == \"MovieSceneTrackIdentifier\" && Asset.GetCustomVersion<FEditorObjectVersion>() < FEditorObjectVersion.MovieSceneMetaDataSerialization) hasCustomStructSerialization = false;\r\n        if (structTypeVal == \"MovieSceneFloatChannel\" && Asset.GetCustomVersion<FSequencerObjectVersion>() < FSequencerObjectVersion.SerializeFloatChannelCompletely) hasCustomStructSerialization = false;\r\n        if (structTypeVal == \"MovieSceneFloatValue\" && Asset.GetCustomVersion<FSequencerObjectVersion>() < FSequencerObjectVersion.SerializeFloatChannel) hasCustomStructSerialization = false;\r\n        if (structTypeVal == \"MovieSceneTangentData\" && Asset.GetCustomVersion<FSequencerObjectVersion>() < FSequencerObjectVersion.SerializeFloatChannel) hasCustomStructSerialization = false;\r\n        if (structTypeVal == \"FontData\" && Asset.GetCustomVersion<FEditorObjectVersion>() < FEditorObjectVersion.AddedFontFaceAssets) hasCustomStructSerialization = false;\r\n        return hasCustomStructSerialization;\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        // if available and needed, fetch StructType from mappings\r\n        if (writer.Asset.Mappings != null && (StructType == null || StructType.Value.Value == \"Generic\") && writer.Asset.Mappings.TryGetPropertyData(Name, Ancestry, writer.Asset, out UsmapStructData strucDat1))\r\n        {\r\n            StructType = FName.DefineDummy(writer.Asset, strucDat1.StructType);\r\n        }\r\n\r\n        if (includeHeader && !writer.Asset.HasUnversionedProperties)\r\n        {\r\n            if (writer.Asset.ObjectVersionUE5 < ObjectVersionUE5.PROPERTY_TAG_COMPLETE_TYPE_NAME)\r\n            {\r\n                writer.Write(StructType);\r\n                if (writer.Asset.ObjectVersion >= ObjectVersion.VER_UE4_STRUCT_GUID_IN_PROPERTY_TAG) writer.Write(StructGUID.ToByteArray());\r\n            }\r\n\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        if (Value == null) Value = [];\r\n\r\n        bool hasCustomStructSerialization = DetermineIfSerializeWithCustomStructSerialization(writer.Asset, serializationContext, out RegistryEntry targetEntry);\r\n        if (targetEntry != null && hasCustomStructSerialization) return WriteOnce(writer);\r\n        if (Value.Count == 0 && !SerializeNone) return 0;\r\n        return WriteNTPL(writer);\r\n    }\r\n\r\n    // removed; we'll actually just use default PropertyData alg\r\n\r\n    /*public override bool CanBeZero(UAsset asset)\r\n    {\r\n        if (StructType?.Value?.Value == \"Guid\")\r\n        {\r\n            return base.CanBeZero(asset);\r\n        }\r\n        return !DetermineIfSerializeWithCustomStructSerialization(asset, out _, out __) && base.CanBeZero(asset);\r\n    }*/\r\n\r\n    public override void FromString(string[] d, UAsset asset)\r\n    {\r\n        if (d[4] != null && d[4] != \"Generic\") StructType = asset.HasUnversionedProperties ? FName.DefineDummy(asset, d[4]) : FName.FromString(asset, d[4]);\r\n        if (StructType == null) StructType = FName.DefineDummy(asset, \"Generic\");\r\n    }\r\n\r\n    protected override void HandleCloned(PropertyData res)\r\n    {\r\n        StructPropertyData cloningProperty = (StructPropertyData)res;\r\n        cloningProperty.StructType = (FName)this.StructType?.Clone();\r\n        cloningProperty.StructGUID = new Guid(this.StructGUID.ToByteArray());\r\n\r\n        if (this.Value != null)\r\n        {\r\n            List<PropertyData> newData = new List<PropertyData>(this.Value.Count);\r\n            for (int i = 0; i < this.Value.Count; i++)\r\n            {\r\n                newData.Add((PropertyData)this.Value[i].Clone());\r\n            }\r\n            cloningProperty.Value = newData;\r\n        }\r\n        else\r\n        {\r\n            cloningProperty.Value = null;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/UAPUtils.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing UAssetAPI.ExportTypes;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI\r\n{\r\n    public static class UAPUtils\r\n    {\r\n        public static string CurrentCommit = string.Empty;\r\n\r\n        public static string SerializeJson(object obj, bool isFormatted)\r\n        {\r\n            return JsonConvert.SerializeObject(obj, isFormatted ? Formatting.Indented : Formatting.None, UAsset.jsonSettings);\r\n        }\r\n\r\n        public static List<T> FindAllInstances<T>(object parent) where T : class\r\n        {\r\n            HashSet<object> yaExplorado = new HashSet<object>();\r\n            List<T> res = new List<T>();\r\n\r\n            FindAllInstances(parent, yaExplorado, res);\r\n\r\n            return res;\r\n        }\r\n\r\n        private static void FindAllInstances<T>(object value, HashSet<object> yaExplorado, List<T> res) where T : class\r\n        {\r\n            if (value == null) return;\r\n            if (yaExplorado.Contains(value)) return;\r\n\r\n            yaExplorado.Add(value);\r\n\r\n            if (value is IEnumerable enumerable)\r\n            {\r\n                foreach (object item in enumerable)\r\n                {\r\n                    FindAllInstances<T>(item, yaExplorado, res);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                if (value is T match) res.Add(match);\r\n\r\n                PropertyInfo[] properties = value.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.GetProperty);\r\n                foreach (PropertyInfo property in properties)\r\n                {\r\n                    if (property.GetIndexParameters().Length > 0) continue;\r\n                    if (value is PropertyData && (property.Name == \"PropertyType\" || property.Name == \"HasCustomStructSerialization\")) continue;\r\n                    FindAllInstances<T>(property.GetValue(value, null), yaExplorado, res);\r\n                }\r\n\r\n                FieldInfo[] fields = value.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);\r\n                foreach (FieldInfo field in fields)\r\n                {\r\n                    FindAllInstances<T>(field.GetValue(value), yaExplorado, res);\r\n                }\r\n            }\r\n        }\r\n\r\n        public static T Clamp<T>(T val, T min, T max) where T : IComparable<T>\r\n        {\r\n            if (val.CompareTo(min) < 0) return min;\r\n            else if (val.CompareTo(max) > 0) return max;\r\n            else return val;\r\n        }\r\n\r\n        public static FieldInfo[] GetOrderedFields<T>()\r\n        {\r\n            return GetOrderedFields(typeof(T));\r\n        }\r\n\r\n        public static FieldInfo[] GetOrderedFields(Type t)\r\n        {\r\n            return t.GetFields().Where(fld => fld.IsDefined(typeof(DisplayIndexOrderAttribute), true)).OrderBy(fld => ((DisplayIndexOrderAttribute[])fld.GetCustomAttributes(typeof(DisplayIndexOrderAttribute), true))[0].DisplayingIndex).ToArray();\r\n        }\r\n\r\n        public static MemberInfo[] GetOrderedMembers<T>()\r\n        {\r\n            return GetOrderedMembers(typeof(T));\r\n        }\r\n\r\n        public static MemberInfo[] GetOrderedMembers(Type t)\r\n        {\r\n            return t.GetMembers().Where(fld => fld.IsDefined(typeof(DisplayIndexOrderAttribute), true)).OrderBy(fld => ((DisplayIndexOrderAttribute[])fld.GetCustomAttributes(typeof(DisplayIndexOrderAttribute), true))[0].DisplayingIndex).Where(x => x.MemberType == MemberTypes.Field || x.MemberType == MemberTypes.Property).ToArray();\r\n        }\r\n\r\n        // https://stackoverflow.com/a/33446914\r\n        public static object GetValue(this MemberInfo memberInfo, object forObject)\r\n        {\r\n            switch (memberInfo.MemberType)\r\n            {\r\n                case MemberTypes.Field:\r\n                    return ((FieldInfo)memberInfo).GetValue(forObject);\r\n                case MemberTypes.Property:\r\n                    return ((PropertyInfo)memberInfo).GetValue(forObject);\r\n                default:\r\n                    throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n        public static void SetValue(this MemberInfo memberInfo, object forObject, object forVal)\r\n        {\r\n            switch (memberInfo.MemberType)\r\n            {\r\n                case MemberTypes.Field:\r\n                    ((FieldInfo)memberInfo).SetValue(forObject, forVal);\r\n                    break;\r\n                case MemberTypes.Property:\r\n                    ((PropertyInfo)memberInfo).SetValue(forObject, forVal);\r\n                    break;\r\n                default:\r\n                    throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n\r\n        public static FString GetImportNameReferenceWithoutZero(int j, UAsset asset)\r\n        {\r\n            FString refer = new FPackageIndex(j).ToImport(asset).ObjectName.Value;\r\n            if (!asset.ContainsNameReference(refer)) return refer;\r\n            return asset.GetNameReferenceWithoutZero(asset.SearchNameReference(refer));\r\n        }\r\n\r\n        public static uint[] InterpretAsGuidAndConvertToUnsignedInts(this string value)\r\n        {\r\n            Guid res = value.Trim().ConvertToGUID();\r\n            return res.ToUnsignedInts();\r\n        }\r\n\r\n        // adapted from UAssetGUI - see NOTICE.md\r\n        public static byte[] ConvertStringToByteArray(this string val)\r\n        {\r\n            if (string.IsNullOrWhiteSpace(val)) return Array.Empty<byte>();\r\n            string[] rawStringArr = val.Split(' ');\r\n            byte[] byteArr = new byte[rawStringArr.Length];\r\n            for (int i = 0; i < rawStringArr.Length; i++) byteArr[i] = Convert.ToByte(rawStringArr[i], 16);\r\n            return byteArr;\r\n        }\r\n\r\n        public static uint[] ToUnsignedInts(this Guid value)\r\n        {\r\n            byte[] vals = value.ToByteArray();\r\n            uint[] res = new uint[4];\r\n            res[0] = BitConverter.ToUInt32(vals, 0);\r\n            res[1] = BitConverter.ToUInt32(vals, sizeof(uint));\r\n            res[2] = BitConverter.ToUInt32(vals, sizeof(uint) * 2);\r\n            res[3] = BitConverter.ToUInt32(vals, sizeof(uint) * 3);\r\n            return res;\r\n        }\r\n\r\n        public static Guid GUID(uint value1, uint value2, uint value3, uint value4)\r\n        {\r\n            byte[] bytes = new byte[16];\r\n            BitConverter.GetBytes(value1).CopyTo(bytes, 0);\r\n            BitConverter.GetBytes(value2).CopyTo(bytes, sizeof(uint));\r\n            BitConverter.GetBytes(value3).CopyTo(bytes, sizeof(uint) * 2);\r\n            BitConverter.GetBytes(value4).CopyTo(bytes, sizeof(uint) * 3);\r\n            return new Guid(bytes);\r\n        }\r\n\r\n        public static Guid ConvertToGUID(this string GuidString)\r\n        {\r\n            if (GuidString == null ||\r\n            (GuidString[0] != '{') ||\r\n            (GuidString[9] != '-') ||\r\n            (GuidString[14] != '-') ||\r\n            (GuidString[19] != '-') ||\r\n            (GuidString[24] != '-') ||\r\n            (GuidString[37] != '}'))\r\n            {\r\n                if (Guid.TryParse(GuidString, out Guid res1)) return res1;\r\n                return Guid.Empty;\r\n            }\r\n\r\n            string byteText = GuidString.Substring(29, 8) + GuidString.Substring(20, 4) + GuidString.Substring(25, 4) + GuidString.Substring(10, 4) + GuidString.Substring(15, 4) + GuidString.Substring(1, 8);\r\n            byte[] byteArr = ConvertHexStringToByteArray(byteText);\r\n            Array.Reverse(byteArr);\r\n            return new Guid(byteArr);\r\n        }\r\n\r\n        public static string ConvertToString(this Guid val)\r\n        {\r\n            byte[] byteArr = val.ToByteArray();\r\n            Array.Reverse(byteArr);\r\n            string bytes = BitConverter.ToString(byteArr).Replace(\"-\", \"\");\r\n            return (\"{\" + bytes.Substring(24, 8) + \"-\" + bytes.Substring(16, 4) + \"-\" + bytes.Substring(20, 4) + \"-\" + bytes.Substring(8, 4) + \"-\" + bytes.Substring(12, 4) + bytes.Substring(0, 8) + \"}\").ToUpperInvariant();\r\n        }\r\n\r\n        public static byte[] ConvertHexStringToByteArray(string hexString)\r\n        {\r\n            hexString = hexString.Replace(\" \", string.Empty).Replace(\"-\", string.Empty);\r\n\r\n            byte[] data = new byte[hexString.Length / 2];\r\n            for (int index = 0; index < data.Length; index++)\r\n            {\r\n                string byteValue = hexString.Substring(index * 2, 2);\r\n                data[index] = byte.Parse(byteValue, NumberStyles.HexNumber, CultureInfo.InvariantCulture);\r\n            }\r\n\r\n            return data;\r\n        }\r\n\r\n        public static long AlignPadding(long pos, int align)\r\n        {\r\n            long remainder = pos % align;\r\n            return pos + (remainder == 0 ? remainder : (align - remainder));\r\n        }\r\n\r\n        public static int AlignPadding(int pos, int align)\r\n        {\r\n            return (int)AlignPadding((long)pos, align);\r\n        }\r\n\r\n        public static int DivideAndRoundUp(int a, int b)\r\n        {\r\n            return (a + b - 1) / b;\r\n        }\r\n\r\n        public static string FixDirectorySeparatorsForDisk(this string path)\r\n        {\r\n            return path.Replace('/', Path.DirectorySeparatorChar).Replace('\\\\', Path.DirectorySeparatorChar);\r\n        }\r\n\r\n        public static List<T> SortByDependencies<T>(this IEnumerable<T> allExports, IDictionary<T, IList<T>> dependencies)\r\n        {\r\n            var sortedSoFar = new List<T>();\r\n            var visited = new HashSet<T>();\r\n\r\n            foreach (var item in allExports) SortByDependenciesVisit(item, visited, sortedSoFar, dependencies);\r\n\r\n            return sortedSoFar;\r\n        }\r\n\r\n        private static void SortByDependenciesVisit<T>(T item, HashSet<T> visited, List<T> sortedSoFar, IDictionary<T, IList<T>> dependencies)\r\n        {\r\n            if (!visited.Contains(item))\r\n            {\r\n                visited.Add(item);\r\n                if (dependencies.ContainsKey(item))\r\n                {\r\n                    foreach (var dependency in dependencies[item]) SortByDependenciesVisit(dependency, visited, sortedSoFar, dependencies);\r\n                }\r\n                sortedSoFar.Add(item);\r\n            }\r\n            else\r\n            {\r\n                if (!sortedSoFar.Contains(item)) throw new FormatException(\"Cyclic dependency exists in preload dependency graph\");\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/UAsset.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing Newtonsoft.Json.Converters;\r\nusing System;\r\nusing System.Collections;\r\nusing System.Collections.Concurrent;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing UAssetAPI.CustomVersions;\r\nusing UAssetAPI.ExportTypes;\r\nusing UAssetAPI.FieldTypes;\r\nusing UAssetAPI.JSON;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.Unversioned;\r\n\r\n#if DEBUGTRACING\r\nusing PostSharp.Aspects;\r\nusing PostSharp.Serialization;\r\n#endif\r\n\r\nnamespace UAssetAPI\r\n{\r\n    public interface INameMap\r\n    {\r\n        IReadOnlyList<FString> GetNameMapIndexList();\r\n        void ClearNameIndexList();\r\n        void SetNameReference(int index, FString value);\r\n        FString GetNameReference(int index);\r\n        bool ContainsNameReference(FString search);\r\n        int SearchNameReference(FString search);\r\n        int AddNameReference(FString name, bool forceAddDuplicates = false, bool skipFixes = false);\r\n        bool CanCreateDummies();\r\n    }\r\n\r\n    [Flags]\r\n    public enum CustomSerializationFlags : int\r\n    {\r\n        /// <summary>\r\n        /// No flags.\r\n        /// </summary>\r\n        None = 0,\r\n\r\n        /// <summary>\r\n        /// Serialize all dummy FNames to the name map.\r\n        /// </summary>\r\n        NoDummies = 1,\r\n\r\n        /// <summary>\r\n        /// Skip Kismet bytecode serialization.\r\n        /// </summary>\r\n        SkipParsingBytecode = 2,\r\n\r\n        /// <summary>\r\n        /// Skip loading other assets referenced in preload dependencies. You may wish to set this flag when possible in multi-threading applications, since preload dependency loading could lead to file handle race conditions.\r\n        /// </summary>\r\n        SkipPreloadDependencyLoading = 4,\r\n\r\n        /// <summary>\r\n        /// Skip parsing exports at read time. Entries in the export map will be read as raw exports. You can manually parse exports with the <see cref=\"UAsset.ParseExport(AssetBinaryReader, int, bool)\"/> method.\r\n        /// </summary>\r\n        SkipParsingExports = 8,\r\n\r\n        /// <summary>\r\n        /// Skip loading exports at read time altogether. Entries in the export map will be read as raw exports of zero length, so they cannot be manually parsed later. If this flag is set, SkipParsingExports will also effectively be automatically set regardless of whether or not it was already set manually.\r\n        /// </summary>\r\n        SkipLoadingExports = 16,\r\n    }\r\n\r\n\r\n    public class NameMapOutOfRangeException : FormatException\r\n    {\r\n        public FString RequiredName;\r\n\r\n        public NameMapOutOfRangeException(FString requiredName) : base(\"Requested name \\\"\" + requiredName + \"\\\" not found in name map\")\r\n        {\r\n            RequiredName = requiredName;\r\n        }\r\n    }\r\n\r\n    public class InvalidMappingsException : InvalidOperationException\r\n    {\r\n        public InvalidMappingsException(string message = \"Unversioned properties cannot be serialized without valid mappings\") : base(message)\r\n        {\r\n\r\n        }\r\n    }\r\n\r\n    public class UnknownEngineVersionException : InvalidOperationException\r\n    {\r\n        public UnknownEngineVersionException(string message) : base(message)\r\n        {\r\n\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Holds basic Unreal version numbers.\r\n    /// </summary>\r\n    public struct FEngineVersion\r\n    {\r\n        /// <summary>Major version number.</summary>\r\n        public ushort Major;\r\n        /// <summary>Minor version number.</summary>\r\n        public ushort Minor;\r\n        /// <summary>Patch version number.</summary>\r\n        public ushort Patch;\r\n        /// <summary>Changelist number. This is used by the engine to arbitrate when Major/Minor/Patch version numbers match.</summary>\r\n        public uint Changelist;\r\n        /// <summary>Branch name.</summary>\r\n        public FString Branch;\r\n\r\n        public void Write(UnrealBinaryWriter writer)\r\n        {\r\n            writer.Write(Major);\r\n            writer.Write(Minor);\r\n            writer.Write(Patch);\r\n            writer.Write(Changelist);\r\n            writer.Write(Branch);\r\n        }\r\n\r\n        public FEngineVersion(UnrealBinaryReader reader)\r\n        {\r\n            Major = reader.ReadUInt16();\r\n            Minor = reader.ReadUInt16();\r\n            Patch = reader.ReadUInt16();\r\n            Changelist = reader.ReadUInt32();\r\n            Branch = reader.ReadFString();\r\n        }\r\n\r\n        public FEngineVersion(ushort major, ushort minor, ushort patch, uint changelist, FString branch)\r\n        {\r\n            Major = major;\r\n            Minor = minor;\r\n            Patch = patch;\r\n            Changelist = changelist;\r\n            Branch = branch;\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Revision data for an Unreal package file.\r\n    /// </summary>\r\n    public class FGenerationInfo\r\n    {\r\n        /// <summary>Number of exports in the export map for this generation.</summary>\r\n        public int ExportCount;\r\n        /// <summary>Number of names in the name map for this generation.</summary>\r\n        public int NameCount;\r\n\r\n        public FGenerationInfo(int exportCount, int nameCount)\r\n        {\r\n            ExportCount = exportCount;\r\n            NameCount = nameCount;\r\n        }\r\n    }\r\n\r\n    public class FAssetRegistryRecord\r\n    {\r\n        /// <summary> Path relative to the package. </summary>\r\n        public string Path;\r\n        /// <summary> Asset object name. </summary>\r\n        public string ClassName;\r\n        /// <summary> Asset registry tags. </summary>\r\n        public Dictionary<string, string> TagMap;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Represents an Unreal Engine asset.\r\n    /// </summary>\r\n    public class UAsset : INameMap\r\n    {\r\n        /// <summary>\r\n        /// Agent string to provide context in serialized JSON.\r\n        /// </summary>\r\n        [JsonProperty(Order = -99)]\r\n        public string Info = \"Serialized with UAssetAPI\";\r\n\r\n        /// <summary>\r\n        /// The path of the file on disk that this asset represents. This does not need to be specified for regular parsing.\r\n        /// </summary>\r\n        [JsonIgnore]\r\n        public string FilePath;\r\n\r\n        /// <summary>\r\n        /// The corresponding mapping data for the game that this asset is from. Optional unless unversioned properties are present.\r\n        /// </summary>\r\n        [JsonIgnore]\r\n        public Usmap Mappings;\r\n\r\n        /// <summary>\r\n        /// List of custom serialization flags, used to override certain optional behavior in how UAssetAPI serializes assets.\r\n        /// </summary>\r\n        public CustomSerializationFlags CustomSerializationFlags;\r\n\r\n        /// <summary>\r\n        /// Should the asset be split into separate .uasset, .uexp, and .ubulk files, as opposed to one single .uasset file?\r\n        /// </summary>\r\n        public bool UseSeparateBulkDataFiles = false;\r\n\r\n        /// <summary>\r\n        /// Should this asset not serialize its engine and custom versions?\r\n        /// </summary>\r\n        public bool IsUnversioned;\r\n\r\n        /// <summary>\r\n        /// The licensee file version. Used by some games to add their own Engine-level versioning.\r\n        /// </summary>\r\n        public int FileVersionLicenseeUE;\r\n\r\n        /// <summary>\r\n        /// The object version of UE4 that will be used to parse this asset.\r\n        /// </summary>\r\n        public ObjectVersion ObjectVersion = ObjectVersion.UNKNOWN;\r\n\r\n        /// <summary>\r\n        /// The object version of UE5 that will be used to parse this asset. Set to <see cref=\"ObjectVersionUE5.UNKNOWN\"/> for UE4 games.\r\n        /// </summary>\r\n        public ObjectVersionUE5 ObjectVersionUE5 = ObjectVersionUE5.UNKNOWN;\r\n\r\n        /// <summary>\r\n        /// All the custom versions stored in the archive.\r\n        /// </summary>\r\n        public List<CustomVersion> CustomVersionContainer = null;\r\n\r\n        private EPackageFlags _packageFlags;\r\n        /// <summary>\r\n        /// The flags for this package.\r\n        /// </summary>\r\n        [JsonConverter(typeof(StringEnumConverter))]\r\n        public EPackageFlags PackageFlags\r\n        {\r\n            get\r\n            {\r\n                return _packageFlags;\r\n            }\r\n            set\r\n            {\r\n                _packageFlags = value;\r\n                _hasUnversionedPropertiesCacheDirty = true;\r\n            }\r\n        }\r\n\r\n        private bool _hasUnversionedPropertiesCacheDirty = true;\r\n        private bool _hasUnversionedPropertiesCache; // HasFlag is a little bit expensive so we cache the bool value for good measure\r\n        /// <summary>\r\n        /// Whether or not this asset uses unversioned properties.\r\n        /// </summary>\r\n        public bool HasUnversionedProperties\r\n        {\r\n            get\r\n            {\r\n                if (_hasUnversionedPropertiesCacheDirty)\r\n                {\r\n                    _hasUnversionedPropertiesCache = PackageFlags.HasFlag(EPackageFlags.PKG_UnversionedProperties);\r\n                    _hasUnversionedPropertiesCacheDirty = false;\r\n                }\r\n                return _hasUnversionedPropertiesCache;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this asset has PKG_FilterEditorOnly flag.\r\n        /// </summary>\r\n        public bool IsFilterEditorOnly => PackageFlags.HasFlag(EPackageFlags.PKG_FilterEditorOnly);\r\n\r\n        public bool IsPreDependencyFormat => IsFilterEditorOnly || ObjectVersion < ObjectVersion.VER_UE4_ASSETREGISTRY_DEPENDENCYFLAGS;\r\n\r\n        [JsonIgnore]\r\n        internal volatile bool isSerializationTime = false;\r\n\r\n        /// <summary>\r\n        /// Internal list of name map entries. Do not directly add values to here under any circumstances; use <see cref=\"AddNameReference\"/> instead\r\n        /// </summary>\r\n        [JsonProperty(\"NameMap\", Order = -2)]\r\n        internal List<FString> nameMapIndexList;\r\n\r\n        /// <summary>\r\n        /// Internal lookup for name map entries. Do not directly add values to here under any circumstances; use <see cref=\"AddNameReference\"/> instead\r\n        /// </summary>\r\n        internal Dictionary<string, int> nameMapLookup = new Dictionary<string, int>();\r\n\r\n        /// <summary>\r\n        /// List of SoftObjectPath contained in this package.\r\n        /// </summary>\r\n        public List<FSoftObjectPath> SoftObjectPathList;\r\n\r\n        /// <summary>\r\n        /// Map of the gatherable text data.\r\n        /// </summary>\r\n        public List<FGatherableTextData> GatherableTextData;\r\n\r\n        /// <summary>\r\n        /// Map of object exports. UAssetAPI used to call these \"categories.\"\r\n        /// </summary>\r\n        public List<Export> Exports;\r\n\r\n        // TODO: sort in lexical order\r\n        /// <summary>\r\n        /// List of Searchable Names, by object containing them. Sorted to keep order consistent.\r\n        /// </summary>\r\n        public SortedDictionary<FPackageIndex, List<FName>> SearchableNames;\r\n\r\n        /// <summary>\r\n        /// Map of object full names to the thumbnails\r\n        /// </summary>\r\n        public Dictionary<string, FObjectThumbnail> Thumbnails;\r\n\r\n        /// <summary>\r\n        /// Tile information used by WorldComposition.\r\n        /// Defines properties necessary for tile positioning in the world.\r\n        /// </summary>\r\n        public FWorldTileInfo WorldTileInfo;\r\n\r\n        /// <summary>\r\n        /// The number of null bytes appended to the end of the package header (.uasset file).\r\n        /// This should typically be zero, but may be greater when reading assets generated by external tools.\r\n        /// </summary>\r\n        public int AppendedNullBytes;\r\n\r\n        /// <summary>\r\n        /// In MapProperties that have StructProperties as their keys or values, there is no universal, context-free way to determine the type of the struct.\r\n        /// <para />\r\n        /// To that end, this dictionary maps MapProperty names to the type of the structs within them (tuple of key struct type and value struct type) if they are not None-terminated property lists.\r\n        /// </summary>\r\n        [JsonIgnore]\r\n        public Dictionary<string, Tuple<FString, FString>> MapStructTypeOverride = new Dictionary<string, Tuple<FString, FString>>()\r\n        {\r\n            { \"ColorDatabase\", new Tuple<FString, FString>(null, new FString(\"LinearColor\")) },\r\n            { \"PlayerCharacterIDs\", new Tuple<FString, FString>(new FString(\"Guid\"), null) },\r\n            { \"m_PerConditionValueToNodeMap\", new Tuple<FString, FString>(new FString(\"Guid\"), null) },\r\n            { \"BindingIdToReferences\", new Tuple<FString, FString>(new FString(\"Guid\"), null) },\r\n            { \"UserParameterRedirects\", new Tuple<FString, FString>(new FString(\"NiagaraVariable\"), new FString(\"NiagaraVariable\"))},\r\n            { \"Tracks\", new Tuple<FString, FString>(new FString(\"MovieSceneTrackIdentifier\"), null)},\r\n            { \"TrackReferenceCounts\", new Tuple<FString, FString>(new FString(\"MovieSceneTrackIdentifier\"), null)},\r\n            { \"SubSequences\", new Tuple<FString, FString>(new FString(\"MovieSceneSequenceID\"), null)},\r\n            { \"Hierarchy\", new Tuple<FString, FString>(new FString(\"MovieSceneSequenceID\"), null)},\r\n            { \"TrackSignatureToTrackIdentifier\", new Tuple<FString, FString>(new FString(\"Guid\"), new FString(\"MovieSceneTrackIdentifier\"))},\r\n            { \"SoftwareCursors\", new Tuple<FString, FString>(new FString(\"Guid\"), new FString(\"SoftClassPath\"))},\r\n            { \"ItemsToRefund\", new Tuple<FString, FString>(new FString(\"Guid\"), null) },\r\n            { \"PlayerCharacterIDMap\", new Tuple<FString, FString>(new FString(\"Guid\"), null) },\r\n            { \"RainChanceMinMaxPerWeatherState\", new Tuple<FString, FString>(null, new FString(\"FloatRange\")) },\r\n            { \"Assets\", new Tuple<FString, FString>(new FString(\"Guid\"), null) },\r\n            { \"PlanetOffsets\", new Tuple<FString, FString>(null, new FString(\"Vector\")) }\r\n        };\r\n\r\n        /// <summary>\r\n        /// IN ENGINE VERSIONS BEFORE <see cref=\"ObjectVersion.VER_UE4_INNER_ARRAY_TAG_INFO\"/>:\r\n        /// <para />\r\n        /// In ArrayProperties that have StructProperties as their keys or values, there is no universal, context-free way to determine the type of the struct. To that end, this dictionary maps ArrayProperty names to the type of the structs within them.\r\n        /// </summary>\r\n        [JsonIgnore]\r\n        public Dictionary<string, FString> ArrayStructTypeOverride = new Dictionary<string, FString>()\r\n        {\r\n            { \"Keys\", new FString(\"RichCurveKey\") }\r\n        };\r\n\r\n        internal void FixNameMapLookupIfNeeded()\r\n        {\r\n            if (nameMapIndexList.Count > 0 && nameMapLookup.Count == 0)\r\n            {\r\n                for (int i = 0; i < nameMapIndexList.Count; i++)\r\n                {\r\n                    nameMapLookup[nameMapIndexList[i].Value] = i;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the name map as a read-only list of FStrings.\r\n        /// </summary>\r\n        /// <returns>The name map as a read-only list of FStrings.</returns>\r\n        public IReadOnlyList<FString> GetNameMapIndexList()\r\n        {\r\n            FixNameMapLookupIfNeeded();\r\n            return nameMapIndexList.AsReadOnly();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Clears the name map. This method should be used with extreme caution, as it may break unparsed references to the name map.\r\n        /// </summary>\r\n        public void ClearNameIndexList()\r\n        {\r\n            nameMapIndexList = new List<FString>();\r\n            nameMapLookup = new Dictionary<string, int>();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Replaces a value in the name map at a particular index.\r\n        /// </summary>\r\n        /// <param name=\"index\">The index to overwrite in the name map.</param>\r\n        /// <param name=\"value\">The value that will be replaced in the name map.</param>\r\n        public void SetNameReference(int index, FString value)\r\n        {\r\n            FixNameMapLookupIfNeeded();\r\n            nameMapIndexList[index] = value;\r\n            nameMapLookup[value.Value] = index;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets a value in the name map at a particular index.\r\n        /// </summary>\r\n        /// <param name=\"index\">The index to return the value at.</param>\r\n        /// <returns>The value at the index provided.</returns>\r\n        public FString GetNameReference(int index)\r\n        {\r\n            FixNameMapLookupIfNeeded();\r\n            if (index < 0) return new FString(Convert.ToString(-index));\r\n            if (index >= nameMapIndexList.Count) return new FString(Convert.ToString(index));\r\n            return nameMapIndexList[index];\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets a value in the name map at a particular index, but with the index zero being treated as if it is not valid.\r\n        /// </summary>\r\n        /// <param name=\"index\">The index to return the value at.</param>\r\n        /// <returns>The value at the index provided.</returns>\r\n        public FString GetNameReferenceWithoutZero(int index)\r\n        {\r\n            FixNameMapLookupIfNeeded();\r\n            if (index <= 0) return new FString(Convert.ToString(-index));\r\n            if (index >= nameMapIndexList.Count) return new FString(Convert.ToString(index));\r\n            return nameMapIndexList[index];\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether or not the value exists in the name map.\r\n        /// </summary>\r\n        /// <param name=\"search\">The value to search the name map for.</param>\r\n        /// <returns>true if the value appears in the name map, otherwise false.</returns>\r\n        public bool ContainsNameReference(FString search)\r\n        {\r\n            FixNameMapLookupIfNeeded();\r\n            return nameMapLookup.ContainsKey(search.Value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Searches the name map for a particular value.\r\n        /// </summary>\r\n        /// <param name=\"search\">The value to search the name map for.</param>\r\n        /// <returns>The index at which the value appears in the name map.</returns>\r\n        /// <exception cref=\"UAssetAPI.NameMapOutOfRangeException\">Thrown when the value provided does not appear in the name map.</exception>\r\n        public int SearchNameReference(FString search)\r\n        {\r\n            //FixNameMapLookupIfNeeded();\r\n            if (ContainsNameReference(search)) return nameMapLookup[search.Value];\r\n            throw new NameMapOutOfRangeException(search);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Adds a new value to the name map.\r\n        /// </summary>\r\n        /// <param name=\"name\">The value to add to the name map.</param>\r\n        /// <param name=\"forceAddDuplicates\">Whether or not to add a new entry if the value provided already exists in the name map.</param>\r\n        /// <param name=\"skipFixes\">Whether or not to skip other additional fixes made upon adding new entries to the name map. In nearly all cases, this should be false.</param>\r\n        /// <returns>The index of the new value in the name map. If the value already existed in the name map beforehand, that index will be returned instead.</returns>\r\n        /// <exception cref=\"ArgumentException\">Thrown when forceAddDuplicates is false and the value provided is null or empty.</exception>\r\n        public int AddNameReference(FString name, bool forceAddDuplicates = false, bool skipFixes = false)\r\n        {\r\n            FixNameMapLookupIfNeeded();\r\n\r\n            if (!forceAddDuplicates)\r\n            {\r\n                if (name?.Value == null) throw new ArgumentException(\"Cannot add a null FString to the name map\");\r\n                if (name.Value == string.Empty) throw new ArgumentException(\"Cannot add an empty FString to the name map\");\r\n                if (ContainsNameReference(name)) return SearchNameReference(name);\r\n            }\r\n\r\n            if (isSerializationTime) throw new InvalidOperationException(\"Attempt to add name \\\"\" + name + \"\\\" to name map during serialization time\");\r\n            nameMapIndexList.Add(name);\r\n            nameMapLookup[name.Value] = nameMapIndexList.Count - 1;\r\n            if (!skipFixes) NamesReferencedFromExportDataCount = nameMapIndexList.Count; // needed for conversion to zen to include new names added by modders\r\n            return nameMapIndexList.Count - 1;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not we can create dummies in this name map. If false, attempting to define a dummy will append to the name map instead.\r\n        /// </summary>\r\n        /// <returns>A boolean.</returns>\r\n        public virtual bool CanCreateDummies()\r\n        {\r\n            if (isSerializationTime) return true;\r\n            return (CustomSerializationFlags & CustomSerializationFlags.NoDummies) == 0;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a MemoryStream from an asset path.\r\n        /// </summary>\r\n        /// <param name=\"p\">The path to the input file.</param>\r\n        /// <param name=\"loadUEXP\">Whether to load the UEXP file. False only reads the UASSET.</param>\r\n        /// <returns>A new MemoryStream that stores the binary data of the input file.</returns>\r\n        public MemoryStream PathToStream(string p, bool loadUEXP = true)\r\n        {\r\n            using (FileStream origStream = File.Open(p, FileMode.Open, FileAccess.Read))\r\n            {\r\n                MemoryStream completeStream = new MemoryStream();\r\n                origStream.CopyTo(completeStream);\r\n\r\n                if (loadUEXP)\r\n                {\r\n                    UseSeparateBulkDataFiles = false;\r\n                    try\r\n                    {\r\n                        var targetFile = Path.ChangeExtension(p, \"uexp\");\r\n                        if (File.Exists(targetFile))\r\n                        {\r\n                            using (FileStream newStream = File.Open(targetFile, FileMode.Open))\r\n                            {\r\n                                completeStream.Seek(0, SeekOrigin.End);\r\n                                newStream.CopyTo(completeStream);\r\n                                UseSeparateBulkDataFiles = true;\r\n                            }\r\n                        }\r\n                    }\r\n                    catch (FileNotFoundException) { }\r\n                }\r\n\r\n\r\n                completeStream.Seek(0, SeekOrigin.Begin);\r\n                return completeStream;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a BinaryReader from an asset path.\r\n        /// </summary>\r\n        /// <param name=\"p\">The path to the input file.</param>\r\n        /// <param name=\"loadUEXP\">Whether to load the .uexp file. False only reads the .uasset file.</param>\r\n        /// <returns>A new BinaryReader that stores the binary data of the input file.</returns>\r\n        public AssetBinaryReader PathToReader(string p, bool loadUEXP = true)\r\n        {\r\n            return new AssetBinaryReader(PathToStream(p, loadUEXP), loadUEXP, this);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the export associated with the specified key. This operation loops linearly, so it may not be suitable for high-performance environments.\r\n        /// </summary>\r\n        /// <param name=\"key\">The key associated with the export to get or set.</param>\r\n        public virtual Export this[FName key]\r\n        {\r\n            get\r\n            {\r\n                for (int i = 0; i < Exports.Count; i++)\r\n                {\r\n                    if (Exports[i].ObjectName == key) return Exports[i];\r\n                }\r\n                return null;\r\n            }\r\n            set\r\n            {\r\n                value.ObjectName = key;\r\n                for (int i = 0; i < Exports.Count; i++)\r\n                {\r\n                    if (Exports[i].ObjectName == key)\r\n                    {\r\n                        Exports[i] = value;\r\n                        return;\r\n                    }\r\n                }\r\n\r\n                Exports.Add(value);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the export associated with the specified key. This operation loops linearly, so it may not be suitable for high-performance environments.\r\n        /// </summary>\r\n        /// <param name=\"key\">The key associated with the export to get or set.</param>\r\n        public virtual Export this[string key]\r\n        {\r\n            get\r\n            {\r\n                return this[FName.FromString(this, key)];\r\n            }\r\n            set\r\n            {\r\n                this[FName.FromString(this, key)] = value;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Searches for and returns this asset's ClassExport, if one exists.\r\n        /// </summary>\r\n        /// <returns>The asset's ClassExport if one exists, otherwise null.</returns>\r\n        public ClassExport GetClassExport()\r\n        {\r\n            foreach (Export cat in Exports)\r\n            {\r\n                if (cat is ClassExport bgcCat) return bgcCat;\r\n            }\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Resolves the ancestry of all properties present in this asset.\r\n        /// </summary>\r\n        public virtual void ResolveAncestries()\r\n        {\r\n            if (WorldTileInfo != null) WorldTileInfo.ResolveAncestries(this, new AncestryInfo());\r\n            if (Exports != null)\r\n            {\r\n                for (int i = 0; i < Exports.Count; i++) Exports[i]?.ResolveAncestries(this, new AncestryInfo());\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Attempt to find another asset on disk given an asset path (i.e. one starting with /Game/).\r\n        /// </summary>\r\n        /// <param name=\"path\">The asset path.</param>\r\n        /// <returns>The path to the file on disk, or null if none could be found.</returns>\r\n        public virtual string FindAssetOnDiskFromPath(string path)\r\n        {\r\n            if (!path.StartsWith(\"/\") || path.StartsWith(\"/Script\")) return null;\r\n            path = path.Substring(6) + \".uasset\";\r\n\r\n            string mappedPathOnDisk = string.Empty;\r\n            bool foundMappedPath = false;\r\n\r\n            var contentPart = Path.DirectorySeparatorChar + \"Content\";\r\n            if (!string.IsNullOrEmpty(FilePath))\r\n            {\r\n                var fixedFilePath = FilePath.FixDirectorySeparatorsForDisk();\r\n                var contentIndex = fixedFilePath.LastIndexOf(contentPart);\r\n\r\n                // let's see if the current path has Content in it, then we can re-orient ourselves\r\n                if (!foundMappedPath && contentIndex > 0)\r\n                {\r\n                    var contentDir = fixedFilePath.Substring(0, contentIndex + contentPart.Length);\r\n                    mappedPathOnDisk = Path.Combine(contentDir, path.FixDirectorySeparatorsForDisk());\r\n                    foundMappedPath = File.Exists(mappedPathOnDisk); // not worrying too much about race condition, we'll put a try catch later\r\n                }\r\n\r\n                if (!foundMappedPath)\r\n                {\r\n                    // let's see if it exists in the same directory\r\n                    var rawFileName = Path.GetFileName(path);\r\n                    mappedPathOnDisk = Path.Combine(Directory.GetParent(FilePath).FullName, Path.GetFileName(path));\r\n                    foundMappedPath = File.Exists(mappedPathOnDisk);\r\n                }\r\n            }\r\n\r\n            return foundMappedPath ? mappedPathOnDisk : null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets the version of the Unreal Engine to use in serialization.\r\n        /// </summary>\r\n        /// <param name=\"newVersion\">The new version of the Unreal Engine to use in serialization.</param>\r\n        /// <exception cref=\"InvalidOperationException\">Thrown when an invalid EngineVersion is specified.</exception>\r\n        public void SetEngineVersion(EngineVersion newVersion)\r\n        {\r\n            if (newVersion == EngineVersion.UNKNOWN) return;\r\n            if (!Enum.TryParse(Enum.GetName(typeof(EngineVersion), newVersion), out UE4VersionToObjectVersion bridgeVer)) throw new InvalidOperationException(\"Invalid engine version specified\");\r\n            ObjectVersion = (ObjectVersion)(int)bridgeVer;\r\n\r\n            if (Enum.TryParse(Enum.GetName(typeof(EngineVersion), newVersion), out UE5VersionToObjectVersion bridgeVer2)) ObjectVersionUE5 = (ObjectVersionUE5)(int)bridgeVer2;\r\n\r\n            CustomVersionContainer = GetDefaultCustomVersionContainer(newVersion);\r\n        }\r\n\r\n        public static EngineVersion GetEngineVersion(ObjectVersion objectVersion, ObjectVersionUE5 objectVersionUE5, List<CustomVersion> customVersionContainer)\r\n        {\r\n            // analyze all possible versions based off of the object version alone\r\n            List<EngineVersion> allPossibleVersions = new List<EngineVersion>();\r\n            int targetVer = (int)objectVersionUE5;\r\n            while (allPossibleVersions.Count == 0 && targetVer >= (int)ObjectVersionUE5.INITIAL_VERSION)\r\n            {\r\n                allPossibleVersions = Enum.GetNames(typeof(UE5VersionToObjectVersion)).Where(n => ((int)Enum.Parse(typeof(UE5VersionToObjectVersion), n)).Equals(targetVer)).Select(str => (EngineVersion)Enum.Parse(typeof(EngineVersion), str)).ToList();\r\n                targetVer -= 1;\r\n            }\r\n            targetVer = (int)objectVersion;\r\n            while (allPossibleVersions.Count == 0 && targetVer > (int)ObjectVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE)\r\n            {\r\n                allPossibleVersions = Enum.GetNames(typeof(UE4VersionToObjectVersion)).Where(n => ((int)Enum.Parse(typeof(UE4VersionToObjectVersion), n)).Equals(targetVer)).Select(str => (EngineVersion)Enum.Parse(typeof(EngineVersion), str)).ToList();\r\n                targetVer -= 1;\r\n            }\r\n\r\n            if (allPossibleVersions.Count == 0) return EngineVersion.UNKNOWN;\r\n            if (allPossibleVersions.Count == 1 || customVersionContainer == null) return allPossibleVersions[0];\r\n\r\n            // multiple possible versions; use custom versions to eliminate some\r\n            EngineVersion minIntroduced = EngineVersion.VER_UE4_OLDEST_LOADABLE_PACKAGE;\r\n            EngineVersion maxIntroduced = EngineVersion.VER_UE4_AUTOMATIC_VERSION_PLUS_ONE;\r\n            foreach (CustomVersion entry in customVersionContainer)\r\n            {\r\n                if (entry.FriendlyName is null) continue;\r\n                Type customVersionType = Type.GetType(\"UAssetAPI.CustomVersions.\" + MainSerializer.allNonLetters.Replace(entry.FriendlyName, string.Empty));\r\n                if (customVersionType == null) continue;\r\n                EngineVersion minIntroducedThis = GetIntroducedFromCustomVersionValue(customVersionType, entry.Version); // inclusive\r\n                EngineVersion maxIntroducedThis = GetIntroducedFromCustomVersionValue(customVersionType, entry.Version + 1); // exclusive\r\n\r\n                if (minIntroducedThis != EngineVersion.UNKNOWN && minIntroducedThis > minIntroduced) minIntroduced = minIntroducedThis;\r\n                if (maxIntroducedThis != EngineVersion.UNKNOWN && maxIntroducedThis < maxIntroduced) maxIntroduced = maxIntroducedThis;\r\n            }\r\n\r\n            List<EngineVersion> finalPossibleVersions = new List<EngineVersion>();\r\n            foreach (EngineVersion entry in allPossibleVersions)\r\n            {\r\n                if (entry >= minIntroduced && entry < maxIntroduced) finalPossibleVersions.Add(entry);\r\n            }\r\n            finalPossibleVersions.Sort();\r\n\r\n            if (finalPossibleVersions.Count == 0) return allPossibleVersions[0]; // there must be a special set of custom versions; we'll just ignore our intuitions and go with the object version alone\r\n            if (finalPossibleVersions.Count >= 1) return finalPossibleVersions[0];\r\n            return EngineVersion.UNKNOWN;\r\n        }\r\n\r\n        private EngineVersion _cachedEngineVersion = EngineVersion.UNKNOWN;\r\n        private bool _cachedEngineVersionDirty = true; // used only at serialization time to determine if we need to re-evaluate this\r\n\r\n        /// <summary>\r\n        /// Estimates the retail version of the Unreal Engine based on the object and custom versions.\r\n        /// </summary>\r\n        /// <returns>The estimated retail version of the Unreal Engine.</returns>\r\n        public EngineVersion GetEngineVersion()\r\n        {\r\n            if (isSerializationTime)\r\n            {\r\n                if (_cachedEngineVersionDirty)\r\n                {\r\n                    _cachedEngineVersionDirty = false;\r\n                    _cachedEngineVersion = UAsset.GetEngineVersion(ObjectVersion, ObjectVersionUE5, CustomVersionContainer);\r\n                }\r\n                return _cachedEngineVersion;\r\n            }\r\n\r\n            _cachedEngineVersionDirty = true;\r\n            return UAsset.GetEngineVersion(ObjectVersion, ObjectVersionUE5, CustomVersionContainer);\r\n        }\r\n\r\n        private static EngineVersion GetIntroducedFromCustomVersionValue(Type customVersionType, int val)\r\n        {\r\n            var nm = Enum.GetName(customVersionType, val);\r\n            if (nm == null) return EngineVersion.UNKNOWN;\r\n            var attributes = customVersionType.GetMember(nm)?[0]?.GetCustomAttributes(typeof(IntroducedAttribute), false);\r\n            if (attributes == null || attributes.Length <= 0) return EngineVersion.UNKNOWN;\r\n            return ((IntroducedAttribute)attributes[0]).IntroducedVersion;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Fetches the version of a custom version in this asset.\r\n        /// </summary>\r\n        /// <param name=\"key\">The GUID of the custom version to retrieve.</param>\r\n        /// <returns>The version of the retrieved custom version.</returns>\r\n        public int GetCustomVersion(Guid key)\r\n        {\r\n            for (int i = 0; i < CustomVersionContainer.Count; i++)\r\n            {\r\n                CustomVersion custVer = CustomVersionContainer[i];\r\n                if (custVer.Key == key)\r\n                {\r\n                    return custVer.Version;\r\n                }\r\n            }\r\n\r\n            return -1; // https://github.com/EpicGames/UnrealEngine/blob/99b6e203a15d04fc7bbbf554c421a985c1ccb8f1/Engine/Source/Runtime/Core/Private/Serialization/Archive.cpp#L578\r\n        }\r\n\r\n        /// <summary>\r\n        /// Fetches the version of a custom version in this asset.\r\n        /// </summary>\r\n        /// <param name=\"friendlyName\">The friendly name of the custom version to retrieve.</param>\r\n        /// <returns>The version of the retrieved custom version.</returns>\r\n        public int GetCustomVersion(string friendlyName)\r\n        {\r\n            for (int i = 0; i < CustomVersionContainer.Count; i++)\r\n            {\r\n                CustomVersion custVer = CustomVersionContainer[i];\r\n                if (custVer.FriendlyName == friendlyName)\r\n                {\r\n                    return custVer.Version;\r\n                }\r\n            }\r\n\r\n            return -1;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Fetches a custom version's enum value based off of its type.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\">The enum type of the custom version to retrieve.</typeparam>\r\n        /// <returns>The enum value of the requested custom version.</returns>\r\n        /// <exception cref=\"ArgumentException\">Thrown when T is not an enumerated type.</exception>\r\n        public T GetCustomVersion<T>()\r\n        {\r\n            Type customVersionEnumType = typeof(T);\r\n            if (!customVersionEnumType.IsEnum) throw new ArgumentException(\"T must be an enumerated type\");\r\n\r\n            for (int i = 0; i < CustomVersionContainer.Count; i++)\r\n            {\r\n                CustomVersion custVer = CustomVersionContainer[i];\r\n                if (custVer.FriendlyName == customVersionEnumType.Name)\r\n                {\r\n                    return (T)(object)custVer.Version;\r\n                }\r\n            }\r\n\r\n            return (T)(object)-1;\r\n        }\r\n\r\n        private static ConcurrentDictionary<string, EngineVersion> cachedCustomVersionReflectionData = new ConcurrentDictionary<string, EngineVersion>();\r\n        public static int GuessCustomVersionFromTypeAndEngineVersion(EngineVersion chosenVersion, Type typ)\r\n        {\r\n            string typeString = typ.ToString();\r\n            string[] allValsRaw = Enum.GetNames(typ);\r\n\r\n            // remove VersionPlusOne and LatestVersion entries, which are redundant\r\n            // we absolutely need to remove LatestVersion because it's a duplicate of another entry, so the order of the two is not guaranteed; LatestVersion might come first\r\n            string[] allVals = new string[allValsRaw.Length - 2];\r\n            int j = 0;\r\n            for (int i = 0; i < allValsRaw.Length; i++)\r\n            {\r\n                if (allValsRaw[i] != \"VersionPlusOne\" && allValsRaw[i] != \"LatestVersion\")\r\n                {\r\n                    allVals[j++] = allValsRaw[i];\r\n                }\r\n            }\r\n\r\n            for (int i = allVals.Length - 1; i >= 0; i--)\r\n            {\r\n                string val = allVals[i];\r\n                string cacheKey = typeString + val;\r\n\r\n                var attributeIntroducedVersion = EngineVersion.UNKNOWN;\r\n                if (cachedCustomVersionReflectionData.ContainsKey(cacheKey))\r\n                {\r\n                    attributeIntroducedVersion = cachedCustomVersionReflectionData[cacheKey];\r\n                }\r\n                else\r\n                {\r\n                    var attributes = typ.GetMember(val)?[0]?.GetCustomAttributes(typeof(IntroducedAttribute), false);\r\n                    attributeIntroducedVersion = (attributes == null || attributes.Length <= 0) ? EngineVersion.UNKNOWN : ((IntroducedAttribute)attributes[0]).IntroducedVersion;\r\n                    cachedCustomVersionReflectionData[cacheKey] = attributeIntroducedVersion;\r\n                }\r\n\r\n                if (attributeIntroducedVersion != EngineVersion.UNKNOWN && chosenVersion >= attributeIntroducedVersion) return i;\r\n            }\r\n            return -1;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Fetches a list of all default custom versions for a specific Unreal version.\r\n        /// </summary>\r\n        /// <param name=\"chosenVersion\">The version of the engine to check against.</param>\r\n        /// <returns>A list of all the default custom version values for the given engine version.</returns>\r\n        public static List<CustomVersion> GetDefaultCustomVersionContainer(EngineVersion chosenVersion)\r\n        {\r\n            List<CustomVersion> res = new List<CustomVersion>();\r\n            foreach (KeyValuePair<Guid, string> entry in CustomVersion.GuidToCustomVersionStringMap)\r\n            {\r\n                Type customVersionType = Type.GetType(\"UAssetAPI.CustomVersions.\" + entry.Value);\r\n                if (customVersionType == null) continue;\r\n                int guessedCustomVersion = GuessCustomVersionFromTypeAndEngineVersion(chosenVersion, customVersionType);\r\n                if (guessedCustomVersion < 0) continue;\r\n                res.Add(new CustomVersion(entry.Key, guessedCustomVersion));\r\n            }\r\n            return res;\r\n        }\r\n\r\n        private string _internalAssetPath = null;\r\n        internal string InternalAssetPath\r\n        {\r\n            get\r\n            {\r\n                if (_internalAssetPath != null) return _internalAssetPath;\r\n                if (this is UAsset uas)\r\n                {\r\n                    string folderName = uas.FolderName?.Value;\r\n                    if (folderName != null && folderName != \"None\") return folderName;\r\n                }\r\n                return null;\r\n            }\r\n            set\r\n            {\r\n                _internalAssetPath = value;\r\n            }\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Read an export from disk.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The binary reader.</param>\r\n        /// <param name=\"i\">The index of the export in the export map to read.</param>\r\n        /// <param name=\"read\">Whether or not to serialize the body of the export. If false, simply converts to the respective sub-type.</param>\r\n        public void ParseExport(AssetBinaryReader reader, int i, bool read = true)\r\n        {\r\n            reader.BaseStream.Seek(Exports[i].SerialOffset, SeekOrigin.Begin);\r\n            ConvertExportToChildExportAndRead(reader, i, read);\r\n        }\r\n\r\n        public void ConvertExportToChildExportAndRead(AssetBinaryReader reader, int i, bool read = true)\r\n        {\r\n#pragma warning disable CS0168 // Variable is declared but never used\r\n            try\r\n            {\r\n                long nextStarting = -1;\r\n                if ((Exports.Count - 1) > i)\r\n                {\r\n                    nextStarting = Exports[i + 1].SerialOffset;\r\n                }\r\n                else\r\n                {\r\n                    var uas = (UAsset)reader.Asset;\r\n                    nextStarting = uas.BulkDataStartOffset;\r\n                    if (uas.SeaOfThievesGarbageData != null) nextStarting -= uas.SeaOfThievesGarbageData.Length;\r\n                }\r\n\r\n                FName exportClassTypeName = Exports[i].GetExportClassType();\r\n                string exportClassType = exportClassTypeName.Value.Value;\r\n                switch (exportClassType)\r\n                {\r\n                    case \"Level\":\r\n                        Exports[i] = Exports[i].ConvertToChildExport<LevelExport>();\r\n                        break;\r\n                    case \"Enum\":\r\n                    case \"UserDefinedEnum\":\r\n                        Exports[i] = Exports[i].ConvertToChildExport<EnumExport>();\r\n                        break;\r\n                    case \"Function\":\r\n                        Exports[i] = Exports[i].ConvertToChildExport<FunctionExport>();\r\n                        break;\r\n                    case \"UserDefinedStruct\":\r\n                        Exports[i] = Exports[i].ConvertToChildExport<UserDefinedStructExport>();\r\n                        break;\r\n                    case \"MetaData\":\r\n                        Exports[i] = Exports[i].ConvertToChildExport<MetaDataExport>();\r\n                        break;\r\n                    case \"AssetImportData\":\r\n                        Exports[i] = Exports[i].ConvertToChildExport<AssetImportDataExport>();\r\n                        break;\r\n                    default:\r\n                        if (exportClassType.EndsWith(\"DataTable\"))\r\n                        {\r\n                            Exports[i] = Exports[i].ConvertToChildExport<DataTableExport>();\r\n                        }\r\n                        else if (exportClassType.EndsWith(\"StringTable\"))\r\n                        {\r\n                            Exports[i] = Exports[i].ConvertToChildExport<StringTableExport>();\r\n                        }\r\n                        else if (exportClassType.EndsWith(\"BlueprintGeneratedClass\"))\r\n                        {\r\n                            Exports[i] = Exports[i].ConvertToChildExport<ClassExport>();\r\n                        }\r\n                        else if (exportClassType == \"ScriptStruct\")\r\n                        {\r\n                            Exports[i] = Exports[i].ConvertToChildExport<StructExport>();\r\n                        }\r\n                        else if (MainSerializer.PropertyTypeRegistry.ContainsKey(exportClassType) || MainSerializer.AdditionalPropertyRegistry.Contains(exportClassType))\r\n                        {\r\n                            Exports[i] = Exports[i].ConvertToChildExport<PropertyExport>();\r\n                        }\r\n                        else\r\n                        {\r\n                            Exports[i] = Exports[i].ConvertToChildExport<NormalExport>();\r\n                        }\r\n                        break;\r\n                }\r\n\r\n                if (read) Exports[i].Read(reader, (int)nextStarting);\r\n\r\n                // if we got a StructExport, let's modify mappings/MapStructTypeOverride if we can\r\n                if (read && Exports[i] is StructExport fetchedStructExp && Exports[i] is not FunctionExport)\r\n                {\r\n                    // check to see if we can add some new map type overrides\r\n                    if (fetchedStructExp.LoadedProperties != null)\r\n                    {\r\n                        foreach (FProperty entry in fetchedStructExp.LoadedProperties)\r\n                        {\r\n                            if (entry is FMapProperty fMapEntry)\r\n                            {\r\n                                FString keyOverride = null;\r\n                                FString valueOverride = null;\r\n                                if (fMapEntry.KeyProp is FStructProperty keyPropStruc && keyPropStruc.Struct.IsImport()) keyOverride = keyPropStruc.Struct.ToImport(this).ObjectName.Value;\r\n                                if (fMapEntry.ValueProp is FStructProperty valuePropStruc && valuePropStruc.Struct.IsImport()) valueOverride = valuePropStruc.Struct.ToImport(this).ObjectName.Value;\r\n\r\n                                MapStructTypeOverride[fMapEntry.Name.Value.Value] = new Tuple<FString, FString>(keyOverride, valueOverride);\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    // add schema if possible (!!!)\r\n                    if (Mappings?.Schemas != null && fetchedStructExp.ObjectName?.ToString() != null)\r\n                    {\r\n                        string outer = null;\r\n                        if (fetchedStructExp.OuterIndex.IsImport()) outer = fetchedStructExp.OuterIndex.ToImport(this).ObjectName.ToString();\r\n                        if (fetchedStructExp.OuterIndex.IsExport()) outer = fetchedStructExp.OuterIndex.ToExport(this).ObjectName.ToString();\r\n\r\n                        UsmapSchema newSchema = Usmap.GetSchemaFromStructExport(fetchedStructExp, Mappings?.AreFNamesCaseInsensitive ?? true);\r\n                        if (newSchema != null)\r\n                        {\r\n                            newSchema.ModulePath = InternalAssetPath;\r\n                            Mappings.Schemas[fetchedStructExp.ObjectName.ToString()] = newSchema;\r\n                            if (!string.IsNullOrEmpty(newSchema.ModulePath)) Mappings.Schemas[newSchema.ModulePath + \".\" + (string.IsNullOrEmpty(outer) ? string.Empty : (outer + \".\")) + fetchedStructExp.ObjectName.ToString()] = newSchema;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                // if we got an enum, let's add to mappings enum map if we can\r\n                if (read && Exports[i] is EnumExport fetchedEnumExp)\r\n                {\r\n                    string enumName = fetchedEnumExp.ObjectName?.ToString();\r\n                    if (Mappings?.EnumMap != null && enumName != null)\r\n                    {\r\n                        var newEnum = new UsmapEnum(enumName, new ConcurrentDictionary<long, string>());\r\n                        foreach (Tuple<FName, long> entry in fetchedEnumExp.Enum.Names)\r\n                        {\r\n                            newEnum.Values[entry.Item2] = entry.Item1.ToString();\r\n                        }\r\n                        Mappings.EnumMap[enumName] = newEnum;\r\n                    }\r\n                }\r\n\r\n                if (read)\r\n                {\r\n                    long extrasLen = nextStarting - reader.BaseStream.Position;\r\n                    if (extrasLen < 0)\r\n                    {\r\n                        throw new FormatException(\"Invalid padding at end of export \" + (i + 1) + \": \" + extrasLen + \" bytes\");\r\n                    }\r\n                    else\r\n                    {\r\n                        Exports[i].Extras = reader.ReadBytes((int)extrasLen);\r\n                    }\r\n\r\n                    Exports[i].alreadySerialized = true;\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n#if DEBUGVERBOSE\r\n                Console.WriteLine(\"\\nFailed to parse export \" + (i + 1) + \": \" + ex.ToString());\r\n#endif\r\n                if (read) reader.BaseStream.Seek(Exports[i].SerialOffset, SeekOrigin.Begin);\r\n                Exports[i] = Exports[i].ConvertToChildExport<RawExport>();\r\n                if (read) ((RawExport)Exports[i]).Data = reader.ReadBytes((int)Exports[i].SerialSize);\r\n            }\r\n#pragma warning restore CS0168 // Variable is declared but never used\r\n        }\r\n\r\n\r\n        internal static JsonSerializerSettings jsonSettings = new JsonSerializerSettings\r\n        {\r\n            TypeNameHandling = TypeNameHandling.Objects,\r\n            NullValueHandling = NullValueHandling.Include,\r\n            FloatParseHandling = FloatParseHandling.Double,\r\n            ReferenceLoopHandling = ReferenceLoopHandling.Ignore,\r\n            MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead,\r\n            ContractResolver = new UAssetContractResolver(null),\r\n            Converters = new List<JsonConverter>()\r\n            {\r\n                new FSignedZeroJsonConverter(),\r\n                new FNameJsonConverter(null),\r\n                new FStringTableJsonConverter(),\r\n                new FStringJsonConverter(),\r\n                new FPackageIndexJsonConverter(),\r\n                new StringEnumConverter(),\r\n                new GuidJsonConverter(),\r\n                new ByteArrayJsonConverter()\r\n            }\r\n        };\r\n\r\n        /// <summary>\r\n        /// Checks whether or not this asset maintains binary equality when serialized.\r\n        /// </summary>\r\n        /// <returns>Whether or not the asset maintained binary equality.</returns>\r\n        public bool VerifyBinaryEquality()\r\n        {\r\n            MemoryStream f = this.PathToStream(FilePath);\r\n            f.Seek(0, SeekOrigin.Begin);\r\n            MemoryStream newDataStream = WriteData();\r\n            f.Seek(0, SeekOrigin.Begin);\r\n\r\n            if (f.Length != newDataStream.Length) return false;\r\n\r\n            const int CHUNK_SIZE = 1024;\r\n            byte[] buffer = new byte[CHUNK_SIZE];\r\n            byte[] buffer2 = new byte[CHUNK_SIZE];\r\n            int lastRead1;\r\n            while ((lastRead1 = f.Read(buffer, 0, buffer.Length)) > 0)\r\n            {\r\n                int lastRead2 = newDataStream.Read(buffer2, 0, buffer2.Length);\r\n                if (lastRead1 != lastRead2) return false;\r\n                if (!buffer.SequenceEqual(buffer2)) return false;\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Finds the class path and export name of the SuperStruct of this asset, if it exists.\r\n        /// </summary>\r\n        /// <param name=\"parentClassPath\">The class path of the SuperStruct of this asset, if it exists.</param>\r\n        /// <param name=\"parentClassExportName\">The export name of the SuperStruct of this asset, if it exists.</param>\r\n        public virtual void GetParentClass(out FName parentClassPath, out FName parentClassExportName)\r\n        {\r\n            parentClassPath = null;\r\n            parentClassExportName = null;\r\n\r\n            var bgcCat = GetClassExport();\r\n            if (bgcCat == null) return;\r\n            if (bgcCat.SuperStruct == null) return;\r\n\r\n            Import parentClassLink = bgcCat.SuperStruct.ToImport(this);\r\n            if (parentClassLink == null) return;\r\n            if (parentClassLink.OuterIndex.Index >= 0) return;\r\n\r\n            parentClassExportName = parentClassLink.ObjectName;\r\n            parentClassPath = parentClassLink.OuterIndex.ToImport(this).ObjectName;\r\n        }\r\n\r\n        internal bool hasFoundParentClassExportName = false;\r\n        internal FName parentClassExportNameCache = null;\r\n        internal FName parentClassExportName2Cache = null;\r\n        internal virtual FName GetParentClassExportName(out FName modulePath)\r\n        {\r\n            if (!hasFoundParentClassExportName)\r\n            {\r\n                hasFoundParentClassExportName = true;\r\n                GetParentClass(out parentClassExportName2Cache, out parentClassExportNameCache);\r\n            }\r\n\r\n            modulePath = parentClassExportName2Cache;\r\n            return parentClassExportNameCache;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Adds a new import to the import map. This is equivalent to adding directly to the <see cref=\"Imports\"/> list.\r\n        /// </summary>\r\n        /// <param name=\"li\">The new import to add to the import map.</param>\r\n        /// <returns>The FPackageIndex corresponding to the newly-added import.</returns>\r\n        public FPackageIndex AddImport(Import li)\r\n        {\r\n            Imports.Add(li);\r\n            return FPackageIndex.FromImport(Imports.Count - 1);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Searches for an import in the import map based off of certain parameters.\r\n        /// </summary>\r\n        /// <param name=\"classPackage\">The ClassPackage that the requested import will have.</param>\r\n        /// <param name=\"className\">The ClassName that the requested import will have.</param>\r\n        /// <param name=\"outerIndex\">The CuterIndex that the requested import will have.</param>\r\n        /// <param name=\"objectName\">The ObjectName that the requested import will have.</param>\r\n        /// <returns>The index of the requested import in the name map, or zero if one could not be found.</returns>\r\n        public int SearchForImport(FName classPackage, FName className, FPackageIndex outerIndex, FName objectName)\r\n        {\r\n            int currentPos = 0;\r\n            for (int i = 0; i < Imports.Count; i++)\r\n            {\r\n                currentPos--;\r\n                if (classPackage == Imports[i].ClassPackage\r\n                    && className == Imports[i].ClassName\r\n                    && outerIndex == Imports[i].OuterIndex\r\n                    && objectName == Imports[i].ObjectName)\r\n                {\r\n                    return currentPos;\r\n                }\r\n\r\n            }\r\n\r\n            return 0;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Searches for an import in the import map based off of certain parameters.\r\n        /// </summary>\r\n        /// <param name=\"classPackage\">The ClassPackage that the requested import will have.</param>\r\n        /// <param name=\"className\">The ClassName that the requested import will have.</param>\r\n        /// <param name=\"objectName\">The ObjectName that the requested import will have.</param>\r\n        /// <returns>The index of the requested import in the name map, or zero if one could not be found.</returns>\r\n        public int SearchForImport(FName classPackage, FName className, FName objectName)\r\n        {\r\n            int currentPos = 0;\r\n            for (int i = 0; i < Imports.Count; i++)\r\n            {\r\n                currentPos--;\r\n                if (classPackage == Imports[i].ClassPackage\r\n                    && className == Imports[i].ClassName\r\n                    && objectName == Imports[i].ObjectName)\r\n                {\r\n                    return currentPos;\r\n                }\r\n\r\n            }\r\n\r\n            return 0;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Searches for an import in the import map based off of certain parameters.\r\n        /// </summary>\r\n        /// <param name=\"objectName\">The ObjectName that the requested import will have.</param>\r\n        /// <returns>The index of the requested import in the name map, or zero if one could not be found.</returns>\r\n        public int SearchForImport(FName objectName)\r\n        {\r\n            int currentPos = 0;\r\n            for (int i = 0; i < Imports.Count; i++)\r\n            {\r\n                currentPos--;\r\n                if (objectName == Imports[i].ObjectName) return currentPos;\r\n            }\r\n\r\n            return 0;\r\n        }\r\n\r\n        public ISet<FName> OtherAssetsFailedToAccess = new HashSet<FName>();\r\n\r\n        public virtual bool PullSchemasFromAnotherAsset(FName path)\r\n        {\r\n            if (CustomSerializationFlags.HasFlag(CustomSerializationFlags.SkipPreloadDependencyLoading)) return false;\r\n\r\n            if (Mappings?.Schemas == null) return false;\r\n            if (path?.Value?.Value == null) return false;\r\n            if (!path.Value.Value.StartsWith(\"/\") || path.Value.Value.StartsWith(\"/Script\")) return false;\r\n            var assetPath = path.ToString();\r\n            string pathOnDisk = FindAssetOnDiskFromPath(assetPath);\r\n            if (pathOnDisk == null)\r\n            {\r\n                OtherAssetsFailedToAccess.Add(path);\r\n                return false;\r\n            }\r\n\r\n            // basic circular referencing guard\r\n            if (Mappings.PathsAlreadyProcessedForSchemas.ContainsKey(assetPath))\r\n            {\r\n                return false;\r\n            }\r\n\r\n            bool success = false;\r\n            try\r\n            {\r\n                Mappings.PathsAlreadyProcessedForSchemas[assetPath] = 1;\r\n\r\n                // initial read to just fetch the FolderName\r\n                UAsset otherAsset = new UAsset(this.ObjectVersion, this.ObjectVersionUE5, this.CustomVersionContainer.Select(item => (CustomVersion)item.Clone()).ToList(), this.Mappings);\r\n                AssetBinaryReader otherReader = otherAsset.PathToReader(pathOnDisk);\r\n                otherAsset.CustomSerializationFlags = CustomSerializationFlags.SkipLoadingExports | CustomSerializationFlags.SkipPreloadDependencyLoading;\r\n                otherAsset.FilePath = pathOnDisk;\r\n                otherAsset.Read(otherReader);\r\n\r\n                // second read to get schemas\r\n                otherAsset.InternalAssetPath = (otherAsset.FolderName != null && otherAsset.FolderName.ToString() != \"None\") ? otherAsset.FolderName.ToString() : assetPath;\r\n                otherAsset.CustomSerializationFlags = CustomSerializationFlags.None;\r\n                otherReader.BaseStream.Seek(0, SeekOrigin.Begin);\r\n                otherAsset.Read(otherReader);\r\n\r\n                // loading the asset will automatically add any new schemas to the mappings in-situ\r\n\r\n                // add to failed map\r\n                if (otherAsset.OtherAssetsFailedToAccess != null && OtherAssetsFailedToAccess != null)\r\n                {\r\n                    foreach (var entry in otherAsset.OtherAssetsFailedToAccess)\r\n                    {\r\n                        OtherAssetsFailedToAccess.Add(entry);\r\n                    }\r\n                }\r\n            }\r\n            catch\r\n            {\r\n                // if we fail to parse the other asset, that's perfectly fine; just move on\r\n                success = false;\r\n            }\r\n\r\n            return success;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The package file version number when this package was saved.\r\n        /// </summary>\r\n        /// <remarks>\r\n        ///     The lower 16 bits stores the UE3 engine version, while the upper 16 bits stores the UE4/licensee version. For newer packages this is -7.\r\n        ///     <list type=\"table\">\r\n        ///         <listheader>\r\n        ///             <version>Version</version>\r\n        ///             <description>Description</description>\r\n        ///         </listheader>\r\n        ///         <item>\r\n        ///             <version>-2</version>\r\n        ///             <description>indicates presence of enum-based custom versions</description>\r\n        ///         </item>\r\n        ///         <item>\r\n        ///             <version>-3</version>\r\n        ///             <description>indicates guid-based custom versions</description>\r\n        ///         </item>\r\n        ///         <item>\r\n        ///             <version>-4</version>\r\n        ///             <description>indicates removal of the UE3 version. Packages saved with this ID cannot be loaded in older engine versions</description>\r\n        ///         </item>\r\n        ///         <item>\r\n        ///             <version>-5</version>\r\n        ///             <description>indicates the replacement of writing out the \"UE3 version\" so older versions of engine can gracefully fail to open newer packages</description>\r\n        ///         </item>\r\n        ///         <item>\r\n        ///             <version>-6</version>\r\n        ///             <description>indicates optimizations to how custom versions are being serialized</description>\r\n        ///         </item>\r\n        ///         <item>\r\n        ///             <version>-7</version>\r\n        ///             <description>indicates the texture allocation info has been removed from the summary</description>\r\n        ///         </item>\r\n        ///         <item>\r\n        ///             <version>-8</version>\r\n        ///             <description>indicates that the UE5 version has been added to the summary</description>\r\n        ///         </item>\r\n        ///         <item>\r\n        ///             <version>-9</version>\r\n        ///             <description>indicates a contractual change in when early exits are required based on FileVersionTooNew. At or after this LegacyFileVersion, we support changing the PackageFileSummary serialization format for all bytes serialized after FileVersionLicensee, and that format change can be conditional on any of the versions parsed before that point. All packageloaders that understand the -9 legacyfileformat are required to early exit without further serialization at that point if FileVersionTooNew is true.</description>\r\n        ///         </item>\r\n        ///     </list>\r\n        /// </remarks>\r\n        public int LegacyFileVersion;\r\n\r\n        internal ECustomVersionSerializationFormat CustomVersionSerializationFormat\r\n        {\r\n            get\r\n            {\r\n                if (LegacyFileVersion > -3) return ECustomVersionSerializationFormat.Enums;\r\n                if (LegacyFileVersion > -6) return ECustomVersionSerializationFormat.Guids;\r\n                return ECustomVersionSerializationFormat.Optimized;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// The version to use for serializing data resources.\r\n        /// </summary>\r\n\r\n        public EObjectDataResourceVersion DataResourceVersion;\r\n\r\n        /// <summary>\r\n        /// List of serialized UObject binary/bulk data resources.\r\n        /// </summary>\r\n        public List<FObjectDataResource> DataResources;\r\n\r\n        /// <summary>\r\n        /// Whether or not this asset is loaded with the Event Driven Loader.\r\n        /// </summary>\r\n        public bool UsesEventDrivenLoader;\r\n\r\n        /// <summary>\r\n        /// Whether or not this asset serializes hashes in the name map.\r\n        /// If null, this will be automatically determined based on the object version.\r\n        /// </summary>\r\n        public bool? WillSerializeNameHashes = null;\r\n\r\n        /// <summary>\r\n        /// Map of object imports. UAssetAPI used to call these \"links.\"\r\n        /// </summary>\r\n        public List<Import> Imports;\r\n\r\n        /// <summary>\r\n        /// List of dependency lists for each export.\r\n        /// </summary>\r\n        public List<int[]> DependsMap;\r\n\r\n        /// <summary>\r\n        /// List of packages that are soft referenced by this package.\r\n        /// </summary>\r\n        public List<FString> SoftPackageReferenceList;\r\n\r\n        /// <summary>\r\n        /// Offset to dependencies. This only appears in uncooked asset.\r\n        /// </summary>\r\n        public long AssetRegistryDependencyDataOffset = -1;\r\n\r\n        /// <summary>\r\n        /// Asset registry data.\r\n        /// </summary>\r\n        public List<FAssetRegistryRecord> AssetRegistryRecords;\r\n\r\n        /// <summary>\r\n        /// Number of valid bits in `ImportBits'. This only appears in uncooked asset.\r\n        /// </summary>\r\n        public int ImportBitsCount = 0;\r\n\r\n        /// <summary>\r\n        /// Bits indicating if imports used in game are contained in import map. This only appears in uncooked asset.\r\n        /// </summary>\r\n        public BitArray ImportBits;\r\n\r\n        /// <summary>\r\n        /// Number of valid bits in `SoftPackageBits'. This only appears in uncooked asset.\r\n        /// </summary>\r\n        public int SoftPackageBitsCount = 0;\r\n\r\n        /// <summary>\r\n        /// Bits indicating if soft packages used in game are contained in soft package reference list. This only appears in uncooked asset.\r\n        /// </summary>\r\n        public BitArray SoftPackageBits;\r\n\r\n        /// <summary>\r\n        /// Any bulk data that is not stored in the export map.\r\n        /// </summary>\r\n        public byte[] BulkData;\r\n\r\n        public byte[] AdditionalFiles;\r\n\r\n        public byte[] Trailer;\r\n\r\n        /// <summary>\r\n        /// Some garbage data that appears to be present in certain games (e.g. Valorant)\r\n        /// </summary>\r\n        public byte[] ValorantGarbageData;\r\n\r\n        /// <summary>\r\n        /// Some garbage data that appears to be present in certain games (e.g. Sea of Thieves)\r\n        /// null = not present\r\n        /// empty array = present, but serialize as offset = 0, length = 0\r\n        /// </summary>\r\n        public byte[] SeaOfThievesGarbageData = null;\r\n\r\n        /// <summary>\r\n        /// Sea of Thieves garbage data offset\r\n        /// </summary>\r\n        internal int SeaOfThievesGarbageDataOffset = -1;\r\n\r\n        /// <summary>\r\n        /// Sea of Thieves garbage data length\r\n        /// </summary>\r\n        internal short SeaOfThievesGarbageDataLength = -1;\r\n\r\n        /// <summary>\r\n        /// Data about previous versions of this package.\r\n        /// </summary>\r\n        public List<FGenerationInfo> Generations;\r\n\r\n        /// <summary>\r\n        /// Current ID for this package. Effectively unused.\r\n        /// </summary>\r\n        public Guid PackageGuid;\r\n\r\n        /// <summary>\r\n        /// Current persistent ID for this package.\r\n        /// </summary>\r\n        public Guid PersistentGuid;\r\n\r\n        /// <summary>\r\n        /// Engine version this package was saved with. This may differ from CompatibleWithEngineVersion for assets saved with a hotfix release.\r\n        /// </summary>\r\n        public FEngineVersion RecordedEngineVersion;\r\n\r\n        /// <summary>\r\n        /// Engine version this package is compatible with. Assets saved by Hotfix releases and engine versions that maintain binary compatibility will have\r\n        /// a CompatibleWithEngineVersion.Patch that matches the original release (as opposed to SavedByEngineVersion which will have a patch version of the new release).\r\n        /// </summary>\r\n        public FEngineVersion RecordedCompatibleWithEngineVersion;\r\n\r\n        /// <summary>\r\n        /// Streaming install ChunkIDs\r\n        /// </summary>\r\n        public int[] ChunkIDs;\r\n\r\n        /// <summary>\r\n        /// Value that is used by the Unreal Engine to determine if the package was saved by Epic, a licensee, modder, etc.\r\n        /// </summary>\r\n        public uint PackageSource;\r\n\r\n        /// <summary>\r\n        /// In UE4: \"FolderName\": The Generic Browser folder name that this package lives in. Usually \"None\" in cooked assets.\r\n        /// In UE5: \"PackageName\": The package name the file was last saved with.\r\n        /// </summary>\r\n        public FString FolderName;\r\n\r\n        /// <summary>\r\n        /// A map of name map entries to hashes to use when serializing instead of the default engine hash algorithm. Useful when external programs improperly specify name map hashes and binary equality must be maintained.\r\n        /// </summary>\r\n        [JsonIgnore]\r\n        public Dictionary<FString, uint> OverrideNameMapHashes;\r\n\r\n        /// <summary>This is called \"TotalHeaderSize\" in UE4 where header refers to the whole summary, whereas in UAssetAPI \"header\" refers to just the data before the start of the name map</summary>\r\n        internal int SectionSixOffset = 0;\r\n\r\n        /// <summary>Number of names used in this package</summary>\r\n        internal int NameCount = 0;\r\n\r\n        /// <summary>Location into the file on disk for the name data</summary>\r\n        internal int NameOffset;\r\n\r\n        /// <summary>Localization ID of this package</summary>\r\n        public FString LocalizationId;\r\n\r\n        /// <summary>Number of names used in this package</summary>\r\n        [JsonProperty]\r\n        internal int SoftObjectPathsCount = 0;\r\n\r\n        /// <summary>Location into the file on disk for the name data</summary>\r\n        [JsonProperty]\r\n        internal int SoftObjectPathsOffset = 0;\r\n\r\n        /// <summary>Number of gatherable text data items in this package</summary>\r\n        internal int GatherableTextDataCount;\r\n\r\n        /// <summary>Location into the file on disk for the gatherable text data items</summary>\r\n        internal int GatherableTextDataOffset;\r\n\r\n        /// <summary>Location into the file on disk for the MetaData data</summary>\r\n        internal int MetaDataOffset;\r\n\r\n        /// <summary>Number of exports contained in this package</summary>\r\n        internal int ExportCount = 0;\r\n\r\n        /// <summary>Location into the file on disk for the \"Export Details\" data</summary>\r\n        internal int ExportOffset = 0;\r\n\r\n        /// <summary>Number of imports contained in this package</summary>\r\n        internal int ImportCount = 0;\r\n\r\n        /// <summary>Location into the file on disk for the ImportMap data</summary>\r\n        internal int ImportOffset = 0;\r\n\r\n        /// <summary>Number of cells contained in this package</summary>\r\n        internal int CellExportCount;\r\n\r\n        /// <summary>Location into the file on disk for the CellExportMap data</summary>\r\n        internal int CellExportOffset;\r\n\r\n        /// <summary>Number of cell imports contained in this package</summary>\r\n        internal int CellImportCount;\r\n\r\n        /// <summary>Location into the file on disk for the CellImportMap data</summary>\r\n        internal int CellImportOffset;\r\n\r\n        /// <summary>Location into the file on disk for the DependsMap data</summary>\r\n        internal int DependsOffset = 0;\r\n\r\n        /// <summary>Number of soft package references contained in this package</summary>\r\n        internal int SoftPackageReferencesCount = 0;\r\n\r\n        /// <summary>Location into the file on disk for the soft package reference list</summary>\r\n        internal int SoftPackageReferencesOffset = 0;\r\n\r\n        /// <summary>Location into the file on disk for the SearchableNamesMap data</summary>\r\n        [JsonProperty]\r\n        internal int SearchableNamesOffset;\r\n\r\n        /// <summary>Thumbnail table offset</summary>\r\n        [JsonProperty]\r\n        internal int ThumbnailTableOffset;\r\n\r\n        /// <summary>Hash of the Package's bytes when it was saved to disk.</summary>\r\n        [JsonProperty]\r\n        internal byte[] SavedHash;\r\n\r\n        /// <summary>Should be zero</summary>\r\n        [JsonProperty]\r\n        internal uint CompressionFlags;\r\n\r\n        /// <summary>List of additional packages that are needed to be cooked for this package. No longer used</summary>\r\n        [JsonProperty]\r\n        internal List<FString> AdditionalPackagesToCook;\r\n\r\n        /// <summary>Location into the file on disk for the asset registry tag data</summary>\r\n        internal int AssetRegistryDataOffset;\r\n\r\n        /// <summary>Offset to the location in the file where the bulkdata starts</summary>\r\n        internal long BulkDataStartOffset;\r\n\r\n        /// <summary>Offset to the location in the file where the FWorldTileInfo data start</summary>\r\n        internal int WorldTileInfoDataOffset;\r\n\r\n        /// <summary>Number of preload dependencies contained in this package</summary>\r\n        internal int PreloadDependencyCount;\r\n\r\n        /// <summary>Location into the file on disk for the preload dependency data</summary>\r\n        internal int PreloadDependencyOffset;\r\n\r\n        [JsonProperty]\r\n        internal int NamesReferencedFromExportDataCount;\r\n        [JsonProperty]\r\n        internal long PayloadTocOffset;\r\n        [JsonProperty]\r\n        internal int DataResourceOffset;\r\n\r\n        [JsonProperty]\r\n        internal bool doWeHaveAssetRegistryData = true;\r\n        [JsonProperty]\r\n        internal bool doWeHaveWorldTileInfo = true;\r\n\r\n        [JsonIgnore]\r\n        internal bool haveWeLoadedDependencies = false;\r\n        private Dictionary<int, IList<int>> LoadDependencies()\r\n        {\r\n            haveWeLoadedDependencies = true;\r\n            if (Exports == null) return null;\r\n\r\n            Dictionary<int, IList<int>> depsMap = new Dictionary<int, IList<int>>();\r\n            for (int i = 0; i < Exports.Count; i++)\r\n            {\r\n                Export newExport = Exports[i];\r\n                List<FPackageIndex> deps = new List<FPackageIndex>();\r\n                deps.AddRange(newExport.SerializationBeforeSerializationDependencies);\r\n                deps.AddRange(newExport.SerializationBeforeCreateDependencies);\r\n                //deps.Add(newExport.ClassIndex);\r\n                //deps.Add(newExport.SuperIndex);\r\n\r\n                depsMap[i + 1] = new List<int>();\r\n                foreach (FPackageIndex dep in deps)\r\n                {\r\n                    if (dep.IsImport())\r\n                    {\r\n                        Import imp = dep.ToImport(this);\r\n                        if (imp?.OuterIndex?.IsImport() ?? false)\r\n                        {\r\n                            Import outerIndex1 = imp?.OuterIndex?.ToImport(this);\r\n                            FName sourcePath = outerIndex1?.ObjectName;\r\n                            if (sourcePath?.ToString()?.StartsWith('/') ?? false)\r\n                            {\r\n                                this.PullSchemasFromAnotherAsset(sourcePath);\r\n                            }\r\n                            else if (outerIndex1?.OuterIndex?.IsImport() ?? false)\r\n                            {\r\n                                Import outerIndex2 = outerIndex1.OuterIndex.ToImport(this);\r\n                                if (outerIndex2?.ObjectName?.ToString()?.StartsWith('/') ?? false)\r\n                                {\r\n                                    this.PullSchemasFromAnotherAsset(outerIndex2.ObjectName);\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    if (dep.IsExport())\r\n                    {\r\n                        depsMap[i + 1].Add(dep.Index);\r\n                    }\r\n                }\r\n            }\r\n            return depsMap;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Copies a portion of a stream to another stream.\r\n        /// </summary>\r\n        /// <param name=\"input\">The input stream.</param>\r\n        /// <param name=\"output\">The output stream.</param>\r\n        /// <param name=\"start\">The offset in the input stream to start copying from.</param>\r\n        /// <param name=\"leng\">The length in bytes of the data to be copied.</param>\r\n        internal static void CopySplitUp(Stream input, Stream output, int start, int leng)\r\n        {\r\n            input.Seek(start, SeekOrigin.Begin);\r\n            output.Seek(0, SeekOrigin.Begin);\r\n\r\n            byte[] buffer = new byte[32768];\r\n            int read;\r\n            while (leng > 0 && (read = input.Read(buffer, 0, Math.Min(buffer.Length, leng))) > 0)\r\n            {\r\n                output.Write(buffer, 0, read);\r\n                leng -= read;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Magic number for the .uasset format\r\n        /// </summary>\r\n        public static readonly uint UASSET_MAGIC = 0x9E2A83C1;\r\n\r\n        /// <summary>\r\n        /// Magic number for Ace Combat 7 encrypted .uasset format\r\n        /// </summary>\r\n        public static readonly uint ACE7_MAGIC = 0x37454341;\r\n\r\n        /// <summary>\r\n        /// Reads the initial portion of the asset (everything before the name map).\r\n        /// </summary>\r\n        /// <param name=\"reader\"></param>\r\n        /// <exception cref=\"UnknownEngineVersionException\">Thrown when this is an unversioned asset and <see cref=\"ObjectVersion\"/> is unspecified.</exception>\r\n        /// <exception cref=\"FormatException\">Throw when the asset cannot be parsed correctly.</exception>\r\n        private void ReadHeader(AssetBinaryReader reader)\r\n        {\r\n            reader.BaseStream.Seek(0, SeekOrigin.Begin);\r\n            uint fileSignature = reader.ReadUInt32();\r\n            if (fileSignature != UASSET_MAGIC) throw new FormatException(\"File signature mismatch\");\r\n\r\n            LegacyFileVersion = reader.ReadInt32();\r\n            if (LegacyFileVersion != -4)\r\n            {\r\n                reader.ReadInt32(); // LegacyUE3Version for backwards-compatibility with UE3 games: always 864 in versioned assets, always 0 in unversioned assets\r\n            }\r\n\r\n            ObjectVersion fileVersionUE4 = (ObjectVersion)reader.ReadInt32();\r\n            if (fileVersionUE4 > ObjectVersion.UNKNOWN)\r\n            {\r\n                IsUnversioned = false;\r\n                ObjectVersion = fileVersionUE4;\r\n            }\r\n            else\r\n            {\r\n                IsUnversioned = true;\r\n                if (Mappings != null && Mappings.FileVersionUE4 > 0) ObjectVersion = Mappings.FileVersionUE4;\r\n                if (ObjectVersion == ObjectVersion.UNKNOWN) throw new UnknownEngineVersionException(\"Cannot begin serialization of an unversioned asset before an object version is manually specified\");\r\n            }\r\n\r\n            if (LegacyFileVersion <= -8)\r\n            {\r\n                ObjectVersionUE5 fileVersionUE5 = (ObjectVersionUE5)reader.ReadInt32();\r\n                if (fileVersionUE5 > ObjectVersionUE5.UNKNOWN) ObjectVersionUE5 = fileVersionUE5;\r\n            }\r\n            if (ObjectVersionUE5 == ObjectVersionUE5.UNKNOWN && Mappings != null && Mappings.FileVersionUE5 > 0) ObjectVersionUE5 = Mappings.FileVersionUE5;\r\n\r\n            // if wasn't unversioned, we'll ignore the current custom version container and just read it from disk\r\n            if (!IsUnversioned)\r\n            {\r\n                CustomVersionContainer = null;\r\n            }\r\n\r\n            FileVersionLicenseeUE = reader.ReadInt32();\r\n\r\n            if (ObjectVersionUE5 >= ObjectVersionUE5.PACKAGE_SAVED_HASH)\r\n            {\r\n                SavedHash = reader.ReadBytes(20);\r\n                SectionSixOffset = reader.ReadInt32();\r\n            }\r\n\r\n            // Custom versions container\r\n            if (LegacyFileVersion <= -2)\r\n            {\r\n                CustomVersionContainer = reader.ReadCustomVersionContainer(CustomVersionSerializationFormat, CustomVersionContainer, Mappings);\r\n            }\r\n\r\n            if (ObjectVersionUE5 < ObjectVersionUE5.PACKAGE_SAVED_HASH)\r\n            { \r\n                SectionSixOffset = reader.ReadInt32(); // 24\r\n            }\r\n\r\n            FolderName = reader.ReadFString();\r\n            PackageFlags = (EPackageFlags)reader.ReadUInt32();\r\n            NameCount = reader.ReadInt32();\r\n            NameOffset = reader.ReadInt32();\r\n\r\n            if (ObjectVersionUE5 >= ObjectVersionUE5.ADD_SOFTOBJECTPATH_LIST)\r\n            {\r\n                SoftObjectPathsCount = reader.ReadInt32();\r\n                SoftObjectPathsOffset = reader.ReadInt32();\r\n            }\r\n\r\n            if (!IsFilterEditorOnly && ObjectVersion >= ObjectVersion.VER_UE4_ADDED_PACKAGE_SUMMARY_LOCALIZATION_ID)\r\n            {\r\n                LocalizationId = reader.ReadFString();\r\n            }\r\n\r\n            if (ObjectVersion >= ObjectVersion.VER_UE4_SERIALIZE_TEXT_IN_PACKAGES)\r\n            {\r\n                GatherableTextDataCount = reader.ReadInt32();\r\n                GatherableTextDataOffset = reader.ReadInt32();\r\n            }\r\n\r\n            ExportCount = reader.ReadInt32();\r\n            ExportOffset = reader.ReadInt32(); // 61\r\n            ImportCount = reader.ReadInt32(); // 65\r\n            ImportOffset = reader.ReadInt32(); // 69 (haha funny)\r\n\r\n            if (ObjectVersionUE5 >= ObjectVersionUE5.VERSE_CELLS)\r\n            {\r\n                CellExportCount = reader.ReadInt32();\r\n                CellExportOffset = reader.ReadInt32();\r\n                CellImportCount = reader.ReadInt32();\r\n                CellImportOffset = reader.ReadInt32();\r\n            }\r\n\r\n            if (ObjectVersionUE5 >= ObjectVersionUE5.METADATA_SERIALIZATION_OFFSET)\r\n            {\r\n                MetaDataOffset = reader.ReadInt32();\r\n            }\r\n\r\n            DependsOffset = reader.ReadInt32(); // 73\r\n            if (ObjectVersion >= ObjectVersion.VER_UE4_ADD_STRING_ASSET_REFERENCES_MAP)\r\n            {\r\n                SoftPackageReferencesCount = reader.ReadInt32(); // 77\r\n                SoftPackageReferencesOffset = reader.ReadInt32(); // 81\r\n            }\r\n            if (ObjectVersion >= ObjectVersion.VER_UE4_ADDED_SEARCHABLE_NAMES)\r\n            {\r\n                SearchableNamesOffset = reader.ReadInt32();\r\n            }\r\n            ThumbnailTableOffset = reader.ReadInt32();\r\n\r\n            // valorant garbage data is here\r\n\r\n            if (ObjectVersionUE5 < ObjectVersionUE5.PACKAGE_SAVED_HASH)\r\n            {\r\n                PackageGuid = new Guid(reader.ReadBytes(16));\r\n            }\r\n\r\n            if (!IsFilterEditorOnly)\r\n            {\r\n                PersistentGuid = ObjectVersion >= ObjectVersion.VER_UE4_ADDED_PACKAGE_OWNER \r\n                    ? new Guid(reader.ReadBytes(16))\r\n                    : PackageGuid;\r\n\r\n                if (ObjectVersion >= ObjectVersion.VER_UE4_ADDED_PACKAGE_OWNER &&\r\n                    ObjectVersion < ObjectVersion.VER_UE4_NON_OUTER_PACKAGE_IMPORT)\r\n                    reader.ReadBytes(16);\r\n            }\r\n\r\n            Generations = new List<FGenerationInfo>();\r\n            int generationCount = reader.ReadInt32();\r\n            if (generationCount < 0 || generationCount > 1e5) // failsafe for some specific games\r\n            {\r\n                reader.BaseStream.Position -= sizeof(int) + 16;\r\n                ValorantGarbageData = reader.ReadBytes(8); // garbage data\r\n                PackageGuid = new Guid(reader.ReadBytes(16));\r\n                generationCount = reader.ReadInt32();\r\n            }\r\n            for (int i = 0; i < generationCount; i++)\r\n            {\r\n                int genNumExports = reader.ReadInt32();\r\n                int genNumNames = reader.ReadInt32();\r\n                Generations.Add(new FGenerationInfo(genNumExports, genNumNames));\r\n            }\r\n\r\n            if (ObjectVersion >= ObjectVersion.VER_UE4_ENGINE_VERSION_OBJECT)\r\n            {\r\n                RecordedEngineVersion = new FEngineVersion(reader);\r\n            }\r\n            else\r\n            {\r\n                RecordedEngineVersion = new FEngineVersion(4, 0, 0, reader.ReadUInt32(), FString.FromString(\"\"));\r\n            }\r\n\r\n            if (ObjectVersion >= ObjectVersion.VER_UE4_PACKAGE_SUMMARY_HAS_COMPATIBLE_ENGINE_VERSION)\r\n            {\r\n                RecordedCompatibleWithEngineVersion = new FEngineVersion(reader);\r\n            }\r\n            else\r\n            {\r\n                RecordedCompatibleWithEngineVersion = RecordedEngineVersion;\r\n            }\r\n\r\n            CompressionFlags = reader.ReadUInt32();\r\n            int numCompressedChunks = reader.ReadInt32();\r\n            if (numCompressedChunks > 0) throw new FormatException(\"Asset has package-level compression and is likely too old to be parsed\");\r\n\r\n            PackageSource = reader.ReadUInt32();\r\n\r\n            AdditionalPackagesToCook = new List<FString>();\r\n            int numAdditionalPackagesToCook = reader.ReadInt32();\r\n            for (int i = 0; i < numAdditionalPackagesToCook; i++)\r\n            {\r\n                AdditionalPackagesToCook.Add(reader.ReadFString());\r\n            }\r\n\r\n            if (LegacyFileVersion > -7)\r\n            {\r\n                int numTextureAllocations = reader.ReadInt32(); // unused\r\n                if (numTextureAllocations > 0) throw new FormatException(\"Asset has texture allocation info and is likely too old to be parsed\");\r\n            }\r\n\r\n            AssetRegistryDataOffset = reader.ReadInt32();\r\n            BulkDataStartOffset = reader.ReadInt64();\r\n            if (BulkDataStartOffset < -1e14 || BulkDataStartOffset > 1e14)\r\n            {\r\n                // probably Sea of Thieves, etc.\r\n                reader.BaseStream.Position -= sizeof(long);\r\n                SeaOfThievesGarbageDataOffset = reader.ReadInt32();\r\n                SeaOfThievesGarbageDataLength = reader.ReadInt16();\r\n                BulkDataStartOffset = reader.ReadInt64();\r\n            }\r\n\r\n            if (ObjectVersion >= ObjectVersion.VER_UE4_WORLD_LEVEL_INFO)\r\n            {\r\n                WorldTileInfoDataOffset = reader.ReadInt32();\r\n            }\r\n\r\n            if (ObjectVersion >= ObjectVersion.VER_UE4_CHANGED_CHUNKID_TO_BE_AN_ARRAY_OF_CHUNKIDS)\r\n            {\r\n                int numChunkIDs = reader.ReadInt32();\r\n                ChunkIDs = new int[numChunkIDs];\r\n                for (int i = 0; i < numChunkIDs; i++)\r\n                {\r\n                    ChunkIDs[i] = reader.ReadInt32();\r\n                }\r\n            }\r\n            else if (ObjectVersion >= ObjectVersion.VER_UE4_ADDED_CHUNKID_TO_ASSETDATA_AND_UPACKAGE)\r\n            {\r\n                ChunkIDs = new int[1];\r\n                ChunkIDs[0] = reader.ReadInt32();\r\n            }\r\n\r\n            if (ObjectVersion >= ObjectVersion.VER_UE4_PRELOAD_DEPENDENCIES_IN_COOKED_EXPORTS)\r\n            {\r\n                PreloadDependencyCount = reader.ReadInt32();\r\n                PreloadDependencyOffset = reader.ReadInt32();\r\n            }\r\n\r\n            // ue5 stuff\r\n            NamesReferencedFromExportDataCount = ObjectVersionUE5 >= ObjectVersionUE5.NAMES_REFERENCED_FROM_EXPORT_DATA ? reader.ReadInt32() : NameCount;\r\n            PayloadTocOffset = ObjectVersionUE5 >= ObjectVersionUE5.PAYLOAD_TOC ? reader.ReadInt64() : -1;\r\n            DataResourceOffset = ObjectVersionUE5 >= ObjectVersionUE5.DATA_RESOURCES ? reader.ReadInt32() : -1;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads an asset into memory.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The input reader.</param>\r\n        /// <param name=\"manualSkips\">An array of export indices to skip parsing. For most applications, this should be left blank.</param>\r\n        /// <param name=\"forceReads\">An array of export indices that must be read, overriding entries in the manualSkips parameter. For most applications, this should be left blank.</param>\r\n        /// <exception cref=\"UnknownEngineVersionException\">Thrown when this is an unversioned asset and <see cref=\"ObjectVersion\"/> is unspecified.</exception>\r\n        /// <exception cref=\"FormatException\">Throw when the asset cannot be parsed correctly.</exception>\r\n        public virtual void Read(AssetBinaryReader reader, int[] manualSkips = null, int[] forceReads = null)\r\n        {\r\n            reader.Asset = this;\r\n            hasFoundParentClassExportName = false;\r\n\r\n            // Header\r\n            ReadHeader(reader);\r\n\r\n            // Name map\r\n            reader.BaseStream.Seek(NameOffset, SeekOrigin.Begin);\r\n\r\n            OverrideNameMapHashes = new Dictionary<FString, uint>();\r\n            ClearNameIndexList();\r\n            for (int i = 0; i < NameCount; i++)\r\n            {\r\n                FString nameInMap = reader.ReadNameMapString(out uint hashes);\r\n                if (hashes == 0)\r\n                {\r\n                    OverrideNameMapHashes[nameInMap] = 0;\r\n                }\r\n                else if (hashes >> 16 == 0 && nameInMap.Value == nameInMap.Value.ToLowerInvariant()) // WITH_CASE_PRESERVING_NAME = 0; if pre-4.23, do not serialize CasePreservingHash \r\n                {\r\n                    nameInMap.IsCasePreserving = false;\r\n                }\r\n                AddNameReference(nameInMap, true, true);\r\n            }\r\n\r\n            SoftObjectPathList = null;\r\n            if (SoftObjectPathsOffset > 0)\r\n            {\r\n                reader.BaseStream.Seek(SoftObjectPathsOffset, SeekOrigin.Begin);\r\n                SoftObjectPathList = new List<FSoftObjectPath>();\r\n                for (int i = 0; i < SoftObjectPathsCount; i++)\r\n                {\r\n                    SoftObjectPathList.Add(new FSoftObjectPath(reader, false));\r\n                }\r\n            }\r\n\r\n            // Gatherable text\r\n            if (GatherableTextDataOffset > 0 && GatherableTextDataCount > 0)\r\n            {\r\n                reader.BaseStream.Seek(GatherableTextDataOffset, SeekOrigin.Begin);\r\n\r\n                GatherableTextData = new List<FGatherableTextData>();\r\n                for (var i = 0; i < GatherableTextDataCount; i++)\r\n                {\r\n                    var namespaceName = reader.ReadFString();\r\n\r\n                    var sourceString = reader.ReadFString();\r\n                    var sourceStringMetaData = reader.ReadLocMetadataObject();\r\n                    var sourceData = new FTextSourceData {SourceString = sourceString, SourceStringMetaData = sourceStringMetaData};\r\n\r\n                    var contexts = new List<FTextSourceSiteContext>();\r\n                    var contextsCount = reader.ReadInt32();\r\n                    for (var j = 0; j < contextsCount; j++)\r\n                    {\r\n                        var keyName = reader.ReadFString();\r\n                        var siteDescription = reader.ReadFString();\r\n                        var isEditorOnly = reader.ReadInt32() > 0;\r\n                        var isOptional = reader.ReadInt32() > 0;\r\n                        var infoMetaData = reader.ReadLocMetadataObject();\r\n                        var keyMetaData = reader.ReadLocMetadataObject();\r\n                        var context = new FTextSourceSiteContext\r\n                        {\r\n                            KeyName = keyName,\r\n                            SiteDescription = siteDescription,\r\n                            IsEditorOnly = isEditorOnly,\r\n                            IsOptional = isOptional,\r\n                            InfoMetaData = infoMetaData,\r\n                            KeyMetaData = keyMetaData\r\n                        };\r\n                        contexts.Add(context);\r\n                    }\r\n\r\n                    var textData = new FGatherableTextData { NamespaceName = namespaceName, SourceData = sourceData, SourceSiteContexts = contexts};\r\n                    GatherableTextData.Add(textData);\r\n                }\r\n            }\r\n\r\n            // Imports\r\n            Imports = new List<Import>();\r\n            if (ImportOffset > 0)\r\n            {\r\n                reader.BaseStream.Seek(ImportOffset, SeekOrigin.Begin);\r\n                for (int i = 0; i < ImportCount; i++)\r\n                {\r\n                    Imports.Add(new Import(reader));\r\n                }\r\n            }\r\n\r\n            // Export details\r\n            Exports = new List<Export>();\r\n            List<int> exportLoadOrder = new List<int>();\r\n            if (ExportOffset > 0)\r\n            {\r\n                reader.BaseStream.Seek(ExportOffset, SeekOrigin.Begin);\r\n                for (int i = 0; i < ExportCount; i++)\r\n                {\r\n                    var newExport = new Export(this, Array.Empty<byte>());\r\n                    newExport.ReadExportMapEntry(reader);\r\n                    Exports.Add(newExport);\r\n\r\n                    /*string ect = newExport.GetExportClassType().Value.Value;\r\n                    if (ect.EndsWith(\"BlueprintGeneratedClass\"))\r\n                    {\r\n                        exportLoadOrder.Add(i);\r\n                    }*/\r\n                }\r\n            }\r\n\r\n            // DependsMap\r\n            DependsMap = null;\r\n            if (DependsOffset > 0 || (ObjectVersion > ObjectVersion.VER_UE4_PRELOAD_DEPENDENCIES_IN_COOKED_EXPORTS && ObjectVersion < ObjectVersion.VER_UE4_64BIT_EXPORTMAP_SERIALSIZES)) // 4.14-4.15 the depends offset wasnt updated so always serialized as 0\r\n            {\r\n                DependsMap = new List<int[]>();\r\n                if (DependsOffset > 0) reader.BaseStream.Seek(DependsOffset, SeekOrigin.Begin);\r\n                for (int i = 0; i < ExportCount; i++)\r\n                {\r\n                    int size = reader.ReadInt32();\r\n                    int[] data = new int[size];\r\n                    for (int j = 0; j < size; j++)\r\n                    {\r\n                        data[j] = reader.ReadInt32();\r\n                    }\r\n                    DependsMap.Add(data);\r\n                }\r\n            }\r\n\r\n            // SoftPackageReferenceList\r\n            SoftPackageReferenceList = null;\r\n            if (SoftPackageReferencesOffset > 0)\r\n            {\r\n                reader.BaseStream.Seek(SoftPackageReferencesOffset, SeekOrigin.Begin);\r\n                SoftPackageReferenceList = new List<FString>();\r\n                for (int i = 0; i < SoftPackageReferencesCount; i++)\r\n                {\r\n                    SoftPackageReferenceList.Add(ObjectVersion >= ObjectVersion.VER_UE4_ADDED_SOFT_OBJECT_PATH\r\n                        ? FString.FromString(reader.ReadFName().ToString())\r\n                        : reader.ReadFString());\r\n                }\r\n            }\r\n\r\n            if (AssetRegistryDataOffset > 0)\r\n            {\r\n                AssetRegistryDependencyDataOffset = -1;\r\n                reader.BaseStream.Seek(AssetRegistryDataOffset, SeekOrigin.Begin);\r\n                if (!IsPreDependencyFormat)\r\n                {\r\n                    AssetRegistryDependencyDataOffset = reader.ReadInt64();\r\n                }\r\n\r\n                int numAssets = reader.ReadInt32();\r\n                AssetRegistryRecords = [];\r\n                for (int i = 0; i < numAssets; i++)\r\n                {\r\n                    FAssetRegistryRecord record = new FAssetRegistryRecord();\r\n\r\n                    record.Path = reader.ReadString();\r\n                    record.ClassName = reader.ReadString();\r\n\r\n                    int tagNum = reader.ReadInt32();\r\n                    record.TagMap = [];\r\n                    for (int j = 0; j < tagNum; ++j)\r\n                    {\r\n                        string key = reader.ReadString();\r\n                        string value = reader.ReadString();\r\n                        record.TagMap.Add(key, value);\r\n                    }\r\n                    AssetRegistryRecords.Add(record);\r\n                }\r\n\r\n                if (!IsPreDependencyFormat)\r\n                {\r\n                    ImportBits = ReadBitArray(reader, out ImportBitsCount);\r\n                    SoftPackageBits = ReadBitArray(reader, out SoftPackageBitsCount);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                doWeHaveAssetRegistryData = false;\r\n            }\r\n\r\n            // SeaOfThievesGarbageData\r\n            if (SeaOfThievesGarbageDataOffset > 0 && SeaOfThievesGarbageDataLength > 0)\r\n            {\r\n                long before = reader.BaseStream.Position;\r\n                reader.BaseStream.Seek(SeaOfThievesGarbageDataOffset, SeekOrigin.Begin);\r\n                SeaOfThievesGarbageData = reader.ReadBytes(SeaOfThievesGarbageDataLength);\r\n                reader.BaseStream.Seek(before, SeekOrigin.Begin);\r\n            }\r\n            else if (SeaOfThievesGarbageDataOffset == 0 || SeaOfThievesGarbageDataLength == 0)\r\n            {\r\n                SeaOfThievesGarbageData = Array.Empty<byte>();\r\n            }\r\n            else\r\n            {\r\n                SeaOfThievesGarbageData = null;\r\n            }\r\n\r\n            AdditionalFiles = [];\r\n            if (BulkDataStartOffset > 0 && reader.LoadUexp)\r\n            {\r\n                long before = reader.BaseStream.Position;\r\n                reader.BaseStream.Seek(BulkDataStartOffset, SeekOrigin.Begin);\r\n                bool hasPayload = PayloadTocOffset > 0;\r\n                long end = hasPayload ? PayloadTocOffset : reader.BaseStream.Length;\r\n                AdditionalFiles = reader.ReadBytes((int)(end - BulkDataStartOffset));\r\n                if (hasPayload)\r\n                {\r\n                    Trailer = reader.ReadBytes((int)(reader.BaseStream.Length - reader.BaseStream.Position));\r\n                }\r\n                reader.BaseStream.Seek(before, SeekOrigin.Begin);\r\n            }\r\n\r\n            // WorldTileInfoDataOffset\r\n            WorldTileInfo = null;\r\n            if (WorldTileInfoDataOffset > 0)\r\n            {\r\n                reader.BaseStream.Seek(WorldTileInfoDataOffset, SeekOrigin.Begin);\r\n                WorldTileInfo = new FWorldTileInfo();\r\n                WorldTileInfo.Read(reader, this);\r\n            }\r\n            else\r\n            {\r\n                doWeHaveWorldTileInfo = false;\r\n            }\r\n\r\n            // PreloadDependencies\r\n            if (PreloadDependencyOffset > 0) reader.BaseStream.Seek(PreloadDependencyOffset, SeekOrigin.Begin); // needed so that we're at a sensible offset for AppendedNullBytes if no preload deps\r\n            for (int i = 0; i < Exports.Count; i++)\r\n            {\r\n                if (PreloadDependencyOffset <= 0) continue;\r\n                if (Exports[i].FirstExportDependencyOffset < 0) continue; // not <= 0\r\n                this.UsesEventDrivenLoader = true;\r\n\r\n                reader.BaseStream.Seek(PreloadDependencyOffset, SeekOrigin.Begin);\r\n                reader.BaseStream.Seek(Exports[i].FirstExportDependencyOffset * sizeof(int), SeekOrigin.Current);\r\n\r\n                Exports[i].SerializationBeforeSerializationDependencies = new List<FPackageIndex>(Exports[i].SerializationBeforeSerializationDependenciesSize);\r\n                for (int j = 0; j < Exports[i].SerializationBeforeSerializationDependenciesSize; j++) Exports[i].SerializationBeforeSerializationDependencies.Add(FPackageIndex.FromRawIndex(reader.ReadInt32()));\r\n\r\n                Exports[i].CreateBeforeSerializationDependencies = new List<FPackageIndex>(Exports[i].CreateBeforeSerializationDependenciesSize);\r\n                for (int j = 0; j < Exports[i].CreateBeforeSerializationDependenciesSize; j++) Exports[i].CreateBeforeSerializationDependencies.Add(FPackageIndex.FromRawIndex(reader.ReadInt32()));\r\n\r\n                Exports[i].SerializationBeforeCreateDependencies = new List<FPackageIndex>(Exports[i].SerializationBeforeCreateDependenciesSize);\r\n                for (int j = 0; j < Exports[i].SerializationBeforeCreateDependenciesSize; j++) Exports[i].SerializationBeforeCreateDependencies.Add(FPackageIndex.FromRawIndex(reader.ReadInt32()));\r\n\r\n                Exports[i].CreateBeforeCreateDependencies = new List<FPackageIndex>(Exports[i].CreateBeforeCreateDependenciesSize);\r\n                for (int j = 0; j < Exports[i].CreateBeforeCreateDependenciesSize; j++) Exports[i].CreateBeforeCreateDependencies.Add(FPackageIndex.FromRawIndex(reader.ReadInt32()));\r\n            }\r\n\r\n            // DataResources (5.3+)\r\n            DataResources = null;\r\n            if (DataResourceOffset > 0)\r\n            {\r\n                DataResources = new List<FObjectDataResource>();\r\n                reader.BaseStream.Seek(DataResourceOffset, SeekOrigin.Begin);\r\n                DataResourceVersion = (EObjectDataResourceVersion)reader.ReadUInt32();\r\n\r\n                int count = reader.ReadInt32();\r\n                for (int i = 0; i < count; i++)\r\n                {\r\n                    EObjectDataResourceFlags Flags = (EObjectDataResourceFlags)reader.ReadUInt32();\r\n\r\n                    byte CookedIndex = 0;\r\n                    if (DataResourceVersion >= EObjectDataResourceVersion.AddedCookedIndex)\r\n                    {\r\n                        CookedIndex = reader.ReadByte();\r\n                    }\r\n\r\n                    long SerialOffset = reader.ReadInt64();\r\n                    long DuplicateSerialOffset = reader.ReadInt64();\r\n                    long SerialSize = reader.ReadInt64();\r\n                    long RawSize = reader.ReadInt64();\r\n                    FPackageIndex OuterIndex = FPackageIndex.FromRawIndex(reader.ReadInt32());\r\n                    uint LegacyBulkDataFlags = reader.ReadUInt32();\r\n\r\n                    DataResources.Add(new FObjectDataResource(Flags, SerialOffset, DuplicateSerialOffset, SerialSize, RawSize, OuterIndex, LegacyBulkDataFlags, CookedIndex));\r\n                }\r\n            }\r\n\r\n            // possible for some null bytes to exist at end of .uasset file as part of Archengius + trumank zen to legacy conversion project\r\n            // as with other changes made by external tools that are accepted by the engine, we would like to maintain these bytes\r\n            if (Exports.Count > 0)\r\n            {\r\n                long offsetDiff = Exports[0].SerialOffset - reader.BaseStream.Position;\r\n                byte[] paddingBytes = reader.ReadBytes((int)offsetDiff);\r\n                foreach (byte byt in paddingBytes)\r\n                {\r\n                    // if non-null then we expect that some serialization problem has occurred\r\n                    if (byt != 0) throw new FormatException(\"Encountered additional non-null data at end of legacy header data\");\r\n                }\r\n                AppendedNullBytes = paddingBytes.Length; // int rather than byte[] so easy to understand in JSON\r\n            }\r\n\r\n            if (reader.LoadUexp)\r\n            {\r\n                bool skipLoadingExports = CustomSerializationFlags.HasFlag(CustomSerializationFlags.SkipLoadingExports);\r\n                bool skipParsingExports = skipLoadingExports || CustomSerializationFlags.HasFlag(CustomSerializationFlags.SkipParsingExports);\r\n\r\n                // load dependencies, if needed and available\r\n                Dictionary<int, IList<int>> depsMap = LoadDependencies();\r\n                exportLoadOrder.AddRange(Enumerable.Range(1, Exports.Count).SortByDependencies(depsMap));\r\n\r\n                // Export data\r\n                if (SectionSixOffset > 0 && Exports.Count > 0)\r\n                {\r\n                    foreach (int exportIdx in exportLoadOrder)\r\n                    {\r\n                        int i = exportIdx - 1;\r\n\r\n                        if (!skipLoadingExports) reader.BaseStream.Seek(Exports[i].SerialOffset, SeekOrigin.Begin);\r\n                        if (skipParsingExports || skipLoadingExports || (manualSkips != null && manualSkips.Contains(i) && (forceReads == null || !forceReads.Contains(i))))\r\n                        {\r\n                            Exports[i] = Exports[i].ConvertToChildExport<RawExport>();\r\n                            ((RawExport)Exports[i]).Data = skipLoadingExports ? Array.Empty<byte>() : reader.ReadBytes((int)Exports[i].SerialSize);\r\n                            continue;\r\n                        }\r\n\r\n                        ConvertExportToChildExportAndRead(reader, i);\r\n                    }\r\n\r\n                    // catch any stragglers\r\n                    for (int i = 0; i < Exports.Count; i++)\r\n                    {\r\n                        if (Exports[i].alreadySerialized) continue;\r\n\r\n                        if (!skipLoadingExports) reader.BaseStream.Seek(Exports[i].SerialOffset, SeekOrigin.Begin);\r\n                        if (skipParsingExports || skipLoadingExports || (manualSkips != null && manualSkips.Contains(i) && (forceReads == null || !forceReads.Contains(i))))\r\n                        {\r\n                            Exports[i] = Exports[i].ConvertToChildExport<RawExport>();\r\n                            ((RawExport)Exports[i]).Data = skipLoadingExports ? Array.Empty<byte>() : reader.ReadBytes((int)Exports[i].SerialSize);\r\n                            continue;\r\n                        }\r\n\r\n                        ConvertExportToChildExportAndRead(reader, i);\r\n                    }\r\n                }\r\n            }\r\n            else\r\n            {\r\n                // skip loading dependencies & parsing export data if we don't load uexp/exports\r\n                // convert all exports as appropriate, but do no further reading\r\n                for (int i = 0; i < Exports.Count; i++)\r\n                {\r\n                    if (manualSkips != null && manualSkips.Contains(i) && (forceReads == null || !forceReads.Contains(i)))\r\n                    {\r\n                        Exports[i] = Exports[i].ConvertToChildExport<RawExport>();\r\n                        continue;\r\n                    }\r\n\r\n                    ConvertExportToChildExportAndRead(reader, i, false);\r\n                }\r\n            }\r\n\r\n            // Searchable names\r\n            if (SearchableNamesOffset > 0)\r\n            {\r\n                SearchableNames = new SortedDictionary<FPackageIndex, List<FName>>();\r\n                reader.BaseStream.Seek(SearchableNamesOffset, SeekOrigin.Begin);\r\n                var searchableNamesCount = reader.ReadInt32();\r\n                \r\n                for (int i = 0; i < searchableNamesCount; i++)\r\n                {\r\n                    var collectionIndex = reader.ReadInt32();\r\n                    var collectionCount = reader.ReadInt32();\r\n                    var searchableCollection = new List<FName>();\r\n                    for (int j = 0; j < collectionCount; j++)\r\n                    {\r\n                        var searchableName = reader.ReadFName();\r\n                        searchableCollection.Add(searchableName);\r\n                    }\r\n\r\n                    SearchableNames.Add(FPackageIndex.FromRawIndex(collectionIndex), searchableCollection);\r\n                }\r\n            }\r\n\r\n            // Thumbnails\r\n            if (ThumbnailTableOffset > 0)\r\n            {\r\n                reader.BaseStream.Seek(ThumbnailTableOffset, SeekOrigin.Begin);\r\n                var thumbnailCount = reader.ReadInt32();\r\n                var thumbnailOffsets = new Dictionary<string, int>();\r\n                for (int i = 0; i < thumbnailCount; i++)\r\n                {\r\n                    var objectShortClassName = reader.ReadFString();\r\n                    var objectPathWithoutPackageName = reader.ReadFString();\r\n                    // TODO: handle UPackage thumbnails differently from usual assets\r\n\r\n                    // TODO: FPackageName::FilenameToLongPackageName(InPackageFileName)\r\n                    var objectName = $\"{objectShortClassName} {objectPathWithoutPackageName}\";\r\n\r\n                    var fileOffset = reader.ReadInt32();\r\n\r\n                    thumbnailOffsets[objectName] = fileOffset;\r\n                }\r\n\r\n                Thumbnails = new Dictionary<string, FObjectThumbnail>();\r\n                foreach (var kv in thumbnailOffsets)\r\n                {\r\n                    reader.BaseStream.Seek(kv.Value, SeekOrigin.Begin);\r\n                    Thumbnails[kv.Key] = reader.ReadObjectThumbnail();\r\n                }\r\n            }\r\n        }\r\n\r\n        private static BitArray ReadBitArray(AssetBinaryReader reader, out int bitCount)\r\n        {\r\n            bitCount = reader.ReadInt32();\r\n            int length = ComputeBitArrayDataLenth(bitCount);\r\n            return new BitArray(reader.ReadBytes(length));\r\n        }\r\n        private static int BitsToNumWords(int bitCount)\r\n        {\r\n            return (int)Math.Ceiling(bitCount / 32.0);\r\n        }\r\n\r\n        private static int ComputeBitArrayDataLenth(int bitCount)\r\n        {\r\n            return sizeof(Int32) * BitsToNumWords(bitCount);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Serializes the initial portion of the asset from memory.\r\n        /// </summary>\r\n        /// <returns>A byte array which represents the serialized binary data of the initial portion of the asset.</returns>\r\n        private byte[] MakeHeader()\r\n        {\r\n            var stre = new MemoryStream(this.NameOffset);\r\n            AssetBinaryWriter writer = new AssetBinaryWriter(stre, this);\r\n\r\n            writer.Write(UAsset.UASSET_MAGIC);\r\n            writer.Write(LegacyFileVersion);\r\n            if (LegacyFileVersion != 4)\r\n            {\r\n                writer.Write(IsUnversioned ? 0 : 864);\r\n            }\r\n\r\n            if (IsUnversioned)\r\n            {\r\n                writer.Write(0);\r\n            }\r\n            else\r\n            {\r\n                writer.Write((int)ObjectVersion);\r\n            }\r\n\r\n            if (LegacyFileVersion <= -8)\r\n            {\r\n                if (IsUnversioned)\r\n                {\r\n                    writer.Write(0);\r\n                }\r\n                else\r\n                {\r\n                    writer.Write((int)ObjectVersionUE5);\r\n                }\r\n            }\r\n\r\n            writer.Write(FileVersionLicenseeUE);\r\n\r\n            if (ObjectVersionUE5 >= ObjectVersionUE5.PACKAGE_SAVED_HASH)\r\n            {\r\n                writer.Write(SavedHash);\r\n                writer.Write(SectionSixOffset);\r\n            }\r\n\r\n            if (LegacyFileVersion <= -2)\r\n            {\r\n                if (IsUnversioned)\r\n                {\r\n                    writer.Write(0);\r\n                }\r\n                else\r\n                {\r\n                    writer.WriteCustomVersionContainer(CustomVersionSerializationFormat, CustomVersionContainer);\r\n                }\r\n            }\r\n\r\n            if (ObjectVersionUE5 < ObjectVersionUE5.PACKAGE_SAVED_HASH)\r\n            {\r\n                writer.Write(SectionSixOffset);\r\n            }\r\n\r\n            writer.Write(FolderName);\r\n            writer.Write((uint)PackageFlags);\r\n            writer.Write(NameCount);\r\n            writer.Write(NameOffset);\r\n            if (ObjectVersionUE5 >= ObjectVersionUE5.ADD_SOFTOBJECTPATH_LIST)\r\n            {\r\n                writer.Write(SoftObjectPathsCount);\r\n                writer.Write(SoftObjectPathsOffset);\r\n            }\r\n            if (!IsFilterEditorOnly && ObjectVersion >= ObjectVersion.VER_UE4_ADDED_PACKAGE_SUMMARY_LOCALIZATION_ID)\r\n            {\r\n                writer.Write(LocalizationId);\r\n            }\r\n            if (ObjectVersion >= ObjectVersion.VER_UE4_SERIALIZE_TEXT_IN_PACKAGES)\r\n            {\r\n                writer.Write(GatherableTextDataCount);\r\n                writer.Write(GatherableTextDataOffset);\r\n            }\r\n            writer.Write(ExportCount);\r\n            writer.Write(ExportOffset); // 61\r\n            writer.Write(ImportCount); // 65\r\n            writer.Write(ImportOffset); // 69 (haha funny)\r\n\r\n            if (ObjectVersionUE5 >= ObjectVersionUE5.VERSE_CELLS)\r\n            {\r\n                writer.Write(CellExportCount);\r\n                writer.Write(CellExportOffset);\r\n                writer.Write(CellImportCount);\r\n                writer.Write(CellImportOffset);\r\n            }\r\n\r\n            if (ObjectVersionUE5 >= ObjectVersionUE5.METADATA_SERIALIZATION_OFFSET)\r\n            {\r\n                writer.Write(MetaDataOffset);\r\n            }\r\n\r\n            writer.Write(DependsOffset); // 73\r\n            if (ObjectVersion >= ObjectVersion.VER_UE4_ADD_STRING_ASSET_REFERENCES_MAP)\r\n            {\r\n                writer.Write(SoftPackageReferencesCount); // 77\r\n                writer.Write(SoftPackageReferencesOffset); // 81\r\n            }\r\n            if (ObjectVersion >= ObjectVersion.VER_UE4_ADDED_SEARCHABLE_NAMES)\r\n            {\r\n                writer.Write(SearchableNamesOffset);\r\n            }\r\n            writer.Write(ThumbnailTableOffset);\r\n\r\n            if (ValorantGarbageData != null && ValorantGarbageData.Length > 0) writer.Write(ValorantGarbageData);\r\n\r\n            if (ObjectVersionUE5 < ObjectVersionUE5.PACKAGE_SAVED_HASH)\r\n            {\r\n                writer.Write(PackageGuid.ToByteArray());\r\n            }\r\n\r\n            if (!IsFilterEditorOnly)\r\n            {\r\n                if (ObjectVersion >= ObjectVersion.VER_UE4_ADDED_PACKAGE_OWNER)\r\n                    writer.Write(PersistentGuid.ToByteArray());\r\n\r\n                // The owner persistent guid was added in VER_UE4_ADDED_PACKAGE_OWNER but removed in the next version VER_UE4_NON_OUTER_PACKAGE_IMPORT\r\n                if (ObjectVersion >= ObjectVersion.VER_UE4_ADDED_PACKAGE_OWNER &&\r\n                    ObjectVersion < ObjectVersion.VER_UE4_NON_OUTER_PACKAGE_IMPORT)\r\n                {\r\n                    writer.Write(new byte[16]);\r\n                }\r\n            }\r\n            writer.Write(Generations.Count);\r\n            for (int i = 0; i < Generations.Count; i++)\r\n            {\r\n                Generations[i].ExportCount = ExportCount;\r\n                Generations[i].NameCount = NameCount;\r\n                writer.Write(Generations[i].ExportCount);\r\n                writer.Write(Generations[i].NameCount);\r\n            }\r\n\r\n            if (ObjectVersion >= ObjectVersion.VER_UE4_ENGINE_VERSION_OBJECT)\r\n            {\r\n                RecordedEngineVersion.Write(writer);\r\n            }\r\n            else\r\n            {\r\n                writer.Write(RecordedEngineVersion.Changelist);\r\n            }\r\n\r\n            if (ObjectVersion >= ObjectVersion.VER_UE4_PACKAGE_SUMMARY_HAS_COMPATIBLE_ENGINE_VERSION)\r\n            {\r\n                RecordedCompatibleWithEngineVersion.Write(writer);\r\n            }\r\n\r\n            writer.Write(CompressionFlags);\r\n            writer.Write((int)0); // numCompressedChunks\r\n            writer.Write(PackageSource);\r\n            writer.Write(AdditionalPackagesToCook.Count);\r\n            for (int i = 0; i < AdditionalPackagesToCook.Count; i++)\r\n            {\r\n                writer.Write(AdditionalPackagesToCook[i]);\r\n            }\r\n\r\n            if (LegacyFileVersion > -7)\r\n            {\r\n                writer.Write((int)0); // numTextureAllocations\r\n            }\r\n\r\n            writer.Write(AssetRegistryDataOffset);\r\n            if (SeaOfThievesGarbageData != null)\r\n            {\r\n                if (SeaOfThievesGarbageData.Length == 0)\r\n                {\r\n                    writer.Write((int)0);\r\n                    writer.Write((short)0);\r\n                }\r\n                else\r\n                {\r\n                    writer.Write((int)(BulkDataStartOffset - SeaOfThievesGarbageData.Length));\r\n                    writer.Write((short)SeaOfThievesGarbageData.Length);\r\n                }\r\n            }\r\n            writer.Write(BulkDataStartOffset);\r\n\r\n            if (ObjectVersion >= ObjectVersion.VER_UE4_WORLD_LEVEL_INFO)\r\n            {\r\n                writer.Write(WorldTileInfoDataOffset);\r\n            }\r\n\r\n            if (ObjectVersion >= ObjectVersion.VER_UE4_CHANGED_CHUNKID_TO_BE_AN_ARRAY_OF_CHUNKIDS)\r\n            {\r\n                writer.Write(ChunkIDs.Length);\r\n                for (int i = 0; i < ChunkIDs.Length; i++)\r\n                {\r\n                    writer.Write(ChunkIDs[i]);\r\n                }\r\n            }\r\n            else if (ObjectVersion >= ObjectVersion.VER_UE4_ADDED_CHUNKID_TO_ASSETDATA_AND_UPACKAGE)\r\n            {\r\n                writer.Write(ChunkIDs[0]);\r\n            }\r\n\r\n            if (ObjectVersion >= ObjectVersion.VER_UE4_PRELOAD_DEPENDENCIES_IN_COOKED_EXPORTS)\r\n            {\r\n                writer.Write(PreloadDependencyCount);\r\n                writer.Write(PreloadDependencyOffset);\r\n            }\r\n\r\n            // ue5 stuff\r\n            if (ObjectVersionUE5 >= ObjectVersionUE5.NAMES_REFERENCED_FROM_EXPORT_DATA)\r\n            {\r\n                writer.Write(NamesReferencedFromExportDataCount);\r\n            }\r\n\r\n            if (ObjectVersionUE5 >= ObjectVersionUE5.PAYLOAD_TOC)\r\n            {\r\n                writer.Write(PayloadTocOffset);\r\n            }\r\n\r\n            if (ObjectVersionUE5 >= ObjectVersionUE5.DATA_RESOURCES)\r\n            {\r\n                writer.Write(DataResourceOffset);\r\n            }\r\n\r\n            return stre.ToArray();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Serializes an asset from memory.\r\n        /// </summary>\r\n        /// <returns>A new MemoryStream containing the full binary data of the serialized asset.</returns>\r\n        public virtual MemoryStream WriteData()\r\n        {\r\n            isSerializationTime = true;\r\n\r\n            // resolve ancestries\r\n            ResolveAncestries();\r\n\r\n            // load deps if needed (i.e. asset was loaded from json)\r\n            if (!haveWeLoadedDependencies) LoadDependencies();\r\n\r\n            var stre = new MemoryStream();\r\n            try\r\n            {\r\n                AssetBinaryWriter writer = new AssetBinaryWriter(stre, this);\r\n\r\n                // Header\r\n                writer.Seek(0, SeekOrigin.Begin);\r\n                writer.Write(MakeHeader());\r\n\r\n                // Name map\r\n                this.NameOffset = (int)writer.BaseStream.Position;\r\n                this.NameCount = this.nameMapIndexList.Count;\r\n                for (int i = 0; i < this.nameMapIndexList.Count; i++)\r\n                {\r\n                    // this is not really the right custom version, i don't think the change was documented but it was in 4.23\r\n                    bool disableCasePreservingHash = !nameMapIndexList[i].IsCasePreserving && this.GetCustomVersion<FReleaseObjectVersion>() < FReleaseObjectVersion.PropertiesSerializeRepCondition;\r\n                    writer.Write(disableCasePreservingHash ? CRCGenerator.ToLower(nameMapIndexList[i], false) : nameMapIndexList[i]);\r\n\r\n                    if (WillSerializeNameHashes == true || (WillSerializeNameHashes == null && ObjectVersion >= ObjectVersion.VER_UE4_NAME_HASHES_SERIALIZED))\r\n                    {\r\n                        if (OverrideNameMapHashes != null && OverrideNameMapHashes.ContainsKey(nameMapIndexList[i]))\r\n                        {\r\n                            writer.Write(OverrideNameMapHashes[nameMapIndexList[i]]);\r\n                        }\r\n                        else\r\n                        {\r\n                            writer.Write(CRCGenerator.GenerateHash(nameMapIndexList[i], disableCasePreservingHash, writer.Asset.GetEngineVersion() == EngineVersion.VER_UE4_20));\r\n                        }\r\n                    }\r\n                }\r\n\r\n                // soft object paths\r\n                if (SoftObjectPathList != null)\r\n                {\r\n                    this.SoftObjectPathsOffset = (int)writer.BaseStream.Position;\r\n                    this.SoftObjectPathsCount = SoftObjectPathList.Count;\r\n\r\n                    for (int i = 0; i < SoftObjectPathList.Count; i++)\r\n                    {\r\n                        SoftObjectPathList[i].Write(writer, false);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    this.SoftObjectPathsOffset = 0;\r\n                }\r\n\r\n                // Gatherable text\r\n                if (!IsFilterEditorOnly && GatherableTextData != null)\r\n                {\r\n                    GatherableTextDataOffset = (int)writer.BaseStream.Position;\r\n                    GatherableTextDataCount = GatherableTextData.Count;\r\n\r\n                    foreach (var gatherableTextData in GatherableTextData)\r\n                    {\r\n                        writer.Write(gatherableTextData.NamespaceName);\r\n\r\n                        writer.Write(gatherableTextData.SourceData.SourceString);\r\n                        writer.Write(gatherableTextData.SourceData.SourceStringMetaData);\r\n\r\n                        writer.Write(gatherableTextData.SourceSiteContexts.Count);\r\n                        foreach (var context in gatherableTextData.SourceSiteContexts)\r\n                        {\r\n                            writer.Write(context.KeyName);\r\n                            writer.Write(context.SiteDescription);\r\n                            writer.Write(context.IsEditorOnly ? 1 : 0);\r\n                            writer.Write(context.IsOptional ? 1 : 0);\r\n                            writer.Write(context.InfoMetaData);\r\n                            writer.Write(context.KeyMetaData);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                // Imports\r\n                if (this.Imports.Count > 0)\r\n                {\r\n                    this.ImportOffset = (int)writer.BaseStream.Position;\r\n                    this.ImportCount = this.Imports.Count;\r\n                    for (int i = 0; i < this.Imports.Count; i++)\r\n                    {\r\n                        writer.Write(this.Imports[i].ClassPackage);\r\n                        writer.Write(this.Imports[i].ClassName);\r\n                        writer.Write(this.Imports[i].OuterIndex.Index);\r\n                        writer.Write(this.Imports[i].ObjectName);\r\n                        if (writer.Asset.ObjectVersion >= ObjectVersion.VER_UE4_NON_OUTER_PACKAGE_IMPORT\r\n                            && !writer.Asset.IsFilterEditorOnly)\r\n                            writer.Write(this.Imports[i].PackageName);\r\n                        if (writer.Asset.ObjectVersionUE5 >= ObjectVersionUE5.OPTIONAL_RESOURCES) writer.Write(this.Imports[i].bImportOptional ? 1 : 0);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    this.ImportOffset = 0;\r\n                }\r\n\r\n                // Export details\r\n                if (this.Exports.Count > 0)\r\n                {\r\n                    this.ExportOffset = (int)writer.BaseStream.Position;\r\n                    this.ExportCount = this.Exports.Count;\r\n                    for (int i = 0; i < this.Exports.Count; i++)\r\n                    {\r\n                        Export us = this.Exports[i];\r\n                        us.WriteExportMapEntry(writer);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    this.ExportOffset = 0;\r\n                }\r\n\r\n                // DependsMap\r\n                if (DependsMap != null)\r\n                {\r\n                    this.DependsOffset = (ObjectVersion > ObjectVersion.VER_UE4_PRELOAD_DEPENDENCIES_IN_COOKED_EXPORTS && ObjectVersion < ObjectVersion.VER_UE4_64BIT_EXPORTMAP_SERIALSIZES) ? 0 : (int)writer.BaseStream.Position;\r\n                    for (int i = 0; i < this.Exports.Count; i++)\r\n                    {\r\n                        if (i >= this.DependsMap.Count) this.DependsMap.Add(new int[0]);\r\n\r\n                        int[] currentData = this.DependsMap[i];\r\n                        writer.Write(currentData.Length);\r\n                        for (int j = 0; j < currentData.Length; j++)\r\n                        {\r\n                            writer.Write(currentData[j]);\r\n                        }\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    this.DependsOffset = 0;\r\n                    writer.Write((int)0);\r\n                }\r\n\r\n                // SoftPackageReferenceList\r\n                if (SoftPackageReferenceList != null)\r\n                {\r\n                    this.SoftPackageReferencesOffset = (int)writer.BaseStream.Position;\r\n                    this.SoftPackageReferencesCount = this.SoftPackageReferenceList.Count;\r\n                    for (int i = 0; i < this.SoftPackageReferenceList.Count; i++)\r\n                    {\r\n                        if (ObjectVersion >= ObjectVersion.VER_UE4_ADDED_SOFT_OBJECT_PATH)\r\n                            writer.Write(FName.FromString(this, SoftPackageReferenceList[i].Value));\r\n                        else\r\n                            writer.Write(this.SoftPackageReferenceList[i]);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    this.SoftPackageReferencesOffset = 0;\r\n                }\r\n\r\n                if (!IsFilterEditorOnly && SearchableNames != null)\r\n                {\r\n                    SearchableNamesOffset = (int)writer.BaseStream.Position;\r\n\r\n                    writer.Write(SearchableNames.Count);\r\n\r\n                    for (int i = 0; i < SearchableNames.Count; i++)\r\n                    {\r\n                        var searchableNamesCollectionPair = SearchableNames.ElementAt(i);\r\n                        var searchableNamesCollectionIndex = searchableNamesCollectionPair.Key;\r\n                        var searchableNamesCollectionContent = searchableNamesCollectionPair.Value;\r\n\r\n                        writer.Write(searchableNamesCollectionIndex.Index);\r\n                        writer.Write(searchableNamesCollectionContent.Count);\r\n\r\n                        for (int j = 0; j < searchableNamesCollectionContent.Count; j++)\r\n                        {\r\n                            writer.Write(searchableNamesCollectionContent[j]);\r\n                        }\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    SearchableNamesOffset = 0;\r\n                }\r\n\r\n                if (!IsFilterEditorOnly && Thumbnails != null)\r\n                {\r\n                    var thumbnailOffsets = new List<(string ObjectFullName, int FileOffset)>();\r\n                    foreach (var kv in Thumbnails)\r\n                    {\r\n                        var offset = (int)writer.BaseStream.Position;\r\n                        writer.Write(kv.Value);\r\n                        thumbnailOffsets.Add((kv.Key, offset));\r\n                    }\r\n\r\n                    ThumbnailTableOffset = (int)writer.BaseStream.Position;\r\n\r\n                    writer.Write(Thumbnails.Count);\r\n                    foreach (var thumbnail in thumbnailOffsets)\r\n                    {\r\n                        var firstSpaceIdx = thumbnail.ObjectFullName.IndexOf(' ');\r\n                        if (firstSpaceIdx == -1 || firstSpaceIdx == 0)\r\n                            throw new Exception($\"Invalid thumbnail object name: \\\"{thumbnail.ObjectFullName}\\\"\");\r\n\r\n                        var objectClassName = new FString(thumbnail.ObjectFullName.Substring(0, firstSpaceIdx));\r\n                        var objectPath = thumbnail.ObjectFullName.Substring(firstSpaceIdx + 1);\r\n\r\n                        var objectPathWithoutPackageName = new FString(objectPath.Substring(objectPath.IndexOf('.') + 1));\r\n\r\n                        writer.Write(objectClassName);\r\n                        writer.Write(objectPathWithoutPackageName);\r\n                        writer.Write(thumbnail.FileOffset);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    ThumbnailTableOffset = 0;\r\n                }\r\n\r\n                // AssetRegistryData\r\n                if (this.doWeHaveAssetRegistryData)\r\n                {\r\n                    this.AssetRegistryDataOffset = (int)writer.BaseStream.Position;\r\n\r\n                    if (!IsPreDependencyFormat)\r\n                    {\r\n                        writer.Write(AssetRegistryDependencyDataOffset);\r\n                    }\r\n\r\n                    writer.Write(AssetRegistryRecords.Count);\r\n                    foreach (FAssetRegistryRecord record in AssetRegistryRecords)\r\n                    {\r\n                        writer.Write(record.Path);\r\n                        writer.Write(record.ClassName);\r\n\r\n                        writer.Write(record.TagMap.Count);\r\n                        foreach (KeyValuePair<string, string> pair in record.TagMap)\r\n                        {\r\n                            writer.Write(pair.Key);\r\n                            writer.Write(pair.Value);\r\n                        }\r\n                    }\r\n\r\n                    if (!IsPreDependencyFormat)\r\n                    {\r\n                        AssetRegistryDependencyDataOffset = writer.BaseStream.Position;\r\n                        writer.BaseStream.Seek(AssetRegistryDataOffset, SeekOrigin.Begin);\r\n                        writer.Write(AssetRegistryDependencyDataOffset);\r\n                        writer.BaseStream.Seek(AssetRegistryDependencyDataOffset, SeekOrigin.Begin);\r\n\r\n                        WriteBitArray(writer, ImportBitsCount, ImportBits);\r\n\r\n                        WriteBitArray(writer, SoftPackageBitsCount, SoftPackageBits);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    this.AssetRegistryDataOffset = 0;\r\n                }\r\n\r\n                // WorldTileInfo\r\n                if (this.doWeHaveWorldTileInfo)\r\n                {\r\n                    this.WorldTileInfoDataOffset = (int)writer.BaseStream.Position;\r\n                    WorldTileInfo.Write(writer, this);\r\n                }\r\n                else\r\n                {\r\n                    this.WorldTileInfoDataOffset = 0;\r\n                }\r\n\r\n                // PreloadDependencies\r\n                this.PreloadDependencyOffset = (int)writer.BaseStream.Position;\r\n                if (this.UseSeparateBulkDataFiles) this.UsesEventDrivenLoader = true;\r\n                if (this.UsesEventDrivenLoader)\r\n                {\r\n                    this.PreloadDependencyCount = 0;\r\n                    for (int i = 0; i < this.Exports.Count; i++)\r\n                    {\r\n                        Exports[i].FirstExportDependencyOffset = this.PreloadDependencyCount;\r\n\r\n                        Exports[i].SerializationBeforeSerializationDependenciesSize = Exports[i].SerializationBeforeSerializationDependencies.Count;\r\n                        for (int j = 0; j < Exports[i].SerializationBeforeSerializationDependenciesSize; j++) writer.Write(Exports[i].SerializationBeforeSerializationDependencies[j].Index);\r\n\r\n                        Exports[i].CreateBeforeSerializationDependenciesSize = Exports[i].CreateBeforeSerializationDependencies.Count;\r\n                        for (int j = 0; j < Exports[i].CreateBeforeSerializationDependenciesSize; j++) writer.Write(Exports[i].CreateBeforeSerializationDependencies[j].Index);\r\n\r\n                        Exports[i].SerializationBeforeCreateDependenciesSize = Exports[i].SerializationBeforeCreateDependencies.Count;\r\n                        for (int j = 0; j < Exports[i].SerializationBeforeCreateDependenciesSize; j++) writer.Write(Exports[i].SerializationBeforeCreateDependencies[j].Index);\r\n\r\n                        Exports[i].CreateBeforeCreateDependenciesSize = Exports[i].CreateBeforeCreateDependencies.Count;\r\n                        for (int j = 0; j < Exports[i].CreateBeforeCreateDependenciesSize; j++) writer.Write(Exports[i].CreateBeforeCreateDependencies[j].Index);\r\n\r\n                        this.PreloadDependencyCount +=\r\n                            Exports[i].SerializationBeforeSerializationDependencies.Count +\r\n                            Exports[i].CreateBeforeSerializationDependencies.Count +\r\n                            Exports[i].SerializationBeforeCreateDependencies.Count +\r\n                            Exports[i].CreateBeforeCreateDependencies.Count;\r\n\r\n                        if (Exports[i].FirstExportDependencyOffset == this.PreloadDependencyCount) Exports[i].FirstExportDependencyOffset = -1;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    this.PreloadDependencyCount = -1;\r\n                    for (int i = 0; i < this.Exports.Count; i++) Exports[i].FirstExportDependencyOffset = -1;\r\n                }\r\n\r\n                // DataResources (5.3+)\r\n                if (DataResources != null)\r\n                {\r\n                    this.DataResourceOffset = (int)writer.BaseStream.Position;\r\n                    writer.Write((uint)DataResourceVersion);\r\n                    writer.Write(DataResources.Count);\r\n\r\n                    for (int i = 0; i < DataResources.Count; i++)\r\n                    {\r\n                        FObjectDataResource dataResource = DataResources[i];\r\n                        writer.Write((uint)dataResource.Flags);\r\n\r\n                        if (DataResourceVersion >= EObjectDataResourceVersion.AddedCookedIndex)\r\n                        {\r\n                            writer.Write(dataResource.CookedIndex);\r\n                        }\r\n\r\n                        writer.Write(dataResource.SerialOffset);\r\n                        writer.Write(dataResource.DuplicateSerialOffset);\r\n                        writer.Write(dataResource.SerialSize);\r\n                        writer.Write(dataResource.RawSize);\r\n                        writer.Write(dataResource.OuterIndex?.Index ?? 0);\r\n                        writer.Write(dataResource.LegacyBulkDataFlags);\r\n                    }\r\n                }\r\n\r\n                if (AppendedNullBytes > 0)\r\n                {\r\n                    // new arrays guaranteed to be zero'd\r\n                    writer.Write(new byte[AppendedNullBytes]);\r\n                }\r\n\r\n                // Export data\r\n                int oldOffset = this.SectionSixOffset;\r\n                this.SectionSixOffset = (int)writer.BaseStream.Position;\r\n                long[] categoryStarts = new long[this.Exports.Count];\r\n                if (this.Exports.Count > 0)\r\n                {\r\n                    for (int i = 0; i < this.Exports.Count; i++)\r\n                    {\r\n                        categoryStarts[i] = writer.BaseStream.Position;\r\n                        Export us = this.Exports[i];\r\n                        us.Write(writer);\r\n                        writer.Write(us.Extras);\r\n                    }\r\n                }\r\n\r\n                // SeaOfThievesGarbageData\r\n                if (SeaOfThievesGarbageData != null && SeaOfThievesGarbageData.Length > 0) writer.Write(SeaOfThievesGarbageData);\r\n\r\n                this.BulkDataStartOffset = (int)writer.BaseStream.Position;\r\n                writer.Write(AdditionalFiles);\r\n                if (PayloadTocOffset > 0)\r\n                {\r\n                    this.PayloadTocOffset = writer.BaseStream.Position;\r\n                    writer.Write(Trailer);\r\n                }\r\n\r\n                // Rewrite Section 3\r\n                if (this.Exports.Count > 0)\r\n                {\r\n                    writer.Seek(this.ExportOffset, SeekOrigin.Begin);\r\n                    for (int i = 0; i < this.Exports.Count; i++)\r\n                    {\r\n                        Export us = this.Exports[i];\r\n\r\n                        long nextStarting = -1;\r\n                        if ((Exports.Count - 1) > i)\r\n                        {\r\n                            nextStarting = categoryStarts[i + 1];\r\n                        }\r\n                        else\r\n                        {\r\n                            nextStarting = this.BulkDataStartOffset;\r\n                            if (this.SeaOfThievesGarbageData != null) nextStarting -= this.SeaOfThievesGarbageData.Length;\r\n                        }\r\n\r\n                        us.SerialOffset = categoryStarts[i];\r\n                        us.SerialSize = nextStarting - categoryStarts[i];\r\n\r\n                        us.WriteExportMapEntry(writer);\r\n                    }\r\n                }\r\n\r\n                // Rewrite header\r\n                writer.Seek(0, SeekOrigin.Begin);\r\n                writer.Write(MakeHeader());\r\n\r\n                writer.Seek(0, SeekOrigin.Begin);\r\n            }\r\n            finally\r\n            {\r\n                isSerializationTime = false;\r\n                GetEngineVersion(); // update dirty state\r\n            }\r\n            return stre;\r\n        }\r\n\r\n        private static void WriteBitArray(AssetBinaryWriter writer, int count, BitArray bitArray)\r\n        {\r\n            writer.Write(count);\r\n            if (count > 0)\r\n            {\r\n                byte[] data = new byte[ComputeBitArrayDataLenth(count)];\r\n                bitArray.CopyTo(data, 0);\r\n                writer.Write(data);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Serializes and writes an asset to two split streams (.uasset and .uexp) from memory.\r\n        /// </summary>\r\n        /// <param name=\"uassetStream\">A stream containing the contents of the .uasset file.</param>\r\n        /// <param name=\"uexpStream\">A stream containing the contents of the .uexp file, if needed, otherwise null.</param>\r\n        /// <exception cref=\"UnknownEngineVersionException\">Thrown when <see cref=\"ObjectVersion\"/> is unspecified.</exception>\r\n        public virtual void Write(out MemoryStream uassetStream, out MemoryStream uexpStream)\r\n        {\r\n            if (ObjectVersion == ObjectVersion.UNKNOWN) throw new UnknownEngineVersionException(\"Cannot begin serialization before an object version is specified\");\r\n\r\n            MemoryStream newData = WriteData();\r\n\r\n            if (this.UseSeparateBulkDataFiles && this.Exports.Count > 0)\r\n            {\r\n                long breakingOffPoint = this.Exports[0].SerialOffset;\r\n                uassetStream = new MemoryStream((int)breakingOffPoint);\r\n                uexpStream = new MemoryStream((int)(newData.Length - breakingOffPoint));\r\n                CopySplitUp(newData, uassetStream, 0, (int)breakingOffPoint);\r\n                CopySplitUp(newData, uexpStream, (int)breakingOffPoint, (int)(newData.Length - breakingOffPoint));\r\n            }\r\n            else\r\n            {\r\n                uassetStream = newData;\r\n                uexpStream = null;\r\n                // uexpStream is left empty\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Serializes and writes an asset to disk from memory.\r\n        /// </summary>\r\n        /// <param name=\"outputPath\">The path on disk to write the asset to.</param>\r\n        /// <exception cref=\"UnknownEngineVersionException\">Thrown when <see cref=\"ObjectVersion\"/> is unspecified.</exception>\r\n        public virtual void Write(string outputPath)\r\n        {\r\n            if (ObjectVersion == ObjectVersion.UNKNOWN) throw new UnknownEngineVersionException(\"Cannot begin serialization before an object version is specified\");\r\n\r\n            MemoryStream newData = WriteData();\r\n\r\n            if (this.UseSeparateBulkDataFiles && this.Exports.Count > 0)\r\n            {\r\n                long breakingOffPoint = this.Exports[0].SerialOffset;\r\n                using (FileStream f = File.Open(outputPath, FileMode.Create, FileAccess.Write))\r\n                {\r\n                    CopySplitUp(newData, f, 0, (int)breakingOffPoint);\r\n                }\r\n\r\n                using (FileStream f = File.Open(Path.ChangeExtension(outputPath, \"uexp\"), FileMode.Create, FileAccess.Write))\r\n                {\r\n                    CopySplitUp(newData, f, (int)breakingOffPoint, (int)(newData.Length - breakingOffPoint));\r\n                }\r\n            }\r\n            else\r\n            {\r\n                using (FileStream f = File.Open(outputPath, FileMode.Create, FileAccess.Write))\r\n                {\r\n                    newData.CopyTo(f);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Serializes this asset as JSON.\r\n        /// </summary>\r\n        /// <param name=\"isFormatted\">Whether or not the returned JSON string should be indented.</param>\r\n        /// <returns>A serialized JSON string that represents the asset.</returns>\r\n        public string SerializeJson(bool isFormatted = false)\r\n        {\r\n            return SerializeJson(isFormatted ? Formatting.Indented : Formatting.None);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Serializes this asset as JSON.\r\n        /// </summary>\r\n        /// <param name=\"jsonFormatting\">The formatting to use for the returned JSON string.</param>\r\n        /// <returns>A serialized JSON string that represents the asset.</returns>\r\n        public string SerializeJson(Formatting jsonFormatting)\r\n        {\r\n            Info = \"Serialized with UAssetAPI \" + typeof(PropertyData).Assembly.GetName().Version + (string.IsNullOrEmpty(UAPUtils.CurrentCommit) ? \"\" : (\" (\" + UAPUtils.CurrentCommit + \")\"));\r\n            return JsonConvert.SerializeObject(this, jsonFormatting, jsonSettings);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Serializes an object as JSON.\r\n        /// </summary>\r\n        /// <param name=\"value\">The object to serialize as JSON.</param>\r\n        /// <param name=\"isFormatted\">Whether or not the returned JSON string should be indented.</param>\r\n        /// <returns>A serialized JSON string that represents the object.</returns>\r\n        public string SerializeJsonObject(object value, bool isFormatted = false)\r\n        {\r\n            return SerializeJsonObject(value, isFormatted ? Formatting.Indented : Formatting.None);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Serializes an object as JSON.\r\n        /// </summary>\r\n        /// <param name=\"value\">The object to serialize as JSON.</param>\r\n        /// <param name=\"jsonFormatting\">The formatting to use for the returned JSON string.</param>\r\n        /// <returns>A serialized JSON string that represents the object.</returns>\r\n        public string SerializeJsonObject(object value, Formatting jsonFormatting)\r\n        {\r\n            return JsonConvert.SerializeObject(value, jsonFormatting, jsonSettings);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Deserializes an object from JSON.\r\n        /// </summary>\r\n        /// <param name=\"json\">A serialized JSON string to parse.</param>\r\n        public T DeserializeJsonObject<T>(string json)\r\n        {\r\n            Dictionary<FName, string> toBeFilled = new Dictionary<FName, string>();\r\n            T res = JsonConvert.DeserializeObject<T>(json, new JsonSerializerSettings\r\n            {\r\n                TypeNameHandling = TypeNameHandling.Objects,\r\n                NullValueHandling = NullValueHandling.Include,\r\n                FloatParseHandling = FloatParseHandling.Double,\r\n                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,\r\n                MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead,\r\n                ContractResolver = new UAssetContractResolver(toBeFilled),\r\n                Converters = new List<JsonConverter>()\r\n                {\r\n                    new FSignedZeroJsonConverter(),\r\n                    new FNameJsonConverter(null),\r\n                    new FStringTableJsonConverter(),\r\n                    new FStringJsonConverter(),\r\n                    new FPackageIndexJsonConverter(),\r\n                    new StringEnumConverter(),\r\n                    new GuidJsonConverter(),\r\n                    new ByteArrayJsonConverter()\r\n                }\r\n            });\r\n\r\n            foreach (KeyValuePair<FName, string> entry in toBeFilled)\r\n            {\r\n                entry.Key.Asset = this;\r\n                if (FName.IsFromStringValid(this, entry.Value))\r\n                {\r\n                    var dummy = FName.FromString(this, entry.Value);\r\n                    entry.Key.Value = dummy.Value;\r\n                    entry.Key.Number = dummy.Number;\r\n                }\r\n                else\r\n                {\r\n                    entry.Key.DummyValue = FString.FromString(entry.Value);\r\n                    entry.Key.Number = 0;\r\n                }\r\n            }\r\n            toBeFilled.Clear();\r\n\r\n            return res;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads an asset from serialized JSON and initializes a new instance of the <see cref=\"UAsset\"/> class to store its data in memory.\r\n        /// </summary>\r\n        /// <param name=\"json\">A serialized JSON string to parse.</param>\r\n        public static UAsset DeserializeJson(string json)\r\n        {\r\n            Dictionary<FName, string> toBeFilled = new Dictionary<FName, string>();\r\n            UAsset res = JsonConvert.DeserializeObject<UAsset>(json, new JsonSerializerSettings\r\n            {\r\n                TypeNameHandling = TypeNameHandling.Objects,\r\n                NullValueHandling = NullValueHandling.Include,\r\n                FloatParseHandling = FloatParseHandling.Double,\r\n                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,\r\n                MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead,\r\n                ContractResolver = new UAssetContractResolver(toBeFilled),\r\n                Converters = new List<JsonConverter>()\r\n                {\r\n                    new FSignedZeroJsonConverter(),\r\n                    new FNameJsonConverter(null),\r\n                    new FStringTableJsonConverter(),\r\n                    new FStringJsonConverter(),\r\n                    new FPackageIndexJsonConverter(),\r\n                    new StringEnumConverter(),\r\n                    new GuidJsonConverter(),\r\n                    new ByteArrayJsonConverter()\r\n                }\r\n            });\r\n\r\n            foreach (KeyValuePair<FName, string> entry in toBeFilled)\r\n            {\r\n                entry.Key.Asset = res;\r\n                if (FName.IsFromStringValid(res, entry.Value))\r\n                {\r\n                    var dummy = FName.FromString(res, entry.Value);\r\n                    entry.Key.Value = dummy.Value;\r\n                    entry.Key.Number = dummy.Number;\r\n                }\r\n                else\r\n                {\r\n                    entry.Key.DummyValue = FString.FromString(entry.Value);\r\n                    entry.Key.Number = 0;\r\n                }\r\n            }\r\n            toBeFilled.Clear();\r\n\r\n            foreach (Export ex in res.Exports) ex.Asset = res;\r\n\r\n            res.ResolveAncestries();\r\n            return res;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads an asset from serialized JSON and initializes a new instance of the <see cref=\"UAsset\"/> class to store its data in memory.\r\n        /// </summary>\r\n        /// <param name=\"stream\">A stream containing serialized JSON string to parse.</param>\r\n        public static UAsset DeserializeJson(Stream stream)\r\n        {\r\n            Dictionary<FName, string> toBeFilled = new Dictionary<FName, string>();\r\n            var serializer = JsonSerializer.Create(new JsonSerializerSettings\r\n            {\r\n                TypeNameHandling = TypeNameHandling.Objects,\r\n                NullValueHandling = NullValueHandling.Include,\r\n                FloatParseHandling = FloatParseHandling.Double,\r\n                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,\r\n                MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead,\r\n                ContractResolver = new UAssetContractResolver(toBeFilled),\r\n                Converters = new List<JsonConverter>()\r\n                {\r\n                    new FSignedZeroJsonConverter(),\r\n                    new FNameJsonConverter(null),\r\n                    new FStringTableJsonConverter(),\r\n                    new FStringJsonConverter(),\r\n                    new FPackageIndexJsonConverter(),\r\n                    new StringEnumConverter(),\r\n                    new GuidJsonConverter(),\r\n                    new ByteArrayJsonConverter()\r\n                }\r\n            });\r\n\r\n            UAsset res;\r\n\r\n            using (var sr = new StreamReader(stream))\r\n            {\r\n                using (var jsonTextReader = new JsonTextReader(sr))\r\n                {\r\n                    res = serializer.Deserialize<UAsset>(jsonTextReader);\r\n                }\r\n            }\r\n\r\n            foreach (KeyValuePair<FName, string> entry in toBeFilled)\r\n            {\r\n                entry.Key.Asset = res;\r\n                if (FName.IsFromStringValid(res, entry.Value))\r\n                {\r\n                    var dummy = FName.FromString(res, entry.Value);\r\n                    entry.Key.Value = dummy.Value;\r\n                    entry.Key.Number = dummy.Number;\r\n                }\r\n                else\r\n                {\r\n                    entry.Key.DummyValue = FString.FromString(entry.Value);\r\n                    entry.Key.Number = 0;\r\n                }\r\n            }\r\n            toBeFilled.Clear();\r\n\r\n            foreach (Export ex in res.Exports) ex.Asset = res;\r\n            return res;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads an asset from disk and initializes a new instance of the <see cref=\"UAsset\"/> class to store its data in memory.\r\n        /// </summary>\r\n        /// <param name=\"path\">The path of the asset file on disk that this instance will read from.</param>\r\n        /// <param name=\"engineVersion\">The version of the Unreal Engine that will be used to parse this asset. If the asset is versioned, this can be left unspecified.</param>\r\n        /// <param name=\"mappings\">A valid set of mappings for the game that this asset is from. Not required unless unversioned properties are used.</param>\r\n        /// <param name=\"customSerializationFlags\">A set of custom serialization flags, which can be used to override certain optional behavior in how UAssetAPI serializes assets.</param>\r\n        /// <exception cref=\"UnknownEngineVersionException\">Thrown when this is an unversioned asset and <see cref=\"ObjectVersion\"/> is unspecified.</exception>\r\n        /// <exception cref=\"FormatException\">Throw when the asset cannot be parsed correctly.</exception>\r\n        public UAsset(string path, EngineVersion engineVersion = EngineVersion.UNKNOWN, Usmap mappings = null, CustomSerializationFlags customSerializationFlags = CustomSerializationFlags.None)\r\n        {\r\n            this.FilePath = path;\r\n            this.Mappings = mappings;\r\n            this.CustomSerializationFlags = customSerializationFlags;\r\n            SetEngineVersion(engineVersion);\r\n\r\n            Read(PathToReader(path));\r\n        }\r\n        \r\n        /// <summary>\r\n        /// Reads an asset from disk and initializes a new instance of the <see cref=\"UAsset\"/> class to store its data in memory.\r\n        /// </summary>\r\n        /// <param name=\"path\">The path of the asset file on disk that this instance will read from.</param>\r\n        /// <param name=\"loadUexp\">Whether to load the .uexp file. False only reads the .uasset file.</param>\r\n        /// <param name=\"engineVersion\">The version of the Unreal Engine that will be used to parse this asset. If the asset is versioned, this can be left unspecified.</param>\r\n        /// <param name=\"mappings\">A valid set of mappings for the game that this asset is from. Not required unless unversioned properties are used.</param>\r\n        /// <param name=\"customSerializationFlags\">A set of custom serialization flags, which can be used to override certain optional behavior in how UAssetAPI serializes assets.</param>\r\n        /// <exception cref=\"UnknownEngineVersionException\">Thrown when this is an unversioned asset and <see cref=\"ObjectVersion\"/> is unspecified.</exception>\r\n        /// <exception cref=\"FormatException\">Throw when the asset cannot be parsed correctly.</exception>\r\n        public UAsset(string path, bool loadUexp, EngineVersion engineVersion = EngineVersion.UNKNOWN, Usmap mappings = null, CustomSerializationFlags customSerializationFlags = CustomSerializationFlags.None)\r\n        {\r\n            this.FilePath = path;\r\n            this.Mappings = mappings;\r\n            this.CustomSerializationFlags = customSerializationFlags;\r\n            SetEngineVersion(engineVersion);\r\n\r\n            Read(PathToReader(path, loadUexp));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads an asset from a BinaryReader and initializes a new instance of the <see cref=\"UAsset\"/> class to store its data in memory.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The asset's BinaryReader that this instance will read from. If a .uexp file exists, the .uexp file's data should be appended to the end of the .uasset file's data.</param>\r\n        /// <param name=\"engineVersion\">The version of the Unreal Engine that will be used to parse this asset. If the asset is versioned, this can be left unspecified.</param>\r\n        /// <param name=\"mappings\">A valid set of mappings for the game that this asset is from. Not required unless unversioned properties are used.</param>\r\n        /// <param name=\"useSeparateBulkDataFiles\">Does this asset uses separate bulk data files (.uexp, .ubulk)?</param>\r\n        /// <param name=\"customSerializationFlags\">A set of custom serialization flags, which can be used to override certain optional behavior in how UAssetAPI serializes assets.</param>\r\n        /// <exception cref=\"UnknownEngineVersionException\">Thrown when this is an unversioned asset and <see cref=\"ObjectVersion\"/> is unspecified.</exception>\r\n        /// <exception cref=\"FormatException\">Throw when the asset cannot be parsed correctly.</exception>\r\n        public UAsset(AssetBinaryReader reader, EngineVersion engineVersion = EngineVersion.UNKNOWN, Usmap mappings = null, bool useSeparateBulkDataFiles = false, CustomSerializationFlags customSerializationFlags = CustomSerializationFlags.None)\r\n        {\r\n            this.Mappings = mappings;\r\n            this.CustomSerializationFlags = customSerializationFlags;\r\n            UseSeparateBulkDataFiles = useSeparateBulkDataFiles;\r\n            SetEngineVersion(engineVersion);\r\n            Read(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"UAsset\"/> class. This instance will store no asset data and does not represent any asset in particular until the <see cref=\"Read\"/> method is manually called.\r\n        /// </summary>\r\n        /// <param name=\"engineVersion\">The version of the Unreal Engine that will be used to parse this asset. If the asset is versioned, this can be left unspecified.</param>\r\n        /// <param name=\"mappings\">A valid set of mappings for the game that this asset is from. Not required unless unversioned properties are used.</param>\r\n        /// <param name=\"customSerializationFlags\">A set of custom serialization flags, which can be used to override certain optional behavior in how UAssetAPI serializes assets.</param>\r\n        public UAsset(EngineVersion engineVersion = EngineVersion.UNKNOWN, Usmap mappings = null, CustomSerializationFlags customSerializationFlags = CustomSerializationFlags.None)\r\n        {\r\n            this.Mappings = mappings;\r\n            this.CustomSerializationFlags = customSerializationFlags;\r\n            SetEngineVersion(engineVersion);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads an asset from disk and initializes a new instance of the <see cref=\"UAsset\"/> class to store its data in memory.\r\n        /// </summary>\r\n        /// <param name=\"path\">The path of the asset file on disk that this instance will read from.</param>\r\n        /// <param name=\"objectVersion\">The UE4 object version of the Unreal Engine that will be used to parse this asset.</param>\r\n        /// <param name=\"objectVersionUE5\">The UE5 object version of the Unreal Engine that will be used to parse this asset.</param>\r\n        /// <param name=\"customVersionContainer\">A list of custom versions to parse this asset with.</param>\r\n        /// <param name=\"mappings\">A valid set of mappings for the game that this asset is from. Not required unless unversioned properties are used.</param>\r\n        /// <param name=\"customSerializationFlags\">A set of custom serialization flags, which can be used to override certain optional behavior in how UAssetAPI serializes assets.</param>\r\n        /// <exception cref=\"UnknownEngineVersionException\">Thrown when this is an unversioned asset and <see cref=\"ObjectVersion\"/> is unspecified.</exception>\r\n        /// <exception cref=\"FormatException\">Throw when the asset cannot be parsed correctly.</exception>\r\n        public UAsset(string path, ObjectVersion objectVersion, ObjectVersionUE5 objectVersionUE5, List<CustomVersion> customVersionContainer, Usmap mappings = null, CustomSerializationFlags customSerializationFlags = CustomSerializationFlags.None)\r\n        {\r\n            this.FilePath = path;\r\n            this.Mappings = mappings;\r\n            this.CustomSerializationFlags = customSerializationFlags;\r\n            ObjectVersion = objectVersion;\r\n            ObjectVersionUE5 = objectVersionUE5;\r\n            if (customVersionContainer != null) CustomVersionContainer = customVersionContainer;\r\n\r\n            Read(PathToReader(path));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads an asset from a BinaryReader and initializes a new instance of the <see cref=\"UAsset\"/> class to store its data in memory.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The asset's BinaryReader that this instance will read from.</param>\r\n        /// <param name=\"objectVersion\">The UE4 object version of the Unreal Engine that will be used to parse this asset.</param>\r\n        /// <param name=\"objectVersionUE5\">The UE5 object version of the Unreal Engine that will be used to parse this asset.</param>\r\n        /// <param name=\"customVersionContainer\">A list of custom versions to parse this asset with.</param>\r\n        /// <param name=\"mappings\">A valid set of mappings for the game that this asset is from. Not required unless unversioned properties are used.</param>\r\n        /// <param name=\"useSeparateBulkDataFiles\">Does this asset uses separate bulk data files (.uexp, .ubulk)?</param>\r\n        /// <param name=\"customSerializationFlags\">A set of custom serialization flags, which can be used to override certain optional behavior in how UAssetAPI serializes assets.</param>\r\n        /// <exception cref=\"UnknownEngineVersionException\">Thrown when this is an unversioned asset and <see cref=\"ObjectVersion\"/> is unspecified.</exception>\r\n        /// <exception cref=\"FormatException\">Throw when the asset cannot be parsed correctly.</exception>\r\n        public UAsset(AssetBinaryReader reader, ObjectVersion objectVersion, ObjectVersionUE5 objectVersionUE5, List<CustomVersion> customVersionContainer, Usmap mappings = null, bool useSeparateBulkDataFiles = false, CustomSerializationFlags customSerializationFlags = CustomSerializationFlags.None)\r\n        {\r\n            this.Mappings = mappings;\r\n            this.CustomSerializationFlags = customSerializationFlags;\r\n            UseSeparateBulkDataFiles = useSeparateBulkDataFiles;\r\n            ObjectVersion = objectVersion;\r\n            ObjectVersionUE5 = objectVersionUE5;\r\n            if (customVersionContainer != null) CustomVersionContainer = customVersionContainer;\r\n\r\n            Read(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"UAsset\"/> class. This instance will store no asset data and does not represent any asset in particular until the <see cref=\"Read\"/> method is manually called.\r\n        /// </summary>\r\n        /// <param name=\"objectVersion\">The UE4 object version of the Unreal Engine that will be used to parse this asset.</param>\r\n        /// <param name=\"objectVersionUE5\">The UE5 object version of the Unreal Engine that will be used to parse this asset.</param>\r\n        /// <param name=\"customVersionContainer\">A list of custom versions to parse this asset with.</param>\r\n        /// <param name=\"mappings\">A valid set of mappings for the game that this asset is from. Not required unless unversioned properties are used.</param>\r\n        /// <param name=\"customSerializationFlags\">A set of custom serialization flags, which can be used to override certain optional behavior in how UAssetAPI serializes assets.</param>\r\n        public UAsset(ObjectVersion objectVersion, ObjectVersionUE5 objectVersionUE5, List<CustomVersion> customVersionContainer, Usmap mappings = null, CustomSerializationFlags customSerializationFlags = CustomSerializationFlags.None)\r\n        {\r\n            this.Mappings = mappings;\r\n            this.CustomSerializationFlags = customSerializationFlags;\r\n            ObjectVersion = objectVersion;\r\n            ObjectVersionUE5 = objectVersionUE5;\r\n            if (customVersionContainer != null) CustomVersionContainer = customVersionContainer;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"UAsset\"/> class. This instance will store no asset data and does not represent any asset in particular until the <see cref=\"Read\"/> method is manually called.\r\n        /// </summary>\r\n        public UAsset()\r\n        {\r\n\r\n        }\r\n    }\r\n}\r\n\r\n#if DEBUGTRACING\r\nnamespace UAssetAPI.Trace {\r\n    public class TraceStream : Stream\r\n    {\r\n        Stream BaseStream;\r\n        public byte[] Data;\r\n        public LoggingAspect.LogContext Context;\r\n        public string PathOnDisk;\r\n\r\n        public TraceStream(Stream BaseStream, string pathOnDisk = null)\r\n        {\r\n            var start = BaseStream.Position;\r\n            using (MemoryStream ms = new MemoryStream())\r\n            {\r\n                BaseStream.CopyTo(ms);\r\n                this.Data = ms.ToArray();\r\n            }\r\n            BaseStream.Position = start;\r\n            this.BaseStream = BaseStream;\r\n            this.PathOnDisk = pathOnDisk;\r\n        }\r\n\r\n        public override bool CanRead { get => BaseStream.CanRead; }\r\n        public override bool CanSeek => throw new NotImplementedException();\r\n        public override bool CanWrite => throw new NotImplementedException();\r\n        public override long Length { get => BaseStream.Length; }\r\n        public override long Position { get => BaseStream.Position; set => throw new NotImplementedException(); }\r\n\r\n        public override void Flush()\r\n        {\r\n            BaseStream.Flush();\r\n        }\r\n\r\n        public override int Read(byte[] buffer, int offset, int count)\r\n        {\r\n            Context.OnRead(count);\r\n            return BaseStream.Read(buffer, offset, count);\r\n        }\r\n\r\n        public override long Seek(long offset, SeekOrigin origin)\r\n        {\r\n            var pos = BaseStream.Seek(offset, origin);\r\n            Context.OnSeek(pos);\r\n            return pos;\r\n        }\r\n\r\n        public override void SetLength(long value)\r\n        {\r\n            BaseStream.SetLength(value);\r\n        }\r\n\r\n        public override void Write(byte[] buffer, int offset, int count)\r\n        {\r\n            BaseStream.Write(buffer, offset, count);\r\n        }\r\n    }\r\n\r\n    [PSerializable]\r\n    public class LoggingAspect : OnMethodBoundaryAspect\r\n    {\r\n        public class ActionRead : IAction {\r\n            public long Size;\r\n        }\r\n        public class ActionSeek : IAction {\r\n            public long Position;\r\n        }\r\n        public class ActionSpan : IAction {\r\n            public Span Span;\r\n        }\r\n\r\n        public interface IAction {}\r\n\r\n        public class Span\r\n        {\r\n            [JsonIgnore]\r\n            public Span Parent;\r\n            [JsonProperty(\"name\")]\r\n            public string Name;\r\n            [JsonProperty(\"actions\")]\r\n            public IList<IAction> Actions;\r\n        }\r\n\r\n        public class Trace\r\n        {\r\n            [JsonProperty(\"data\")]\r\n            public byte[] Data;\r\n            [JsonProperty(\"root\")]\r\n            public Span Root;\r\n        }\r\n\r\n        public class VersionConverter : JsonConverter<IAction>\r\n        {\r\n            public override void WriteJson(JsonWriter writer, IAction value, JsonSerializer serializer)\r\n            {\r\n                switch (value)\r\n                {\r\n                    case ActionSeek s:\r\n                        writer.WriteStartObject();\r\n                        writer.WritePropertyName(\"Seek\");\r\n                        writer.WriteValue(s.Position);\r\n                        writer.WriteEndObject();\r\n                        break;\r\n                    case ActionRead s:\r\n                        writer.WriteStartObject();\r\n                        writer.WritePropertyName(\"Read\");\r\n                        writer.WriteValue(s.Size);\r\n                        writer.WriteEndObject();\r\n                        break;\r\n                    case ActionSpan s:\r\n                        writer.WriteStartObject();\r\n                        writer.WritePropertyName(\"Span\");\r\n                        serializer.Serialize(writer, s.Span);\r\n                        writer.WriteEndObject();\r\n                        break;\r\n                    default:\r\n                        throw new NotImplementedException();\r\n                };\r\n            }\r\n\r\n            public override IAction ReadJson(JsonReader reader, Type objectType, IAction existingValue, bool hasExistingValue, JsonSerializer serializer)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n        public class LogContext\r\n        {\r\n            public uint SpanId = 0;\r\n            public Span Root;\r\n            public Span Current;\r\n            TraceStream UnderlyingStream;\r\n\r\n            public LogContext(TraceStream stream) {\r\n                UnderlyingStream = stream;\r\n                stream.Context = this;\r\n                Root = Current = new Span() {\r\n                    Parent = null,\r\n                    Name = \"root\",\r\n                    Actions = new List<IAction>(),\r\n                };\r\n            }\r\n\r\n            /// <summary>\r\n            /// Stop logging.\r\n            /// </summary>\r\n            /// <returns>Path to the saved .json file.</returns>\r\n            public string Stop()\r\n            {\r\n                string outputPath = \"trace.json\";\r\n                if (!string.IsNullOrEmpty(UnderlyingStream.PathOnDisk))\r\n                {\r\n                    outputPath = Path.Combine(Path.GetDirectoryName(UnderlyingStream.PathOnDisk), Path.GetFileNameWithoutExtension(UnderlyingStream.PathOnDisk) + \"-trace.json\");\r\n                }\r\n\r\n                using (StreamWriter writer = File.CreateText(outputPath)) {\r\n                    var trace = new Trace {\r\n                        Data = UnderlyingStream.Data,\r\n                        Root = Root,\r\n                    };\r\n                    writer.Write(JsonConvert.SerializeObject(trace, Formatting.None, new VersionConverter()));\r\n                }\r\n\r\n                return outputPath;\r\n            }\r\n\r\n            public void OnEntry(MethodExecutionArgs args) {\r\n                var newSpan = new Span() {\r\n                    Parent = Current,\r\n                    Name = $\"{args.Method.ReflectedType.FullName}.{args.Method.Name}\",\r\n                    Actions = new List<IAction>(),\r\n                };\r\n                Current.Actions.Add(new ActionSpan() { Span = newSpan });\r\n                Current = newSpan;\r\n            }\r\n            public void OnExit(MethodExecutionArgs args) {\r\n                Current = Current.Parent;\r\n            }\r\n            public void OnRead(long size) {\r\n                Current.Actions.Add(new ActionRead() {\r\n                    Size = size,\r\n                });\r\n            }\r\n            public void OnSeek(long position) {\r\n                Current.Actions.Add(new ActionSeek() {\r\n                    Position = position,\r\n                });\r\n            }\r\n        }\r\n\r\n        static LogContext Context = null;\r\n\r\n        public override void OnEntry(MethodExecutionArgs args) {\r\n            if (Context != null) Context.OnEntry(args);\r\n        }\r\n        public override void OnSuccess(MethodExecutionArgs args) {}\r\n        public override void OnExit(MethodExecutionArgs args) {\r\n            if (Context != null) Context.OnExit(args);\r\n        }\r\n        public override void OnException(MethodExecutionArgs args) {}\r\n\r\n        public static void Start(TraceStream stream) {\r\n            LoggingAspect.Context = new LogContext(stream);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Stop logging.\r\n        /// </summary>\r\n        /// <returns>Path to the saved .json file.</returns>\r\n        public static string Stop()\r\n        {\r\n            string res = LoggingAspect.Context.Stop();\r\n            LoggingAspect.Context = null;\r\n            return res;\r\n        }\r\n    }\r\n}\r\n#endif\r\n"
  },
  {
    "path": "UAssetAPI/UAssetAPI.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\r\n  <PropertyGroup>\r\n    <ProjectGuid>{178417EC-1177-413E-BE85-C83AECD64279}</ProjectGuid>\r\n    <TargetFramework>net8.0</TargetFramework>\r\n    <AssemblyTitle>UAssetAPI</AssemblyTitle>\r\n    <Product>UAssetAPI</Product>\r\n    <Copyright>Copyright © Atenfyr 2024</Copyright>\r\n    <OutputPath>bin\\$(Configuration)\\</OutputPath>\r\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r\n    <Configurations>Debug;Release;DebugVerbose;DebugTracing</Configurations>\r\n    <Platforms>AnyCPU;x86</Platforms>\r\n    <FileVersion>1.0.2.0</FileVersion>\r\n    <AssemblyVersion>1.0.2.0</AssemblyVersion>\r\n    <Version>1.0.2</Version>\r\n    <IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugType>full</DebugType>\r\n    <DocumentationFile>bin\\$(Configuration)\\UAssetAPI.xml</DocumentationFile>\r\n    <NoWarn>1591</NoWarn>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x86'\">\r\n    <DebugType>full</DebugType>\r\n    <DocumentationFile>bin\\$(Configuration)\\UAssetAPI.xml</DocumentationFile>\r\n    <NoWarn>1591</NoWarn>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugVerbose|AnyCPU'\">\r\n    <DebugType>full</DebugType>\r\n    <DocumentationFile>bin\\$(Configuration)\\UAssetAPI.xml</DocumentationFile>\r\n    <NoWarn>1591</NoWarn>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugVerbose|x86'\">\r\n    <DebugType>full</DebugType>\r\n    <DocumentationFile>bin\\$(Configuration)\\UAssetAPI.xml</DocumentationFile>\r\n    <NoWarn>1591</NoWarn>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugTracing|AnyCPU'\">\r\n    <DebugType>full</DebugType>\r\n    <DocumentationFile>bin\\$(Configuration)\\UAssetAPI.xml</DocumentationFile>\r\n    <NoWarn>1591</NoWarn>\r\n    <DefineConstants>ADDTRACING</DefineConstants>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugTracing|x86'\">\r\n    <DebugType>full</DebugType>\r\n    <DocumentationFile>bin\\$(Configuration)\\UAssetAPI.xml</DocumentationFile>\r\n    <NoWarn>1591</NoWarn>\r\n    <DefineConstants>ADDTRACING</DefineConstants>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x86'\">\r\n    <DebugType>pdbonly</DebugType>\r\n  </PropertyGroup>\r\n  <Choose>\r\n    <When Condition=\"$(DefineConstants.Contains('ADDTRACING'))\">\r\n        <ItemGroup>\r\n          <PackageReference Include=\"PostSharp.Patterns.Diagnostics\" Version=\"2024.1.3\" />\r\n        </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Target Name=\"BeforeBuildMigrated\" BeforeTargets=\"PreBuildEvent\">\r\n    <Exec ContinueOnError=\"true\" ConsoleToMsBuild=\"true\" Command=\"git rev-parse --short HEAD\">\r\n      <Output TaskParameter=\"ConsoleOutput\" PropertyName=\"GitCommit\" />\r\n    </Exec>\r\n    <WriteLinesToFile File=\"$(ProjectDir)git_commit.txt\" Overwrite=\"true\" Lines=\"$(GitCommit)\" />\r\n  </Target>\r\n  <Target Name=\"AfterBuildMigrated\" AfterTargets=\"Build\">\r\n    <Delete Files=\"$(ProjectDir)git_commit.txt\" />\r\n  </Target>\r\n  <ItemGroup>\r\n    <None Remove=\"repak_bind.dll.gz\" />\r\n    <None Remove=\"repak_bind.so.gz\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Update=\"Properties\\Resources.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Resources.resx</DependentUpon>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"ZstdSharp.Port\" Version=\"0.8.1\" />\r\n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"13.0.3\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"git_commit.txt\">\r\n      <CopyToOutputDirectory>Never</CopyToOutputDirectory>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"repak_bind.dll.gz\" WithCulture=\"false\">\r\n      <CopyToOutputDirectory>Never</CopyToOutputDirectory>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"repak_bind.so.gz\" WithCulture=\"false\">\r\n      <CopyToOutputDirectory>Never</CopyToOutputDirectory>\r\n    </EmbeddedResource>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Resources\\AC7Key.bin\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/EngineVersion.cs",
    "content": "namespace UAssetAPI.UnrealTypes\r\n{\r\n    /// <summary>\r\n    /// An enum used to represent all retail versions of the Unreal Engine. Each version entry represents a particular <see cref=\"ObjectVersion\"/>, a particular <see cref=\"ObjectVersionUE5\"/>, and the default set of all applicable <see cref=\"CustomVersion\"/> enum values.\r\n    /// </summary>\r\n    public enum EngineVersion\r\n    {\r\n        UNKNOWN,\r\n        VER_UE4_OLDEST_LOADABLE_PACKAGE,\r\n\r\n        /// <summary>4.0</summary>\r\n        VER_UE4_0,\r\n        /// <summary>4.1</summary>\r\n        VER_UE4_1,\r\n        /// <summary>4.2</summary>\r\n        VER_UE4_2,\r\n        /// <summary>4.3</summary>\r\n        VER_UE4_3,\r\n        /// <summary>4.4</summary>\r\n        VER_UE4_4,\r\n        /// <summary>4.5</summary>\r\n        VER_UE4_5,\r\n        /// <summary>4.6</summary>\r\n        VER_UE4_6,\r\n        /// <summary>4.7</summary>\r\n        VER_UE4_7,\r\n        /// <summary>4.8</summary>\r\n        VER_UE4_8,\r\n        /// <summary>4.9</summary>\r\n        VER_UE4_9,\r\n        /// <summary>4.10</summary>\r\n        VER_UE4_10,\r\n        /// <summary>4.11</summary>\r\n        VER_UE4_11,\r\n        /// <summary>4.12</summary>\r\n        VER_UE4_12,\r\n        /// <summary>4.13</summary>\r\n        VER_UE4_13,\r\n        /// <summary>4.14</summary>\r\n        VER_UE4_14,\r\n        /// <summary>4.15</summary>\r\n        VER_UE4_15,\r\n        /// <summary>4.16</summary>\r\n        VER_UE4_16,\r\n        /// <summary>4.17</summary>\r\n        VER_UE4_17,\r\n        /// <summary>4.18</summary>\r\n        VER_UE4_18,\r\n        /// <summary>4.19</summary>\r\n        VER_UE4_19,\r\n        /// <summary>4.20</summary>\r\n        VER_UE4_20,\r\n        /// <summary>4.21</summary>\r\n        VER_UE4_21,\r\n        /// <summary>4.22</summary>\r\n        VER_UE4_22,\r\n        /// <summary>4.23</summary>\r\n        VER_UE4_23,\r\n        /// <summary>4.24</summary>\r\n        VER_UE4_24,\r\n        /// <summary>4.25</summary>\r\n        VER_UE4_25,\r\n        /// <summary>4.26</summary>\r\n        VER_UE4_26,\r\n        /// <summary>4.27</summary>\r\n        VER_UE4_27,\r\n\r\n        /// <summary>5.0EA</summary>\r\n        VER_UE5_0EA,\r\n        /// <summary>5.0</summary>\r\n        VER_UE5_0,\r\n        /// <summary>5.1</summary>\r\n        VER_UE5_1,\r\n        /// <summary>5.2</summary>\r\n        VER_UE5_2,\r\n        /// <summary>5.3</summary>\r\n        VER_UE5_3,\r\n        /// <summary>5.4</summary>\r\n        VER_UE5_4,\r\n        /// <summary>5.5</summary>\r\n        VER_UE5_5,\r\n        /// <summary>5.6</summary>\r\n        VER_UE5_6,\r\n        /// <summary>5.7</summary>\r\n        VER_UE5_7,\r\n\r\n        VER_UE4_AUTOMATIC_VERSION_PLUS_ONE,\r\n        /// <summary>The newest specified version of the Unreal Engine.</summary>\r\n        VER_UE4_AUTOMATIC_VERSION = VER_UE4_AUTOMATIC_VERSION_PLUS_ONE - 1,\r\n    };\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/FFieldPath.cs",
    "content": "using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\n\r\nnamespace UAssetAPI.UnrealTypes;\r\n\r\n[JsonObject(MemberSerialization.OptIn)]\r\npublic class FFieldPath : IStruct<FFieldPath>\r\n{\r\n    /// <summary>\r\n    /// Path to the FField object from the innermost FField to the outermost UObject (UPackage)\r\n    /// </summary>\r\n    [JsonProperty]\r\n    public FName[] Path;\r\n\r\n    /// <summary>\r\n    /// The cached owner of this field.\r\n    /// </summary>\r\n    [JsonProperty]\r\n    public FPackageIndex ResolvedOwner;\r\n\r\n    public FFieldPath(FName[] path, FPackageIndex resolvedOwner, int numExports = -1)\r\n    {\r\n        Path = path;\r\n        ResolvedOwner = resolvedOwner;\r\n\r\n        // sanity check: throw if makes no sense\r\n        if (numExports > 0 && ResolvedOwner.Index > numExports) throw new FormatException(\"Received nonsensical FFieldPath ResolvedOwner: \" + ResolvedOwner.Index);\r\n    }\r\n\r\n    public FFieldPath()\r\n    {\r\n        Path = [];\r\n        ResolvedOwner = FPackageIndex.FromRawIndex(0);\r\n    }\r\n\r\n    public FFieldPath(AssetBinaryReader reader)\r\n    {\r\n        Path = reader.ReadArray(reader.ReadFName);\r\n        ResolvedOwner = new FPackageIndex(reader.ReadInt32());\r\n    }\r\n\r\n    public static FFieldPath Read(AssetBinaryReader reader) => new FFieldPath(reader);\r\n\r\n    public int Write(AssetBinaryWriter writer)\r\n    {\r\n        if (Path == null && ResolvedOwner == null)\r\n        {\r\n            return 0;\r\n        }\r\n        writer.Write(Path.Length);\r\n        foreach (FName name in Path)\r\n        {\r\n            writer.Write(name);\r\n        }\r\n\r\n        writer.Write(ResolvedOwner.Index);\r\n        return sizeof(int) * (2 + Path.Length * 2);\r\n    }\r\n\r\n    public static FFieldPath FromString(string[] d, UAsset asset)\r\n    {\r\n        throw new NotImplementedException();\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/FGatherableTextData.cs",
    "content": "﻿using System.Collections.Generic;\nusing Newtonsoft.Json;\n\nnamespace UAssetAPI.UnrealTypes\n{\n    /// <summary>\n    /// Gatherable text data item\n    /// </summary>\n    public struct FGatherableTextData\n    {\n        [JsonProperty] public FString NamespaceName { get; set; }\n        [JsonProperty] public FTextSourceData SourceData { get; set; }\n        [JsonProperty] public List<FTextSourceSiteContext> SourceSiteContexts { get; set; }\n    }\n}"
  },
  {
    "path": "UAssetAPI/UnrealTypes/FLocMetadataObject.cs",
    "content": "﻿using System.Collections.Generic;\nusing Newtonsoft.Json;\n\nnamespace UAssetAPI.UnrealTypes\n{\n    public class FLocMetadataObject\n    {\n        public class FLocMetadataValue\n        {\n            // TODO:\n        }\n\n        [JsonProperty] public List<FLocMetadataValue> Values { get; set; } = new List<FLocMetadataValue>();\n    }\n}"
  },
  {
    "path": "UAssetAPI/UnrealTypes/FName.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.JSON;\r\n\r\nnamespace UAssetAPI.UnrealTypes\r\n{\r\n    public enum EMappedNameType\r\n    {\r\n        Package,\r\n        Container,\r\n        Global\r\n    }\r\n\r\n    /// <summary>\r\n    /// Unreal name - consists of an FString (which is serialized as an index in the name map) and an instance number\r\n    /// </summary>\r\n    [JsonConverter(typeof(FNameJsonConverter))]\r\n    public class FName : ICloneable\r\n    {\r\n        public FString Value\r\n        {\r\n            get\r\n            {\r\n                // TODO: if type = Global, retrieve value from global name map (= script objects from usmap apparently?)\r\n                if (DummyValue != null) return DummyValue;\r\n                if (Asset == null) throw new InvalidOperationException(\"Attempt to get Value with no Asset defined\");\r\n                if (Index < 0) return null;\r\n                return Asset.GetNameReference(Index);\r\n            }\r\n            set\r\n            {\r\n                DummyValue = null;\r\n                if (Asset == null) throw new InvalidOperationException(\"Attempt to set Value with no Asset defined\");\r\n                Index = value?.Value == null ? -1 : Asset.AddNameReference(value);\r\n            }\r\n        }\r\n\r\n        public bool IsDummy\r\n        {\r\n            get\r\n            {\r\n                return DummyValue != null;\r\n            }\r\n        }\r\n\r\n        /// <summary>Instance number.</summary>\r\n        public int Number;\r\n\r\n        internal const int IndexBits = 30;\r\n        internal const uint IndexMask = (1u << IndexBits) - 1u;\r\n        internal const uint TypeMask = ~IndexMask;\r\n        internal const int TypeShift = IndexBits;\r\n\r\n        /// <summary>\r\n        /// The type of this FName; i.e. whether it points to a package-level name table, container-level name table, or global name table. This value is always <see cref=\"EMappedNameType.Package\"/> for non-Zen assets.\r\n        /// </summary>\r\n        public EMappedNameType Type = EMappedNameType.Package;\r\n\r\n        /// <summary>\r\n        /// Does this FName point into the global name table? This value is always false for non-Zen assets.\r\n        /// </summary>\r\n        public bool IsGlobal => Type != EMappedNameType.Package;\r\n\r\n        /// <summary>\r\n        /// The asset that this FName is bound to.\r\n        /// </summary>\r\n        public INameMap Asset;\r\n\r\n        private int _index;\r\n        /// <summary>\r\n        /// Index into the name map of <see cref=\"Asset\"/> that this FName points to.\r\n        /// </summary>\r\n        public sealed class DummyFNameSerializationException : InvalidOperationException\r\n        {\r\n            public readonly FString Dummy;\r\n            public readonly INameMap NameMap;\r\n\r\n            public DummyFNameSerializationException(FString dummy, INameMap map)\r\n                : base($\"Attempt to serialize dummy FName '{dummy?.Value ?? \"<null>\"}' - this name was never added to the NameMap.\")\r\n            {\r\n                Dummy   = dummy;\r\n                NameMap = map;\r\n            }\r\n        }\r\n\r\n        internal int Index\r\n        {\r\n            get\r\n            {\r\n                if (IsDummy)\r\n                    throw new DummyFNameSerializationException(DummyValue, Asset);\r\n                return _index;\r\n            }\r\n            set\r\n            {\r\n                _index = value;\r\n                DummyValue = null;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Dummy value. If defined, this FName does not actually point to a value in any name map, but will still act as if it does.\r\n        /// </summary>\r\n        internal FString DummyValue = null;\r\n\r\n        /// <summary>\r\n        /// Converts this FName instance into a human-readable string. This is the inverse of <see cref=\"FromString(INameMap, string)\"/>.\r\n        /// </summary>\r\n        /// <returns>The human-readable string that represents this FName.</returns>\r\n        public override string ToString()\r\n        {\r\n            if (Value == null) return FString.NullCase;\r\n            if (Number > 0) return Value.ToString() + \"_\" + (Number - 1);\r\n            return Value.ToString();\r\n        }\r\n\r\n        internal static void FromStringFragments(INameMap asset, string val, out string str, out int num)\r\n        {\r\n            str = val; num = 0;\r\n\r\n            if (val[val.Length - 1] >= '0' && val[val.Length - 1] <= '9')\r\n            {\r\n                int i = val.Length - 1;\r\n                while (i > 1 && (val[i] >= '0' && val[i] <= '9'))\r\n                {\r\n                    i--;\r\n                }\r\n\r\n                if (val[i] == '_')\r\n                {\r\n                    string startSegment = val.Substring(0, i);\r\n                    string endSegment = val.Substring(i + 1, val.Length - i - 1);\r\n                    if (endSegment.Length == 1 || endSegment[0] != '0')\r\n                    {\r\n                        if (int.TryParse(endSegment, out int endSegmentVal))\r\n                        {\r\n                            str = startSegment;\r\n                            num = endSegmentVal + 1;\r\n                            return;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        public static bool IsFromStringValid(INameMap asset, string val)\r\n        {\r\n            if (val == null || val == FString.NullCase) return true;\r\n            if (val.Length == 0) return true;\r\n\r\n            FromStringFragments(asset, val, out string value, out _);\r\n            return asset.ContainsNameReference(FString.FromString(value));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts a human-readable string into an FName instance. This is the inverse of <see cref=\"ToString\"/>.\r\n        /// </summary>\r\n        /// <param name=\"asset\">The asset that the new FName will be bound to.</param>\r\n        /// <param name=\"val\">The human-readable string to convert into an FName instance.</param>\r\n        /// <returns>An FName instance that this string represents.</returns>\r\n        public static FName FromString(INameMap asset, string val)\r\n        {\r\n            if (val == null || val == FString.NullCase) return null;\r\n            if (val.Length == 0) return new FName(asset, val, 0);\r\n\r\n            FromStringFragments(asset, val, out string value, out int number);\r\n            return new FName(asset, value, number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new FName with the same string value and number as the current instance but is bound to a different asset.\r\n        /// </summary>\r\n        /// <param name=\"newAsset\">The asset to bound the new FName to.</param>\r\n        /// <returns>An equivalent FName bound to a different asset.</returns>\r\n        public FName Transfer(INameMap newAsset)\r\n        {\r\n            return new FName(newAsset, Value, Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new dummy FName.\r\n        /// This can be used for cases where a valid FName must be produced without referencing a specific asset's name map.\r\n        /// <para />\r\n        /// USE WITH CAUTION! UAssetAPI must never attempt to serialize a dummy FName to disk.\r\n        /// </summary>\r\n        /// <param name=\"asset\">The asset that this FName is bound to.</param>\r\n        /// <param name=\"val\">The FString that the FName's value will be, verbatim.</param>\r\n        /// <param name=\"number\">The instance number of the new FName.</param>\r\n        /// <returns>A dummy FName instance that represents the string.</returns>\r\n        public static FName DefineDummy(INameMap asset, FString val, int number = 0)\r\n        {\r\n            if (asset != null && !asset.CanCreateDummies())\r\n            {\r\n                return new FName(asset, val, number);\r\n            }\r\n\r\n            var res = new FName();\r\n            res.Asset = asset;\r\n            res.DummyValue = val;\r\n            res.Number = number;\r\n            return res;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new dummy FName.\r\n        /// This can be used for cases where a valid FName must be produced without referencing a specific asset's name map.\r\n        /// <para />\r\n        /// USE WITH CAUTION! UAssetAPI must never attempt to serialize a dummy FName to disk.\r\n        /// </summary>\r\n        /// <param name=\"asset\">The asset that this FName is bound to.</param>\r\n        /// <param name=\"val\">The string literal that the FName's value will be, verbatim.</param>\r\n        /// <param name=\"number\">The instance number of the new FName.</param>\r\n        /// <returns>A dummy FName instance that represents the string.</returns>\r\n        public static FName DefineDummy(INameMap asset, string val, int number = 0)\r\n        {\r\n            if (asset != null && !asset.CanCreateDummies())\r\n            {\r\n                return new FName(asset, val, number);\r\n            }\r\n\r\n            var res = new FName();\r\n            res.Asset = asset;\r\n            res.DummyValue = FString.FromString(val);\r\n            res.Number = number;\r\n            return res;\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (!(obj is FName name)) return false;\r\n            if (this is null || obj is null) return this is null && obj is null;\r\n            if (this.Asset != name.Asset) return this.Value.ToString().Equals(name.Value.ToString()); // if assets aren't the same, compare string values\r\n            return (this.Value == name.Value || this.Value.Value == name.Value.Value) && this.Number == name.Number;\r\n        }\r\n\r\n        public static bool operator ==(FName one, FName two)\r\n        {\r\n            if (one is null || two is null) return one is null && two is null;\r\n            return one.Equals(two);\r\n        }\r\n\r\n        public static bool operator !=(FName one, FName two)\r\n        {\r\n            if (one is null || two is null) return !(one is null && two is null);\r\n            return !one.Equals(two);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return Value == null ? 0 : (Value.GetHashCode() ^ Number.GetHashCode());\r\n        }\r\n\r\n        public object Clone()\r\n        {\r\n            if (this.IsDummy) return DefineDummy(Asset, (FString)Value.Clone(), Number);\r\n            return new FName(Asset, (FString)Value.Clone(), Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new FName instance.\r\n        /// </summary>\r\n        /// <param name=\"asset\">The asset that this FName is bound to.</param>\r\n        /// <param name=\"value\">The string literal that the new FName's value will be, verbatim.</param>\r\n        /// <param name=\"number\">The instance number of the new FName.</param>\r\n        public FName(INameMap asset, string value, int number = 0)\r\n        {\r\n            Asset = asset;\r\n            if (value == null)\r\n            {\r\n                Value = new FString(null);\r\n            }\r\n            else\r\n            {\r\n                Value = new FString(value);\r\n            }\r\n            Number = number;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new FName instance.\r\n        /// </summary>\r\n        /// <param name=\"asset\">The asset that this FName is bound to.</param>\r\n        /// <param name=\"value\">The FString that the FName's value will be, verbatim.</param>\r\n        /// <param name=\"number\">The instance number of the new FName.</param>\r\n        public FName(INameMap asset, FString value, int number = 0)\r\n        {\r\n            Asset = asset;\r\n            Value = value;\r\n            Number = number;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new FName instance.\r\n        /// </summary>\r\n        /// <param name=\"asset\">The asset that this FName is bound to.</param>\r\n        /// <param name=\"index\">The index that this FName's value will be.</param>\r\n        /// <param name=\"number\">The instance number of the new FName.</param>\r\n        public FName(INameMap asset, int index, int number = 0)\r\n        {\r\n            Asset = asset;\r\n            Index = index;\r\n            Number = number;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new blank FName instance.\r\n        /// </summary>\r\n        /// <param name=\"asset\">The asset that this FName is bound to.</param>\r\n        public FName(INameMap asset)\r\n        {\r\n            Asset = asset;\r\n            Value = new FString(string.Empty);\r\n            Number = 0;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new blank FName instance, with no asset bound to it. An asset must be bound to this FName before setting its value.\r\n        /// </summary>\r\n        public FName()\r\n        {\r\n            Number = 0;\r\n        }\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/FObjectDataResource.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace UAssetAPI.UnrealTypes\r\n{\r\n    public enum EObjectDataResourceVersion : uint\r\n    {\r\n        Invalid,\r\n\t\tInitial,\r\n        AddedCookedIndex,\r\n        LatestPlusOne,\r\n\t\tLatest = LatestPlusOne - 1\r\n\t}\r\n\r\n    [Flags]\r\n    public enum EObjectDataResourceFlags\r\n    {\r\n        None\t\t\t\t\t= 0,\r\n\t    Inline\t\t\t\t\t= (1 << 0),\r\n\t    Streaming\t\t\t\t= (1 << 1),\r\n\t    Optional\t\t\t\t= (1 << 2),\r\n\t    Duplicate\t\t\t\t= (1 << 3),\r\n\t    MemoryMapped\t\t\t= (1 << 4),\r\n\t    DerivedDataReference\t= (1 << 5),\r\n    }\r\n\r\n    /// <summary>\r\n    /// UObject binary/bulk data resource type.\r\n    /// </summary>\r\n    public struct FObjectDataResource\r\n    {\r\n        public EObjectDataResourceFlags Flags;\r\n        public byte CookedIndex;\r\n        public long SerialOffset;\r\n        public long DuplicateSerialOffset;\r\n        public long SerialSize;\r\n        public long RawSize;\r\n        public FPackageIndex OuterIndex;\r\n        public uint LegacyBulkDataFlags;\r\n\r\n        public FObjectDataResource(EObjectDataResourceFlags Flags, long SerialOffset, long DuplicateSerialOffset, long SerialSize, long RawSize, FPackageIndex OuterIndex, uint LegacyBulkDataFlags, byte CookedIndex = 0)\r\n        {\r\n            this.Flags = Flags;\r\n            this.CookedIndex = CookedIndex;\r\n            this.SerialOffset = SerialOffset;\r\n            this.DuplicateSerialOffset = DuplicateSerialOffset;\r\n            this.SerialSize = SerialSize;\r\n            this.RawSize = RawSize;\r\n            this.OuterIndex = OuterIndex;\r\n            this.LegacyBulkDataFlags = LegacyBulkDataFlags;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/FObjectThumbnail.cs",
    "content": "﻿using System;\nusing Newtonsoft.Json;\n\nnamespace UAssetAPI.UnrealTypes\n{\n    // TODO: JSON serializer \n\n    /// <summary>\n    /// Unreal Object Thumbnail - Thumbnail image data for an object.\n    /// </summary>\n    public class FObjectThumbnail\n    {\n        /// <summary>Thumbnail width</summary>\n        public int Width;\n\n        /// <summary>Thumbnail height</summary>\n        public int Height;\n\n        /// <summary>Compressed image data bytes</summary>\n        public byte[] CompressedImageData = Array.Empty<byte>(); // TODO: FThumbnailCompressionInterface\n        // TODO: Compress on demand?\n\n        /// <summary>Image data bytes</summary>\n        [JsonIgnore]\n        public byte[] ImageData; // TODO: Uncompress on demand\n\n        public FObjectThumbnail()\n        {\n        }\n    }\n}"
  },
  {
    "path": "UAssetAPI/UnrealTypes/FPackageIndex.cs",
    "content": "using Newtonsoft.Json;\r\nusing System;\r\nusing UAssetAPI.ExportTypes;\r\nusing UAssetAPI.JSON;\r\n\r\nnamespace UAssetAPI.UnrealTypes;\r\n\r\n/// <summary>\r\n/// Wrapper for index into an ImportMap or ExportMap.\r\n/// \r\n/// Values greater than zero indicate that this is an index into the ExportMap.\r\n/// The actual array index will be (FPackageIndex - 1).\r\n/// \r\n/// Values less than zero indicate that this is an index into the ImportMap.\r\n/// The actual array index will be (-FPackageIndex - 1)\r\n/// </summary>\r\n[JsonConverter(typeof(FPackageIndexJsonConverter))]\r\npublic class FPackageIndex\r\n{\r\n    /// <summary>\r\n    /// Values greater than zero indicate that this is an index into the ExportMap.\r\n    /// The actual array index will be (FPackageIndex - 1).\r\n    /// \r\n    /// Values less than zero indicate that this is an index into the ImportMap.\r\n    /// The actual array index will be (-FPackageIndex - 1)\r\n    /// </summary>\r\n    public int Index;\r\n\r\n    /// <summary>\r\n    /// Returns an FPackageIndex based off of the index provided. Equivalent to <see cref=\"FPackageIndex(int)\"/>.\r\n    /// </summary>\r\n    /// <param name=\"index\">The index to create a new FPackageIndex with.</param>\r\n    /// <returns>A new FPackageIndex with the index provided.</returns>\r\n    public static FPackageIndex FromRawIndex(int index) => new FPackageIndex(index);\r\n\r\n    /// <summary>\r\n    /// Returns true if this is an index into the import map.\r\n    /// </summary>\r\n    /// <returns>true if this is an index into the import map, false otherwise</returns>\r\n    public bool IsImport() => Index < 0;\r\n\r\n    /// <summary>\r\n    /// Returns true if this is an index into the export map.\r\n    /// </summary>\r\n    /// <returns>true if this is an index into the export map, false otherwise</returns>\r\n    public bool IsExport() => Index > 0;\r\n\r\n    /// <summary>\r\n    /// Return true if this represents null (i.e. neither an import nor an export)\r\n    /// </summary>\r\n    /// <returns>true if this index represents null, false otherwise</returns>\r\n    public bool IsNull() => this == null || Index == 0;\r\n\r\n    /// <summary>\r\n    /// Creates a FPackageIndex from an index in the import map.\r\n    /// </summary>\r\n    /// <param name=\"importIndex\">An import index to create an FPackageIndex from.</param>\r\n    /// <returns>An FPackageIndex created from the import index.</returns>\r\n    /// <exception cref=\"System.InvalidOperationException\">Thrown when the provided import index is less than zero.</exception>\r\n    public static FPackageIndex FromImport(int importIndex)\r\n    {\r\n        if (importIndex < 0) throw new InvalidOperationException(\"importIndex must be greater than or equal to zero\");\r\n        return new FPackageIndex(-importIndex - 1);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Creates a FPackageIndex from an index in the export map.\r\n    /// </summary>\r\n    /// <param name=\"exportIndex\">An export index to create an FPackageIndex from.</param>\r\n    /// <returns>An FPackageIndex created from the export index.</returns>\r\n    /// <exception cref=\"System.InvalidOperationException\">Thrown when the provided export index is less than zero.</exception>\r\n    public static FPackageIndex FromExport(int exportIndex)\r\n    {\r\n        if (exportIndex < 0) throw new InvalidOperationException(\"exportIndex must be greater than or equal to zero\");\r\n        return new FPackageIndex(exportIndex + 1);\r\n    }\r\n\r\n    /// <summary>\r\n    /// Check that this is an import index and return the corresponding import.\r\n    /// </summary>\r\n    /// <param name=\"asset\">The asset that this index is used in.</param>\r\n    /// <returns>The import that this index represents in the import map.</returns>\r\n    /// <exception cref=\"System.InvalidOperationException\">Thrown when this is not an index into the import map.</exception>\r\n    public Import ToImport(UAsset asset)\r\n    {\r\n        if (!IsImport()) throw new InvalidOperationException(\"Index = \" + Index + \"; cannot call ToImport()\");\r\n\r\n        int newIndex = -Index - 1;\r\n\r\n        if (asset is UAsset uas)\r\n        {\r\n            if (newIndex < 0 || newIndex >= uas.Imports.Count) return null;\r\n            return uas.Imports[newIndex];\r\n        }\r\n        return null;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Check that this is an export index and return the corresponding export.\r\n    /// </summary>\r\n    /// <param name=\"asset\">The asset that this index is used in.</param>\r\n    /// <returns>The export that this index represents in the the export map.</returns>\r\n    /// <exception cref=\"System.InvalidOperationException\">Thrown when this is not an index into the export map.</exception>\r\n    public Export ToExport(UAsset asset)\r\n    {\r\n        if (!IsExport() || Index > asset.Exports.Count) throw new InvalidOperationException(\"Index = \" + Index + \"; cannot call ToExport()\");\r\n        return asset.Exports[Index - 1];\r\n    }\r\n\r\n    public T ToExport<T>(UAsset asset) where T : Export\r\n    {\r\n        if (!IsExport() || Index > asset.Exports.Count) throw new InvalidOperationException(\"Index = \" + Index + \"; cannot call ToExport()\");\r\n        return (T)asset.Exports[Index-1];\r\n    }\r\n\r\n    public override bool Equals(object obj)\r\n    {\r\n        if (!(obj is FPackageIndex comparingPackageIndex)) return false;\r\n        return comparingPackageIndex.Index == this.Index;\r\n    }\r\n\r\n    public static bool operator <(FPackageIndex first, FPackageIndex second)\r\n    {\r\n        return first.Index < second.Index;\r\n    }\r\n\r\n    public static bool operator >(FPackageIndex first, FPackageIndex second)\r\n    {\r\n        return first.Index > second.Index;\r\n    }\r\n\r\n    public static bool operator <=(FPackageIndex first, FPackageIndex second)\r\n    {\r\n        return first.Index <= second.Index;\r\n    }\r\n\r\n    public static bool operator >=(FPackageIndex first, FPackageIndex second)\r\n    {\r\n        return first.Index >= second.Index;\r\n    }\r\n\r\n    public override int GetHashCode()\r\n    {\r\n        return Index.GetHashCode();\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return Index.ToString();\r\n    }\r\n\r\n    public FPackageIndex(int index = 0)\r\n    {\r\n        Index = index;\r\n    }\r\n\r\n    public FPackageIndex(AssetBinaryReader reader)\r\n    {\r\n        Index = reader.ReadInt32();\r\n    }\r\n\r\n    public int Write(AssetBinaryWriter writer)\r\n    {\r\n        writer.Write(Index);\r\n        return sizeof(int);\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/FPropertyTypeName.cs",
    "content": "using Newtonsoft.Json;\nusing System.Collections.Generic;\n\nnamespace UAssetAPI.UnrealTypes;\n\npublic struct FPropertyTypeNameNode(AssetBinaryReader Ar)\n{\n    public FName Name = Ar.ReadFName();\n    public int InnerCount = Ar.ReadInt32();\n}\n\npublic class FPropertyTypeNameConverter : JsonConverter<FPropertyTypeName>\n{\n    public override void WriteJson(JsonWriter writer, FPropertyTypeName value, JsonSerializer serializer)\n    {\n        if (value is null || !value.ShouldSerializeNodes)\n            writer.WriteNull();\n        else\n        {\n            serializer.Serialize(writer, value.Nodes);\n        }\n    }\n    public override FPropertyTypeName ReadJson(JsonReader reader, System.Type objectType, FPropertyTypeName existingValue, bool hasExistingValue, JsonSerializer serializer)\n    {\n        if (reader.TokenType == JsonToken.Null)\n            return null;\n        var nodes = serializer.Deserialize<List<FPropertyTypeNameNode>>(reader);\n        return new FPropertyTypeName(nodes, true);\n    }\n}\n\n\n[JsonConverter(typeof(FPropertyTypeNameConverter))]\npublic class FPropertyTypeName\n{\n    public List<FPropertyTypeNameNode> Nodes;\n    public bool ShouldSerializeNodes = true;\n\n    public FPropertyTypeName(List<FPropertyTypeNameNode> list, bool shouldSerialize = false)\n    {\n        Nodes = list;\n        ShouldSerializeNodes = shouldSerialize;\n    }\n\n    public FPropertyTypeName(AssetBinaryReader reader)\n    {\n        Nodes = [];\n        int totalNodes = 1;\n        for (int i = 0; i < totalNodes; ++i)\n        {\n            var node = new FPropertyTypeNameNode(reader);\n            Nodes.Add(node);\n            totalNodes += node.InnerCount;\n        }\n    }\n\n    public void Write(AssetBinaryWriter writer)\n    {\n        foreach (var node in Nodes)\n        {\n            writer.Write(node.Name);\n            writer.Write(node.InnerCount);\n        }\n    }\n\n    public FName GetName() => Nodes is { Count: > 0 } ? Nodes[0].Name : FName.DefineDummy(null, \"None\");\n\n    public FPropertyTypeName GetParameter(int paramIndex)\n    {\n        if (Nodes is not { Count: > 0 } || paramIndex < 0 || paramIndex >= Nodes[0].InnerCount) return new FPropertyTypeName([]);\n\n        var param = 1;\n        for (int skip = paramIndex; skip > 0; --skip, ++param)\n        {\n            skip += Nodes[param].InnerCount;\n        }\n\n        return new(Nodes[param..]);\n    }\n}"
  },
  {
    "path": "UAssetAPI/UnrealTypes/FString.cs",
    "content": "using Newtonsoft.Json;\r\nusing System;\r\nusing System.Text;\r\nusing UAssetAPI.JSON;\r\n\r\nnamespace UAssetAPI.UnrealTypes;\r\n\r\n/// <summary>\r\n/// Unreal string - consists of a string and an encoding\r\n/// </summary>\r\n[JsonConverter(typeof(FStringJsonConverter))]\r\npublic class FString : ICloneable\r\n{\r\n    public string Value;\r\n    public Encoding Encoding;\r\n    public static readonly string NullCase = \"null\";\r\n\r\n    /// <summary>\r\n    /// Is this FString case preserving?\r\n    /// </summary>\r\n    public bool IsCasePreserving = true;\r\n\r\n    public override string ToString()\r\n    {\r\n        if (this == null || Value == null) return NullCase;\r\n        return Value;\r\n    }\r\n\r\n    public override bool Equals(object obj)\r\n    {\r\n        if (obj is FString fStr)\r\n        {\r\n            if (fStr == null) return false;\r\n            return this.Value == fStr.Value && this.Encoding == fStr.Encoding;\r\n        }\r\n        else if (obj is string str)\r\n        {\r\n            return this.Value == str;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static explicit operator FString(string b) => new FString(b, null);\r\n\r\n    public static bool operator ==(FString one, FString two)\r\n    {\r\n        if (one is null || two is null) return one is null && two is null;\r\n        return one.Equals(two);\r\n    }\r\n\r\n    public static bool operator !=(FString one, FString two)\r\n    {\r\n        if (one is null || two is null) return !(one is null && two is null);\r\n        return !one.Equals(two);\r\n    }\r\n\r\n    public override int GetHashCode()\r\n    {\r\n        return Value.GetHashCode();\r\n    }\r\n\r\n    public object Clone()\r\n    {\r\n        return new FString(Value, Encoding);\r\n    }\r\n\r\n    public static FString FromString(string value, Encoding encoding = null)\r\n    {\r\n        if (value == NullCase || value == null) return null;\r\n        return new FString(value, encoding);\r\n    }\r\n\r\n    public FString(string value, Encoding encoding = null)\r\n    {\r\n        if (encoding == null && value != null) encoding = Encoding.UTF8.GetByteCount(value) == value.Length ? Encoding.UTF8 : Encoding.Unicode;\r\n\r\n        Value = value;\r\n        Encoding = encoding;\r\n    }\r\n\r\n    public FString()\r\n    {\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/FTextSourceData.cs",
    "content": "﻿using Newtonsoft.Json;\n\nnamespace UAssetAPI.UnrealTypes\n{\n    public struct FTextSourceData\n    {\n        [JsonProperty] public FString SourceString { get; set; }\n        [JsonProperty] public FLocMetadataObject SourceStringMetaData { get; set; }\n    }\n}"
  },
  {
    "path": "UAssetAPI/UnrealTypes/FTextSourceSiteContext.cs",
    "content": "﻿using Newtonsoft.Json;\n\nnamespace UAssetAPI.UnrealTypes\n{\n    public struct FTextSourceSiteContext\n    {\n        [JsonProperty] public FString KeyName { get; set; }\n        [JsonProperty] public FString SiteDescription { get; set; }\n        [JsonProperty] public bool IsEditorOnly { get; set; }\n        [JsonProperty] public bool IsOptional { get; set; }\n        [JsonProperty] public FLocMetadataObject InfoMetaData { get; set; }\n        [JsonProperty] public FLocMetadataObject KeyMetaData { get; set; }\n    }\n}"
  },
  {
    "path": "UAssetAPI/UnrealTypes/FUniversalObjectLocatorFragment.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.PropertyTypes.Structs;\n\nnamespace UAssetAPI.UnrealTypes;\n\npublic class UniversalObjectLocatorFragmentPropertyData : StructPropertyData\n{\n    private static Dictionary<string, string> FragmentTypeRegistry = new()\n    {\n        { \"actor\", \"DirectPathObjectLocator\" },\n        { \"animinst\", \"AnimInstanceLocatorFragment\" },\n        { \"subobj\", \"SubObjectLocator\" },\n        { \"ls_lazy_obj_ptr\", \"LegacyLazyObjectPtrFragment\" },\n    };\n\n    public FName FragmentTypeID;\n\n    public UniversalObjectLocatorFragmentPropertyData(FName name, FName forcedType) : base(name, forcedType) { }\n    public UniversalObjectLocatorFragmentPropertyData(FName name) : base(name) { }\n    public UniversalObjectLocatorFragmentPropertyData() { }\n\n    private static readonly FString CurrentPropertyType = new FString(\"UniversalObjectLocatorFragment\");\n    public override bool HasCustomStructSerialization => true;\n    public override FString PropertyType => CurrentPropertyType;\n\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        FragmentTypeID = reader.ReadFName();\n        if (FragmentTypeID.Value.Value == \"None\") return;\n\n        if (FragmentTypeRegistry.TryGetValue(FragmentTypeID.Value.Value, out var structType))\n        {\n            StructType = FName.DefineDummy(reader.Asset, structType);\n        }\n        else\n        {\n            throw new FormatException($\"Unknown FragmentTypeID : {FragmentTypeID}\");\n        }\n\n        base.Read(reader, includeHeader, 1, leng2, PropertySerializationContext.StructFallback);\n    }\n\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\n    {\n        writer.Write(FragmentTypeID);\n        int res = 8;\n        if (FragmentTypeID.Value.Value == \"None\") return res;\n        res += base.Write(writer, includeHeader, PropertySerializationContext.StructFallback);\n        return res;\n    }\n}"
  },
  {
    "path": "UAssetAPI/UnrealTypes/FWorldTileInfo.cs",
    "content": "﻿using System.IO;\r\nusing UAssetAPI.PropertyTypes.Structs;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\nusing System.Xml.Linq;\r\nusing UAssetAPI.CustomVersions;\r\n\r\nnamespace UAssetAPI.UnrealTypes\r\n{\r\n    /// <summary>\r\n    /// World layer information for tile tagging\r\n    /// </summary>\r\n    public class FWorldTileLayer\r\n    {\r\n        /// <summary>Human readable name for this layer</summary>\r\n        public FString Name;\r\n\r\n        /// <summary>Reserved for additional options</summary>\r\n        public int Reserved0;\r\n        /// <summary>Reserved for additional options</summary>\r\n        public IntPointPropertyData Reserved1;\r\n\r\n        /// <summary>Distance starting from where tiles belonging to this layer will be streamed in</summary>\r\n        public int StreamingDistance;\r\n        public bool DistanceStreamingEnabled;\r\n\r\n        public void Read(AssetBinaryReader reader, UAsset asset)\r\n        {\r\n            Name = reader.ReadFString();\r\n            Reserved0 = reader.ReadInt32();\r\n            Reserved1 = new IntPointPropertyData(FName.DefineDummy(asset, \"Reserved1\"));\r\n            Reserved1.Ancestry.Initialize(null, reader.Asset.GetParentClassExportName(out FName pcen2), pcen2);\r\n            Reserved1.Read(reader, false, 0, 0);\r\n\r\n            if (asset.ObjectVersion >= ObjectVersion.VER_UE4_WORLD_LEVEL_INFO_UPDATED)\r\n            {\r\n                StreamingDistance = reader.ReadInt32();\r\n            }\r\n\r\n            if (asset.ObjectVersion >= ObjectVersion.VER_UE4_WORLD_LAYER_ENABLE_DISTANCE_STREAMING)\r\n            {\r\n                DistanceStreamingEnabled = reader.ReadInt32() == 1;\r\n            }\r\n        }\r\n\r\n        public void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n        {\r\n            var ancestryNew = (AncestryInfo)ancestrySoFar.Clone();\r\n            ancestryNew.SetAsParent(FName.DefineDummy(asset, \"WorldTileLayer\"));\r\n\r\n            Reserved1.ResolveAncestries(asset, ancestryNew);\r\n        }\r\n\r\n        public void Write(AssetBinaryWriter writer, UAsset asset)\r\n        {\r\n            writer.Write(this.Name);\r\n            writer.Write(Reserved0);\r\n            Reserved1.Write(writer, false);\r\n\r\n            if (asset.ObjectVersion >= ObjectVersion.VER_UE4_WORLD_LEVEL_INFO_UPDATED)\r\n            {\r\n                writer.Write(StreamingDistance);\r\n            }\r\n\r\n            if (asset.ObjectVersion >= ObjectVersion.VER_UE4_WORLD_LAYER_ENABLE_DISTANCE_STREAMING)\r\n            {\r\n                writer.Write(DistanceStreamingEnabled ? 1 : 0);\r\n            }\r\n        }\r\n\r\n        public FWorldTileLayer(FString name, int reserved0, IntPointPropertyData reserved1, int streamingDistance, bool distanceStreamingEnabled)\r\n        {\r\n            Name = name;\r\n            Reserved0 = reserved0;\r\n            Reserved1 = reserved1;\r\n            StreamingDistance = streamingDistance;\r\n            DistanceStreamingEnabled = distanceStreamingEnabled;\r\n        }\r\n\r\n        public FWorldTileLayer()\r\n        {\r\n\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Describes LOD entry in a world tile\r\n    /// </summary>\r\n    public class FWorldTileLODInfo\r\n    {\r\n        /// <summary>Relative to LOD0 streaming distance, absolute distance = LOD0 + StreamingDistanceDelta</summary>\r\n        public int RelativeStreamingDistance;\r\n\r\n        /// <summary>Reserved for additional options</summary>\r\n        public float Reserved0;\r\n        /// <summary>Reserved for additional options</summary>\r\n        public float Reserved1;\r\n        /// <summary>Reserved for additional options</summary>\r\n        public int Reserved2;\r\n        /// <summary>Reserved for additional options</summary>\r\n        public int Reserved3;\r\n\r\n        public FWorldTileLODInfo(int relativeStreamingDistance, float reserved0, float reserved1, int reserved2, int reserved3)\r\n        {\r\n            RelativeStreamingDistance = relativeStreamingDistance;\r\n            Reserved0 = reserved0;\r\n            Reserved1 = reserved1;\r\n            Reserved2 = reserved2;\r\n            Reserved3 = reserved3;\r\n        }\r\n\r\n        public void Read(AssetBinaryReader reader, UAsset asset)\r\n        {\r\n            RelativeStreamingDistance = reader.ReadInt32();\r\n            Reserved0 = reader.ReadSingle();\r\n            Reserved1 = reader.ReadSingle();\r\n            Reserved2 = reader.ReadInt32();\r\n            Reserved3 = reader.ReadInt32();\r\n        }\r\n\r\n        public void Write(AssetBinaryWriter writer, UAsset asset)\r\n        {\r\n            writer.Write(RelativeStreamingDistance);\r\n            writer.Write(Reserved0);\r\n            writer.Write(Reserved1);\r\n            writer.Write(Reserved2);\r\n            writer.Write(Reserved3);\r\n        }\r\n\r\n        public FWorldTileLODInfo()\r\n        {\r\n\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Tile information used by WorldComposition.\r\n    /// Defines properties necessary for tile positioning in the world. Stored with package summary\r\n    /// </summary>\r\n    public class FWorldTileInfo\r\n    {\r\n        /// <summary>Tile position in the world relative to parent</summary>\r\n        public int[] Position; // FIntVector\r\n        /// <summary>Absolute tile position in the world. Calculated in runtime</summary>\r\n        public int[] AbsolutePosition; // FIntVector\r\n        /// <summary>Tile bounding box</summary>\r\n        public BoxPropertyData Bounds;\r\n        /// <summary>Tile assigned layer</summary>\r\n        public FWorldTileLayer Layer;\r\n        /// <summary>Whether to hide sub-level tile in tile view</summary>\r\n        public bool bHideInTileView;\r\n        /// <summary>Parent tile package name</summary>\r\n        public FString ParentTilePackageName;\r\n        /// <summary>LOD information</summary>\r\n        public FWorldTileLODInfo[] LODList;\r\n        /// <summary>Sorting order</summary>\r\n        public int ZOrder;\r\n\r\n        public void Read(AssetBinaryReader reader, UAsset asset)\r\n        {\r\n            Position = new int[3];\r\n            AbsolutePosition = new int[3];\r\n\r\n            if (asset.GetCustomVersion<FFortniteMainBranchObjectVersion>() < FFortniteMainBranchObjectVersion.WorldCompositionTile3DOffset)\r\n            {\r\n                Position[0] = reader.ReadInt32();\r\n                Position[1] = reader.ReadInt32();\r\n                Position[2] = 0;\r\n            }\r\n            else\r\n            {\r\n                Position[0] = reader.ReadInt32();\r\n                Position[1] = reader.ReadInt32();\r\n                Position[2] = reader.ReadInt32();\r\n            }\r\n            Bounds = new BoxPropertyData(FName.DefineDummy(asset, \"Bounds\"));\r\n            Bounds.Ancestry.Initialize(null, reader.Asset.GetParentClassExportName(out FName pcen2), pcen2);\r\n            Bounds.Read(reader, false, 0, 0);\r\n            Layer = new FWorldTileLayer();\r\n            Layer.Read(reader, asset);\r\n\r\n            if (asset.ObjectVersion >= ObjectVersion.VER_UE4_WORLD_LEVEL_INFO_UPDATED)\r\n            {\r\n                bHideInTileView = reader.ReadInt32() == 1;\r\n                ParentTilePackageName = reader.ReadFString();\r\n            }\r\n\r\n            if (asset.ObjectVersion >= ObjectVersion.VER_UE4_WORLD_LEVEL_INFO_LOD_LIST)\r\n            {\r\n                int numEntries = reader.ReadInt32();\r\n                LODList = new FWorldTileLODInfo[numEntries];\r\n                for (int i = 0; i < numEntries; i++)\r\n                {\r\n                    LODList[i] = new FWorldTileLODInfo();\r\n                    LODList[i].Read(reader, asset);\r\n                }\r\n            }\r\n\r\n            if (asset.ObjectVersion >= ObjectVersion.VER_UE4_WORLD_LEVEL_INFO_ZORDER)\r\n            {\r\n                ZOrder = reader.ReadInt32();\r\n            }\r\n\r\n#pragma warning disable CS0162 // Unreachable code detected\r\n            if (false) // Ar.GetPortFlags() & PPF_DuplicateForPIE\r\n            {\r\n                AbsolutePosition[0] = reader.ReadInt32();\r\n                AbsolutePosition[1] = reader.ReadInt32();\r\n                AbsolutePosition[2] = reader.ReadInt32();\r\n            }\r\n#pragma warning restore CS0162 // Unreachable code detected\r\n        }\r\n\r\n        public void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n        {\r\n            var ancestryNew = (AncestryInfo)ancestrySoFar.Clone();\r\n            ancestryNew.SetAsParent(FName.DefineDummy(asset, \"WorldTileInfo\"));\r\n\r\n            Bounds.ResolveAncestries(asset, ancestryNew);\r\n            Layer.ResolveAncestries(asset, ancestryNew);\r\n        }\r\n\r\n        public void Write(AssetBinaryWriter writer, UAsset asset)\r\n        {\r\n            if (asset.GetCustomVersion<FFortniteMainBranchObjectVersion>() < FFortniteMainBranchObjectVersion.WorldCompositionTile3DOffset)\r\n            {\r\n                writer.Write(Position[0]);\r\n                writer.Write(Position[1]);\r\n            }\r\n            else\r\n            {\r\n                writer.Write(Position[0]);\r\n                writer.Write(Position[1]);\r\n                writer.Write(Position[2]);\r\n            }\r\n            Bounds.Write(writer, false);\r\n            Layer.Write(writer, asset);\r\n\r\n            if (asset.ObjectVersion >= ObjectVersion.VER_UE4_WORLD_LEVEL_INFO_UPDATED)\r\n            {\r\n                writer.Write(bHideInTileView ? 1 : 0);\r\n                writer.Write(ParentTilePackageName);\r\n            }\r\n\r\n            if (asset.ObjectVersion >= ObjectVersion.VER_UE4_WORLD_LEVEL_INFO_LOD_LIST)\r\n            {\r\n                writer.Write(LODList.Length);\r\n                for (int i = 0; i < LODList.Length; i++)\r\n                {\r\n                    LODList[i].Write(writer, asset);\r\n                }\r\n            }\r\n\r\n            if (asset.ObjectVersion >= ObjectVersion.VER_UE4_WORLD_LEVEL_INFO_ZORDER)\r\n            {\r\n                writer.Write(ZOrder);\r\n            }\r\n\r\n#pragma warning disable CS0162 // Unreachable code detected\r\n            if (false) // Ar.GetPortFlags() & PPF_DuplicateForPIE\r\n            {\r\n                writer.Write(AbsolutePosition[0]);\r\n                writer.Write(AbsolutePosition[1]);\r\n                writer.Write(AbsolutePosition[2]);\r\n            }\r\n#pragma warning restore CS0162 // Unreachable code detected\r\n        }\r\n\r\n        public FWorldTileInfo(int[] position, int[] absolutePosition, BoxPropertyData bounds, FWorldTileLayer layer, bool bHideInTileView, FString parentTilePackageName, FWorldTileLODInfo[] lODList, int zOrder)\r\n        {\r\n            Position = position;\r\n            AbsolutePosition = absolutePosition;\r\n            Bounds = bounds;\r\n            Layer = layer;\r\n            this.bHideInTileView = bHideInTileView;\r\n            ParentTilePackageName = parentTilePackageName;\r\n            LODList = lODList;\r\n            ZOrder = zOrder;\r\n        }\r\n\r\n        public FWorldTileInfo()\r\n        {\r\n\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Flags.cs",
    "content": "﻿using System;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.UnrealTypes\r\n{\r\n    /// <summary>\r\n    /// Flags describing an object instance\r\n    /// </summary>\r\n    [Flags]\r\n    public enum EObjectFlags\r\n    {\r\n        RF_NoFlags = 0x00000000,\r\n        RF_Public = 0x00000001,\r\n        RF_Standalone = 0x00000002,\r\n        RF_MarkAsNative = 0x00000004,\r\n        RF_Transactional = 0x00000008,\r\n        RF_ClassDefaultObject = 0x00000010,\r\n        RF_ArchetypeObject = 0x00000020,\r\n        RF_Transient = 0x00000040,\r\n        RF_MarkAsRootSet = 0x00000080,\r\n        RF_TagGarbageTemp = 0x00000100,\r\n        RF_NeedInitialization = 0x00000200,\r\n        RF_NeedLoad = 0x00000400,\r\n        RF_KeepForCooker = 0x00000800,\r\n        RF_NeedPostLoad = 0x00001000,\r\n        RF_NeedPostLoadSubobjects = 0x00002000,\r\n        RF_NewerVersionExists = 0x00004000,\r\n        RF_BeginDestroyed = 0x00008000,\r\n        RF_FinishDestroyed = 0x00010000,\r\n        RF_BeingRegenerated = 0x00020000,\r\n        RF_DefaultSubObject = 0x00040000,\r\n        RF_WasLoaded = 0x00080000,\r\n        RF_TextExportTransient = 0x00100000,\r\n        RF_LoadCompleted = 0x00200000,\r\n        RF_InheritableComponentTemplate = 0x00400000,\r\n        RF_DuplicateTransient = 0x00800000,\r\n        RF_StrongRefOnFrame = 0x01000000,\r\n        RF_NonPIEDuplicateTransient = 0x02000000,\r\n        RF_Dynamic = 0x04000000,\r\n        RF_WillBeLoaded = 0x08000000,\r\n        RF_HasExternalPackage = 0x10000000\r\n    }\r\n\r\n    /// <summary>\r\n    /// Package flags, passed into UPackage::SetPackageFlags and related functions in the Unreal Engine\r\n    /// </summary>\r\n    [Flags]\r\n    public enum EPackageFlags : uint\r\n    {\r\n\t    ///<summary>No flags</summary>\r\n\t    PKG_None = 0x00000000,\r\n\t    ///<summary>Newly created package, not saved yet. In editor only.</summary>\r\n\t    PKG_NewlyCreated = 0x00000001,\r\n\t    ///<summary>Purely optional for clients.</summary>\r\n\t    PKG_ClientOptional = 0x00000002,\r\n\t    ///<summary>Only needed on the server side.</summary>\r\n\t    PKG_ServerSideOnly = 0x00000004,\r\n\t    ///<summary>This package is from \"compiled in\" classes.</summary>\r\n\t    PKG_CompiledIn = 0x00000010,\r\n\t    ///<summary>This package was loaded just for the purposes of diffing</summary>\r\n\t    PKG_ForDiffing = 0x00000020,\r\n\t    ///<summary>This is editor-only package (for example: editor module script package)</summary>\r\n\t    PKG_EditorOnly = 0x00000040,\r\n\t    ///<summary>Developer module</summary>\r\n\t    PKG_Developer = 0x00000080,\r\n\t    ///<summary>Loaded only in uncooked builds (i.e. runtime in editor)</summary>\r\n\t    PKG_UncookedOnly = 0x00000100,\r\n\t    ///<summary>Package is cooked</summary>\r\n\t    PKG_Cooked = 0x00000200,\r\n\t    ///<summary>Package doesn't contain any asset object (although asset tags can be present)</summary>\r\n\t    PKG_ContainsNoAsset = 0x00000400,\r\n\t    ///<summary>Uses unversioned property serialization instead of versioned tagged property serialization</summary>\r\n\t    PKG_UnversionedProperties = 0x00002000,\r\n\t    ///<summary>Contains map data (UObjects only referenced by a single ULevel) but is stored in a different package</summary>\r\n\t    PKG_ContainsMapData = 0x00004000,\r\n\t    ///<summary>package is currently being compiled</summary>\r\n\t    PKG_Compiling = 0x00010000,\r\n\t    ///<summary>Set if the package contains a ULevel/ UWorld object</summary>\r\n\t    PKG_ContainsMap = 0x00020000,\r\n\t    ///<summary>???</summary>\r\n\t    PKG_RequiresLocalizationGather = 0x00040000,\r\n\t    ///<summary>Set if the package was created for the purpose of PIE</summary>\r\n\t    PKG_PlayInEditor = 0x00100000,\r\n\t    ///<summary>Package is allowed to contain UClass objects</summary>\r\n\t    PKG_ContainsScript = 0x00200000,\r\n\t    ///<summary>Editor should not export asset in this package</summary>\r\n\t    PKG_DisallowExport = 0x00400000,\r\n\t    ///<summary>This package should resolve dynamic imports from its export at runtime.</summary>\r\n\t    PKG_DynamicImports = 0x10000000,\r\n\t    ///<summary>This package contains elements that are runtime generated, and may not follow standard loading order rules</summary>\r\n\t    PKG_RuntimeGenerated = 0x20000000,\r\n\t    ///<summary>This package is reloading in the cooker, try to avoid getting data we will never need. We won't save this package.</summary>\r\n\t    PKG_ReloadingForCooker = 0x40000000,\r\n\t    ///<summary>Package has editor-only data filtered out</summary>\r\n\t    PKG_FilterEditorOnly = 0x80000000,\r\n    }\r\n\r\n    /// <summary>\r\n    /// Flags associated with each property in a class, overriding the property's default behavior.\r\n    /// </summary>\r\n    [Flags]\r\n    public enum EPropertyFlags : ulong\r\n    {\r\n        CPF_None = 0,\r\n\r\n        ///<summary>Property is user-settable in the editor.</summary>\r\n        CPF_Edit = 0x0000000000000001,\r\n        ///<summary>This is a constant function parameter</summary>\r\n        CPF_ConstParm = 0x0000000000000002,\r\n        ///<summary>This property can be read by blueprint code</summary>\r\n        CPF_BlueprintVisible = 0x0000000000000004,\r\n        ///<summary>Object can be exported with actor.</summary>\r\n        CPF_ExportObject = 0x0000000000000008,\r\n        ///<summary>This property cannot be modified by blueprint code</summary>\r\n        CPF_BlueprintReadOnly = 0x0000000000000010,\r\n        ///<summary>Property is relevant to network replication.</summary>\r\n        CPF_Net = 0x0000000000000020,\r\n        ///<summary>Indicates that elements of an array can be modified, but its size cannot be changed.</summary>\r\n        CPF_EditFixedSize = 0x0000000000000040,\r\n        ///<summary>Function/When call parameter.</summary>\r\n        CPF_Parm = 0x0000000000000080,\r\n        ///<summary>Value is copied out after function call.</summary>\r\n        CPF_OutParm = 0x0000000000000100,\r\n        ///<summary>memset is fine for construction</summary>\r\n        CPF_ZeroConstructor = 0x0000000000000200,\r\n        ///<summary>Return value.</summary>\r\n        CPF_ReturnParm = 0x0000000000000400,\r\n        ///<summary>Disable editing of this property on an archetype/sub-blueprint</summary>\r\n        CPF_DisableEditOnTemplate = 0x0000000000000800,\r\n        ///<summary>Property is transient: shouldn't be saved or loaded, except for Blueprint CDOs.</summary>\r\n        CPF_Transient = 0x0000000000002000,\r\n        ///<summary>Property should be loaded/saved as permanent profile.</summary>\r\n        CPF_Config = 0x0000000000004000,\r\n        ///<summary>Disable editing on an instance of this class</summary>\r\n        CPF_DisableEditOnInstance = 0x0000000000010000,\r\n        ///<summary>Property is uneditable in the editor.</summary>\r\n        CPF_EditConst = 0x0000000000020000,\r\n        ///<summary>Load config from base class, not subclass.</summary>\r\n        CPF_GlobalConfig = 0x0000000000040000,\r\n        ///<summary>Property is a component references.</summary>\r\n        CPF_InstancedReference = 0x0000000000080000,\r\n        ///<summary>Property should always be reset to the default value during any type of duplication (copy/paste, binary duplication, etc.)</summary>\r\n        CPF_DuplicateTransient = 0x0000000000200000,\r\n        ///<summary>Property should be serialized for save games, this is only checked for game-specific archives with ArIsSaveGame</summary>\r\n        CPF_SaveGame = 0x0000000001000000,\r\n        ///<summary>Hide clear (and browse) button.</summary>\r\n        CPF_NoClear = 0x0000000002000000,\r\n        ///<summary>Value is passed by reference; CPF_OutParam and CPF_Param should also be set.</summary>\r\n        CPF_ReferenceParm = 0x0000000008000000,\r\n        ///<summary>MC Delegates only.  Property should be exposed for assigning in blueprint code</summary>\r\n        CPF_BlueprintAssignable = 0x0000000010000000,\r\n        ///<summary>Property is deprecated.  Read it from an archive, but don't save it.</summary>\r\n        CPF_Deprecated = 0x0000000020000000,\r\n        ///<summary>If this is set, then the property can be memcopied instead of CopyCompleteValue / CopySingleValue</summary>\r\n        CPF_IsPlainOldData = 0x0000000040000000,\r\n        ///<summary>Not replicated. For non replicated properties in replicated structs </summary>\r\n        CPF_RepSkip = 0x0000000080000000,\r\n        ///<summary>Notify actors when a property is replicated</summary>\r\n        CPF_RepNotify = 0x0000000100000000,\r\n        ///<summary>interpolatable property for use with matinee</summary>\r\n        CPF_Interp = 0x0000000200000000,\r\n        ///<summary>Property isn't transacted</summary>\r\n        CPF_NonTransactional = 0x0000000400000000,\r\n        ///<summary>Property should only be loaded in the editor</summary>\r\n        CPF_EditorOnly = 0x0000000800000000,\r\n        ///<summary>No destructor</summary>\r\n        CPF_NoDestructor = 0x0000001000000000,\r\n        ///<summary>Only used for weak pointers, means the export type is autoweak</summary>\r\n        CPF_AutoWeak = 0x0000004000000000,\r\n        ///<summary>Property contains component references.</summary>\r\n        CPF_ContainsInstancedReference = 0x0000008000000000,\r\n        ///<summary>asset instances will add properties with this flag to the asset registry automatically</summary>\r\n        CPF_AssetRegistrySearchable = 0x0000010000000000,\r\n        ///<summary>The property is visible by default in the editor details view</summary>\r\n        CPF_SimpleDisplay = 0x0000020000000000,\r\n        ///<summary>The property is advanced and not visible by default in the editor details view</summary>\r\n        CPF_AdvancedDisplay = 0x0000040000000000,\r\n        ///<summary>property is protected from the perspective of script</summary>\r\n        CPF_Protected = 0x0000080000000000,\r\n        ///<summary>MC Delegates only.  Property should be exposed for calling in blueprint code</summary>\r\n        CPF_BlueprintCallable = 0x0000100000000000,\r\n        ///<summary>MC Delegates only.  This delegate accepts (only in blueprint) only events with BlueprintAuthorityOnly.</summary>\r\n        CPF_BlueprintAuthorityOnly = 0x0000200000000000,\r\n        ///<summary>Property shouldn't be exported to text format (e.g. copy/paste)</summary>\r\n        CPF_TextExportTransient = 0x0000400000000000,\r\n        ///<summary>Property should only be copied in PIE</summary>\r\n        CPF_NonPIEDuplicateTransient = 0x0000800000000000,\r\n        ///<summary>Property is exposed on spawn</summary>\r\n        CPF_ExposeOnSpawn = 0x0001000000000000,\r\n        ///<summary>A object referenced by the property is duplicated like a component. (Each actor should have an own instance.)</summary>\r\n        CPF_PersistentInstance = 0x0002000000000000,\r\n        ///<summary>Property was parsed as a wrapper class like TSubclassOf T, FScriptInterface etc., rather than a USomething*</summary>\r\n        CPF_UObjectWrapper = 0x0004000000000000,\r\n        ///<summary>This property can generate a meaningful hash value.</summary>\r\n        CPF_HasGetValueTypeHash = 0x0008000000000000,\r\n        ///<summary>Public native access specifier</summary>\r\n        CPF_NativeAccessSpecifierPublic = 0x0010000000000000,\r\n        ///<summary>Protected native access specifier</summary>\r\n        CPF_NativeAccessSpecifierProtected = 0x0020000000000000,\r\n        ///<summary>Private native access specifier</summary>\r\n        CPF_NativeAccessSpecifierPrivate = 0x0040000000000000,\r\n        ///<summary>Property shouldn't be serialized, can still be exported to text</summary>\r\n        CPF_SkipSerialization = 0x0080000000000000,\r\n    }\r\n\r\n    /// <summary>\r\n    /// Flags describing a class.\r\n    /// </summary>\r\n    [Flags]\r\n    public enum EClassFlags : uint\r\n    {\r\n        /// <summary>No Flags</summary>\r\n        CLASS_None = 0x00000000,\r\n        /// <summary>Class is abstract and can't be instantiated directly.</summary>\r\n        CLASS_Abstract = 0x00000001,\r\n        /// <summary>Save object configuration only to Default INIs, never to local INIs. Must be combined with CLASS_Config</summary>\r\n        CLASS_DefaultConfig = 0x00000002,\r\n        /// <summary>Load object configuration at construction time.</summary>\r\n        CLASS_Config = 0x00000004,\r\n        /// <summary>This object type can't be saved; null it out at save time.</summary>\r\n        CLASS_Transient = 0x00000008,\r\n        /// <summary>Successfully parsed.</summary>\r\n        CLASS_Parsed = 0x00000010,\r\n        /// <summary>???</summary>\r\n        CLASS_MatchedSerializers = 0x00000020,\r\n        /// <summary>Indicates that the config settings for this class will be saved to Project/User*.ini (similar to CLASS_GlobalUserConfig)</summary>\r\n        CLASS_ProjectUserConfig = 0x00000040,\r\n        /// <summary>Class is a native class - native interfaces will have CLASS_Native set, but not RF_MarkAsNative</summary>\r\n        CLASS_Native = 0x00000080,\r\n        /// <summary>Don't export to C++ header.</summary>\r\n        CLASS_NoExport = 0x00000100,\r\n        /// <summary>Do not allow users to create in the editor.</summary>\r\n        CLASS_NotPlaceable = 0x00000200,\r\n        /// <summary>Handle object configuration on a per-object basis, rather than per-class.</summary>\r\n        CLASS_PerObjectConfig = 0x00000400,\r\n        /// <summary>Whether SetUpRuntimeReplicationData still needs to be called for this class</summary>\r\n        CLASS_ReplicationDataIsSetUp = 0x00000800u,\r\n        /// <summary>Class can be constructed from editinline New button.</summary>\r\n        CLASS_EditInlineNew = 0x00001000,\r\n        /// <summary>Display properties in the editor without using categories.</summary>\r\n        CLASS_CollapseCategories = 0x00002000,\r\n        /// <summary>Class is an interface</summary>\r\n        CLASS_Interface = 0x00004000,\r\n        /// <summary>Do not export a constructor for this class, assuming it is in the cpptext</summary>\r\n        CLASS_CustomConstructor = 0x00008000,\r\n        /// <summary>All properties and functions in this class are const and should be exported as const</summary>\r\n        CLASS_Const = 0x00010000,\r\n        /// <summary>Class flag indicating the class is having its layout changed, and therefore is not ready for a CDO to be created</summary>\r\n        CLASS_LayoutChanging = 0x00020000,\r\n        /// <summary>Indicates that the class was created from blueprint source material</summary>\r\n        CLASS_CompiledFromBlueprint = 0x00040000,\r\n        /// <summary>Indicates that only the bare minimum bits of this class should be DLL exported/imported</summary>\r\n        CLASS_MinimalAPI = 0x00080000,\r\n        /// <summary>Indicates this class must be DLL exported/imported (along with all of it's members)</summary>\r\n        CLASS_RequiredAPI = 0x00100000,\r\n        /// <summary>Indicates that references to this class default to instanced. Used to be subclasses of UComponent, but now can be any UObject</summary>\r\n        CLASS_DefaultToInstanced = 0x00200000,\r\n        /// <summary>Indicates that the parent token stream has been merged with ours.</summary>\r\n        CLASS_TokenStreamAssembled = 0x00400000,\r\n        /// <summary>Class has component properties.</summary>\r\n        CLASS_HasInstancedReference = 0x00800000,\r\n        /// <summary>Don't show this class in the editor class browser or edit inline new menus.</summary>\r\n        CLASS_Hidden = 0x01000000,\r\n        /// <summary>Don't save objects of this class when serializing</summary>\r\n        CLASS_Deprecated = 0x02000000,\r\n        /// <summary>Class not shown in editor drop down for class selection</summary>\r\n        CLASS_HideDropDown = 0x04000000,\r\n        /// <summary>Class settings are saved to AppData/..../Blah.ini (as opposed to CLASS_DefaultConfig)</summary>\r\n        CLASS_GlobalUserConfig = 0x08000000,\r\n        /// <summary>Class was declared directly in C++ and has no boilerplate generated by UnrealHeaderTool</summary>\r\n        CLASS_Intrinsic = 0x10000000,\r\n        /// <summary>Class has already been constructed (maybe in a previous DLL version before hot-reload).</summary>\r\n        CLASS_Constructed = 0x20000000,\r\n        /// <summary>Indicates that object configuration will not check against ini base/defaults when serialized</summary>\r\n        CLASS_ConfigDoNotCheckDefaults = 0x40000000,\r\n        /// <summary>Class has been consigned to oblivion as part of a blueprint recompile, and a newer version currently exists.</summary>\r\n        CLASS_NewerVersionExists = 0x80000000,\r\n    };\r\n\r\n    /// <summary>\r\n    /// Flags describing a function.\r\n    /// </summary>\r\n    [Flags]\r\n    public enum EFunctionFlags : uint {\r\n        FUNC_None = 0x00000000,\r\n        FUNC_Final = 0x00000001,\r\n        FUNC_RequiredAPI = 0x00000002,\r\n        FUNC_BlueprintAuthorityOnly = 0x00000004,\r\n        FUNC_BlueprintCosmetic = 0x00000008,\r\n        FUNC_Net = 0x00000040,\r\n        FUNC_NetReliable = 0x00000080,\r\n        FUNC_NetRequest = 0x00000100,\r\n        FUNC_Exec = 0x00000200,\r\n        FUNC_Native = 0x00000400,\r\n        FUNC_Event = 0x00000800,\r\n        FUNC_NetResponse = 0x00001000,\r\n        FUNC_Static = 0x00002000,\r\n        FUNC_NetMulticast = 0x00004000,\r\n        FUNC_UbergraphFunction = 0x00008000,\r\n        FUNC_MulticastDelegate = 0x00010000,\r\n        FUNC_Public = 0x00020000,\r\n        FUNC_Private = 0x00040000,\r\n        FUNC_Protected = 0x00080000,\r\n        FUNC_Delegate = 0x00100000,\r\n        FUNC_NetServer = 0x00200000,\r\n        FUNC_HasOutParms = 0x00400000,\r\n        FUNC_HasDefaults = 0x00800000,\r\n        FUNC_NetClient = 0x01000000,\r\n        FUNC_DLLImport = 0x02000000,\r\n        FUNC_BlueprintCallable = 0x04000000,\r\n        FUNC_BlueprintEvent = 0x08000000,\r\n        FUNC_BlueprintPure = 0x10000000,\r\n        FUNC_EditorOnly = 0x20000000,\r\n        FUNC_Const = 0x40000000,\r\n        FUNC_NetValidate = 0x80000000,\r\n        FUNC_AllFlags = 0xFFFFFFFF,\r\n    };\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/ObjectVersion.cs",
    "content": "﻿namespace UAssetAPI.UnrealTypes\r\n{\r\n    /// <summary>\r\n    /// An enum used to represent the global object version of UE4.\r\n    /// </summary>\r\n    public enum ObjectVersion\r\n    {\r\n        UNKNOWN = 0,\r\n        VER_UE4_OLDEST_LOADABLE_PACKAGE = 214,\r\n\r\n        /// <summary>Removed restriction on blueprint-exposed variables from being read-only</summary>\r\n        VER_UE4_BLUEPRINT_VARS_NOT_READ_ONLY,\r\n        /// <summary>Added manually serialized element to UStaticMesh (precalculated nav collision)</summary>\r\n        VER_UE4_STATIC_MESH_STORE_NAV_COLLISION,\r\n        /// <summary>Changed property name for atmospheric fog</summary>\r\n        VER_UE4_ATMOSPHERIC_FOG_DECAY_NAME_CHANGE,\r\n        /// <summary>Change many properties/functions from Translation to Location</summary>\r\n        VER_UE4_SCENECOMP_TRANSLATION_TO_LOCATION,\r\n        /// <summary>Material attributes reordering</summary>\r\n        VER_UE4_MATERIAL_ATTRIBUTES_REORDERING,\r\n        /// <summary>Collision Profile setting has been added, and all components that exists has to be properly upgraded</summary>\r\n        VER_UE4_COLLISION_PROFILE_SETTING,\r\n        /// <summary>Making the blueprint's skeleton class transient</summary>\r\n        VER_UE4_BLUEPRINT_SKEL_TEMPORARY_TRANSIENT,\r\n        /// <summary>Making the blueprint's skeleton class serialized again</summary>\r\n        VER_UE4_BLUEPRINT_SKEL_SERIALIZED_AGAIN,\r\n        /// <summary>Blueprint now controls replication settings again</summary>\r\n        VER_UE4_BLUEPRINT_SETS_REPLICATION,\r\n        /// <summary>Added level info used by World browser</summary>\r\n        VER_UE4_WORLD_LEVEL_INFO,\r\n        /// <summary>Changed capsule height to capsule half-height (afterwards)</summary>\r\n        VER_UE4_AFTER_CAPSULE_HALF_HEIGHT_CHANGE,\r\n        /// <summary>Added Namepace, GUID (Key) and Flags to FText</summary>\r\n        VER_UE4_ADDED_NAMESPACE_AND_KEY_DATA_TO_FTEXT,\r\n        /// <summary>Attenuation shapes</summary>\r\n        VER_UE4_ATTENUATION_SHAPES,\r\n        /// <summary>Use IES texture multiplier even when IES brightness is not being used</summary>\r\n        VER_UE4_LIGHTCOMPONENT_USE_IES_TEXTURE_MULTIPLIER_ON_NON_IES_BRIGHTNESS,\r\n        /// <summary>Removed InputComponent as a blueprint addable component</summary>\r\n        VER_UE4_REMOVE_INPUT_COMPONENTS_FROM_BLUEPRINTS,\r\n        /// <summary>Use an FMemberReference struct in UK2Node_Variable</summary>\r\n        VER_UE4_VARK2NODE_USE_MEMBERREFSTRUCT,\r\n        /// <summary>Refactored material expression inputs for UMaterialExpressionSceneColor and UMaterialExpressionSceneDepth</summary>\r\n        VER_UE4_REFACTOR_MATERIAL_EXPRESSION_SCENECOLOR_AND_SCENEDEPTH_INPUTS,\r\n        /// <summary>Spline meshes changed from Z forwards to configurable</summary>\r\n        VER_UE4_SPLINE_MESH_ORIENTATION,\r\n        /// <summary>Added ReverbEffect asset type</summary>\r\n        VER_UE4_REVERB_EFFECT_ASSET_TYPE,\r\n        /// <summary>changed max texcoords from 4 to 8</summary>\r\n        VER_UE4_MAX_TEXCOORD_INCREASED,\r\n        /// <summary>static meshes changed to support SpeedTrees</summary>\r\n        VER_UE4_SPEEDTREE_STATICMESH,\r\n        /// <summary>Landscape component reference between landscape component and collision component</summary>\r\n        VER_UE4_LANDSCAPE_COMPONENT_LAZY_REFERENCES,\r\n        /// <summary>Refactored UK2Node_CallFunction to use FMemberReference</summary>\r\n        VER_UE4_SWITCH_CALL_NODE_TO_USE_MEMBER_REFERENCE,\r\n        /// <summary>Added fixup step to remove skeleton class references from blueprint objects</summary>\r\n        VER_UE4_ADDED_SKELETON_ARCHIVER_REMOVAL,\r\n        /// <summary>See above, take 2.</summary>\r\n        VER_UE4_ADDED_SKELETON_ARCHIVER_REMOVAL_SECOND_TIME,\r\n        /// <summary>Making the skeleton class on blueprints transient</summary>\r\n        VER_UE4_BLUEPRINT_SKEL_CLASS_TRANSIENT_AGAIN,\r\n        /// <summary>UClass knows if it's been cooked</summary>\r\n        VER_UE4_ADD_COOKED_TO_UCLASS,\r\n        /// <summary>Deprecated static mesh thumbnail properties were removed</summary>\r\n        VER_UE4_DEPRECATED_STATIC_MESH_THUMBNAIL_PROPERTIES_REMOVED,\r\n        /// <summary>Added collections in material shader map ids</summary>\r\n        VER_UE4_COLLECTIONS_IN_SHADERMAPID,\r\n        /// <summary>Renamed some Movement Component properties, added PawnMovementComponent</summary>\r\n        VER_UE4_REFACTOR_MOVEMENT_COMPONENT_HIERARCHY,\r\n        /// <summary>Swap UMaterialExpressionTerrainLayerSwitch::LayerUsed/LayerNotUsed the correct way round</summary>\r\n        VER_UE4_FIX_TERRAIN_LAYER_SWITCH_ORDER,\r\n        /// <summary>Remove URB_ConstraintSetup</summary>\r\n        VER_UE4_ALL_PROPS_TO_CONSTRAINTINSTANCE,\r\n        /// <summary>Low quality directional lightmaps</summary>\r\n        VER_UE4_LOW_QUALITY_DIRECTIONAL_LIGHTMAPS,\r\n        /// <summary>Added NoiseEmitterComponent and removed related Pawn properties.</summary>\r\n        VER_UE4_ADDED_NOISE_EMITTER_COMPONENT,\r\n        /// <summary>Add text component vertical alignment</summary>\r\n        VER_UE4_ADD_TEXT_COMPONENT_VERTICAL_ALIGNMENT,\r\n        /// <summary>Added AssetImportData for FBX asset types, deprecating SourceFilePath and SourceFileTimestamp</summary>\r\n        VER_UE4_ADDED_FBX_ASSET_IMPORT_DATA,\r\n        /// <summary>Remove LevelBodySetup from ULevel</summary>\r\n        VER_UE4_REMOVE_LEVELBODYSETUP,\r\n        /// <summary>Refactor character crouching</summary>\r\n        VER_UE4_REFACTOR_CHARACTER_CROUCH,\r\n        /// <summary>Trimmed down material shader debug information.</summary>\r\n        VER_UE4_SMALLER_DEBUG_MATERIALSHADER_UNIFORM_EXPRESSIONS,\r\n        /// <summary>APEX Clothing</summary>\r\n        VER_UE4_APEX_CLOTH,\r\n        /// <summary>\r\n        /// Change Collision Channel to save only modified ones than all of them.\r\n        /// Note!!! Once we pass this CL, we can rename FCollisionResponseContainer enum values.\r\n        /// We should rename to match ECollisionChannel\r\n        /// </summary>\r\n        VER_UE4_SAVE_COLLISIONRESPONSE_PER_CHANNEL,\r\n        /// <summary>Added Landscape Spline editor meshes</summary>\r\n        VER_UE4_ADDED_LANDSCAPE_SPLINE_EDITOR_MESH,\r\n        /// <summary>Fixup input expressions for reading from refraction material attributes.</summary>\r\n        VER_UE4_CHANGED_MATERIAL_REFACTION_TYPE,\r\n        /// <summary>Refactor projectile movement, along with some other movement component work.</summary>\r\n        VER_UE4_REFACTOR_PROJECTILE_MOVEMENT,\r\n        /// <summary>Remove PhysicalMaterialProperty and replace with user defined enum</summary>\r\n        VER_UE4_REMOVE_PHYSICALMATERIALPROPERTY,\r\n        /// <summary>Removed all compile outputs from FMaterial</summary>\r\n        VER_UE4_PURGED_FMATERIAL_COMPILE_OUTPUTS,\r\n        /// <summary>Ability to save cooked PhysX meshes to Landscape</summary>\r\n        VER_UE4_ADD_COOKED_TO_LANDSCAPE,\r\n        /// <summary>Change how input component consumption works</summary>\r\n        VER_UE4_CONSUME_INPUT_PER_BIND,\r\n        /// <summary>Added new Graph based SoundClass Editor</summary>\r\n        VER_UE4_SOUND_CLASS_GRAPH_EDITOR,\r\n        /// <summary>Fixed terrain layer node guids which was causing artifacts</summary>\r\n        VER_UE4_FIXUP_TERRAIN_LAYER_NODES,\r\n        /// <summary>Added clamp min/max swap check to catch older materials</summary>\r\n        VER_UE4_RETROFIT_CLAMP_EXPRESSIONS_SWAP,\r\n        /// <summary>Remove static/movable/stationary light classes</summary>\r\n        VER_UE4_REMOVE_LIGHT_MOBILITY_CLASSES,\r\n        /// <summary>Refactor the way physics blending works to allow partial blending</summary>\r\n        VER_UE4_REFACTOR_PHYSICS_BLENDING,\r\n        /// <summary>WorldLevelInfo: Added reference to parent level and streaming distance</summary>\r\n        VER_UE4_WORLD_LEVEL_INFO_UPDATED,\r\n        /// <summary>Fixed cooking of skeletal/static meshes due to bad serialization logic</summary>\r\n        VER_UE4_STATIC_SKELETAL_MESH_SERIALIZATION_FIX,\r\n        /// <summary>Removal of InterpActor and PhysicsActor</summary>\r\n        VER_UE4_REMOVE_STATICMESH_MOBILITY_CLASSES,\r\n        /// <summary>Refactor physics transforms</summary>\r\n        VER_UE4_REFACTOR_PHYSICS_TRANSFORMS,\r\n        /// <summary>Remove zero triangle sections from static meshes and compact material indices.</summary>\r\n        VER_UE4_REMOVE_ZERO_TRIANGLE_SECTIONS,\r\n        /// <summary>Add param for deceleration in character movement instead of using acceleration.</summary>\r\n        VER_UE4_CHARACTER_MOVEMENT_DECELERATION,\r\n        /// <summary>Made ACameraActor use a UCameraComponent for parameter storage, etc...</summary>\r\n        VER_UE4_CAMERA_ACTOR_USING_CAMERA_COMPONENT,\r\n        /// <summary>Deprecated some pitch/roll properties in CharacterMovementComponent</summary>\r\n        VER_UE4_CHARACTER_MOVEMENT_DEPRECATE_PITCH_ROLL,\r\n        /// <summary>Rebuild texture streaming data on load for uncooked builds</summary>\r\n        VER_UE4_REBUILD_TEXTURE_STREAMING_DATA_ON_LOAD,\r\n        /// <summary>Add support for 32 bit index buffers for static meshes.</summary>\r\n        VER_UE4_SUPPORT_32BIT_STATIC_MESH_INDICES,\r\n        /// <summary>Added streaming install ChunkID to AssetData and UPackage</summary>\r\n        VER_UE4_ADDED_CHUNKID_TO_ASSETDATA_AND_UPACKAGE,\r\n        /// <summary>Add flag to control whether Character blueprints receive default movement bindings.</summary>\r\n        VER_UE4_CHARACTER_DEFAULT_MOVEMENT_BINDINGS,\r\n        /// <summary>APEX Clothing LOD Info</summary>\r\n        VER_UE4_APEX_CLOTH_LOD,\r\n        /// <summary>Added atmospheric fog texture data to be general</summary>\r\n        VER_UE4_ATMOSPHERIC_FOG_CACHE_DATA,\r\n        /// <summary>Arrays serialize their inner's tags</summary>\r\n        VAR_UE4_ARRAY_PROPERTY_INNER_TAGS,\r\n        /// <summary>Skeletal mesh index data is kept in memory in game to support mesh merging.</summary>\r\n        VER_UE4_KEEP_SKEL_MESH_INDEX_DATA,\r\n        /// <summary>Added compatibility for the body instance collision change</summary>\r\n        VER_UE4_BODYSETUP_COLLISION_CONVERSION,\r\n        /// <summary>Reflection capture cooking</summary>\r\n        VER_UE4_REFLECTION_CAPTURE_COOKING,\r\n        /// <summary>Removal of DynamicTriggerVolume, DynamicBlockingVolume, DynamicPhysicsVolume</summary>\r\n        VER_UE4_REMOVE_DYNAMIC_VOLUME_CLASSES,\r\n        /// <summary>Store an additional flag in the BodySetup to indicate whether there is any cooked data to load</summary>\r\n        VER_UE4_STORE_HASCOOKEDDATA_FOR_BODYSETUP,\r\n        /// <summary>Changed name of RefractionBias to RefractionDepthBias.</summary>\r\n        VER_UE4_REFRACTION_BIAS_TO_REFRACTION_DEPTH_BIAS,\r\n        /// <summary>Removal of SkeletalPhysicsActor</summary>\r\n        VER_UE4_REMOVE_SKELETALPHYSICSACTOR,\r\n        /// <summary>PlayerController rotation input refactor</summary>\r\n        VER_UE4_PC_ROTATION_INPUT_REFACTOR,\r\n        /// <summary>Landscape Platform Data cooking</summary>\r\n        VER_UE4_LANDSCAPE_PLATFORMDATA_COOKING,\r\n        /// <summary>Added call for linking classes in CreateExport to ensure memory is initialized properly</summary>\r\n        VER_UE4_CREATEEXPORTS_CLASS_LINKING_FOR_BLUEPRINTS,\r\n        /// <summary>Remove native component nodes from the blueprint SimpleConstructionScript</summary>\r\n        VER_UE4_REMOVE_NATIVE_COMPONENTS_FROM_BLUEPRINT_SCS,\r\n        /// <summary>Removal of Single Node Instance</summary>\r\n        VER_UE4_REMOVE_SINGLENODEINSTANCE,\r\n        /// <summary>Character movement braking changes</summary>\r\n        VER_UE4_CHARACTER_BRAKING_REFACTOR,\r\n        /// <summary>Supported low quality lightmaps in volume samples</summary>\r\n        VER_UE4_VOLUME_SAMPLE_LOW_QUALITY_SUPPORT,\r\n        /// <summary>Split bEnableTouchEvents out from bEnableClickEvents</summary>\r\n        VER_UE4_SPLIT_TOUCH_AND_CLICK_ENABLES,\r\n        /// <summary>Health/Death refactor</summary>\r\n        VER_UE4_HEALTH_DEATH_REFACTOR,\r\n        /// <summary>Moving USoundNodeEnveloper from UDistributionFloatConstantCurve to FRichCurve</summary>\r\n        VER_UE4_SOUND_NODE_ENVELOPER_CURVE_CHANGE,\r\n        /// <summary>Moved SourceRadius to UPointLightComponent</summary>\r\n        VER_UE4_POINT_LIGHT_SOURCE_RADIUS,\r\n        /// <summary>Scene capture actors based on camera actors.</summary>\r\n        VER_UE4_SCENE_CAPTURE_CAMERA_CHANGE,\r\n        /// <summary>Moving SkeletalMesh shadow casting flag from LoD details to material</summary>\r\n        VER_UE4_MOVE_SKELETALMESH_SHADOWCASTING,\r\n        /// <summary>Changing bytecode operators for creating arrays</summary>\r\n        VER_UE4_CHANGE_SETARRAY_BYTECODE,\r\n        /// <summary>Material Instances overriding base material properties.</summary>\r\n        VER_UE4_MATERIAL_INSTANCE_BASE_PROPERTY_OVERRIDES,\r\n        /// <summary>Combined top/bottom lightmap textures</summary>\r\n        VER_UE4_COMBINED_LIGHTMAP_TEXTURES,\r\n        /// <summary>Forced material lightmass guids to be regenerated</summary>\r\n        VER_UE4_BUMPED_MATERIAL_EXPORT_GUIDS,\r\n        /// <summary>Allow overriding of parent class input bindings</summary>\r\n        VER_UE4_BLUEPRINT_INPUT_BINDING_OVERRIDES,\r\n        /// <summary>Fix up convex invalid transform</summary>\r\n        VER_UE4_FIXUP_BODYSETUP_INVALID_CONVEX_TRANSFORM,\r\n        /// <summary>Fix up scale of physics stiffness and damping value</summary>\r\n        VER_UE4_FIXUP_STIFFNESS_AND_DAMPING_SCALE,\r\n        /// <summary>Convert USkeleton and FBoneContrainer to using FReferenceSkeleton.</summary>\r\n        VER_UE4_REFERENCE_SKELETON_REFACTOR,\r\n        /// <summary>Adding references to variable, function, and macro nodes to be able to update to renamed values</summary>\r\n        VER_UE4_K2NODE_REFERENCEGUIDS,\r\n        /// <summary>Fix up the 0th bone's parent bone index.</summary>\r\n        VER_UE4_FIXUP_ROOTBONE_PARENT,\r\n        //Allow setting of TextRenderComponents size in world space.\r\n        VER_UE4_TEXT_RENDER_COMPONENTS_WORLD_SPACE_SIZING,\r\n        /// <summary>Material Instances overriding base material properties #2.</summary>\r\n        VER_UE4_MATERIAL_INSTANCE_BASE_PROPERTY_OVERRIDES_PHASE_2,\r\n        /// <summary>CLASS_Placeable becomes CLASS_NotPlaceable</summary>\r\n        VER_UE4_CLASS_NOTPLACEABLE_ADDED,\r\n        /// <summary>Added LOD info list to a world tile description</summary>\r\n        VER_UE4_WORLD_LEVEL_INFO_LOD_LIST,\r\n        /// <summary>CharacterMovement variable naming refactor</summary>\r\n        VER_UE4_CHARACTER_MOVEMENT_VARIABLE_RENAMING_1,\r\n        /// <summary>FName properties containing sound names converted to FSlateSound properties</summary>\r\n        VER_UE4_FSLATESOUND_CONVERSION,\r\n        /// <summary>Added ZOrder to a world tile description</summary>\r\n        VER_UE4_WORLD_LEVEL_INFO_ZORDER,\r\n        /// <summary>Added flagging of localization gather requirement to packages</summary>\r\n        VER_UE4_PACKAGE_REQUIRES_LOCALIZATION_GATHER_FLAGGING,\r\n        /// <summary>Preventing Blueprint Actor variables from having default values</summary>\r\n        VER_UE4_BP_ACTOR_VARIABLE_DEFAULT_PREVENTING,\r\n        /// <summary>Preventing Blueprint Actor variables from having default values</summary>\r\n        VER_UE4_TEST_ANIMCOMP_CHANGE,\r\n        /// <summary>Class as primary asset, name convention changed</summary>\r\n        VER_UE4_EDITORONLY_BLUEPRINTS,\r\n        /// <summary>Custom serialization for FEdGraphPinType</summary>\r\n        VER_UE4_EDGRAPHPINTYPE_SERIALIZATION,\r\n        /// <summary>Stop generating 'mirrored' cooked mesh for Brush and Model components</summary>\r\n        VER_UE4_NO_MIRROR_BRUSH_MODEL_COLLISION,\r\n        /// <summary>Changed ChunkID to be an array of IDs.</summary>\r\n        VER_UE4_CHANGED_CHUNKID_TO_BE_AN_ARRAY_OF_CHUNKIDS,\r\n        /// <summary>Worlds have been renamed from \"TheWorld\" to be named after the package containing them</summary>\r\n        VER_UE4_WORLD_NAMED_AFTER_PACKAGE,\r\n        /// <summary>Added sky light component</summary>\r\n        VER_UE4_SKY_LIGHT_COMPONENT,\r\n        /// <summary>Added Enable distance streaming flag to FWorldTileLayer</summary>\r\n        VER_UE4_WORLD_LAYER_ENABLE_DISTANCE_STREAMING,\r\n        /// <summary>Remove visibility/zone information from UModel</summary>\r\n        VER_UE4_REMOVE_ZONES_FROM_MODEL,\r\n        /// <summary>Fix base pose serialization </summary>\r\n        VER_UE4_FIX_ANIMATIONBASEPOSE_SERIALIZATION,\r\n        /// <summary>Support for up to 8 skinning influences per vertex on skeletal meshes (on non-gpu vertices)</summary>\r\n        VER_UE4_SUPPORT_8_BONE_INFLUENCES_SKELETAL_MESHES,\r\n        /// <summary>Add explicit bOverrideGravity to world settings</summary>\r\n        VER_UE4_ADD_OVERRIDE_GRAVITY_FLAG,\r\n        /// <summary>Support for up to 8 skinning influences per vertex on skeletal meshes (on gpu vertices)</summary>\r\n        VER_UE4_SUPPORT_GPUSKINNING_8_BONE_INFLUENCES,\r\n        /// <summary>Supporting nonuniform scale animation</summary>\r\n        VER_UE4_ANIM_SUPPORT_NONUNIFORM_SCALE_ANIMATION,\r\n        /// <summary>Engine version is stored as a FEngineVersion object rather than changelist number</summary>\r\n        VER_UE4_ENGINE_VERSION_OBJECT,\r\n        /// <summary>World assets now have RF_Public</summary>\r\n        VER_UE4_PUBLIC_WORLDS,\r\n        /// <summary>Skeleton Guid</summary>\r\n        VER_UE4_SKELETON_GUID_SERIALIZATION,\r\n        /// <summary>Character movement WalkableFloor refactor</summary>\r\n        VER_UE4_CHARACTER_MOVEMENT_WALKABLE_FLOOR_REFACTOR,\r\n        /// <summary>Lights default to inverse squared</summary>\r\n        VER_UE4_INVERSE_SQUARED_LIGHTS_DEFAULT,\r\n        /// <summary>Disabled SCRIPT_LIMIT_BYTECODE_TO_64KB</summary>\r\n        VER_UE4_DISABLED_SCRIPT_LIMIT_BYTECODE,\r\n        /// <summary>Made remote role private, exposed bReplicates</summary>\r\n        VER_UE4_PRIVATE_REMOTE_ROLE,\r\n        /// <summary>Fix up old foliage components to have static mobility (superseded by VER_UE4_FOLIAGE_MOVABLE_MOBILITY)</summary>\r\n        VER_UE4_FOLIAGE_STATIC_MOBILITY,\r\n        /// <summary>Change BuildScale from a float to a vector</summary>\r\n        VER_UE4_BUILD_SCALE_VECTOR,\r\n        /// <summary>After implementing foliage collision, need to disable collision on old foliage instances</summary>\r\n        VER_UE4_FOLIAGE_COLLISION,\r\n        /// <summary>Added sky bent normal to indirect lighting cache</summary>\r\n        VER_UE4_SKY_BENT_NORMAL,\r\n        /// <summary>Added cooking for landscape collision data</summary>\r\n        VER_UE4_LANDSCAPE_COLLISION_DATA_COOKING,\r\n        /// <summary>\r\n        /// Convert CPU tangent Z delta to vector from PackedNormal since we don't get any benefit other than memory\r\n        /// we still convert all to FVector in CPU time whenever any calculation\r\n        /// </summary>\r\n        VER_UE4_MORPHTARGET_CPU_TANGENTZDELTA_FORMATCHANGE,\r\n        /// <summary>Soft constraint limits will implicitly use the mass of the bodies</summary>\r\n        VER_UE4_SOFT_CONSTRAINTS_USE_MASS,\r\n        /// <summary>Reflection capture data saved in packages</summary>\r\n        VER_UE4_REFLECTION_DATA_IN_PACKAGES,\r\n        /// <summary>Fix up old foliage components to have movable mobility (superseded by VER_UE4_FOLIAGE_STATIC_LIGHTING_SUPPORT)</summary>\r\n        VER_UE4_FOLIAGE_MOVABLE_MOBILITY,\r\n        /// <summary>Undo BreakMaterialAttributes changes as it broke old content</summary>\r\n        VER_UE4_UNDO_BREAK_MATERIALATTRIBUTES_CHANGE,\r\n        /// <summary>Now Default custom profile name isn't NONE anymore due to copy/paste not working properly with it</summary>\r\n        VER_UE4_ADD_CUSTOMPROFILENAME_CHANGE,\r\n        /// <summary>Permanently flip and scale material expression coordinates</summary>\r\n        VER_UE4_FLIP_MATERIAL_COORDS,\r\n        /// <summary>PinSubCategoryMemberReference added to FEdGraphPinType</summary>\r\n        VER_UE4_MEMBERREFERENCE_IN_PINTYPE,\r\n        /// <summary>Vehicles use Nm for Torque instead of cm and RPM instead of rad/s</summary>\r\n        VER_UE4_VEHICLES_UNIT_CHANGE,\r\n        /// <summary>\r\n        /// removes NANs from all animations when loaded\r\n        /// now importing should detect NaNs, so we should not have NaNs in source data\r\n        /// </summary>\r\n        VER_UE4_ANIMATION_REMOVE_NANS,\r\n        /// <summary>Change skeleton preview attached assets property type</summary>\r\n        VER_UE4_SKELETON_ASSET_PROPERTY_TYPE_CHANGE,\r\n        /// <summary>\r\n        /// Fix some blueprint variables that have the CPF_DisableEditOnTemplate flag set\r\n        /// when they shouldn't\r\n        /// </summary>\r\n        VER_UE4_FIX_BLUEPRINT_VARIABLE_FLAGS,\r\n        /// <summary>Vehicles use Nm for Torque instead of cm and RPM instead of rad/s part two (missed conversion for some variables</summary>\r\n        VER_UE4_VEHICLES_UNIT_CHANGE2,\r\n        /// <summary>Changed order of interface class serialization</summary>\r\n        VER_UE4_UCLASS_SERIALIZE_INTERFACES_AFTER_LINKING,\r\n        /// <summary>Change from LOD distances to display factors</summary>\r\n        VER_UE4_STATIC_MESH_SCREEN_SIZE_LODS,\r\n        /// <summary>Requires test of material coords to ensure they're saved correctly</summary>\r\n        VER_UE4_FIX_MATERIAL_COORDS,\r\n        /// <summary>Changed SpeedTree wind presets to v7</summary>\r\n        VER_UE4_SPEEDTREE_WIND_V7,\r\n        /// <summary>NeedsLoadForEditorGame added</summary>\r\n        VER_UE4_LOAD_FOR_EDITOR_GAME,\r\n        /// <summary>Manual serialization of FRichCurveKey to save space</summary>\r\n        VER_UE4_SERIALIZE_RICH_CURVE_KEY,\r\n        /// <summary>Change the outer of ULandscapeMaterialInstanceConstants and Landscape-related textures to the level in which they reside</summary>\r\n        VER_UE4_MOVE_LANDSCAPE_MICS_AND_TEXTURES_WITHIN_LEVEL,\r\n        /// <summary>FTexts have creation history data, removed Key, Namespaces, and SourceString</summary>\r\n        VER_UE4_FTEXT_HISTORY,\r\n        /// <summary>Shift comments to the left to contain expressions properly</summary>\r\n        VER_UE4_FIX_MATERIAL_COMMENTS,\r\n        /// <summary>Bone names stored as FName means that we can't guarantee the correct case on export, now we store a separate string for export purposes only</summary>\r\n        VER_UE4_STORE_BONE_EXPORT_NAMES,\r\n        /// <summary>changed mesh emitter initial orientation to distribution</summary>\r\n        VER_UE4_MESH_EMITTER_INITIAL_ORIENTATION_DISTRIBUTION,\r\n        /// <summary>Foliage on blueprints causes crashes</summary>\r\n        VER_UE4_DISALLOW_FOLIAGE_ON_BLUEPRINTS,\r\n        /// <summary>change motors to use revolutions per second instead of rads/second</summary>\r\n        VER_UE4_FIXUP_MOTOR_UNITS,\r\n        /// <summary>deprecated MovementComponent functions including \"ModifiedMaxSpeed\" et al</summary>\r\n        VER_UE4_DEPRECATED_MOVEMENTCOMPONENT_MODIFIED_SPEEDS,\r\n        /// <summary>rename CanBeCharacterBase</summary>\r\n        VER_UE4_RENAME_CANBECHARACTERBASE,\r\n        /// <summary>Change GameplayTagContainers to have FGameplayTags instead of FNames; Required to fix-up native serialization</summary>\r\n        VER_UE4_GAMEPLAY_TAG_CONTAINER_TAG_TYPE_CHANGE,\r\n        /// <summary>Change from UInstancedFoliageSettings to UFoliageType, and change the api from being keyed on UStaticMesh* to UFoliageType*</summary>\r\n        VER_UE4_FOLIAGE_SETTINGS_TYPE,\r\n        /// <summary>Lights serialize static shadow depth maps</summary>\r\n        VER_UE4_STATIC_SHADOW_DEPTH_MAPS,\r\n        /// <summary>Add RF_Transactional to data assets, fixing undo problems when editing them</summary>\r\n        VER_UE4_ADD_TRANSACTIONAL_TO_DATA_ASSETS,\r\n        /// <summary>Change LB_AlphaBlend to LB_WeightBlend in ELandscapeLayerBlendType</summary>\r\n        VER_UE4_ADD_LB_WEIGHTBLEND,\r\n        /// <summary>Add root component to an foliage actor, all foliage cluster components will be attached to a root</summary>\r\n        VER_UE4_ADD_ROOTCOMPONENT_TO_FOLIAGEACTOR,\r\n        /// <summary>FMaterialInstanceBasePropertyOverrides didn't use proper UObject serialize</summary>\r\n        VER_UE4_FIX_MATERIAL_PROPERTY_OVERRIDE_SERIALIZE,\r\n        /// <summary>Addition of linear color sampler. color sample type is changed to linear sampler if source texture !sRGB</summary>\r\n        VER_UE4_ADD_LINEAR_COLOR_SAMPLER,\r\n        /// <summary>Added StringAssetReferencesMap to support renames of FStringAssetReference properties.</summary>\r\n        VER_UE4_ADD_STRING_ASSET_REFERENCES_MAP,\r\n        /// <summary>Apply scale from SCS RootComponent details in the Blueprint Editor to new actor instances at construction time</summary>\r\n        VER_UE4_BLUEPRINT_USE_SCS_ROOTCOMPONENT_SCALE,\r\n        /// <summary>Changed level streaming to have a linear color since the visualization doesn't gamma correct.</summary>\r\n        VER_UE4_LEVEL_STREAMING_DRAW_COLOR_TYPE_CHANGE,\r\n        /// <summary>Cleared end triggers from non-state anim notifies</summary>\r\n        VER_UE4_CLEAR_NOTIFY_TRIGGERS,\r\n        /// <summary>Convert old curve names stored in anim assets into skeleton smartnames</summary>\r\n        VER_UE4_SKELETON_ADD_SMARTNAMES,\r\n        /// <summary>Added the currency code field to FTextHistory_AsCurrency</summary>\r\n        VER_UE4_ADDED_CURRENCY_CODE_TO_FTEXT,\r\n        /// <summary>Added support for C++11 enum classes</summary>\r\n        VER_UE4_ENUM_CLASS_SUPPORT,\r\n        /// <summary>Fixup widget animation class</summary>\r\n        VER_UE4_FIXUP_WIDGET_ANIMATION_CLASS,\r\n        /// <summary>USoundWave objects now contain details about compression scheme used.</summary>\r\n        VER_UE4_SOUND_COMPRESSION_TYPE_ADDED,\r\n        /// <summary>Bodies will automatically weld when attached</summary>\r\n        VER_UE4_AUTO_WELDING,\r\n        /// <summary>Rename UCharacterMovementComponent::bCrouchMovesCharacterDown</summary>\r\n        VER_UE4_RENAME_CROUCHMOVESCHARACTERDOWN,\r\n        /// <summary>Lightmap parameters in FMeshBuildSettings</summary>\r\n        VER_UE4_LIGHTMAP_MESH_BUILD_SETTINGS,\r\n        /// <summary>Rename SM3 to ES3_1 and updates featurelevel material node selector</summary>\r\n        VER_UE4_RENAME_SM3_TO_ES3_1,\r\n        /// <summary>Deprecated separate style assets for use in UMG</summary>\r\n        VER_UE4_DEPRECATE_UMG_STYLE_ASSETS,\r\n        /// <summary>Duplicating Blueprints will regenerate NodeGuids after this version</summary>\r\n        VER_UE4_POST_DUPLICATE_NODE_GUID,\r\n        /// <summary>\r\n        /// Rename USpringArmComponent::bUseControllerViewRotation to bUsePawnViewRotation,\r\n        /// Rename UCameraComponent::bUseControllerViewRotation to bUsePawnViewRotation (and change the default value)\r\n        /// </summary>\r\n        VER_UE4_RENAME_CAMERA_COMPONENT_VIEW_ROTATION,\r\n        /// <summary>Changed FName to be case preserving</summary>\r\n        VER_UE4_CASE_PRESERVING_FNAME,\r\n        /// <summary>\r\n        /// Rename USpringArmComponent::bUsePawnViewRotation to bUsePawnControlRotation,\r\n        /// Rename UCameraComponent::bUsePawnViewRotation to bUsePawnControlRotation\r\n        /// </summary>\r\n        VER_UE4_RENAME_CAMERA_COMPONENT_CONTROL_ROTATION,\r\n        /// <summary>Fix bad refraction material attribute masks</summary>\r\n        VER_UE4_FIX_REFRACTION_INPUT_MASKING,\r\n        /// <summary>A global spawn rate for emitters.</summary>\r\n        VER_UE4_GLOBAL_EMITTER_SPAWN_RATE_SCALE,\r\n        /// <summary>Cleanup destructible mesh settings</summary>\r\n        VER_UE4_CLEAN_DESTRUCTIBLE_SETTINGS,\r\n        /// <summary>CharacterMovementComponent refactor of AdjustUpperHemisphereImpact and deprecation of some associated vars.</summary>\r\n        VER_UE4_CHARACTER_MOVEMENT_UPPER_IMPACT_BEHAVIOR,\r\n        /// <summary>Changed Blueprint math equality functions for vectors and rotators to operate as a \"nearly\" equals rather than \"exact\"</summary>\r\n        VER_UE4_BP_MATH_VECTOR_EQUALITY_USES_EPSILON,\r\n        /// <summary>Static lighting support was re-added to foliage, and mobility was returned to static</summary>\r\n        VER_UE4_FOLIAGE_STATIC_LIGHTING_SUPPORT,\r\n        /// <summary>Added composite fonts to Slate font info</summary>\r\n        VER_UE4_SLATE_COMPOSITE_FONTS,\r\n        /// <summary>Remove UDEPRECATED_SaveGameSummary, required for UWorld::Serialize</summary>\r\n        VER_UE4_REMOVE_SAVEGAMESUMMARY,\r\n\r\n        /// <summary>Remove bodyseutp serialization from skeletal mesh component</summary>\r\n        VER_UE4_REMOVE_SKELETALMESH_COMPONENT_BODYSETUP_SERIALIZATION,\r\n        /// <summary>Made Slate font data use bulk data to store the embedded font data</summary>\r\n        VER_UE4_SLATE_BULK_FONT_DATA,\r\n        /// <summary>Add new friction behavior in ProjectileMovementComponent.</summary>\r\n        VER_UE4_ADD_PROJECTILE_FRICTION_BEHAVIOR,\r\n        /// <summary>Add axis settings enum to MovementComponent.</summary>\r\n        VER_UE4_MOVEMENTCOMPONENT_AXIS_SETTINGS,\r\n        /// <summary>Switch to new interactive comments, requires boundry conversion to preserve previous states</summary>\r\n        VER_UE4_GRAPH_INTERACTIVE_COMMENTBUBBLES,\r\n        /// <summary>Landscape serializes physical materials for collision objects </summary>\r\n        VER_UE4_LANDSCAPE_SERIALIZE_PHYSICS_MATERIALS,\r\n        /// <summary>Rename Visiblity on widgets to Visibility</summary>\r\n        VER_UE4_RENAME_WIDGET_VISIBILITY,\r\n        /// <summary>add track curves for animation</summary>\r\n        VER_UE4_ANIMATION_ADD_TRACKCURVES,\r\n        /// <summary>Removed BranchingPoints from AnimMontages and converted them to regular AnimNotifies.</summary>\r\n        VER_UE4_MONTAGE_BRANCHING_POINT_REMOVAL,\r\n        /// <summary>Enforce const-correctness in Blueprint implementations of native C++ const class methods</summary>\r\n        VER_UE4_BLUEPRINT_ENFORCE_CONST_IN_FUNCTION_OVERRIDES,\r\n        /// <summary>Added pivot to widget components, need to load old versions as a 0,0 pivot, new default is 0.5,0.5</summary>\r\n        VER_UE4_ADD_PIVOT_TO_WIDGET_COMPONENT,\r\n        /// <summary>Added finer control over when AI Pawns are automatically possessed. Also renamed Pawn.AutoPossess to Pawn.AutoPossessPlayer indicate this was a setting for players and not AI.</summary>\r\n        VER_UE4_PAWN_AUTO_POSSESS_AI,\r\n        /// <summary>Added serialization of timezone to FTextHistory for AsDate operations.</summary>\r\n        VER_UE4_FTEXT_HISTORY_DATE_TIMEZONE,\r\n        /// <summary>Sort ActiveBoneIndices on lods so that we can avoid doing it at run time</summary>\r\n        VER_UE4_SORT_ACTIVE_BONE_INDICES,\r\n        /// <summary>Added per-frame material uniform expressions</summary>\r\n        VER_UE4_PERFRAME_MATERIAL_UNIFORM_EXPRESSIONS,\r\n        /// <summary>Make MikkTSpace the default tangent space calculation method for static meshes.</summary>\r\n        VER_UE4_MIKKTSPACE_IS_DEFAULT,\r\n        /// <summary>Only applies to cooked files, grass cooking support.</summary>\r\n        VER_UE4_LANDSCAPE_GRASS_COOKING,\r\n        /// <summary>Fixed code for using the bOrientMeshEmitters property.</summary>\r\n        VER_UE4_FIX_SKEL_VERT_ORIENT_MESH_PARTICLES,\r\n        /// <summary>Do not change landscape section offset on load under world composition</summary>\r\n        VER_UE4_LANDSCAPE_STATIC_SECTION_OFFSET,\r\n        /// <summary>New options for navigation data runtime generation (static, modifiers only, dynamic)</summary>\r\n        VER_UE4_ADD_MODIFIERS_RUNTIME_GENERATION,\r\n        /// <summary>Tidied up material's handling of masked blend mode.</summary>\r\n        VER_UE4_MATERIAL_MASKED_BLENDMODE_TIDY,\r\n        /// <summary>Original version of VER_UE4_MERGED_ADD_MODIFIERS_RUNTIME_GENERATION_TO_4_7; renumbered to prevent blocking promotion in main.</summary>\r\n        VER_UE4_MERGED_ADD_MODIFIERS_RUNTIME_GENERATION_TO_4_7_DEPRECATED,\r\n        /// <summary>Original version of VER_UE4_AFTER_MERGED_ADD_MODIFIERS_RUNTIME_GENERATION_TO_4_7; renumbered to prevent blocking promotion in main.</summary>\r\n        VER_UE4_AFTER_MERGED_ADD_MODIFIERS_RUNTIME_GENERATION_TO_4_7_DEPRECATED,\r\n        /// <summary>After merging VER_UE4_ADD_MODIFIERS_RUNTIME_GENERATION into 4.7 branch</summary>\r\n        VER_UE4_MERGED_ADD_MODIFIERS_RUNTIME_GENERATION_TO_4_7,\r\n        /// <summary>After merging VER_UE4_ADD_MODIFIERS_RUNTIME_GENERATION into 4.7 branch</summary>\r\n        VER_UE4_AFTER_MERGING_ADD_MODIFIERS_RUNTIME_GENERATION_TO_4_7,\r\n        /// <summary>Landscape grass weightmap data is now generated in the editor and serialized.</summary>\r\n        VER_UE4_SERIALIZE_LANDSCAPE_GRASS_DATA,\r\n        /// <summary>New property to optionally prevent gpu emitters clearing existing particles on Init().</summary>\r\n        VER_UE4_OPTIONALLY_CLEAR_GPU_EMITTERS_ON_INIT,\r\n        /// <summary>Also store the Material guid with the landscape grass data</summary>\r\n        VER_UE4_SERIALIZE_LANDSCAPE_GRASS_DATA_MATERIAL_GUID,\r\n        /// <summary>Make sure that all template components from blueprint generated classes are flagged as public</summary>\r\n        VER_UE4_BLUEPRINT_GENERATED_CLASS_COMPONENT_TEMPLATES_PUBLIC,\r\n        /// <summary>Split out creation method on ActorComponents to distinguish between native, instance, and simple or user construction script</summary>\r\n        VER_UE4_ACTOR_COMPONENT_CREATION_METHOD,\r\n        /// <summary>K2Node_Event now uses FMemberReference for handling references</summary>\r\n        VER_UE4_K2NODE_EVENT_MEMBER_REFERENCE,\r\n        /// <summary>FPropertyTag stores GUID of struct</summary>\r\n        VER_UE4_STRUCT_GUID_IN_PROPERTY_TAG,\r\n        /// <summary>Remove unused UPolys from UModel cooked content</summary>\r\n        VER_UE4_REMOVE_UNUSED_UPOLYS_FROM_UMODEL,\r\n        /// <summary>This doesn't do anything except trigger a rebuild on HISMC cluster trees, in this case to get a good \"occlusion query\" level</summary>\r\n        VER_UE4_REBUILD_HIERARCHICAL_INSTANCE_TREES,\r\n        /// <summary>Package summary includes an CompatibleWithEngineVersion field, separately to the version it's saved with</summary>\r\n        VER_UE4_PACKAGE_SUMMARY_HAS_COMPATIBLE_ENGINE_VERSION,\r\n        /// <summary>Track UCS modified properties on Actor Components</summary>\r\n        VER_UE4_TRACK_UCS_MODIFIED_PROPERTIES,\r\n        /// <summary>Allowed landscape spline meshes to be stored into landscape streaming levels rather than the spline's level</summary>\r\n        VER_UE4_LANDSCAPE_SPLINE_CROSS_LEVEL_MESHES,\r\n        /// <summary>Deprecate the variables used for sizing in the designer on UUserWidget</summary>\r\n        VER_UE4_DEPRECATE_USER_WIDGET_DESIGN_SIZE,\r\n        /// <summary>Make the editor views array dynamically sized</summary>\r\n        VER_UE4_ADD_EDITOR_VIEWS,\r\n        /// <summary>Updated foliage to work with either FoliageType assets or blueprint classes</summary>\r\n        VER_UE4_FOLIAGE_WITH_ASSET_OR_CLASS,\r\n        /// <summary>Allows PhysicsSerializer to serialize shapes and actors for faster load times</summary>\r\n        VER_UE4_BODYINSTANCE_BINARY_SERIALIZATION,\r\n        /// <summary>Added fastcall data serialization directly in UFunction</summary>\r\n        VER_UE4_SERIALIZE_BLUEPRINT_EVENTGRAPH_FASTCALLS_IN_UFUNCTION,\r\n        /// <summary>Changes to USplineComponent and FInterpCurve</summary>\r\n        VER_UE4_INTERPCURVE_SUPPORTS_LOOPING,\r\n        /// <summary>Material Instances overriding base material LOD transitions</summary>\r\n        VER_UE4_MATERIAL_INSTANCE_BASE_PROPERTY_OVERRIDES_DITHERED_LOD_TRANSITION,\r\n        /// <summary>Serialize ES2 textures separately rather than overwriting the properties used on other platforms</summary>\r\n        VER_UE4_SERIALIZE_LANDSCAPE_ES2_TEXTURES,\r\n        /// <summary>Constraint motor velocity is broken into per-component</summary>\r\n        VER_UE4_CONSTRAINT_INSTANCE_MOTOR_FLAGS,\r\n        /// <summary>Serialize bIsConst in FEdGraphPinType</summary>\r\n        VER_UE4_SERIALIZE_PINTYPE_CONST,\r\n        /// <summary>Change UMaterialFunction::LibraryCategories to LibraryCategoriesText (old assets were saved before auto-conversion of FArrayProperty was possible)</summary>\r\n        VER_UE4_LIBRARY_CATEGORIES_AS_FTEXT,\r\n        /// <summary>Check for duplicate exports while saving packages.</summary>\r\n        VER_UE4_SKIP_DUPLICATE_EXPORTS_ON_SAVE_PACKAGE,\r\n        /// <summary>Pre-gathering of gatherable, localizable text in packages to optimize text gathering operation times</summary>\r\n        VER_UE4_SERIALIZE_TEXT_IN_PACKAGES,\r\n        /// <summary>Added pivot to widget components, need to load old versions as a 0,0 pivot, new default is 0.5,0.5</summary>\r\n        VER_UE4_ADD_BLEND_MODE_TO_WIDGET_COMPONENT,\r\n        /// <summary>Added lightmass primitive setting</summary>\r\n        VER_UE4_NEW_LIGHTMASS_PRIMITIVE_SETTING,\r\n        /// <summary>Deprecate NoZSpring property on spring nodes to be replaced with TranslateZ property</summary>\r\n        VER_UE4_REPLACE_SPRING_NOZ_PROPERTY,\r\n        /// <summary>Keep enums tight and serialize their values as pairs of FName and value. Don't insert dummy values.</summary>\r\n        VER_UE4_TIGHTLY_PACKED_ENUMS,\r\n        /// <summary>Changed Asset import data to serialize file meta data as JSON</summary>\r\n        VER_UE4_ASSET_IMPORT_DATA_AS_JSON,\r\n        /// <summary>Legacy gamma support for textures.</summary>\r\n        VER_UE4_TEXTURE_LEGACY_GAMMA,\r\n        /// <summary>Added WithSerializer for basic native structures like FVector, FColor etc to improve serialization performance</summary>\r\n        VER_UE4_ADDED_NATIVE_SERIALIZATION_FOR_IMMUTABLE_STRUCTURES,\r\n        /// <summary>Deprecated attributes that override the style on UMG widgets</summary>\r\n        VER_UE4_DEPRECATE_UMG_STYLE_OVERRIDES,\r\n        /// <summary>Shadowmap penumbra size stored</summary>\r\n        VER_UE4_STATIC_SHADOWMAP_PENUMBRA_SIZE,\r\n        /// <summary>Fix BC on Niagara effects from the data object and dev UI changes.</summary>\r\n        VER_UE4_NIAGARA_DATA_OBJECT_DEV_UI_FIX,\r\n        /// <summary>Fixed the default orientation of widget component so it faces down +x</summary>\r\n        VER_UE4_FIXED_DEFAULT_ORIENTATION_OF_WIDGET_COMPONENT,\r\n        /// <summary>Removed bUsedWithUI flag from UMaterial and replaced it with a new material domain for UI</summary>\r\n        VER_UE4_REMOVED_MATERIAL_USED_WITH_UI_FLAG,\r\n        /// <summary>Added braking friction separate from turning friction.</summary>\r\n        VER_UE4_CHARACTER_MOVEMENT_ADD_BRAKING_FRICTION,\r\n        /// <summary>Removed TTransArrays from UModel</summary>\r\n        VER_UE4_BSP_UNDO_FIX,\r\n        /// <summary>Added default value to dynamic parameter.</summary>\r\n        VER_UE4_DYNAMIC_PARAMETER_DEFAULT_VALUE,\r\n        /// <summary>Added ExtendedBounds to StaticMesh</summary>\r\n        VER_UE4_STATIC_MESH_EXTENDED_BOUNDS,\r\n        /// <summary>Added non-linear blending to anim transitions, deprecating old types</summary>\r\n        VER_UE4_ADDED_NON_LINEAR_TRANSITION_BLENDS,\r\n        /// <summary>AO Material Mask texture</summary>\r\n        VER_UE4_AO_MATERIAL_MASK,\r\n        /// <summary>Replaced navigation agents selection with single structure</summary>\r\n        VER_UE4_NAVIGATION_AGENT_SELECTOR,\r\n        /// <summary>Mesh particle collisions consider particle size.</summary>\r\n        VER_UE4_MESH_PARTICLE_COLLISIONS_CONSIDER_PARTICLE_SIZE,\r\n        /// <summary>Adjacency buffer building no longer automatically handled based on triangle count, user-controlled</summary>\r\n        VER_UE4_BUILD_MESH_ADJ_BUFFER_FLAG_EXPOSED,\r\n        /// <summary>Change the default max angular velocity</summary>\r\n        VER_UE4_MAX_ANGULAR_VELOCITY_DEFAULT,\r\n        /// <summary>Build Adjacency index buffer for clothing tessellation</summary>\r\n        VER_UE4_APEX_CLOTH_TESSELLATION,\r\n        /// <summary>Added DecalSize member, solved backward compatibility</summary>\r\n        VER_UE4_DECAL_SIZE,\r\n        /// <summary>Keep only package names in StringAssetReferencesMap</summary>\r\n        VER_UE4_KEEP_ONLY_PACKAGE_NAMES_IN_STRING_ASSET_REFERENCES_MAP,\r\n        /// <summary>Support sound cue not saving out editor only data</summary>\r\n        VER_UE4_COOKED_ASSETS_IN_EDITOR_SUPPORT,\r\n        /// <summary>Updated dialogue wave localization gathering logic.</summary>\r\n        VER_UE4_DIALOGUE_WAVE_NAMESPACE_AND_CONTEXT_CHANGES,\r\n        /// <summary>Renamed MakeRot MakeRotator and rearranged parameters.</summary>\r\n        VER_UE4_MAKE_ROT_RENAME_AND_REORDER,\r\n        /// <summary>K2Node_Variable will properly have the VariableReference Guid set if available</summary>\r\n        VER_UE4_K2NODE_VAR_REFERENCEGUIDS,\r\n        /// <summary>Added support for sound concurrency settings structure and overrides</summary>\r\n        VER_UE4_SOUND_CONCURRENCY_PACKAGE,\r\n        /// <summary>Changing the default value for focusable user widgets to false</summary>\r\n        VER_UE4_USERWIDGET_DEFAULT_FOCUSABLE_FALSE,\r\n        /// <summary>Custom event nodes implicitly set 'const' on array and non-array pass-by-reference input params</summary>\r\n        VER_UE4_BLUEPRINT_CUSTOM_EVENT_CONST_INPUT,\r\n        /// <summary>Renamed HighFrequencyGain to LowPassFilterFrequency</summary>\r\n        VER_UE4_USE_LOW_PASS_FILTER_FREQ,\r\n        /// <summary>UAnimBlueprintGeneratedClass can be replaced by a dynamic class. Use TSubclassOf UAnimInstance instead.</summary>\r\n        VER_UE4_NO_ANIM_BP_CLASS_IN_GAMEPLAY_CODE,\r\n        /// <summary>The SCS keeps a list of all nodes in its hierarchy rather than recursively building it each time it is requested</summary>\r\n        VER_UE4_SCS_STORES_ALLNODES_ARRAY,\r\n        /// <summary>Moved StartRange and EndRange in UFbxAnimSequenceImportData to use FInt32Interval</summary>\r\n        VER_UE4_FBX_IMPORT_DATA_RANGE_ENCAPSULATION,\r\n        /// <summary>Adding a new root scene component to camera component</summary>\r\n        VER_UE4_CAMERA_COMPONENT_ATTACH_TO_ROOT,\r\n        /// <summary>Updating custom material expression nodes for instanced stereo implementation</summary>\r\n        VER_UE4_INSTANCED_STEREO_UNIFORM_UPDATE,\r\n        /// <summary>Texture streaming min and max distance to handle HLOD</summary>\r\n        VER_UE4_STREAMABLE_TEXTURE_MIN_MAX_DISTANCE,\r\n        /// <summary>Fixing up invalid struct-to-struct pin connections by injecting available conversion nodes</summary>\r\n        VER_UE4_INJECT_BLUEPRINT_STRUCT_PIN_CONVERSION_NODES,\r\n        /// <summary>Saving tag data for Array Property's inner property</summary>\r\n        VER_UE4_INNER_ARRAY_TAG_INFO,\r\n        /// <summary>Fixed duplicating slot node names in skeleton due to skeleton preload on compile</summary>\r\n        VER_UE4_FIX_SLOT_NAME_DUPLICATION,\r\n        /// <summary>Texture streaming using AABBs instead of Spheres</summary>\r\n        VER_UE4_STREAMABLE_TEXTURE_AABB,\r\n        /// <summary>FPropertyTag stores GUID of property</summary>\r\n        VER_UE4_PROPERTY_GUID_IN_PROPERTY_TAG,\r\n        /// <summary>Name table hashes are calculated and saved out rather than at load time</summary>\r\n        VER_UE4_NAME_HASHES_SERIALIZED,\r\n        /// <summary>Updating custom material expression nodes for instanced stereo implementation refactor</summary>\r\n        VER_UE4_INSTANCED_STEREO_UNIFORM_REFACTOR,\r\n        /// <summary>Added compression to the shader resource for memory savings</summary>\r\n        VER_UE4_COMPRESSED_SHADER_RESOURCES,\r\n        /// <summary>Cooked files contain the dependency graph for the event driven loader (the serialization is largely independent of the use of the new loader)</summary>\r\n        VER_UE4_PRELOAD_DEPENDENCIES_IN_COOKED_EXPORTS,\r\n        /// <summary>Cooked files contain the TemplateIndex used by the event driven loader (the serialization is largely independent of the use of the new loader, i.e. this will be null if cooking for the old loader)</summary>\r\n        VER_UE4_TemplateIndex_IN_COOKED_EXPORTS,\r\n        /// <summary>FPropertyTag includes contained type(s) for Set and Map properties</summary>\r\n        VER_UE4_PROPERTY_TAG_SET_MAP_SUPPORT,\r\n        /// <summary>Added SearchableNames to the package summary and asset registry</summary>\r\n        VER_UE4_ADDED_SEARCHABLE_NAMES,\r\n        /// <summary>Increased size of SerialSize and SerialOffset in export map entries to 64 bit, allow support for bigger files</summary>\r\n        VER_UE4_64BIT_EXPORTMAP_SERIALSIZES,\r\n        /// <summary>Sky light stores IrradianceMap for mobile renderer.</summary>\r\n        VER_UE4_SKYLIGHT_MOBILE_IRRADIANCE_MAP,\r\n        /// <summary>Added flag to control sweep behavior while walking in UCharacterMovementComponent.</summary>\r\n        VER_UE4_ADDED_SWEEP_WHILE_WALKING_FLAG,\r\n        /// <summary>StringAssetReference changed to SoftObjectPath and swapped to serialize as a name+string instead of a string</summary>\r\n        VER_UE4_ADDED_SOFT_OBJECT_PATH,\r\n        /// <summary>Changed the source orientation of point lights to match spot lights (z axis)</summary>\r\n        VER_UE4_POINTLIGHT_SOURCE_ORIENTATION,\r\n        /// <summary>LocalizationId has been added to the package summary (editor-only)</summary>\r\n        VER_UE4_ADDED_PACKAGE_SUMMARY_LOCALIZATION_ID,\r\n        /// <summary>Fixed case insensitive hashes of wide strings containing character values from 128-255</summary>\r\n        VER_UE4_FIX_WIDE_STRING_CRC,\r\n        /// <summary>Added package owner to allow private references</summary>\r\n        VER_UE4_ADDED_PACKAGE_OWNER,\r\n        /// <summary>Changed the data layout for skin weight profile data</summary>\r\n        VER_UE4_SKINWEIGHT_PROFILE_DATA_LAYOUT_CHANGES,\r\n        /// <summary>Added import that can have package different than their outer</summary>\r\n        VER_UE4_NON_OUTER_PACKAGE_IMPORT,\r\n        /// <summary>Added DependencyFlags to AssetRegistry</summary>\r\n        VER_UE4_ASSETREGISTRY_DEPENDENCYFLAGS,\r\n        /// <summary>Fixed corrupt licensee flag in 4.26 assets</summary>\r\n        VER_UE4_CORRECT_LICENSEE_FLAG,\r\n\r\n        VER_UE4_AUTOMATIC_VERSION_PLUS_ONE,\r\n        /// <summary>The newest specified version of the Unreal Engine.</summary>\r\n        VER_UE4_AUTOMATIC_VERSION = VER_UE4_AUTOMATIC_VERSION_PLUS_ONE - 1,\r\n    };\r\n\r\n    /// <summary>\r\n    /// An enum used to represent the global object version of UE5.\r\n    /// </summary>\r\n    public enum ObjectVersionUE5\r\n    {\r\n        UNKNOWN = 0,\r\n\r\n        // The original UE5 version, at the time this was added the UE4 version was 522, so UE5 will start from 1000 to show a clear difference\r\n        INITIAL_VERSION = 1000,\r\n\r\n        // Support stripping names that are not referenced from export data\r\n        NAMES_REFERENCED_FROM_EXPORT_DATA,\r\n\r\n        // Added a payload table of contents to the package summary \r\n        PAYLOAD_TOC,\r\n\r\n        // Added data to identify references from and to optional package\r\n        OPTIONAL_RESOURCES,\r\n\r\n        // Large world coordinates converts a number of core types to double components by default.\r\n        LARGE_WORLD_COORDINATES,\r\n\r\n        // Remove package GUID from FObjectExport\r\n        REMOVE_OBJECT_EXPORT_PACKAGE_GUID,\r\n\r\n        // Add IsInherited to the FObjectExport entry\r\n        TRACK_OBJECT_EXPORT_IS_INHERITED,\r\n\r\n        // Replace FName asset path in FSoftObjectPath with (package name, asset name) pair FTopLevelAssetPath\r\n        FSOFTOBJECTPATH_REMOVE_ASSET_PATH_FNAMES,\r\n\r\n        // Add a soft object path list to the package summary for fast remap\r\n        ADD_SOFTOBJECTPATH_LIST,\r\n\r\n        // Added bulk/data resource table\r\n        DATA_RESOURCES,\r\n\r\n        // Added script property serialization offset to export table entries for saved, versioned packages\r\n        SCRIPT_SERIALIZATION_OFFSET,\r\n\r\n        // Adding property tag extension,\r\n        // Support for overridable serialization on UObject,\r\n        // Support for overridable logic in containers\r\n        PROPERTY_TAG_EXTENSION_AND_OVERRIDABLE_SERIALIZATION,\r\n\r\n        // Added property tag complete type name and serialization type\r\n        PROPERTY_TAG_COMPLETE_TYPE_NAME,\r\n\r\n        // Changed UE::AssetRegistry::WritePackageData to include PackageBuildDependencies\r\n        ASSETREGISTRY_PACKAGEBUILDDEPENDENCIES,\r\n        \r\n        // Added meta data serialization offset to for saved, versioned packages\r\n        METADATA_SERIALIZATION_OFFSET,\r\n\r\n        // Added VCells to the object graph\r\n        VERSE_CELLS,\r\n\r\n        // Changed PackageFileSummary to write FIoHash PackageSavedHash instead of FGuid Guid\r\n        PACKAGE_SAVED_HASH,\r\n\r\n        // OS shadow serialization of subobjects\r\n        OS_SUB_OBJECT_SHADOW_SERIALIZATION,\r\n\r\n        // -----<new versions can be added before this line>-------------------------------------------------\r\n        // - this needs to be the last line (see note below)\r\n        AUTOMATIC_VERSION_PLUS_ONE,\r\n        AUTOMATIC_VERSION = AUTOMATIC_VERSION_PLUS_ONE - 1\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Core/Math/FIntVector.cs",
    "content": "using System;\nusing UAssetAPI.PropertyTypes.Objects;\n\nnamespace UAssetAPI.UnrealTypes;\n\n/// <summary>\n/// Structure for integer vectors in 3-d space.\n/// </summary>\npublic struct FIntVector : ICloneable, IStruct<FIntVector>\n{\n    public int X;\n    public int Y;\n    public int Z;\n\n    public FIntVector(int x, int y, int z)\n    {\n        X = x;\n        Y = y;\n        Z = z;\n    }\n\n    public FIntVector(AssetBinaryReader reader)\n    {\n        X = reader.ReadInt32();\n        Y = reader.ReadInt32();\n        Z = reader.ReadInt32();\n    }\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        writer.Write(X);\n        writer.Write(Y);\n        writer.Write(Z);\n        return sizeof(int) * 3;\n    }\n\n    public static FIntVector Read(AssetBinaryReader reader) => new FIntVector(reader);\n\n    public object Clone() => new FIntVector(X, Y, Z);\n\n    public static FIntVector FromString(string[] d, UAsset asset)\n    {\n        int.TryParse(d[0], out int X);\n        int.TryParse(d[1], out int Y);\n        int.TryParse(d[2], out int Z);\n        return new FIntVector(X, Y, Z);\n    }\n\n    public override string ToString() => \"(\" + X + \", \" + Y + \", \" + Z + \")\";\n}\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Core/Math/FIntVector2.cs",
    "content": "using System;\nusing UAssetAPI.PropertyTypes.Objects;\n\nnamespace UAssetAPI.UnrealTypes;\n\n/// <summary>\n/// Structure for integer vectors in 2-d space.\n/// </summary>\npublic struct FIntVector2 : ICloneable, IStruct<FIntVector2>\n{\n    public int X;\n    public int Y;\n\n    public FIntVector2(int x, int y)\n    {\n        X = x;\n        Y = y;\n    }\n\n    public FIntVector2(AssetBinaryReader reader)\n    {\n        X = reader.ReadInt32();\n        Y = reader.ReadInt32();\n    }\n\n    public static FIntVector2 Read(AssetBinaryReader reader) => new FIntVector2(reader);\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        writer.Write(X);\n        writer.Write(Y);\n        return sizeof(int) * 2;\n    }\n\n    public object Clone() => new FIntVector2(X, Y);\n\n    public override string ToString() => \"(\" + X + \", \" + Y + \")\";\n\n    public static FIntVector2 FromString(string[] d, UAsset asset)\n    {\n        int.TryParse(d[0], out int X);\n        int.TryParse(d[1], out int Y);\n        return new FIntVector2(X, Y);\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Core/Math/FLinearColor.cs",
    "content": "using Newtonsoft.Json;\nusing System;\nusing System.Drawing;\nusing UAssetAPI.PropertyTypes.Objects;\n\nnamespace UAssetAPI.UnrealTypes;\n\npublic static class LinearHelpers\n{\n    public static Color Convert(FLinearColor color)\n    {\n        float FloatR = UAPUtils.Clamp(color.R, 0.0f, 1.0f);\n        float FloatG = UAPUtils.Clamp(color.G, 0.0f, 1.0f);\n        float FloatB = UAPUtils.Clamp(color.B, 0.0f, 1.0f);\n        float FloatA = UAPUtils.Clamp(color.A, 0.0f, 1.0f);\n\n        FloatR = (float)(FloatR <= 0.0031308f ? FloatR * 12.92f : Math.Pow(FloatR, 1.0f / 2.4f) * 1.055f - 0.055f);\n        FloatG = (float)(FloatG <= 0.0031308f ? FloatG * 12.92f : Math.Pow(FloatG, 1.0f / 2.4f) * 1.055f - 0.055f);\n        FloatB = (float)(FloatB <= 0.0031308f ? FloatB * 12.92f : Math.Pow(FloatB, 1.0f / 2.4f) * 1.055f - 0.055f);\n\n        return Color.FromArgb((byte)Math.Floor(FloatA * 255.999f), (byte)Math.Floor(FloatR * 255.999f), (byte)Math.Floor(FloatG * 255.999f), (byte)Math.Floor(FloatB * 255.999f));\n    }\n}\n\n/// <summary>\n/// A linear, 32-bit/component floating point RGBA color.\n/// </summary>\npublic struct FLinearColor : ICloneable, IStruct<FLinearColor>\n{\n    [JsonProperty]\n    public float R;\n    [JsonProperty]\n    public float G;\n    [JsonProperty]\n    public float B;\n    [JsonProperty]\n    public float A;\n\n    public FLinearColor(float R, float G, float B, float A)\n    {\n        this.R = R;\n        this.G = G;\n        this.B = B;\n        this.A = A;\n    }\n\n    public object Clone() => new FLinearColor(this.R, this.G, this.B, this.A);\n\n    public FLinearColor(AssetBinaryReader reader)\n    {\n        R = reader.ReadSingle();\n        G = reader.ReadSingle();\n        B = reader.ReadSingle();\n        A = reader.ReadSingle();\n    }\n\n    public static FLinearColor Read(AssetBinaryReader reader) => new FLinearColor(reader);\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        writer.Write(R);\n        writer.Write(G);\n        writer.Write(B);\n        writer.Write(A);\n        return sizeof(float) * 4;\n    }\n\n    public override string ToString() => \"(\" + R + \", \" + G + \", \" + B + \", \" + A + \")\";\n\n    public static FLinearColor FromString(string[] d, UAsset asset)\n    {\n        float.TryParse(d[0], out float R);\n        float.TryParse(d[1], out float G);\n        float.TryParse(d[2], out float B);\n        float.TryParse(d[3], out float A);\n        return new FLinearColor(R, G, B, A);\n    }\n}"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Core/Math/FMatrix.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\n\nnamespace UAssetAPI.UnrealTypes;\n\n/// <summary>\n/// 4x4 matrix of floating point values.\n/// </summary>\npublic struct FMatrix : IStruct<FMatrix>\n{\n    public FPlane XPlane;\n    public FPlane YPlane;\n    public FPlane ZPlane;\n    public FPlane WPlane;\n\n    public FMatrix(FPlane xPlane, FPlane yPlane, FPlane zPlane, FPlane wPlane)\n    {\n        XPlane = xPlane;\n        YPlane = yPlane;\n        ZPlane = zPlane;\n        WPlane = wPlane;\n    }\n\n    public FMatrix(AssetBinaryReader reader)\n    {\n        XPlane = new FPlane(reader);\n        YPlane = new FPlane(reader);\n        ZPlane = new FPlane(reader);\n        WPlane = new FPlane(reader);\n    }\n\n    public static FMatrix Read(AssetBinaryReader reader) => new FMatrix(reader);\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        var size = XPlane.Write(writer);\n        size += YPlane.Write(writer);\n        size += ZPlane.Write(writer);\n        size += WPlane.Write(writer);\n        return size;\n    }\n\n    public static FMatrix FromString(string[] d, UAsset asset)\n    {\n        throw new System.NotImplementedException();\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Core/Math/FPlane.cs",
    "content": "using Newtonsoft.Json;\nusing UAssetAPI.JSON;\nusing UAssetAPI.PropertyTypes.Objects;\n\nnamespace UAssetAPI.UnrealTypes;\n\n/// <summary>\n/// Structure for three dimensional planes.\n/// Stores the coeffecients as Xx+Yy+Zz=W.\n/// This is different from many other Plane classes that use Xx+Yy+Zz+W=0.\n/// </summary>\n[JsonObject(MemberSerialization.OptIn)]\npublic struct FPlane : IStruct<FPlane>\n{\n    private float? _x1;\n    private double _x2;\n    private float? _y1;\n    private double _y2;\n    private float? _z1;\n    private double _z2;\n    private float? _w1;\n    private double _w2;\n\n    /// <summary>The plane's X-component.</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double X\n    {\n        get\n        {\n            return _x1 == null ? _x2 : (double)_x1;\n        }\n        set\n        {\n            _x1 = null;\n            _x2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float XFloat => _x1 == null ? (float)_x2 : (float)_x1;\n\n    /// <summary>The plane's Y-component.</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double Y\n    {\n        get\n        {\n            return _y1 == null ? _y2 : (double)_y1;\n        }\n        set\n        {\n            _y1 = null;\n            _y2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float YFloat => _y1 == null ? (float)_y2 : (float)_y1;\n\n    /// <summary>The plane's Z-component.</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double Z\n    {\n        get\n        {\n            return _z1 == null ? _z2 : (double)_z1;\n        }\n        set\n        {\n            _z1 = null;\n            _z2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float ZFloat => _z1 == null ? (float)_z2 : (float)_z1;\n\n    /// <summary>The plane's W-component.</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double W\n    {\n        get\n        {\n            return _w1 == null ? _w2 : (double)_w1;\n        }\n        set\n        {\n            _w1 = null;\n            _w2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float WFloat => _w1 == null ? (float)_w2 : (float)_w1;\n\n    public FPlane(double x, double y, double z, double w)\n    {\n        _x1 = null; _y1 = null; _z1 = null; _w1 = null;\n        _x2 = x;\n        _y2 = y;\n        _z2 = z;\n        _w2 = w;\n    }\n\n    public FPlane(float x, float y, float z, float w)\n    {\n        _x2 = 0; _y2 = 0; _z2 = 0; _w2 = 0;\n        _x1 = x;\n        _y1 = y;\n        _z1 = z;\n        _w1 = w;\n    }\n\n    public FPlane(AssetBinaryReader reader)\n    {\n        if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES)\n        {\n            _x1 = null; _y1 = null; _z1 = null; _w1 = null;\n            _x2 = reader.ReadDouble();\n            _y2 = reader.ReadDouble();\n            _z2 = reader.ReadDouble();\n            _w2 = reader.ReadDouble();\n        }\n        else\n        {\n            _x2 = 0; _y2 = 0; _z2 = 0; _w2 = 0;\n            _x1 = reader.ReadSingle();\n            _y1 = reader.ReadSingle();\n            _z1 = reader.ReadSingle();\n            _w1 = reader.ReadSingle();\n        }\n    }\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        if (writer.Asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES)\n        {\n            writer.Write(_x2);\n            writer.Write(_y2);\n            writer.Write(_z2);\n            writer.Write(_w2);\n            return sizeof(double) * 4;\n        }\n        else\n        {\n            writer.Write(XFloat);\n            writer.Write(YFloat);\n            writer.Write(ZFloat);\n            writer.Write(WFloat);\n            return sizeof(float) * 4;\n        }\n    }\n\n    public static FPlane Read(AssetBinaryReader reader) => new FPlane(reader);\n\n    public override string ToString() => \"(\" + X + \", \" + Y + \", \" + Z + \", \" + W + \")\";\n    public static FPlane FromString(string[] d, UAsset asset)\n    {\n        double.TryParse(d[0], out double X);\n        double.TryParse(d[1], out double Y);\n        double.TryParse(d[2], out double Z);\n        double.TryParse(d[3], out double W);\n        return new FPlane(X, Y, Z, W);\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Core/Math/FQuat.cs",
    "content": "using Newtonsoft.Json;\nusing UAssetAPI.JSON;\nusing UAssetAPI.PropertyTypes.Objects;\n\nnamespace UAssetAPI.UnrealTypes;\n\n/// <summary>\n/// Floating point quaternion that can represent a rotation about an axis in 3-D space.\n/// The X, Y, Z, W components also double as the Axis/Angle format.\n/// </summary>\n[JsonObject(MemberSerialization.OptIn)]\npublic struct FQuat : IStruct<FQuat>\n{\n    private float? _x1;\n    private double _x2;\n    private float? _y1;\n    private double _y2;\n    private float? _z1;\n    private double _z2;\n    private float? _w1;\n    private double _w2;\n\n    /// <summary>The quaternion's X-component.</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double X\n    {\n        get\n        {\n            return _x1 == null ? _x2 : (double)_x1;\n        }\n        set\n        {\n            _x1 = null;\n            _x2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float XFloat => _x1 == null ? (float)_x2 : (float)_x1;\n\n    /// <summary>The quaternion's Y-component.</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double Y\n    {\n        get\n        {\n            return _y1 == null ? _y2 : (double)_y1;\n        }\n        set\n        {\n            _y1 = null;\n            _y2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float YFloat => _y1 == null ? (float)_y2 : (float)_y1;\n\n    /// <summary>The quaternion's Z-component.</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double Z\n    {\n        get\n        {\n            return _z1 == null ? _z2 : (double)_z1;\n        }\n        set\n        {\n            _z1 = null;\n            _z2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float ZFloat => _z1 == null ? (float)_z2 : (float)_z1;\n\n    /// <summary>The quaternion's W-component.</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double W\n    {\n        get\n        {\n            return _w1 == null ? _w2 : (double)_w1;\n        }\n        set\n        {\n            _w1 = null;\n            _w2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float WFloat => _w1 == null ? (float)_w2 : (float)_w1;\n\n    public FQuat(double x, double y, double z, double w)\n    {\n        _x1 = null; _y1 = null; _z1 = null; _w1 = null;\n        _x2 = x;\n        _y2 = y;\n        _z2 = z;\n        _w2 = w;\n    }\n\n    public FQuat(float x, float y, float z, float w)\n    {\n        _x2 = 0; _y2 = 0; _z2 = 0; _w2 = 0;\n        _x1 = x;\n        _y1 = y;\n        _z1 = z;\n        _w1 = w;\n    }\n\n    public FQuat(AssetBinaryReader reader)\n    {\n        if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES)\n        {\n            _x1 = null; _y1 = null; _z1 = null; _w1 = null;\n            _x2 = reader.ReadDouble();\n            _y2 = reader.ReadDouble();\n            _z2 = reader.ReadDouble();\n            _w2 = reader.ReadDouble();\n        }\n        else\n        {\n            _x2 = 0; _y2 = 0; _z2 = 0; _w2 = 0;\n            _x1 = reader.ReadSingle();\n            _y1 = reader.ReadSingle();\n            _z1 = reader.ReadSingle();\n            _w1 = reader.ReadSingle();\n        }\n    }\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        if (writer.Asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES)\n        {\n            writer.Write(X);\n            writer.Write(Y);\n            writer.Write(Z);\n            writer.Write(W);\n            return sizeof(double) * 4;\n        }\n        else\n        {\n            writer.Write(XFloat);\n            writer.Write(YFloat);\n            writer.Write(ZFloat);\n            writer.Write(WFloat);\n            return sizeof(float) * 4;\n        }\n    }\n\n    public static FQuat Read(AssetBinaryReader reader) => new FQuat(reader);\n\n    public override string ToString() => \"(\" + X + \", \" + Y + \", \" + Z + \", \" + W + \")\";\n\n    public static FQuat FromString(string[] d, UAsset asset)\n    {\n        double.TryParse(d[0], out double X);\n        double.TryParse(d[1], out double Y);\n        double.TryParse(d[2], out double Z);\n        double.TryParse(d[3], out double W);\n        return new FQuat(X, Y, Z, W);\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Core/Math/FRotator.cs",
    "content": "using Newtonsoft.Json;\nusing UAssetAPI.JSON;\nusing UAssetAPI.PropertyTypes.Objects;\n\nnamespace UAssetAPI.UnrealTypes;\n\n/// <summary>\n/// Implements a container for rotation information.\n/// All rotation values are stored in degrees.\n/// </summary>\n[JsonObject(MemberSerialization.OptIn)]\npublic struct FRotator : IStruct<FRotator>\n{\n    private float? _pitch1;\n    private double _pitch2;\n    private float? _yaw1;\n    private double _yaw2;\n    private float? _roll1;\n    private double _roll2;\n\n    /// <summary>Rotation around the right axis (around Y axis), Looking up and down (0=Straight Ahead, +Up, -Down)</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double Pitch\n    {\n        get\n        {\n            return _pitch1 == null ? _pitch2 : (double)_pitch1;\n        }\n        set\n        {\n            _pitch1 = null;\n            _pitch2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float PitchFloat => _pitch1 == null ? (float)_pitch2 : (float)_pitch1;\n\n    /// <summary>Rotation around the up axis (around Z axis), Running in circles 0=East, +North, -South.</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double Yaw\n    {\n        get\n        {\n            return _yaw1 == null ? _yaw2 : (double)_yaw1;\n        }\n        set\n        {\n            _yaw1 = null;\n            _yaw2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float YawFloat => _yaw1 == null ? (float)_yaw2 : (float)_yaw1;\n\n    /// <summary>Rotation around the forward axis (around X axis), Tilting your head, 0=Straight, +Clockwise, -CCW.</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double Roll\n    {\n        get\n        {\n            return _roll1 == null ? _roll2 : (double)_roll1;\n        }\n        set\n        {\n            _roll1 = null;\n            _roll2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float RollFloat => _roll1 == null ? (float)_roll2 : (float)_roll1;\n\n    public FRotator(double pitch, double yaw, double roll)\n    {\n        _pitch1 = null; _yaw1 = null; _roll1 = null;\n        _pitch2 = pitch;\n        _yaw2 = yaw;\n        _roll2 = roll;\n    }\n\n    public FRotator(float pitch, float yaw, float roll)\n    {\n        _pitch2 = 0; _yaw2 = 0; _roll2 = 0;\n        _pitch1 = pitch;\n        _yaw1 = yaw;\n        _roll1 = roll;\n    }\n\n    public FRotator(AssetBinaryReader reader)\n    {\n        if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES)\n        {\n            _pitch1 = null; _yaw1 = null; _roll1 = null;\n            _pitch2 = reader.ReadDouble();\n            _yaw2 = reader.ReadDouble();\n            _roll2 = reader.ReadDouble();\n        }\n        else\n        {\n            _pitch2 = 0; _yaw2 = 0; _roll2 = 0;\n            _pitch1 = reader.ReadSingle();\n            _yaw1 = reader.ReadSingle();\n            _roll1 = reader.ReadSingle();\n        }\n    }\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        if (writer.Asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES)\n        {\n            writer.Write(Pitch);\n            writer.Write(Yaw);\n            writer.Write(Roll);\n            return sizeof(double) * 3;\n        }\n        else\n        {\n            writer.Write(PitchFloat);\n            writer.Write(YawFloat);\n            writer.Write(RollFloat);\n            return sizeof(float) * 3;\n        }\n    }\n\n    public static FRotator Read(AssetBinaryReader reader) => new FRotator(reader);\n\n    public override string ToString() => $\"({Roll}, {Pitch}, {Yaw})\";\n\n    public static FRotator FromString(string[] d, UAsset asset)\n    {\n        double.TryParse(d[0], out double Roll);\n        double.TryParse(d[1], out double Pitch);\n        double.TryParse(d[2], out double Yaw);\n        return new FRotator(Pitch, Yaw, Roll);\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Core/Math/FTransform.cs",
    "content": "﻿namespace UAssetAPI.UnrealTypes;\n\n/// <summary>\n/// Transform composed of Scale, Rotation (as a quaternion), and Translation.\n/// Transforms can be used to convert from one space to another, for example by transforming\n/// positions and directions from local space to world space.\n/// \n/// Transformation of position vectors is applied in the order:  Scale -> Rotate -> Translate.\n/// Transformation of direction vectors is applied in the order: Scale -> Rotate.\n/// \n/// Order matters when composing transforms: C = A * B will yield a transform C that logically\n/// first applies A then B to any subsequent transformation. Note that this is the opposite order of quaternion (FQuat) multiplication.\n/// \n/// Example: LocalToWorld = (DeltaRotation * LocalToWorld) will change rotation in local space by DeltaRotation.\n/// Example: LocalToWorld = (LocalToWorld * DeltaRotation) will change rotation in world space by DeltaRotation.\n/// </summary>\npublic struct FTransform\n{\n    /// <summary>\n    /// Rotation of this transformation, as a quaternion\n    /// </summary>\n    public FQuat Rotation;\n\n    /// <summary>\n    /// Translation of this transformation, as a vector.\n    /// </summary>\n    public FVector Translation;\n\n    /// <summary>\n    /// 3D scale (always applied in local space) as a vector.\n    /// </summary>\n    public FVector Scale3D;\n\n    public FTransform(FQuat rotation, FVector translation, FVector scale3D)\n    {\n        Rotation = rotation;\n        Translation = translation;\n        Scale3D = scale3D;\n    }\n\n    public FTransform(AssetBinaryReader reader)\n    {\n        Rotation = new FQuat(reader);\n        Translation = new FVector(reader);\n        Scale3D = new FVector(reader);\n    }\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        int size = 0;\n        size += Rotation.Write(writer);\n        size += Translation.Write(writer);\n        size += Scale3D.Write(writer);\n        return size;\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Core/Math/FTwoVectors.cs",
    "content": "using UAssetAPI.PropertyTypes.Objects;\n\nnamespace UAssetAPI.UnrealTypes;\n\npublic struct FTwoVectors : IStruct<FTwoVectors>\n{\n    public FVector V1;\n    public FVector V2;\n\n    public FTwoVectors(FVector v1, FVector v2)\n    {\n        V1 = v1;\n        V2 = v2;\n    }\n\n    public FTwoVectors(AssetBinaryReader reader)\n    {\n        V1 = new FVector(reader);\n        V2 = new FVector(reader);\n    }\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        var size = V1.Write(writer);\n        size += V2.Write(writer);\n        return size;\n    }\n\n    public static FTwoVectors Read(AssetBinaryReader reader) => new FTwoVectors(reader);\n\n    public override string ToString()\n    {\n        return $\"({V1}, {V2})\";\n    }\n\n    public static FTwoVectors FromString(string[] d, UAsset asset)\n    {\n        throw new System.NotImplementedException();\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Core/Math/FVector.cs",
    "content": "using Newtonsoft.Json;\nusing System;\nusing UAssetAPI.JSON;\nusing UAssetAPI.PropertyTypes.Objects;\n\nnamespace UAssetAPI.UnrealTypes;\n\n/// <summary>\n/// A vector in 3-D space composed of components (X, Y, Z) with floating/double point precision.\n/// </summary>\npublic struct FVector : ICloneable, IStruct<FVector>\n{\n    private float? _x1;\n    private double _x2;\n    private float? _y1;\n    private double _y2;\n    private float? _z1;\n    private double _z2;\n\n    /// <summary>The vector's X-component.</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double X\n    {\n        get\n        {\n            return _x1 == null ? _x2 : (double)_x1;\n        }\n        set\n        {\n            _x1 = null;\n            _x2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float XFloat => _x1 == null ? (float)_x2 : (float)_x1;\n\n    /// <summary>The vector's Y-component.</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double Y\n    {\n        get\n        {\n            return _y1 == null ? _y2 : (double)_y1;\n        }\n        set\n        {\n            _y1 = null;\n            _y2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float YFloat => _y1 == null ? (float)_y2 : (float)_y1;\n\n    /// <summary>The vector's Z-component.</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double Z\n    {\n        get\n        {\n            return _z1 == null ? _z2 : (double)_z1;\n        }\n        set\n        {\n            _z1 = null;\n            _z2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float ZFloat => _z1 == null ? (float)_z2 : (float)_z1;\n\n    public FVector(double x, double y, double z)\n    {\n        _x1 = null; _y1 = null; _z1 = null;\n        _x2 = x;\n        _y2 = y;\n        _z2 = z;\n    }\n\n    public FVector(float x, float y, float z)\n    {\n        _x2 = 0; _y2 = 0; _z2 = 0;\n        _x1 = x;\n        _y1 = y;\n        _z1 = z;\n    }\n\n    public FVector(AssetBinaryReader reader)\n    {\n        if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES)\n        {\n            _x1 = null; _y1 = null; _z1 = null;\n            _x2 = reader.ReadDouble();\n            _y2 = reader.ReadDouble();\n            _z2 = reader.ReadDouble();\n        }\n        else\n        {\n            _x2 = 0; _y2 = 0; _z2 = 0;\n            _x1 = reader.ReadSingle();\n            _y1 = reader.ReadSingle();\n            _z1 = reader.ReadSingle();\n        }\n    }\n\n    public static FVector Read(AssetBinaryReader reader) => new FVector(reader);\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        if (writer.Asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES)\n        {\n            writer.Write(X);\n            writer.Write(Y);\n            writer.Write(Z);\n            return sizeof(double) * 3;\n        }\n        else\n        {\n            writer.Write(XFloat);\n            writer.Write(YFloat);\n            writer.Write(ZFloat);\n            return sizeof(float) * 3;\n        }\n    }\n\n    public object Clone()\n    {\n        if (_x1 != null)\n        {\n            return new FVector((float)_x1, (float)_y1, (float)_z1);\n        }\n        else\n        {\n            return new FVector(_x2, _y2, _z2);\n        }\n    }\n\n    public static FVector FromString(string[] d, UAsset asset)\n    {\n        double.TryParse(d[0], out double X);\n        double.TryParse(d[1], out double Y);\n        double.TryParse(d[2], out double Z);\n        return new FVector(X, Y, Z);\n    }\n\n    public override string ToString()\n    {\n        return \"(\" + X + \", \" + Y + \", \" + Z + \")\";\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Core/Math/FVector2D.cs",
    "content": "using Newtonsoft.Json;\nusing UAssetAPI.JSON;\nusing UAssetAPI.PropertyTypes.Objects;\n\nnamespace UAssetAPI.UnrealTypes;\n\n/// <summary>\n/// A vector in 2-D space composed of components (X, Y) with floating/double point precision.\n/// </summary>\npublic struct FVector2D : IStruct<FVector2D>\n{\n    private float? _x1;\n    private double _x2;\n    private float? _y1;\n    private double _y2;\n\n    /// <summary>The vector's X-component.</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double X\n    {\n        get\n        {\n            return _x1 == null ? _x2 : (double)_x1;\n        }\n        set\n        {\n            _x1 = null;\n            _x2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float XFloat => _x1 == null ? (float)_x2 : (float)_x1;\n\n    /// <summary>The vector's Y-component.</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double Y\n    {\n        get\n        {\n            return _y1 == null ? _y2 : (double)_y1;\n        }\n        set\n        {\n            _y1 = null;\n            _y2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float YFloat => _y1 == null ? (float)_y2 : (float)_y1;\n\n    public FVector2D(double x, double y)\n    {\n        _x1 = null; _y1 = null;\n        _x2 = x;\n        _y2 = y;\n    }\n\n    public FVector2D(float x, float y, float z)\n    {\n        _x2 = 0; _y2 = 0;\n        _x1 = x;\n        _y1 = y;\n    }\n\n    public FVector2D(AssetBinaryReader reader)\n    {\n        if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES)\n        {\n            _x1 = null; _y1 = null;\n            _x2 = reader.ReadDouble();\n            _y2 = reader.ReadDouble();\n        }\n        else\n        {\n            _x2 = 0; _y2 = 0;\n            _x1 = reader.ReadSingle();\n            _y1 = reader.ReadSingle();\n        }\n    }\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        if (writer.Asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES)\n        {\n            writer.Write(X);\n            writer.Write(Y);\n            return sizeof(double) * 2;\n        }\n        else\n        {\n            writer.Write(XFloat);\n            writer.Write(YFloat);\n            return sizeof(float) * 2;\n        }\n    }\n\n    public static FVector2D Read(AssetBinaryReader reader) => new FVector2D(reader);\n\n    public override string ToString() => $\"({X}, {Y})\";\n    public static FVector2D FromString(string[] d, UAsset asset)\n    {\n        double.TryParse(d[0], out double X);\n        double.TryParse(d[1], out double Y);\n        return new FVector2D(X, Y);\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Core/Math/FVector2f.cs",
    "content": "using System;\nusing UAssetAPI.PropertyTypes.Objects;\n\nnamespace UAssetAPI.UnrealTypes;\n\n/// <summary>\n/// A vector in 2-D space composed of components (X, Y) with floating point precision.\n/// </summary>\npublic struct FVector2f : ICloneable, IStruct<FVector2f>\n{\n    public float X;\n    public float Y;\n\n    public FVector2f(float x, float y)\n    {\n        X = x;\n        Y = y;\n    }\n\n    public FVector2f(AssetBinaryReader reader)\n    {\n        X = reader.ReadSingle();\n        Y = reader.ReadSingle();\n    }\n    public static FVector2f Read(AssetBinaryReader reader) => new FVector2f(reader);\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        writer.Write(X);\n        writer.Write(Y);\n        return sizeof(float) * 2;\n    }\n\n    public object Clone() => new FVector2f(X, Y);\n\n    public override string ToString() => $\"({X}, {Y})\";\n    public static FVector2f FromString(string[] d, UAsset asset)\n    {\n        float.TryParse(d[0], out float X);\n        float.TryParse(d[1], out float Y);\n        return new FVector2f(X, Y);\n    }\n}"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Core/Math/FVector3f.cs",
    "content": "using Newtonsoft.Json.Linq;\nusing System;\nusing UAssetAPI.PropertyTypes.Objects;\n\nnamespace UAssetAPI.UnrealTypes;\n\n/// <summary>\n/// A vector in 3-D space composed of components (X, Y, Z) with floating point precision.\n/// </summary>\npublic struct FVector3f : ICloneable, IStruct<FVector3f>\n{\n    public float X;\n    public float Y;\n    public float Z;\n\n    public FVector3f(float x, float y, float z)\n    {\n        X = x;\n        Y = y;\n        Z = z;\n    }\n\n    public FVector3f(AssetBinaryReader reader)\n    {\n        X = reader.ReadSingle();\n        Y = reader.ReadSingle();\n        Z = reader.ReadSingle();\n    }\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        writer.Write(X);\n        writer.Write(Y);\n        writer.Write(Z);\n        return sizeof(float) * 3;\n    }\n\n    public object Clone() => new FVector3f(X, Y, Z);\n\n    public static FVector3f Read(AssetBinaryReader reader) => new FVector3f(reader);\n\n    public override string ToString() => $\"({X}, {Y}, {Z})\";\n\n    public static FVector3f FromString(string[] d, UAsset asset)\n    {\n        float.TryParse(d[0], out float X);\n        float.TryParse(d[1], out float Y);\n        float.TryParse(d[2], out float Z);\n        return new FVector3f(X, Y, Z);\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Core/Math/FVector4.cs",
    "content": "using Newtonsoft.Json;\nusing UAssetAPI.JSON;\nusing UAssetAPI.PropertyTypes.Objects;\n\nnamespace UAssetAPI.UnrealTypes;\n\n/// <summary>\n/// A vector in 4-D space composed of components (X, Y, Z, W) with floating/double point precision.\n/// </summary>\npublic struct FVector4: IStruct<FVector4>\n{\n    private float? _x1;\n    private double _x2;\n    private float? _y1;\n    private double _y2;\n    private float? _z1;\n    private double _z2;\n    private float? _w1;\n    private double _w2;\n\n    /// <summary>The vector's X-component.</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double X\n    {\n        get\n        {\n            return _x1 == null ? _x2 : (double)_x1;\n        }\n        set\n        {\n            _x1 = null;\n            _x2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float XFloat => _x1 == null ? (float)_x2 : (float)_x1;\n\n    /// <summary>The vector's Y-component.</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double Y\n    {\n        get\n        {\n            return _y1 == null ? _y2 : (double)_y1;\n        }\n        set\n        {\n            _y1 = null;\n            _y2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float YFloat => _y1 == null ? (float)_y2 : (float)_y1;\n\n    /// <summary>The vector's Z-component.</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double Z\n    {\n        get\n        {\n            return _z1 == null ? _z2 : (double)_z1;\n        }\n        set\n        {\n            _z1 = null;\n            _z2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float ZFloat => _z1 == null ? (float)_z2 : (float)_z1;\n\n    /// <summary>The vector's W-component.</summary>\n    [JsonProperty]\n    [JsonConverter(typeof(FSignedZeroJsonConverter))]\n    public double W\n    {\n        get\n        {\n            return _w1 == null ? _w2 : (double)_w1;\n        }\n        set\n        {\n            _w1 = null;\n            _w2 = value;\n        }\n    }\n\n    [JsonIgnore]\n    public float WFloat => _w1 == null ? (float)_w2 : (float)_w1;\n\n    public FVector4(double x, double y, double z, double w)\n    {\n        _x1 = null; _y1 = null; _z1 = null; _w1 = null;\n        _x2 = x;\n        _y2 = y;\n        _z2 = z;\n        _w2 = w;\n    }\n\n    public FVector4(float x, float y, float z, float w)\n    {\n        _x2 = 0; _y2 = 0; _z2 = 0; _w2 = 0;\n        _x1 = x;\n        _y1 = y;\n        _z1 = z;\n        _w1 = w;\n    }\n\n    public FVector4(AssetBinaryReader reader)\n    {\n        if (reader.Asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES)\n        {\n            _x1 = null; _y1 = null; _z1 = null; _w1 = null;\n            _x2 = reader.ReadDouble();\n            _y2 = reader.ReadDouble();\n            _z2 = reader.ReadDouble();\n            _w2 = reader.ReadDouble();\n        }\n        else\n        {\n            _x2 = 0; _y2 = 0; _z2 = 0; _w2 = 0;\n            _x1 = reader.ReadSingle();\n            _y1 = reader.ReadSingle();\n            _z1 = reader.ReadSingle();\n            _w1 = reader.ReadSingle();\n        }\n    }\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        if (writer.Asset.ObjectVersionUE5 >= ObjectVersionUE5.LARGE_WORLD_COORDINATES)\n        {\n            writer.Write(_x2);\n            writer.Write(_y2);\n            writer.Write(_z2);\n            writer.Write(_w2);\n            return sizeof(double) * 4;\n        }\n        else\n        {\n            writer.Write(XFloat);\n            writer.Write(YFloat);\n            writer.Write(ZFloat);\n            writer.Write(WFloat);\n            return sizeof(float) * 4;\n        }\n    }\n\n    public static FVector4 Read(AssetBinaryReader reader) => new FVector4(reader);\n\n    public override string ToString() => $\"({X}, {Y}, {Z}, {W})\";\n\n    public static FVector4 FromString(string[] d, UAsset asset)\n    {\n        double.TryParse(d[0], out double X);\n        double.TryParse(d[1], out double Y);\n        double.TryParse(d[2], out double Z);\n        double.TryParse(d[3], out double W);\n        return new FVector4(X, Y, Z, W);\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Core/Math/FVector4f.cs",
    "content": "using System;\nusing UAssetAPI.PropertyTypes.Objects;\n\nnamespace UAssetAPI.UnrealTypes;\n\n/// <summary>\n/// A vector in 4-D space composed of components (X, Y, Z, W) with floating point precision.\n/// </summary>\npublic struct FVector4f : ICloneable, IStruct<FVector4f>\n{\n    public float X;\n    public float Y;\n    public float Z;\n    public float W;\n\n    public FVector4f(float x, float y, float z, float w)\n    {\n        X = x;\n        Y = y;\n        Z = z;\n        W = w;\n    }\n\n    public FVector4f(AssetBinaryReader reader)\n    {\n        X = reader.ReadSingle();\n        Y = reader.ReadSingle();\n        Z = reader.ReadSingle();\n        W = reader.ReadSingle();\n    }\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        writer.Write(X);\n        writer.Write(Y);\n        writer.Write(Z);\n        writer.Write(W);\n        return sizeof(float) * 4;\n    }\n\n    public object Clone() => new FVector4f(X, Y, Z, W);\n\n    public static FVector4f Read(AssetBinaryReader reader) => new FVector4f(reader);\n\n    public override string ToString() => $\"({X}, {Y}, {Z}, {W})\";\n\n    public static FVector4f FromString(string[] d, UAsset asset)\n    {\n        float.TryParse(d[0], out float X);\n        float.TryParse(d[1], out float Y);\n        float.TryParse(d[2], out float Z);\n        float.TryParse(d[3], out float W);\n        return new FVector4f(X, Y, Z, W);\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Core/Math/TBox.cs",
    "content": "﻿using System;\n\nnamespace UAssetAPI.UnrealTypes;\n\n/// <summary>\n/// Axis-aligned box collision geometry. Consists of a core AABB with a margin.\n/// The margin should be considered physically part of the * box - it pads the faces and rounds the corners.\n/// </summary>\n/// <typeparam name=\"T\"></typeparam>\npublic struct TBox<T> : ICloneable\n{\n    public T Min;\n    public T Max;\n    public byte IsValid;\n\n    public TBox(T min, T max, byte isValid)\n    {\n        Min = min;\n        Max = max;\n        IsValid = isValid;\n    }\n\n    public TBox(AssetBinaryReader reader, Func<T> valueReader)\n    {\n        Min = valueReader();\n        Max = valueReader();\n        IsValid = reader.ReadByte();\n    }\n\n    public int Write(AssetBinaryWriter writer, Action<T> valueWriter)\n    {\n        var offset = writer.BaseStream.Position;\n        valueWriter(Min);\n        valueWriter(Max);\n        writer.Write(IsValid);\n        return (int)(writer.BaseStream.Position - offset);\n    }\n\n    public object Clone() => new TBox<T>(Min, Max, IsValid);\n}\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Core/Math/TPerQualityLevel.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace UAssetAPI.UnrealTypes;\n\npublic struct TPerQualityLevel<T>\n{\n    public bool bCooked;\n    public T Default;\n    public Dictionary<int, T> PerQuality;\n\n    public TPerQualityLevel(bool _bCooked, T _default, Dictionary<int, T> perQuality)\n    {\n        bCooked = _bCooked;\n        Default = _default;\n        PerQuality = perQuality;\n    }\n\n    public TPerQualityLevel(AssetBinaryReader reader, Func<T> valueReader)\n    {\n        bCooked = reader.ReadBooleanInt();\n        Default = valueReader();\n        PerQuality = [];\n        int numElements = reader.ReadInt32();\n        for (int i = 0; i < numElements; i++)\n        {\n            PerQuality[reader.ReadInt32()] = valueReader();\n        }\n    }\n\n    public int Write(AssetBinaryWriter writer, Action<T> valueWriter)\n    {\n        var offset = writer.BaseStream.Position;\n        writer.Write(bCooked ? 1 : 0);\n        valueWriter(Default);\n        writer.Write(PerQuality?.Count ?? 0);\n        if (PerQuality != null)\r\n        {\r\n            foreach (var pair in PerQuality)\r\n            {\r\n                writer.Write(pair.Key);\r\n                valueWriter(pair.Value);\r\n            }\r\n        }\n        return (int)(writer.BaseStream.Position - offset);\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Engine/CoreUObject/CoreUObjectEnums.cs",
    "content": "﻿namespace UAssetAPI.UnrealTypes;\n\r\npublic enum EInterpCurveMode : byte {\n\tCIM_Linear = 0,\n\tCIM_CurveAuto = 1,\n\tCIM_Constant = 2,\n\tCIM_CurveUser = 3,\n\tCIM_CurveBreak = 4,\n\tCIM_CurveAutoClamped = 5,\r\n    CIM_Unknown = 6\n};\n\npublic enum ERangeBoundTypes : byte {\n\tExclusive = 0,\n\tInclusive = 1,\n\tOpen = 2,\n};\n\npublic enum EAxis : byte {\n\tNone = 0,\n\tX = 1,\n\tY = 2,\n\tZ = 3,\n};"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Engine/CoreUObject/CoreUObjectStructs.cs",
    "content": "using System;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\n\r\nnamespace UAssetAPI.UnrealTypes;\r\n\r\npublic struct TRange<T>\r\n{\r\n    public TRangeBound<T> LowerBound;\r\n    public TRangeBound<T> UpperBound;\r\n\r\n    public TRange(TRangeBound<T> lowerBound, TRangeBound<T> upperBound)\r\n    {\r\n        LowerBound = lowerBound;\r\n        UpperBound = upperBound;\r\n    }\r\n\r\n    public TRange(AssetBinaryReader reader, Func<T> valueReader)\r\n    {\r\n        LowerBound = new TRangeBound<T>(reader, valueReader);\r\n        UpperBound = new TRangeBound<T>(reader, valueReader);\r\n    }\r\n\r\n    public void Write(AssetBinaryWriter writer, Action<T> valueWriter)\r\n    {\r\n        LowerBound.Write(writer, valueWriter);\r\n        UpperBound.Write(writer, valueWriter);\r\n    }\r\n}\r\n\r\n/// <summary>\r\n/// Template for range bounds.\r\n/// </summary>\r\npublic struct TRangeBound<T>\r\n{\r\n    public ERangeBoundTypes Type;\r\n    public T Value;\r\n\r\n    public TRangeBound()\r\n    {\r\n\r\n    }\r\n\r\n    public TRangeBound(ERangeBoundTypes type, T value)\r\n    {\r\n        Type = type;\r\n        Value = value;\r\n    }\r\n\r\n    public TRangeBound(AssetBinaryReader reader, Func<T> valueReader)\r\n    {\r\n        Type = reader == null ? ERangeBoundTypes.Exclusive : (ERangeBoundTypes)reader.ReadByte();\r\n        Value = valueReader();\r\n    }\r\n\r\n    public void Write(AssetBinaryWriter writer, Action<T> valueWriter)\r\n    {\r\n        writer.Write((byte)Type);\r\n        valueWriter(Value);\r\n    }\r\n}\r\n\r\npublic struct FFrameNumber : IStruct<FFrameNumber>\r\n{\r\n    public int Value;\r\n\r\n    public FFrameNumber() { }\r\n\r\n    public FFrameNumber(int value)\r\n    {\r\n        Value = value;\r\n    }\r\n\r\n    public FFrameNumber(AssetBinaryReader reader)\r\n    {\r\n        Value = reader?.ReadInt32() ?? 0;\r\n    }\r\n\r\n    public static FFrameNumber Read(AssetBinaryReader reader) => new FFrameNumber(reader);\r\n\r\n    public int Write(AssetBinaryWriter writer)\r\n    {\r\n        writer.Write(Value);\r\n        return sizeof(int);\r\n    }\r\n\r\n    public static FFrameNumber FromString(string[] d, UAsset asset)\r\n    {\r\n        if (int.TryParse(d[0], out int val)) return new FFrameNumber(val);\r\n        return new FFrameNumber();\r\n    }\r\n}\r\n\r\npublic struct FFrameRate\r\n{\r\n    public int Numerator;\r\n    public int Denominator;\r\n\r\n    public FFrameRate() { }\r\n\r\n    public FFrameRate(int numerator, int denominator)\r\n    {\r\n        Numerator = numerator;\r\n        Denominator = denominator;\r\n    }\r\n\r\n    public FFrameRate(AssetBinaryReader reader)\r\n    {\r\n        Numerator = reader.ReadInt32();\r\n        Denominator = reader.ReadInt32();\r\n    }\r\n\r\n    public void Write(AssetBinaryWriter writer)\r\n    {\r\n        writer.Write(Numerator);\r\n        writer.Write(Denominator);\r\n    }\r\n\r\n    public override string ToString()\r\n    {\r\n        return Numerator.ToString() + \"/\" + Denominator.ToString();\r\n    }\r\n\r\n    public static bool TryParse(string s, out FFrameRate result)\r\n    {\r\n        result = new FFrameRate();\r\n        string[] parts = s.Trim().Split('/');\r\n\r\n        if (parts.Length != 2) return false;\r\n        if (!int.TryParse(parts[0], out int numer)) return false;\r\n        if (!int.TryParse(parts[1], out int denom)) return false;\r\n\r\n        result = new FFrameRate(numer, denom);\r\n        return true;\r\n    }\r\n}\r\n\r\npublic struct FFrameTime\r\n{\r\n    public FFrameNumber FrameNumber;\r\n    public float SubFrame;\r\n\r\n    public FFrameTime() { }\r\n\r\n    public FFrameTime(FFrameNumber frameNumber, float subFrame)\r\n    {\r\n        FrameNumber = frameNumber;\r\n        SubFrame = subFrame;\r\n    }\r\n\r\n    public FFrameTime(AssetBinaryReader reader)\r\n    {\r\n        FrameNumber = new FFrameNumber(reader);\r\n        SubFrame = reader.ReadSingle();\r\n    }\r\n\r\n    public void Write(AssetBinaryWriter writer)\r\n    {\r\n        FrameNumber.Write(writer);\r\n        writer.Write(SubFrame);\r\n    }\r\n}\r\n\r\npublic struct FQualifiedFrameTime\r\n{\r\n    public FFrameTime Time;\r\n    public FFrameRate Rate;\r\n\r\n    public FQualifiedFrameTime() { }\r\n\r\n    public FQualifiedFrameTime(FFrameTime time, FFrameRate rate)\r\n    {\r\n        Time = time;\r\n        Rate = rate;\r\n    }\r\n\r\n    public FQualifiedFrameTime(AssetBinaryReader reader)\r\n    {\r\n        Time = new FFrameTime(reader);\r\n        Rate = new FFrameRate(reader);\r\n    }\r\n\r\n    public void Write(AssetBinaryWriter writer)\r\n    {\r\n        Time.Write(writer);\r\n        Rate.Write(writer);\r\n    }\r\n}\r\n\r\npublic struct FTimecode\r\n{\r\n    public int Hours;\r\n    public int Minutes;\r\n    public int Seconds;\r\n    public int Frames;\r\n    public bool bDropFrameFormat;\r\n\r\n    public FTimecode() { }\r\n\r\n    public FTimecode(int hours, int minutes, int seconds, int frames, bool bDropFrameFormat)\r\n    {\r\n        Hours = hours;\r\n        Minutes = minutes;\r\n        Seconds = seconds;\r\n        Frames = frames;\r\n        this.bDropFrameFormat = bDropFrameFormat;\r\n    }\r\n\r\n    public FTimecode(AssetBinaryReader reader)\r\n    {\r\n        Hours = reader.ReadInt32();\r\n        Minutes = reader.ReadInt32();\r\n        Seconds = reader.ReadInt32();\r\n        Frames = reader.ReadInt32();\r\n        bDropFrameFormat = reader.ReadBoolean();\r\n    }\r\n\r\n    public void Write(AssetBinaryWriter writer)\r\n    {\r\n        writer.Write(Hours);\r\n        writer.Write(Minutes);\r\n        writer.Write(Seconds);\r\n        writer.Write(Frames);\r\n        writer.Write(bDropFrameFormat);\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Engine/EngineEnums.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing System.IO;\r\nusing UAssetAPI.PropertyTypes;\r\n\r\nnamespace UAssetAPI.UnrealTypes.EngineEnums\r\n{\r\n\r\n\t// Enum Engine.ETextGender\r\n\tpublic enum ETextGender : byte {\r\n\t\tMasculine = 0,\r\n\t\tFeminine = 1,\r\n\t\tNeuter = 2,\r\n\t\tETextGender_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EFormatArgumentType\r\n\tpublic enum EFormatArgumentType : byte {\r\n\t\tInt = 0,\r\n\t\tUInt = 1,\r\n\t\tFloat = 2,\r\n\t\tDouble = 3,\r\n\t\tText = 4,\r\n\t\tGender = 5,\r\n\t\tEFormatArgumentType_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.EEndPlayReason\r\n\tpublic enum EEndPlayReason : byte {\r\n\t\tDestroyed = 0,\r\n\t\tLevelTransition = 1,\r\n\t\tEndPlayInEditor = 2,\r\n\t\tRemovedFromWorld = 3,\r\n\t\tQuit = 4,\r\n\t\tEEndPlayReason_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.ETickingGroup\r\n\tpublic enum ETickingGroup : byte {\r\n\t\tTG_PrePhysics = 0,\r\n\t\tTG_StartPhysics = 1,\r\n\t\tTG_DuringPhysics = 2,\r\n\t\tTG_EndPhysics = 3,\r\n\t\tTG_PostPhysics = 4,\r\n\t\tTG_PostUpdateWork = 5,\r\n\t\tTG_LastDemotable = 6,\r\n\t\tTG_NewlySpawned = 7,\r\n\t\tTG_MAX = 8\r\n\t};\r\n\r\n\t// Enum Engine.EComponentCreationMethod\r\n\tpublic enum EComponentCreationMethod : byte {\r\n\t\tNative = 0,\r\n\t\tSimpleConstructionScript = 1,\r\n\t\tUserConstructionScript = 2,\r\n\t\tInstance = 3,\r\n\t\tEComponentCreationMethod_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.ETemperatureSeverityType\r\n\tpublic enum ETemperatureSeverityType : byte {\r\n\t\tUnknown = 0,\r\n\t\tGood = 1,\r\n\t\tBad = 2,\r\n\t\tSerious = 3,\r\n\t\tCritical = 4,\r\n\t\tNumSeverities = 5,\r\n\t\tETemperatureSeverityType_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.EPlaneConstraintAxisSetting\r\n\tpublic enum EPlaneConstraintAxisSetting : byte {\r\n\t\tCustom = 0,\r\n\t\tX = 1,\r\n\t\tY = 2,\r\n\t\tZ = 3,\r\n\t\tUseGlobalPhysicsSetting = 4,\r\n\t\tEPlaneConstraintAxisSetting_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EInterpToBehaviourType\r\n\tpublic enum EInterpToBehaviourType : byte {\r\n\t\tOneShot = 0,\r\n\t\tOneShot_Reverse = 1,\r\n\t\tLoop_Reset = 2,\r\n\t\tPingPong = 3,\r\n\t\tEInterpToBehaviourType_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.ETeleportType\r\n\tpublic enum ETeleportType : byte {\r\n\t\tNone = 0,\r\n\t\tTeleportPhysics = 1,\r\n\t\tResetPhysics = 2,\r\n\t\tETeleportType_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EPlatformInterfaceDataType\r\n\tpublic enum EPlatformInterfaceDataType : byte {\r\n\t\tPIDT_None = 0,\r\n\t\tPIDT_Int = 1,\r\n\t\tPIDT_Float = 2,\r\n\t\tPIDT_String = 3,\r\n\t\tPIDT_Object = 4,\r\n\t\tPIDT_Custom = 5,\r\n\t\tPIDT_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.EMovementMode\r\n\tpublic enum EMovementMode : byte {\r\n\t\tMOVE_None = 0,\r\n\t\tMOVE_Walking = 1,\r\n\t\tMOVE_NavWalking = 2,\r\n\t\tMOVE_Falling = 3,\r\n\t\tMOVE_Swimming = 4,\r\n\t\tMOVE_Flying = 5,\r\n\t\tMOVE_Custom = 6,\r\n\t\tMOVE_MAX = 7\r\n\t};\r\n\r\n\t// Enum Engine.ENetworkFailure\r\n\tpublic enum ENetworkFailure : byte {\r\n\t\tNetDriverAlreadyExists = 0,\r\n\t\tNetDriverCreateFailure = 1,\r\n\t\tNetDriverListenFailure = 2,\r\n\t\tConnectionLost = 3,\r\n\t\tConnectionTimeout = 4,\r\n\t\tFailureReceived = 5,\r\n\t\tOutdatedClient = 6,\r\n\t\tOutdatedServer = 7,\r\n\t\tPendingConnectionFailure = 8,\r\n\t\tNetGuidMismatch = 9,\r\n\t\tNetChecksumMismatch = 10,\r\n\t\tENetworkFailure_MAX = 11\r\n\t};\r\n\r\n\t// Enum Engine.ETravelFailure\r\n\tpublic enum ETravelFailure : byte {\r\n\t\tNoLevel = 0,\r\n\t\tLoadMapFailure = 1,\r\n\t\tInvalidURL = 2,\r\n\t\tPackageMissing = 3,\r\n\t\tPackageVersion = 4,\r\n\t\tNoDownload = 5,\r\n\t\tTravelFailure = 6,\r\n\t\tCheatCommands = 7,\r\n\t\tPendingNetGameCreateFailure = 8,\r\n\t\tCloudSaveFailure = 9,\r\n\t\tServerTravelFailure = 10,\r\n\t\tClientTravelFailure = 11,\r\n\t\tETravelFailure_MAX = 12\r\n\t};\r\n\r\n\t// Enum Engine.EScreenOrientation\r\n\tpublic enum EScreenOrientation : byte {\r\n\t\tUnknown = 0,\r\n\t\tPortrait = 1,\r\n\t\tPortraitUpsideDown = 2,\r\n\t\tLandscapeLeft = 3,\r\n\t\tLandscapeRight = 4,\r\n\t\tFaceUp = 5,\r\n\t\tFaceDown = 6,\r\n\t\tEScreenOrientation_MAX = 7\r\n\t};\r\n\r\n\t// Enum Engine.EApplicationState\r\n\tpublic enum EApplicationState : byte {\r\n\t\tUnknown = 0,\r\n\t\tInactive = 1,\r\n\t\tBackground = 2,\r\n\t\tActive = 3,\r\n\t\tEApplicationState_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EObjectTypeQuery\r\n\tpublic enum EObjectTypeQuery : byte {\r\n\t\tObjectTypeQuery1 = 0,\r\n\t\tObjectTypeQuery2 = 1,\r\n\t\tObjectTypeQuery3 = 2,\r\n\t\tObjectTypeQuery4 = 3,\r\n\t\tObjectTypeQuery5 = 4,\r\n\t\tObjectTypeQuery6 = 5,\r\n\t\tObjectTypeQuery7 = 6,\r\n\t\tObjectTypeQuery8 = 7,\r\n\t\tObjectTypeQuery9 = 8,\r\n\t\tObjectTypeQuery10 = 9,\r\n\t\tObjectTypeQuery11 = 10,\r\n\t\tObjectTypeQuery12 = 11,\r\n\t\tObjectTypeQuery13 = 12,\r\n\t\tObjectTypeQuery14 = 13,\r\n\t\tObjectTypeQuery15 = 14,\r\n\t\tObjectTypeQuery16 = 15,\r\n\t\tObjectTypeQuery17 = 16,\r\n\t\tObjectTypeQuery18 = 17,\r\n\t\tObjectTypeQuery19 = 18,\r\n\t\tObjectTypeQuery20 = 19,\r\n\t\tObjectTypeQuery21 = 20,\r\n\t\tObjectTypeQuery22 = 21,\r\n\t\tObjectTypeQuery23 = 22,\r\n\t\tObjectTypeQuery24 = 23,\r\n\t\tObjectTypeQuery25 = 24,\r\n\t\tObjectTypeQuery26 = 25,\r\n\t\tObjectTypeQuery27 = 26,\r\n\t\tObjectTypeQuery28 = 27,\r\n\t\tObjectTypeQuery29 = 28,\r\n\t\tObjectTypeQuery30 = 29,\r\n\t\tObjectTypeQuery31 = 30,\r\n\t\tObjectTypeQuery32 = 31,\r\n\t\tObjectTypeQuery_MAX = 32,\r\n\t\tEObjectTypeQuery_MAX = 33\r\n\t};\r\n\r\n\t// Enum Engine.EDrawDebugTrace\r\n\tpublic enum EDrawDebugTrace : byte {\r\n\t\tNone = 0,\r\n\t\tForOneFrame = 1,\r\n\t\tForDuration = 2,\r\n\t\tPersistent = 3,\r\n\t\tEDrawDebugTrace_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.ETraceTypeQuery\r\n\tpublic enum ETraceTypeQuery : byte {\r\n\t\tTraceTypeQuery1 = 0,\r\n\t\tTraceTypeQuery2 = 1,\r\n\t\tTraceTypeQuery3 = 2,\r\n\t\tTraceTypeQuery4 = 3,\r\n\t\tTraceTypeQuery5 = 4,\r\n\t\tTraceTypeQuery6 = 5,\r\n\t\tTraceTypeQuery7 = 6,\r\n\t\tTraceTypeQuery8 = 7,\r\n\t\tTraceTypeQuery9 = 8,\r\n\t\tTraceTypeQuery10 = 9,\r\n\t\tTraceTypeQuery11 = 10,\r\n\t\tTraceTypeQuery12 = 11,\r\n\t\tTraceTypeQuery13 = 12,\r\n\t\tTraceTypeQuery14 = 13,\r\n\t\tTraceTypeQuery15 = 14,\r\n\t\tTraceTypeQuery16 = 15,\r\n\t\tTraceTypeQuery17 = 16,\r\n\t\tTraceTypeQuery18 = 17,\r\n\t\tTraceTypeQuery19 = 18,\r\n\t\tTraceTypeQuery20 = 19,\r\n\t\tTraceTypeQuery21 = 20,\r\n\t\tTraceTypeQuery22 = 21,\r\n\t\tTraceTypeQuery23 = 22,\r\n\t\tTraceTypeQuery24 = 23,\r\n\t\tTraceTypeQuery25 = 24,\r\n\t\tTraceTypeQuery26 = 25,\r\n\t\tTraceTypeQuery27 = 26,\r\n\t\tTraceTypeQuery28 = 27,\r\n\t\tTraceTypeQuery29 = 28,\r\n\t\tTraceTypeQuery30 = 29,\r\n\t\tTraceTypeQuery31 = 30,\r\n\t\tTraceTypeQuery32 = 31,\r\n\t\tTraceTypeQuery_MAX = 32,\r\n\t\tETraceTypeQuery_MAX = 33\r\n\t};\r\n\r\n\t// Enum Engine.EMoveComponentAction\r\n\tpublic enum EMoveComponentAction : byte {\r\n\t\tMove = 0,\r\n\t\tStop = 1,\r\n\t\tReturn = 2,\r\n\t\tEMoveComponentAction_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EQuitPreference\r\n\tpublic enum EQuitPreference : byte {\r\n\t\tQuit = 0,\r\n\t\tBackground = 1,\r\n\t\tEQuitPreference_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ERelativeTransformSpace\r\n\tpublic enum ERelativeTransformSpace : byte {\r\n\t\tRTS_World = 0,\r\n\t\tRTS_Actor = 1,\r\n\t\tRTS_Component = 2,\r\n\t\tRTS_ParentBoneSpace = 3,\r\n\t\tRTS_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EAttachLocation\r\n\tpublic enum EAttachLocation : byte {\r\n\t\tKeepRelativeOffset = 0,\r\n\t\tKeepWorldPosition = 1,\r\n\t\tSnapToTarget = 2,\r\n\t\tSnapToTargetIncludingScale = 3,\r\n\t\tEAttachLocation_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EAttachmentRule\r\n\tpublic enum EAttachmentRule : byte {\r\n\t\tKeepRelative = 0,\r\n\t\tKeepWorld = 1,\r\n\t\tSnapToTarget = 2,\r\n\t\tEAttachmentRule_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EDetachmentRule\r\n\tpublic enum EDetachmentRule : byte {\r\n\t\tKeepRelative = 0,\r\n\t\tKeepWorld = 1,\r\n\t\tEDetachmentRule_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EComponentMobility\r\n\tpublic enum EComponentMobility : byte {\r\n\t\tStatic = 0,\r\n\t\tStationary = 1,\r\n\t\tMovable = 2,\r\n\t\tEComponentMobility_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EDetailMode\r\n\tpublic enum EDetailMode : byte {\r\n\t\tDM_Low = 0,\r\n\t\tDM_Medium = 1,\r\n\t\tDM_High = 2,\r\n\t\tDM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ENetRole\r\n\tpublic enum ENetRole : byte {\r\n\t\tROLE_None = 0,\r\n\t\tROLE_SimulatedProxy = 1,\r\n\t\tROLE_AutonomousProxy = 2,\r\n\t\tROLE_Authority = 3,\r\n\t\tROLE_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.ENetDormancy\r\n\tpublic enum ENetDormancy : byte {\r\n\t\tDORM_Never = 0,\r\n\t\tDORM_Awake = 1,\r\n\t\tDORM_DormantAll = 2,\r\n\t\tDORM_DormantPartial = 3,\r\n\t\tDORM_Initial = 4,\r\n\t\tDORM_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EAutoReceiveInput\r\n\tpublic enum EAutoReceiveInput : byte {\r\n\t\tDisabled = 0,\r\n\t\tPlayer0 = 1,\r\n\t\tPlayer1 = 2,\r\n\t\tPlayer2 = 3,\r\n\t\tPlayer3 = 4,\r\n\t\tPlayer4 = 5,\r\n\t\tPlayer5 = 6,\r\n\t\tPlayer6 = 7,\r\n\t\tPlayer7 = 8,\r\n\t\tEAutoReceiveInput_MAX = 9\r\n\t};\r\n\r\n\t// Enum Engine.ESpawnActorCollisionHandlingMethod\r\n\tpublic enum ESpawnActorCollisionHandlingMethod : byte {\r\n\t\tUndefined = 0,\r\n\t\tAlwaysSpawn = 1,\r\n\t\tAdjustIfPossibleButAlwaysSpawn = 2,\r\n\t\tAdjustIfPossibleButDontSpawnIfColliding = 3,\r\n\t\tDontSpawnIfColliding = 4,\r\n\t\tESpawnActorCollisionHandlingMethod_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.ERotatorQuantization\r\n\tpublic enum ERotatorQuantization : byte {\r\n\t\tByteComponents = 0,\r\n\t\tShortComponents = 1,\r\n\t\tERotatorQuantization_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EVectorQuantization\r\n\tpublic enum EVectorQuantization : byte {\r\n\t\tRoundWholeNumber = 0,\r\n\t\tRoundOneDecimal = 1,\r\n\t\tRoundTwoDecimals = 2,\r\n\t\tEVectorQuantization_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EActorUpdateOverlapsMethod\r\n\tpublic enum EActorUpdateOverlapsMethod : byte {\r\n\t\tUseConfigDefault = 0,\r\n\t\tAlwaysUpdate = 1,\r\n\t\tOnlyUpdateMovable = 2,\r\n\t\tNeverUpdate = 3,\r\n\t\tEActorUpdateOverlapsMethod_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EAutoPossessAI\r\n\tpublic enum EAutoPossessAI : byte {\r\n\t\tDisabled = 0,\r\n\t\tPlacedInWorld = 1,\r\n\t\tSpawned = 2,\r\n\t\tPlacedInWorldOrSpawned = 3,\r\n\t\tEAutoPossessAI_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EPhysicalSurface\r\n\tpublic enum EPhysicalSurface : byte {\r\n\t\tSurfaceType_Default = 0,\r\n\t\tSurfaceType1 = 1,\r\n\t\tSurfaceType2 = 2,\r\n\t\tSurfaceType3 = 3,\r\n\t\tSurfaceType4 = 4,\r\n\t\tSurfaceType5 = 5,\r\n\t\tSurfaceType6 = 6,\r\n\t\tSurfaceType7 = 7,\r\n\t\tSurfaceType8 = 8,\r\n\t\tSurfaceType9 = 9,\r\n\t\tSurfaceType10 = 10,\r\n\t\tSurfaceType11 = 11,\r\n\t\tSurfaceType12 = 12,\r\n\t\tSurfaceType13 = 13,\r\n\t\tSurfaceType14 = 14,\r\n\t\tSurfaceType15 = 15,\r\n\t\tSurfaceType16 = 16,\r\n\t\tSurfaceType17 = 17,\r\n\t\tSurfaceType18 = 18,\r\n\t\tSurfaceType19 = 19,\r\n\t\tSurfaceType20 = 20,\r\n\t\tSurfaceType21 = 21,\r\n\t\tSurfaceType22 = 22,\r\n\t\tSurfaceType23 = 23,\r\n\t\tSurfaceType24 = 24,\r\n\t\tSurfaceType25 = 25,\r\n\t\tSurfaceType26 = 26,\r\n\t\tSurfaceType27 = 27,\r\n\t\tSurfaceType28 = 28,\r\n\t\tSurfaceType29 = 29,\r\n\t\tSurfaceType30 = 30,\r\n\t\tSurfaceType31 = 31,\r\n\t\tSurfaceType32 = 32,\r\n\t\tSurfaceType33 = 33,\r\n\t\tSurfaceType34 = 34,\r\n\t\tSurfaceType35 = 35,\r\n\t\tSurfaceType36 = 36,\r\n\t\tSurfaceType37 = 37,\r\n\t\tSurfaceType38 = 38,\r\n\t\tSurfaceType39 = 39,\r\n\t\tSurfaceType40 = 40,\r\n\t\tSurfaceType41 = 41,\r\n\t\tSurfaceType42 = 42,\r\n\t\tSurfaceType43 = 43,\r\n\t\tSurfaceType44 = 44,\r\n\t\tSurfaceType45 = 45,\r\n\t\tSurfaceType46 = 46,\r\n\t\tSurfaceType47 = 47,\r\n\t\tSurfaceType48 = 48,\r\n\t\tSurfaceType49 = 49,\r\n\t\tSurfaceType50 = 50,\r\n\t\tSurfaceType51 = 51,\r\n\t\tSurfaceType52 = 52,\r\n\t\tSurfaceType53 = 53,\r\n\t\tSurfaceType54 = 54,\r\n\t\tSurfaceType55 = 55,\r\n\t\tSurfaceType56 = 56,\r\n\t\tSurfaceType57 = 57,\r\n\t\tSurfaceType58 = 58,\r\n\t\tSurfaceType59 = 59,\r\n\t\tSurfaceType60 = 60,\r\n\t\tSurfaceType61 = 61,\r\n\t\tSurfaceType62 = 62,\r\n\t\tSurfaceType_Max = 63,\r\n\t\tEPhysicalSurface_MAX = 64\r\n\t};\r\n\r\n\t// Enum Engine.EMouseLockMode\r\n\tpublic enum EMouseLockMode : byte {\r\n\t\tDoNotLock = 0,\r\n\t\tLockOnCapture = 1,\r\n\t\tLockAlways = 2,\r\n\t\tLockInFullscreen = 3,\r\n\t\tEMouseLockMode_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EWindowTitleBarMode\r\n\tpublic enum EWindowTitleBarMode : byte {\r\n\t\tOverlay = 0,\r\n\t\tVerticalBox = 1,\r\n\t\tEWindowTitleBarMode_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EAlphaBlendOption\r\n\tpublic enum EAlphaBlendOption : byte {\r\n\t\tLinear = 0,\r\n\t\tCubic = 1,\r\n\t\tHermiteCubic = 2,\r\n\t\tSinusoidal = 3,\r\n\t\tQuadraticInOut = 4,\r\n\t\tCubicInOut = 5,\r\n\t\tQuarticInOut = 6,\r\n\t\tQuinticInOut = 7,\r\n\t\tCircularIn = 8,\r\n\t\tCircularOut = 9,\r\n\t\tCircularInOut = 10,\r\n\t\tExpIn = 11,\r\n\t\tExpOut = 12,\r\n\t\tExpInOut = 13,\r\n\t\tCustom = 14,\r\n\t\tEAlphaBlendOption_MAX = 15\r\n\t};\r\n\r\n\t// Enum Engine.EAnimGroupRole\r\n\tpublic enum EAnimGroupRole : byte {\r\n\t\tCanBeLeader = 0,\r\n\t\tAlwaysFollower = 1,\r\n\t\tAlwaysLeader = 2,\r\n\t\tTransitionLeader = 3,\r\n\t\tTransitionFollower = 4,\r\n\t\tEAnimGroupRole_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EPreviewAnimationBlueprintApplicationMethod\r\n\tpublic enum EPreviewAnimationBlueprintApplicationMethod : byte {\r\n\t\tLinkedLayers = 0,\r\n\t\tLinkedAnimGraph = 1,\r\n\t\tEPreviewAnimationBlueprintApplicationMethod_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.AnimationKeyFormat\r\n\tpublic enum AnimationKeyFormat : byte {\r\n\t\tAKF_ConstantKeyLerp = 0,\r\n\t\tAKF_VariableKeyLerp = 1,\r\n\t\tAKF_PerTrackCompression = 2,\r\n\t\tAKF_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ERawCurveTrackTypes\r\n\tpublic enum ERawCurveTrackTypes : byte {\r\n\t\tRCT_Float = 0,\r\n\t\tRCT_Vector = 1,\r\n\t\tRCT_Transform = 2,\r\n\t\tRCT_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EAnimAssetCurveFlags\r\n\tpublic enum EAnimAssetCurveFlags : byte {\r\n\t\tAACF_NONE = 0,\r\n\t\tAACF_DriveMorphTarget_DEPRECATED = 1,\r\n\t\tAACF_DriveAttribute_DEPRECATED = 2,\r\n\t\tAACF_Editable = 4,\r\n\t\tAACF_DriveMaterial_DEPRECATED = 8,\r\n\t\tAACF_Metadata = 16,\r\n\t\tAACF_DriveTrack = 32,\r\n\t\tAACF_Disabled = 64,\r\n\t\tAACF_MAX = 65\r\n\t};\r\n\r\n\t// Enum Engine.AnimationCompressionFormat\r\n\tpublic enum AnimationCompressionFormat : byte {\r\n\t\tACF_None = 0,\r\n\t\tACF_Float96NoW = 1,\r\n\t\tACF_Fixed48NoW = 2,\r\n\t\tACF_IntervalFixed32NoW = 3,\r\n\t\tACF_Fixed32NoW = 4,\r\n\t\tACF_Float32NoW = 5,\r\n\t\tACF_Identity = 6,\r\n\t\tACF_MAX = 7\r\n\t};\r\n\r\n\t// Enum Engine.EAdditiveBasePoseType\r\n\tpublic enum EAdditiveBasePoseType : byte {\r\n\t\tABPT_None = 0,\r\n\t\tABPT_RefPose = 1,\r\n\t\tABPT_AnimScaled = 2,\r\n\t\tABPT_AnimFrame = 3,\r\n\t\tABPT_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.ERootMotionMode\r\n\tpublic enum ERootMotionMode : byte {\r\n\t\tNoRootMotionExtraction = 0,\r\n\t\tIgnoreRootMotion = 1,\r\n\t\tRootMotionFromEverything = 2,\r\n\t\tRootMotionFromMontagesOnly = 3,\r\n\t\tERootMotionMode_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.ERootMotionRootLock\r\n\tpublic enum ERootMotionRootLock : byte {\r\n\t\tRefPose = 0,\r\n\t\tAnimFirstFrame = 1,\r\n\t\tZero = 2,\r\n\t\tERootMotionRootLock_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EMontagePlayReturnType\r\n\tpublic enum EMontagePlayReturnType : byte {\r\n\t\tMontageLength = 0,\r\n\t\tDuration = 1,\r\n\t\tEMontagePlayReturnType_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EDrawDebugItemType\r\n\tpublic enum EDrawDebugItemType : byte {\r\n\t\tDirectionalArrow = 0,\r\n\t\tSphere = 1,\r\n\t\tLine = 2,\r\n\t\tOnScreenMessage = 3,\r\n\t\tCoordinateSystem = 4,\r\n\t\tEDrawDebugItemType_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EAnimLinkMethod\r\n\tpublic enum EAnimLinkMethod : byte {\r\n\t\tAbsolute = 0,\r\n\t\tRelative = 1,\r\n\t\tProportional = 2,\r\n\t\tEAnimLinkMethod_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EMontageSubStepResult\r\n\tpublic enum EMontageSubStepResult : byte {\r\n\t\tMoved = 0,\r\n\t\tNotMoved = 1,\r\n\t\tInvalidSection = 2,\r\n\t\tInvalidMontage = 3,\r\n\t\tEMontageSubStepResult_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EAnimNotifyEventType\r\n\tpublic enum EAnimNotifyEventType : byte {\r\n\t\tBegin = 0,\r\n\t\tEnd = 1,\r\n\t\tEAnimNotifyEventType_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EInertializationSpace\r\n\tpublic enum EInertializationSpace : byte {\r\n\t\tDefault = 0,\r\n\t\tWorldSpace = 1,\r\n\t\tWorldRotation = 2,\r\n\t\tEInertializationSpace_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EInertializationBoneState\r\n\tpublic enum EInertializationBoneState : byte {\r\n\t\tInvalid = 0,\r\n\t\tValid = 1,\r\n\t\tExcluded = 2,\r\n\t\tEInertializationBoneState_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EInertializationState\r\n\tpublic enum EInertializationState : byte {\r\n\t\tInactive = 0,\r\n\t\tPending = 1,\r\n\t\tActive = 2,\r\n\t\tEInertializationState_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EEvaluatorMode\r\n\tpublic enum EEvaluatorMode : byte {\r\n\t\tEM_Standard = 0,\r\n\t\tEM_Freeze = 1,\r\n\t\tEM_DelayedFreeze = 2,\r\n\t\tEM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EEvaluatorDataSource\r\n\tpublic enum EEvaluatorDataSource : byte {\r\n\t\tEDS_SourcePose = 0,\r\n\t\tEDS_DestinationPose = 1,\r\n\t\tEDS_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ECopyType\r\n\tpublic enum ECopyType : byte {\r\n\t\tPlainProperty = 0,\r\n\t\tBoolProperty = 1,\r\n\t\tStructProperty = 2,\r\n\t\tObjectProperty = 3,\r\n\t\tNameProperty = 4,\r\n\t\tECopyType_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EPostCopyOperation\r\n\tpublic enum EPostCopyOperation : byte {\r\n\t\tNone = 0,\r\n\t\tLogicalNegateBool = 1,\r\n\t\tEPostCopyOperation_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EPinHidingMode\r\n\tpublic enum EPinHidingMode : byte {\r\n\t\tNeverAsPin = 0,\r\n\t\tPinHiddenByDefault = 1,\r\n\t\tPinShownByDefault = 2,\r\n\t\tAlwaysAsPin = 3,\r\n\t\tEPinHidingMode_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.AnimPhysCollisionType\r\n\tpublic enum AnimPhysCollisionType : byte {\r\n\t\tCoM = 0,\r\n\t\tCustomSphere = 1,\r\n\t\tInnerSphere = 2,\r\n\t\tOuterSphere = 3,\r\n\t\tAnimPhysCollisionType_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.AnimPhysTwistAxis\r\n\tpublic enum AnimPhysTwistAxis : byte {\r\n\t\tAxisX = 0,\r\n\t\tAxisY = 1,\r\n\t\tAxisZ = 2,\r\n\t\tAnimPhysTwistAxis_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ETypeAdvanceAnim\r\n\tpublic enum ETypeAdvanceAnim : byte {\r\n\t\tETAA_Default = 0,\r\n\t\tETAA_Finished = 1,\r\n\t\tETAA_Looped = 2,\r\n\t\tETAA_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ETransitionLogicType\r\n\tpublic enum ETransitionLogicType : byte {\r\n\t\tTLT_StandardBlend = 0,\r\n\t\tTLT_Inertialization = 1,\r\n\t\tTLT_Custom = 2,\r\n\t\tTLT_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ETransitionBlendMode\r\n\tpublic enum ETransitionBlendMode : byte {\r\n\t\tTBM_Linear = 0,\r\n\t\tTBM_Cubic = 1,\r\n\t\tTBM_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EComponentType\r\n\tpublic enum EComponentType : byte {\r\n\t\tNone = 0,\r\n\t\tTranslationX = 1,\r\n\t\tTranslationY = 2,\r\n\t\tTranslationZ = 3,\r\n\t\tRotationX = 4,\r\n\t\tRotationY = 5,\r\n\t\tRotationZ = 6,\r\n\t\tScale = 7,\r\n\t\tScaleX = 8,\r\n\t\tScaleY = 9,\r\n\t\tScaleZ = 10,\r\n\t\tEComponentType_MAX = 11\r\n\t};\r\n\r\n\t// Enum Engine.EAxisOption\r\n\tpublic enum EAxisOption : byte {\r\n\t\tX = 0,\r\n\t\tY = 1,\r\n\t\tZ = 2,\r\n\t\tX_Neg = 3,\r\n\t\tY_Neg = 4,\r\n\t\tZ_Neg = 5,\r\n\t\tCustom = 6,\r\n\t\tEAxisOption_MAX = 7\r\n\t};\r\n\r\n\t// Enum Engine.EAnimInterpolationType\r\n\tpublic enum EAnimInterpolationType : byte {\r\n\t\tLinear = 0,\r\n\t\tStep = 1,\r\n\t\tEAnimInterpolationType_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ECurveBlendOption\r\n\tpublic enum ECurveBlendOption : byte {\r\n\t\tOverride = 0,\r\n\t\tDoNotOverride = 1,\r\n\t\tNormalizeByWeight = 2,\r\n\t\tBlendByWeight = 3,\r\n\t\tUseBasePose = 4,\r\n\t\tUseMaxValue = 5,\r\n\t\tUseMinValue = 6,\r\n\t\tECurveBlendOption_MAX = 7\r\n\t};\r\n\r\n\t// Enum Engine.EAdditiveAnimationType\r\n\tpublic enum EAdditiveAnimationType : byte {\r\n\t\tAAT_None = 0,\r\n\t\tAAT_LocalSpaceBase = 1,\r\n\t\tAAT_RotationOffsetMeshSpace = 2,\r\n\t\tAAT_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ENotifyFilterType\r\n\tpublic enum ENotifyFilterType : byte {\r\n\t\tNoFiltering = 0,\r\n\t\tLOD = 1,\r\n\t\tENotifyFilterType_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EMontageNotifyTickType\r\n\tpublic enum EMontageNotifyTickType : byte {\r\n\t\tQueued = 0,\r\n\t\tBranchingPoint = 1,\r\n\t\tEMontageNotifyTickType_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EBoneRotationSource\r\n\tpublic enum EBoneRotationSource : byte {\r\n\t\tBRS_KeepComponentSpaceRotation = 0,\r\n\t\tBRS_KeepLocalSpaceRotation = 1,\r\n\t\tBRS_CopyFromTarget = 2,\r\n\t\tBRS_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EBoneControlSpace\r\n\tpublic enum EBoneControlSpace : byte {\r\n\t\tBCS_WorldSpace = 0,\r\n\t\tBCS_ComponentSpace = 1,\r\n\t\tBCS_ParentBoneSpace = 2,\r\n\t\tBCS_BoneSpace = 3,\r\n\t\tBCS_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EBoneAxis\r\n\tpublic enum EBoneAxis : byte {\r\n\t\tBA_X = 0,\r\n\t\tBA_Y = 1,\r\n\t\tBA_Z = 2,\r\n\t\tBA_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EPrimaryAssetCookRule\r\n\tpublic enum EPrimaryAssetCookRule : byte {\r\n\t\tUnknown = 0,\r\n\t\tNeverCook = 1,\r\n\t\tDevelopmentCook = 2,\r\n\t\tDevelopmentAlwaysCook = 3,\r\n\t\tAlwaysCook = 4,\r\n\t\tEPrimaryAssetCookRule_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.ENaturalSoundFalloffMode\r\n\tpublic enum ENaturalSoundFalloffMode : byte {\r\n\t\tContinues = 0,\r\n\t\tSilent = 1,\r\n\t\tHold = 2,\r\n\t\tENaturalSoundFalloffMode_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EAttenuationShape\r\n\tpublic enum EAttenuationShape : byte {\r\n\t\tSphere = 0,\r\n\t\tCapsule = 1,\r\n\t\tBox = 2,\r\n\t\tCone = 3,\r\n\t\tEAttenuationShape_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EAttenuationDistanceModel\r\n\tpublic enum EAttenuationDistanceModel : byte {\r\n\t\tLinear = 0,\r\n\t\tLogarithmic = 1,\r\n\t\tInverse = 2,\r\n\t\tLogReverse = 3,\r\n\t\tNaturalSound = 4,\r\n\t\tCustom = 5,\r\n\t\tEAttenuationDistanceModel_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.EAudioFaderCurve\r\n\tpublic enum EAudioFaderCurve : byte {\r\n\t\tLinear = 0,\r\n\t\tLogarithmic = 1,\r\n\t\tSCurve = 2,\r\n\t\tSin = 3,\r\n\t\tCount = 4,\r\n\t\tEAudioFaderCurve_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EAudioComponentPlayState\r\n\tpublic enum EAudioComponentPlayState : byte {\r\n\t\tPlaying = 0,\r\n\t\tStopped = 1,\r\n\t\tPaused = 2,\r\n\t\tFadingIn = 3,\r\n\t\tFadingOut = 4,\r\n\t\tCount = 5,\r\n\t\tEAudioComponentPlayState_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.EAudioOutputTarget\r\n\tpublic enum EAudioOutputTarget : byte {\r\n\t\tSpeaker = 0,\r\n\t\tController = 1,\r\n\t\tControllerFallbackToSpeaker = 2,\r\n\t\tEAudioOutputTarget_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EMonoChannelUpmixMethod\r\n\tpublic enum EMonoChannelUpmixMethod : byte {\r\n\t\tLinear = 0,\r\n\t\tEqualPower = 1,\r\n\t\tFullVolume = 2,\r\n\t\tEMonoChannelUpmixMethod_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EPanningMethod\r\n\tpublic enum EPanningMethod : byte {\r\n\t\tLinear = 0,\r\n\t\tEqualPower = 1,\r\n\t\tEPanningMethod_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EVoiceSampleRate\r\n\tpublic enum EVoiceSampleRate : int {\r\n\t\tLow16000Hz = 16000,\r\n\t\tNormal24000Hz = 24000,\r\n\t\tEVoiceSampleRate_MAX = 24001\r\n\t};\r\n\r\n\t// Enum Engine.EBlendableLocation\r\n\tpublic enum EBlendableLocation : byte {\r\n\t\tBL_AfterTonemapping = 0,\r\n\t\tBL_BeforeTonemapping = 1,\r\n\t\tBL_BeforeTranslucency = 2,\r\n\t\tBL_ReplacingTonemapper = 3,\r\n\t\tBL_SSRInput = 4,\r\n\t\tBL_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.ENotifyTriggerMode\r\n\tpublic enum ENotifyTriggerMode : byte {\r\n\t\tAllAnimations = 0,\r\n\t\tHighestWeightedAnimation = 1,\r\n\t\tNone = 2,\r\n\t\tENotifyTriggerMode_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EBlendSpaceAxis\r\n\tpublic enum EBlendSpaceAxis : byte {\r\n\t\tBSA_None = 0,\r\n\t\tBSA_X = 1,\r\n\t\tBSA_Y = 2,\r\n\t\tBSA_Max = 3\r\n\t};\r\n\r\n\t// Enum Engine.EBlueprintNativizationFlag\r\n\tpublic enum EBlueprintNativizationFlag : byte {\r\n\t\tDisabled = 0,\r\n\t\tDependency = 1,\r\n\t\tExplicitlyEnabled = 2,\r\n\t\tEBlueprintNativizationFlag_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EBlueprintCompileMode\r\n\tpublic enum EBlueprintCompileMode : byte {\r\n\t\tDefault = 0,\r\n\t\tDevelopment = 1,\r\n\t\tFinalRelease = 2,\r\n\t\tEBlueprintCompileMode_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EBlueprintType\r\n\tpublic enum EBlueprintType : byte {\r\n\t\tBPTYPE_Normal = 0,\r\n\t\tBPTYPE_Const = 1,\r\n\t\tBPTYPE_MacroLibrary = 2,\r\n\t\tBPTYPE_Interface = 3,\r\n\t\tBPTYPE_LevelScript = 4,\r\n\t\tBPTYPE_FunctionLibrary = 5,\r\n\t\tBPTYPE_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.EBlueprintStatus\r\n\tpublic enum EBlueprintStatus : byte {\r\n\t\tBS_Unknown = 0,\r\n\t\tBS_Dirty = 1,\r\n\t\tBS_Error = 2,\r\n\t\tBS_UpToDate = 3,\r\n\t\tBS_BeingCreated = 4,\r\n\t\tBS_UpToDateWithWarnings = 5,\r\n\t\tBS_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.EDOFMode\r\n\tpublic enum EDOFMode : byte {\r\n\t\tDefault = 0,\r\n\t\tSixDOF = 1,\r\n\t\tYZPlane = 2,\r\n\t\tXZPlane = 3,\r\n\t\tXYPlane = 4,\r\n\t\tCustomPlane = 5,\r\n\t\tNone = 6,\r\n\t\tEDOFMode_MAX = 7\r\n\t};\r\n\r\n\t// Enum Engine.EBodyCollisionResponse\r\n\tpublic enum EBodyCollisionResponse : byte {\r\n\t\tBodyCollision_Enabled = 0,\r\n\t\tBodyCollision_Disabled = 1,\r\n\t\tBodyCollision_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EPhysicsType\r\n\tpublic enum EPhysicsType : byte {\r\n\t\tPhysType_Default = 0,\r\n\t\tPhysType_Kinematic = 1,\r\n\t\tPhysType_Simulated = 2,\r\n\t\tPhysType_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ECollisionTraceFlag\r\n\tpublic enum ECollisionTraceFlag : byte {\r\n\t\tCTF_UseDefault = 0,\r\n\t\tCTF_UseSimpleAndComplex = 1,\r\n\t\tCTF_UseSimpleAsComplex = 2,\r\n\t\tCTF_UseComplexAsSimple = 3,\r\n\t\tCTF_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EBrushType\r\n\tpublic enum EBrushType : byte {\r\n\t\tBrush_Default = 0,\r\n\t\tBrush_Add = 1,\r\n\t\tBrush_Subtract = 2,\r\n\t\tBrush_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ECsgOper\r\n\tpublic enum ECsgOper : byte {\r\n\t\tCSG_Active = 0,\r\n\t\tCSG_Add = 1,\r\n\t\tCSG_Subtract = 2,\r\n\t\tCSG_Intersect = 3,\r\n\t\tCSG_Deintersect = 4,\r\n\t\tCSG_None = 5,\r\n\t\tCSG_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.EInitialOscillatorOffset\r\n\tpublic enum EInitialOscillatorOffset : byte {\r\n\t\tEOO_OffsetRandom = 0,\r\n\t\tEOO_OffsetZero = 1,\r\n\t\tEOO_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EOscillatorWaveform\r\n\tpublic enum EOscillatorWaveform : byte {\r\n\t\tSineWave = 0,\r\n\t\tPerlinNoise = 1,\r\n\t\tEOscillatorWaveform_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ECameraShakeAttenuation\r\n\tpublic enum ECameraShakeAttenuation : byte {\r\n\t\tLinear = 0,\r\n\t\tQuadratic = 1,\r\n\t\tECameraShakeAttenuation_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ECameraAlphaBlendMode\r\n\tpublic enum ECameraAlphaBlendMode : byte {\r\n\t\tCABM_Linear = 0,\r\n\t\tCABM_Cubic = 1,\r\n\t\tCABM_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ECameraAnimPlaySpace\r\n\tpublic enum ECameraAnimPlaySpace : byte {\r\n\t\tCameraLocal = 0,\r\n\t\tWorld = 1,\r\n\t\tUserDefined = 2,\r\n\t\tECameraAnimPlaySpace_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ECameraProjectionMode\r\n\tpublic enum ECameraProjectionMode : byte {\r\n\t\tPerspective = 0,\r\n\t\tOrthographic = 1,\r\n\t\tECameraProjectionMode_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ECloudStorageDelegate\r\n\tpublic enum ECloudStorageDelegate : byte {\r\n\t\tCSD_KeyValueReadComplete = 0,\r\n\t\tCSD_KeyValueWriteComplete = 1,\r\n\t\tCSD_ValueChanged = 2,\r\n\t\tCSD_DocumentQueryComplete = 3,\r\n\t\tCSD_DocumentReadComplete = 4,\r\n\t\tCSD_DocumentWriteComplete = 5,\r\n\t\tCSD_DocumentConflictDetected = 6,\r\n\t\tCSD_MAX = 7\r\n\t};\r\n\r\n\t// Enum Engine.EAngularDriveMode\r\n\tpublic enum EAngularDriveMode : byte {\r\n\t\tSLERP = 0,\r\n\t\tTwistAndSwing = 1,\r\n\t\tEAngularDriveMode_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ELinearConstraintMotion\r\n\tpublic enum ELinearConstraintMotion : byte {\r\n\t\tLCM_Free = 0,\r\n\t\tLCM_Limited = 1,\r\n\t\tLCM_Locked = 2,\r\n\t\tLCM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ECurveTableMode\r\n\tpublic enum ECurveTableMode : byte {\r\n\t\tEmpty = 0,\r\n\t\tSimpleCurves = 1,\r\n\t\tRichCurves = 2,\r\n\t\tECurveTableMode_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EEvaluateCurveTableResult\r\n\tpublic enum EEvaluateCurveTableResult : byte {\r\n\t\tRowFound = 0,\r\n\t\tRowNotFound = 1,\r\n\t\tEEvaluateCurveTableResult_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EGrammaticalNumber\r\n\tpublic enum EGrammaticalNumber : byte {\r\n\t\tSingular = 0,\r\n\t\tPlural = 1,\r\n\t\tEGrammaticalNumber_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EGrammaticalGender\r\n\tpublic enum EGrammaticalGender : byte {\r\n\t\tNeuter = 0,\r\n\t\tMasculine = 1,\r\n\t\tFeminine = 2,\r\n\t\tMixed = 3,\r\n\t\tEGrammaticalGender_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.DistributionParamMode\r\n\tpublic enum DistributionParamMode : byte {\r\n\t\tDPM_Normal = 0,\r\n\t\tDPM_Abs = 1,\r\n\t\tDPM_Direct = 2,\r\n\t\tDPM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EDistributionVectorMirrorFlags\r\n\tpublic enum EDistributionVectorMirrorFlags : byte {\r\n\t\tEDVMF_Same = 0,\r\n\t\tEDVMF_Different = 1,\r\n\t\tEDVMF_Mirror = 2,\r\n\t\tEDVMF_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EDistributionVectorLockFlags\r\n\tpublic enum EDistributionVectorLockFlags : byte {\r\n\t\tEDVLF_None = 0,\r\n\t\tEDVLF_XY = 1,\r\n\t\tEDVLF_XZ = 2,\r\n\t\tEDVLF_YZ = 3,\r\n\t\tEDVLF_XYZ = 4,\r\n\t\tEDVLF_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.ENodeEnabledState\r\n\tpublic enum ENodeEnabledState : byte {\r\n\t\tEnabled = 0,\r\n\t\tDisabled = 1,\r\n\t\tDevelopmentOnly = 2,\r\n\t\tENodeEnabledState_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ENodeAdvancedPins\r\n\tpublic enum ENodeAdvancedPins : byte {\r\n\t\tNoPins = 0,\r\n\t\tShown = 1,\r\n\t\tHidden = 2,\r\n\t\tENodeAdvancedPins_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ENodeTitleType\r\n\tpublic enum ENodeTitleType : byte {\r\n\t\tFullTitle = 0,\r\n\t\tListView = 1,\r\n\t\tEditableTitle = 2,\r\n\t\tMenuTitle = 3,\r\n\t\tMAX_TitleTypes = 4,\r\n\t\tENodeTitleType_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EPinContainerType\r\n\tpublic enum EPinContainerType : byte {\r\n\t\tNone = 0,\r\n\t\tArray = 1,\r\n\t\tSet = 2,\r\n\t\tMap = 3,\r\n\t\tEPinContainerType_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EEdGraphPinDirection\r\n\tpublic enum EEdGraphPinDirection : byte {\r\n\t\tEGPD_Input = 0,\r\n\t\tEGPD_Output = 1,\r\n\t\tEGPD_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EBlueprintPinStyleType\r\n\tpublic enum EBlueprintPinStyleType : byte {\r\n\t\tBPST_Original = 0,\r\n\t\tBPST_VariantA = 1,\r\n\t\tBPST_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ECanCreateConnectionResponse\r\n\tpublic enum ECanCreateConnectionResponse : byte {\r\n\t\tCONNECT_RESPONSE_MAKE = 0,\r\n\t\tCONNECT_RESPONSE_DISALLOW = 1,\r\n\t\tCONNECT_RESPONSE_BREAK_OTHERS_A = 2,\r\n\t\tCONNECT_RESPONSE_BREAK_OTHERS_B = 3,\r\n\t\tCONNECT_RESPONSE_BREAK_OTHERS_AB = 4,\r\n\t\tCONNECT_RESPONSE_MAKE_WITH_CONVERSION_NODE = 5,\r\n\t\tCONNECT_RESPONSE_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.EGraphType\r\n\tpublic enum EGraphType : byte {\r\n\t\tGT_Function = 0,\r\n\t\tGT_Ubergraph = 1,\r\n\t\tGT_Macro = 2,\r\n\t\tGT_Animation = 3,\r\n\t\tGT_StateMachine = 4,\r\n\t\tGT_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.ETransitionType\r\n\tpublic enum ETransitionType : byte {\r\n\t\tNone = 0,\r\n\t\tPaused = 1,\r\n\t\tLoading = 2,\r\n\t\tSaving = 3,\r\n\t\tConnecting = 4,\r\n\t\tPrecaching = 5,\r\n\t\tWaitingToConnect = 6,\r\n\t\tMAX = 7\r\n\t};\r\n\r\n\t// Enum Engine.EFullyLoadPackageType\r\n\tpublic enum EFullyLoadPackageType : byte {\r\n\t\tFULLYLOAD_Map = 0,\r\n\t\tFULLYLOAD_Game_PreLoadClass = 1,\r\n\t\tFULLYLOAD_Game_PostLoadClass = 2,\r\n\t\tFULLYLOAD_Always = 3,\r\n\t\tFULLYLOAD_Mutator = 4,\r\n\t\tFULLYLOAD_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EViewModeIndex\r\n\tpublic enum EViewModeIndex : byte {\r\n\t\tVMI_BrushWireframe = 0,\r\n\t\tVMI_Wireframe = 1,\r\n\t\tVMI_Unlit = 2,\r\n\t\tVMI_Lit = 3,\r\n\t\tVMI_Lit_DetailLighting = 4,\r\n\t\tVMI_LightingOnly = 5,\r\n\t\tVMI_LightComplexity = 6,\r\n\t\tVMI_ShaderComplexity = 8,\r\n\t\tVMI_LightmapDensity = 9,\r\n\t\tVMI_LitLightmapDensity = 10,\r\n\t\tVMI_ReflectionOverride = 11,\r\n\t\tVMI_VisualizeBuffer = 12,\r\n\t\tVMI_StationaryLightOverlap = 14,\r\n\t\tVMI_CollisionPawn = 15,\r\n\t\tVMI_CollisionVisibility = 16,\r\n\t\tVMI_LODColoration = 18,\r\n\t\tVMI_QuadOverdraw = 19,\r\n\t\tVMI_PrimitiveDistanceAccuracy = 20,\r\n\t\tVMI_MeshUVDensityAccuracy = 21,\r\n\t\tVMI_ShaderComplexityWithQuadOverdraw = 22,\r\n\t\tVMI_HLODColoration = 23,\r\n\t\tVMI_GroupLODColoration = 24,\r\n\t\tVMI_MaterialTextureScaleAccuracy = 25,\r\n\t\tVMI_RequiredTextureResolution = 26,\r\n\t\tVMI_PathTracing = 27,\r\n\t\tVMI_RayTracingDebug = 28,\r\n\t\tVMI_Max = 29,\r\n\t\tVMI_Unknown = 255\r\n\t};\r\n\r\n\t// Enum Engine.EDemoPlayFailure\r\n\tpublic enum EDemoPlayFailure : byte {\r\n\t\tGeneric = 0,\r\n\t\tDemoNotFound = 1,\r\n\t\tCorrupt = 2,\r\n\t\tInvalidVersion = 3,\r\n\t\tInitBase = 4,\r\n\t\tGameSpecificHeader = 5,\r\n\t\tReplayStreamerInternal = 6,\r\n\t\tLoadMap = 7,\r\n\t\tSerialization = 8,\r\n\t\tEDemoPlayFailure_MAX = 9\r\n\t};\r\n\r\n\t// Enum Engine.ETravelType\r\n\tpublic enum ETravelType : byte {\r\n\t\tTRAVEL_Absolute = 0,\r\n\t\tTRAVEL_Partial = 1,\r\n\t\tTRAVEL_Relative = 2,\r\n\t\tTRAVEL_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ENetworkLagState\r\n\tpublic enum ENetworkLagState : byte {\r\n\t\tNotLagging = 0,\r\n\t\tLagging = 1,\r\n\t\tENetworkLagState_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EMouseCaptureMode\r\n\tpublic enum EMouseCaptureMode : byte {\r\n\t\tNoCapture = 0,\r\n\t\tCapturePermanently = 1,\r\n\t\tCapturePermanently_IncludingInitialMouseDown = 2,\r\n\t\tCaptureDuringMouseDown = 3,\r\n\t\tCaptureDuringRightMouseDown = 4,\r\n\t\tEMouseCaptureMode_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EInputEvent\r\n\tpublic enum EInputEvent : byte {\r\n\t\tIE_Pressed = 0,\r\n\t\tIE_Released = 1,\r\n\t\tIE_Repeat = 2,\r\n\t\tIE_DoubleClick = 3,\r\n\t\tIE_Axis = 4,\r\n\t\tIE_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.ECustomTimeStepSynchronizationState\r\n\tpublic enum ECustomTimeStepSynchronizationState : byte {\r\n\t\tClosed = 0,\r\n\t\tError = 1,\r\n\t\tSynchronized = 2,\r\n\t\tSynchronizing = 3,\r\n\t\tECustomTimeStepSynchronizationState_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EMeshBufferAccess\r\n\tpublic enum EMeshBufferAccess : byte {\r\n\t\tDefault = 0,\r\n\t\tForceCPUAndGPU = 1,\r\n\t\tEMeshBufferAccess_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EConstraintFrame\r\n\tpublic enum EConstraintFrame : byte {\r\n\t\tFrame1 = 0,\r\n\t\tFrame2 = 1,\r\n\t\tEConstraintFrame_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EAngularConstraintMotion\r\n\tpublic enum EAngularConstraintMotion : byte {\r\n\t\tACM_Free = 0,\r\n\t\tACM_Limited = 1,\r\n\t\tACM_Locked = 2,\r\n\t\tACM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EComponentSocketType\r\n\tpublic enum EComponentSocketType : byte {\r\n\t\tInvalid = 0,\r\n\t\tBone = 1,\r\n\t\tSocket = 2,\r\n\t\tEComponentSocketType_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EPhysicalMaterialMaskColor\r\n\tpublic enum EPhysicalMaterialMaskColor : byte {\r\n\t\tRed = 0,\r\n\t\tGreen = 1,\r\n\t\tBlue = 2,\r\n\t\tCyan = 3,\r\n\t\tMagenta = 4,\r\n\t\tYellow = 5,\r\n\t\tWhite = 6,\r\n\t\tBlack = 7,\r\n\t\tMAX = 8\r\n\t};\r\n\r\n\t// Enum Engine.EWalkableSlopeBehavior\r\n\tpublic enum EWalkableSlopeBehavior : byte {\r\n\t\tWalkableSlope_Default = 0,\r\n\t\tWalkableSlope_Increase = 1,\r\n\t\tWalkableSlope_Decrease = 2,\r\n\t\tWalkableSlope_Unwalkable = 3,\r\n\t\tWalkableSlope_Max = 4\r\n\t};\r\n\r\n\t// Enum Engine.EUpdateRateShiftBucket\r\n\tpublic enum EUpdateRateShiftBucket : byte {\r\n\t\tShiftBucket0 = 0,\r\n\t\tShiftBucket1 = 1,\r\n\t\tShiftBucket2 = 2,\r\n\t\tShiftBucket3 = 3,\r\n\t\tShiftBucket4 = 4,\r\n\t\tShiftBucket5 = 5,\r\n\t\tShiftBucketMax = 6,\r\n\t\tEUpdateRateShiftBucket_MAX = 7\r\n\t};\r\n\r\n\t// Enum Engine.EShadowMapFlags\r\n\tpublic enum EShadowMapFlags : byte {\r\n\t\tSMF_None = 0,\r\n\t\tSMF_Streamed = 1,\r\n\t\tSMF_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ELightMapPaddingType\r\n\tpublic enum ELightMapPaddingType : byte {\r\n\t\tLMPT_NormalPadding = 0,\r\n\t\tLMPT_PrePadding = 1,\r\n\t\tLMPT_NoPadding = 2,\r\n\t\tLMPT_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ECollisionEnabled\r\n\tpublic enum ECollisionEnabled : byte {\r\n\t\tNoCollision = 0,\r\n\t\tQueryOnly = 1,\r\n\t\tPhysicsOnly = 2,\r\n\t\tQueryAndPhysics = 3,\r\n\t\tECollisionEnabled_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.ETimelineSigType\r\n\tpublic enum ETimelineSigType : byte {\r\n\t\tETS_EventSignature = 0,\r\n\t\tETS_FloatSignature = 1,\r\n\t\tETS_VectorSignature = 2,\r\n\t\tETS_LinearColorSignature = 3,\r\n\t\tETS_InvalidSignature = 4,\r\n\t\tETS_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.ESleepFamily\r\n\tpublic enum ESleepFamily : byte {\r\n\t\tNormal = 0,\r\n\t\tSensitive = 1,\r\n\t\tCustom = 2,\r\n\t\tESleepFamily_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ERadialImpulseFalloff\r\n\tpublic enum ERadialImpulseFalloff : byte {\r\n\t\tRIF_Constant = 0,\r\n\t\tRIF_Linear = 1,\r\n\t\tRIF_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EFilterInterpolationType\r\n\tpublic enum EFilterInterpolationType : byte {\r\n\t\tBSIT_Average = 0,\r\n\t\tBSIT_Linear = 1,\r\n\t\tBSIT_Cubic = 2,\r\n\t\tBSIT_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ECollisionResponse\r\n\tpublic enum ECollisionResponse : byte {\r\n\t\tECR_Ignore = 0,\r\n\t\tECR_Overlap = 1,\r\n\t\tECR_Block = 2,\r\n\t\tECR_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EOverlapFilterOption\r\n\tpublic enum EOverlapFilterOption : byte {\r\n\t\tOverlapFilter_All = 0,\r\n\t\tOverlapFilter_DynamicOnly = 1,\r\n\t\tOverlapFilter_StaticOnly = 2,\r\n\t\tOverlapFilter_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ECollisionChannel\r\n\tpublic enum ECollisionChannel : byte {\r\n\t\tECC_WorldStatic = 0,\r\n\t\tECC_WorldDynamic = 1,\r\n\t\tECC_Pawn = 2,\r\n\t\tECC_Visibility = 3,\r\n\t\tECC_Camera = 4,\r\n\t\tECC_PhysicsBody = 5,\r\n\t\tECC_Vehicle = 6,\r\n\t\tECC_Destructible = 7,\r\n\t\tECC_EngineTraceChannel1 = 8,\r\n\t\tECC_EngineTraceChannel2 = 9,\r\n\t\tECC_EngineTraceChannel3 = 10,\r\n\t\tECC_EngineTraceChannel4 = 11,\r\n\t\tECC_EngineTraceChannel5 = 12,\r\n\t\tECC_EngineTraceChannel6 = 13,\r\n\t\tECC_GameTraceChannel1 = 14,\r\n\t\tECC_GameTraceChannel2 = 15,\r\n\t\tECC_GameTraceChannel3 = 16,\r\n\t\tECC_GameTraceChannel4 = 17,\r\n\t\tECC_GameTraceChannel5 = 18,\r\n\t\tECC_GameTraceChannel6 = 19,\r\n\t\tECC_GameTraceChannel7 = 20,\r\n\t\tECC_GameTraceChannel8 = 21,\r\n\t\tECC_GameTraceChannel9 = 22,\r\n\t\tECC_GameTraceChannel10 = 23,\r\n\t\tECC_GameTraceChannel11 = 24,\r\n\t\tECC_GameTraceChannel12 = 25,\r\n\t\tECC_GameTraceChannel13 = 26,\r\n\t\tECC_GameTraceChannel14 = 27,\r\n\t\tECC_GameTraceChannel15 = 28,\r\n\t\tECC_GameTraceChannel16 = 29,\r\n\t\tECC_GameTraceChannel17 = 30,\r\n\t\tECC_GameTraceChannel18 = 31,\r\n\t\tECC_OverlapAll_Deprecated = 32,\r\n\t\tECC_MAX = 33\r\n\t};\r\n\r\n\t// Enum Engine.ENetworkSmoothingMode\r\n\tpublic enum ENetworkSmoothingMode : byte {\r\n\t\tDisabled = 0,\r\n\t\tLinear = 1,\r\n\t\tExponential = 2,\r\n\t\tReplay = 3,\r\n\t\tENetworkSmoothingMode_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.ELightingBuildQuality\r\n\tpublic enum ELightingBuildQuality : byte {\r\n\t\tQuality_Preview = 0,\r\n\t\tQuality_Medium = 1,\r\n\t\tQuality_High = 2,\r\n\t\tQuality_Production = 3,\r\n\t\tQuality_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EMaterialStencilCompare\r\n\tpublic enum EMaterialStencilCompare : byte {\r\n\t\tMSC_Less = 0,\r\n\t\tMSC_LessEqual = 1,\r\n\t\tMSC_Greater = 2,\r\n\t\tMSC_GreaterEqual = 3,\r\n\t\tMSC_Equal = 4,\r\n\t\tMSC_NotEqual = 5,\r\n\t\tMSC_Never = 6,\r\n\t\tMSC_Always = 7,\r\n\t\tMSC_Count = 8,\r\n\t\tMSC_MAX = 9\r\n\t};\r\n\r\n\t// Enum Engine.EMaterialSamplerType\r\n\tpublic enum EMaterialSamplerType : byte {\r\n\t\tSAMPLERTYPE_Color = 0,\r\n\t\tSAMPLERTYPE_Grayscale = 1,\r\n\t\tSAMPLERTYPE_Alpha = 2,\r\n\t\tSAMPLERTYPE_Normal = 3,\r\n\t\tSAMPLERTYPE_Masks = 4,\r\n\t\tSAMPLERTYPE_DistanceFieldFont = 5,\r\n\t\tSAMPLERTYPE_LinearColor = 6,\r\n\t\tSAMPLERTYPE_LinearGrayscale = 7,\r\n\t\tSAMPLERTYPE_Data = 8,\r\n\t\tSAMPLERTYPE_External = 9,\r\n\t\tSAMPLERTYPE_VirtualColor = 10,\r\n\t\tSAMPLERTYPE_VirtualGrayscale = 11,\r\n\t\tSAMPLERTYPE_VirtualAlpha = 12,\r\n\t\tSAMPLERTYPE_VirtualNormal = 13,\r\n\t\tSAMPLERTYPE_VirtualMasks = 14,\r\n\t\tSAMPLERTYPE_VirtualLinearColor = 15,\r\n\t\tSAMPLERTYPE_VirtualLinearGrayscale = 16,\r\n\t\tSAMPLERTYPE_MAX = 17\r\n\t};\r\n\r\n\t// Enum Engine.EMaterialTessellationMode\r\n\tpublic enum EMaterialTessellationMode : byte {\r\n\t\tMTM_NoTessellation = 0,\r\n\t\tMTM_FlatTessellation = 1,\r\n\t\tMTM_PNTriangles = 2,\r\n\t\tMTM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EMaterialShadingModel\r\n\tpublic enum EMaterialShadingModel : byte {\r\n\t\tMSM_Unlit = 0,\r\n\t\tMSM_DefaultLit = 1,\r\n\t\tMSM_Subsurface = 2,\r\n\t\tMSM_PreintegratedSkin = 3,\r\n\t\tMSM_ClearCoat = 4,\r\n\t\tMSM_SubsurfaceProfile = 5,\r\n\t\tMSM_TwoSidedFoliage = 6,\r\n\t\tMSM_Hair = 7,\r\n\t\tMSM_Cloth = 8,\r\n\t\tMSM_Eye = 9,\r\n\t\tMSM_SingleLayerWater = 10,\r\n\t\tMSM_ThinTranslucent = 11,\r\n\t\tMSM_NUM = 12,\r\n\t\tMSM_FromMaterialExpression = 13,\r\n\t\tMSM_MAX = 14\r\n\t};\r\n\r\n\t// Enum Engine.EParticleCollisionMode\r\n\tpublic enum EParticleCollisionMode : byte {\r\n\t\tSceneDepth = 0,\r\n\t\tDistanceField = 1,\r\n\t\tEParticleCollisionMode_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ETrailWidthMode\r\n\tpublic enum ETrailWidthMode : byte {\r\n\t\tETrailWidthMode_FromCentre = 0,\r\n\t\tETrailWidthMode_FromFirst = 1,\r\n\t\tETrailWidthMode_FromSecond = 2,\r\n\t\tETrailWidthMode_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EGBufferFormat\r\n\tpublic enum EGBufferFormat : byte {\r\n\t\tForce8BitsPerChannel = 0,\r\n\t\tDefault = 1,\r\n\t\tHighPrecisionNormals = 3,\r\n\t\tForce16BitsPerChannel = 5,\r\n\t\tEGBufferFormat_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.ESceneCaptureCompositeMode\r\n\tpublic enum ESceneCaptureCompositeMode : byte {\r\n\t\tSCCM_Overwrite = 0,\r\n\t\tSCCM_Additive = 1,\r\n\t\tSCCM_Composite = 2,\r\n\t\tSCCM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ESceneCaptureSource\r\n\tpublic enum ESceneCaptureSource : byte {\r\n\t\tSCS_SceneColorHDR = 0,\r\n\t\tSCS_SceneColorHDRNoAlpha = 1,\r\n\t\tSCS_FinalColorLDR = 2,\r\n\t\tSCS_SceneColorSceneDepth = 3,\r\n\t\tSCS_SceneDepth = 4,\r\n\t\tSCS_DeviceDepth = 5,\r\n\t\tSCS_Normal = 6,\r\n\t\tSCS_BaseColor = 7,\r\n\t\tSCS_FinalColorHDR = 8,\r\n\t\tSCS_FinalToneCurveHDR = 9,\r\n\t\tSCS_MAX = 10\r\n\t};\r\n\r\n\t// Enum Engine.ETranslucentSortPolicy\r\n\tpublic enum ETranslucentSortPolicy : byte {\r\n\t\tSortByDistance = 0,\r\n\t\tSortByProjectedZ = 1,\r\n\t\tSortAlongAxis = 2,\r\n\t\tETranslucentSortPolicy_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ERefractionMode\r\n\tpublic enum ERefractionMode : byte {\r\n\t\tRM_IndexOfRefraction = 0,\r\n\t\tRM_PixelNormalOffset = 1,\r\n\t\tRM_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ETranslucencyLightingMode\r\n\tpublic enum ETranslucencyLightingMode : byte {\r\n\t\tTLM_VolumetricNonDirectional = 0,\r\n\t\tTLM_VolumetricDirectional = 1,\r\n\t\tTLM_VolumetricPerVertexNonDirectional = 2,\r\n\t\tTLM_VolumetricPerVertexDirectional = 3,\r\n\t\tTLM_Surface = 4,\r\n\t\tTLM_SurfacePerPixelLighting = 5,\r\n\t\tTLM_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.ESamplerSourceMode\r\n\tpublic enum ESamplerSourceMode : byte {\r\n\t\tSSM_FromTextureAsset = 0,\r\n\t\tSSM_Wrap_WorldGroupSettings = 1,\r\n\t\tSSM_Clamp_WorldGroupSettings = 2,\r\n\t\tSSM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EBlendMode\r\n\tpublic enum EBlendMode : byte {\r\n\t\tBLEND_Opaque = 0,\r\n\t\tBLEND_Masked = 1,\r\n\t\tBLEND_Translucent = 2,\r\n\t\tBLEND_Additive = 3,\r\n\t\tBLEND_Modulate = 4,\r\n\t\tBLEND_AlphaComposite = 5,\r\n\t\tBLEND_AlphaHoldout = 6,\r\n\t\tBLEND_MAX = 7\r\n\t};\r\n\r\n\t// Enum Engine.EOcclusionCombineMode\r\n\tpublic enum EOcclusionCombineMode : byte {\r\n\t\tOCM_Minimum = 0,\r\n\t\tOCM_Multiply = 1,\r\n\t\tOCM_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ELightmapType\r\n\tpublic enum ELightmapType : byte {\r\n\t\tDefault = 0,\r\n\t\tForceSurface = 1,\r\n\t\tForceVolumetric = 2,\r\n\t\tELightmapType_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EIndirectLightingCacheQuality\r\n\tpublic enum EIndirectLightingCacheQuality : byte {\r\n\t\tILCQ_Off = 0,\r\n\t\tILCQ_Point = 1,\r\n\t\tILCQ_Volume = 2,\r\n\t\tILCQ_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ESceneDepthPriorityGroup\r\n\tpublic enum ESceneDepthPriorityGroup : byte {\r\n\t\tSDPG_World = 0,\r\n\t\tSDPG_Foreground = 1,\r\n\t\tSDPG_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EAspectRatioAxisConstraint\r\n\tpublic enum EAspectRatioAxisConstraint : byte {\r\n\t\tAspectRatio_MaintainYFOV = 0,\r\n\t\tAspectRatio_MaintainXFOV = 1,\r\n\t\tAspectRatio_MajorAxisFOV = 2,\r\n\t\tAspectRatio_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EFontCacheType\r\n\tpublic enum EFontCacheType : byte {\r\n\t\tOffline = 0,\r\n\t\tRuntime = 1,\r\n\t\tEFontCacheType_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EFontImportCharacterSet\r\n\tpublic enum EFontImportCharacterSet : byte {\r\n\t\tFontICS_Default = 0,\r\n\t\tFontICS_Ansi = 1,\r\n\t\tFontICS_Symbol = 2,\r\n\t\tFontICS_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EStandbyType\r\n\tpublic enum EStandbyType : byte {\r\n\t\tSTDBY_Rx = 0,\r\n\t\tSTDBY_Tx = 1,\r\n\t\tSTDBY_BadPing = 2,\r\n\t\tSTDBY_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ESuggestProjVelocityTraceOption\r\n\tpublic enum ESuggestProjVelocityTraceOption : byte {\r\n\t\tDoNotTrace = 0,\r\n\t\tTraceFullPath = 1,\r\n\t\tOnlyTraceWhileAscending = 2,\r\n\t\tESuggestProjVelocityTraceOption_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EWindowMode\r\n\tpublic enum EWindowMode : byte {\r\n\t\tFullscreen = 0,\r\n\t\tWindowedFullscreen = 1,\r\n\t\tWindowed = 2,\r\n\t\tEWindowMode_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EHitProxyPriority\r\n\tpublic enum EHitProxyPriority : byte {\r\n\t\tHPP_World = 0,\r\n\t\tHPP_Wireframe = 1,\r\n\t\tHPP_Foreground = 2,\r\n\t\tHPP_UI = 3,\r\n\t\tHPP_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EImportanceWeight\r\n\tpublic enum EImportanceWeight : byte {\r\n\t\tLuminance = 0,\r\n\t\tRed = 1,\r\n\t\tGreen = 2,\r\n\t\tBlue = 3,\r\n\t\tAlpha = 4,\r\n\t\tEImportanceWeight_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EAdManagerDelegate\r\n\tpublic enum EAdManagerDelegate : byte {\r\n\t\tAMD_ClickedBanner = 0,\r\n\t\tAMD_UserClosedAd = 1,\r\n\t\tAMD_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EControllerAnalogStick\r\n\tpublic enum EControllerAnalogStick : byte {\r\n\t\tCAS_LeftStick = 0,\r\n\t\tCAS_RightStick = 1,\r\n\t\tCAS_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EAnimAlphaInputType\r\n\tpublic enum EAnimAlphaInputType : byte {\r\n\t\tFloat = 0,\r\n\t\tBool = 1,\r\n\t\tCurve = 2,\r\n\t\tEAnimAlphaInputType_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ETrackActiveCondition\r\n\tpublic enum ETrackActiveCondition : byte {\r\n\t\tETAC_Always = 0,\r\n\t\tETAC_GoreEnabled = 1,\r\n\t\tETAC_GoreDisabled = 2,\r\n\t\tETAC_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EInterpTrackMoveRotMode\r\n\tpublic enum EInterpTrackMoveRotMode : byte {\r\n\t\tIMR_Keyframed = 0,\r\n\t\tIMR_LookAtGroup = 1,\r\n\t\tIMR_Ignore = 2,\r\n\t\tIMR_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EInterpMoveAxis\r\n\tpublic enum EInterpMoveAxis : byte {\r\n\t\tAXIS_TranslationX = 0,\r\n\t\tAXIS_TranslationY = 1,\r\n\t\tAXIS_TranslationZ = 2,\r\n\t\tAXIS_RotationX = 3,\r\n\t\tAXIS_RotationY = 4,\r\n\t\tAXIS_RotationZ = 5,\r\n\t\tAXIS_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.ETrackToggleAction\r\n\tpublic enum ETrackToggleAction : byte {\r\n\t\tETTA_Off = 0,\r\n\t\tETTA_On = 1,\r\n\t\tETTA_Toggle = 2,\r\n\t\tETTA_Trigger = 3,\r\n\t\tETTA_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EVisibilityTrackCondition\r\n\tpublic enum EVisibilityTrackCondition : byte {\r\n\t\tEVTC_Always = 0,\r\n\t\tEVTC_GoreEnabled = 1,\r\n\t\tEVTC_GoreDisabled = 2,\r\n\t\tEVTC_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EVisibilityTrackAction\r\n\tpublic enum EVisibilityTrackAction : byte {\r\n\t\tEVTA_Hide = 0,\r\n\t\tEVTA_Show = 1,\r\n\t\tEVTA_Toggle = 2,\r\n\t\tEVTA_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ESlateGesture\r\n\tpublic enum ESlateGesture : byte {\r\n\t\tNone = 0,\r\n\t\tScroll = 1,\r\n\t\tMagnify = 2,\r\n\t\tSwipe = 3,\r\n\t\tRotate = 4,\r\n\t\tLongPress = 5,\r\n\t\tESlateGesture_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.EMatrixColumns\r\n\tpublic enum EMatrixColumns : byte {\r\n\t\tFirst = 0,\r\n\t\tSecond = 1,\r\n\t\tThird = 2,\r\n\t\tFourth = 3,\r\n\t\tEMatrixColumns_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.ELerpInterpolationMode\r\n\tpublic enum ELerpInterpolationMode : byte {\r\n\t\tQuatInterp = 0,\r\n\t\tEulerInterp = 1,\r\n\t\tDualQuatInterp = 2,\r\n\t\tELerpInterpolationMode_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EEasingFunc\r\n\tpublic enum EEasingFunc : byte {\r\n\t\tLinear = 0,\r\n\t\tStep = 1,\r\n\t\tSinusoidalIn = 2,\r\n\t\tSinusoidalOut = 3,\r\n\t\tSinusoidalInOut = 4,\r\n\t\tEaseIn = 5,\r\n\t\tEaseOut = 6,\r\n\t\tEaseInOut = 7,\r\n\t\tExpoIn = 8,\r\n\t\tExpoOut = 9,\r\n\t\tExpoInOut = 10,\r\n\t\tCircularIn = 11,\r\n\t\tCircularOut = 12,\r\n\t\tCircularInOut = 13,\r\n\t\tEEasingFunc_MAX = 14\r\n\t};\r\n\r\n\t// Enum Engine.ERoundingMode\r\n\tpublic enum ERoundingMode : byte {\r\n\t\tHalfToEven = 0,\r\n\t\tHalfFromZero = 1,\r\n\t\tHalfToZero = 2,\r\n\t\tFromZero = 3,\r\n\t\tToZero = 4,\r\n\t\tToNegativeInfinity = 5,\r\n\t\tToPositiveInfinity = 6,\r\n\t\tERoundingMode_MAX = 7\r\n\t};\r\n\r\n\t// Enum Engine.EStreamingVolumeUsage\r\n\tpublic enum EStreamingVolumeUsage : byte {\r\n\t\tSVB_Loading = 0,\r\n\t\tSVB_LoadingAndVisibility = 1,\r\n\t\tSVB_VisibilityBlockingOnLoad = 2,\r\n\t\tSVB_BlockingOnLoad = 3,\r\n\t\tSVB_LoadingNotVisible = 4,\r\n\t\tSVB_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EMaterialDecalResponse\r\n\tpublic enum EMaterialDecalResponse : byte {\r\n\t\tMDR_None = 0,\r\n\t\tMDR_ColorNormalRoughness = 1,\r\n\t\tMDR_Color = 2,\r\n\t\tMDR_ColorNormal = 3,\r\n\t\tMDR_ColorRoughness = 4,\r\n\t\tMDR_Normal = 5,\r\n\t\tMDR_NormalRoughness = 6,\r\n\t\tMDR_Roughness = 7,\r\n\t\tMDR_MAX = 8\r\n\t};\r\n\r\n\t// Enum Engine.EDecalBlendMode\r\n\tpublic enum EDecalBlendMode : byte {\r\n\t\tDBM_Translucent = 0,\r\n\t\tDBM_Stain = 1,\r\n\t\tDBM_Normal = 2,\r\n\t\tDBM_Emissive = 3,\r\n\t\tDBM_DBuffer_ColorNormalRoughness = 4,\r\n\t\tDBM_DBuffer_Color = 5,\r\n\t\tDBM_DBuffer_ColorNormal = 6,\r\n\t\tDBM_DBuffer_ColorRoughness = 7,\r\n\t\tDBM_DBuffer_Normal = 8,\r\n\t\tDBM_DBuffer_NormalRoughness = 9,\r\n\t\tDBM_DBuffer_Roughness = 10,\r\n\t\tDBM_DBuffer_Emissive = 11,\r\n\t\tDBM_DBuffer_AlphaComposite = 12,\r\n\t\tDBM_DBuffer_EmissiveAlphaComposite = 13,\r\n\t\tDBM_Volumetric_DistanceFunction = 14,\r\n\t\tDBM_AlphaComposite = 15,\r\n\t\tDBM_AmbientOcclusion = 16,\r\n\t\tDBM_MAX = 17\r\n\t};\r\n\r\n\t// Enum Engine.ETextureColorChannel\r\n\tpublic enum ETextureColorChannel : byte {\r\n\t\tTCC_Red = 0,\r\n\t\tTCC_Green = 1,\r\n\t\tTCC_Blue = 2,\r\n\t\tTCC_Alpha = 3,\r\n\t\tTCC_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EMaterialAttributeBlend\r\n\tpublic enum EMaterialAttributeBlend : byte {\r\n\t\tBlend = 0,\r\n\t\tUseA = 1,\r\n\t\tUseB = 2,\r\n\t\tEMaterialAttributeBlend_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EChannelMaskParameterColor\r\n\tpublic enum EChannelMaskParameterColor : byte {\r\n\t\tRed = 0,\r\n\t\tGreen = 1,\r\n\t\tBlue = 2,\r\n\t\tAlpha = 3,\r\n\t\tEChannelMaskParameterColor_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EClampMode\r\n\tpublic enum EClampMode : byte {\r\n\t\tCMODE_Clamp = 0,\r\n\t\tCMODE_ClampMin = 1,\r\n\t\tCMODE_ClampMax = 2,\r\n\t\tCMODE_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ECustomMaterialOutputType\r\n\tpublic enum ECustomMaterialOutputType : byte {\r\n\t\tCMOT_Float1 = 0,\r\n\t\tCMOT_Float2 = 1,\r\n\t\tCMOT_Float3 = 2,\r\n\t\tCMOT_Float4 = 3,\r\n\t\tCMOT_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EDepthOfFieldFunctionValue\r\n\tpublic enum EDepthOfFieldFunctionValue : byte {\r\n\t\tTDOF_NearAndFarMask = 0,\r\n\t\tTDOF_NearMask = 1,\r\n\t\tTDOF_FarMask = 2,\r\n\t\tTDOF_CircleOfConfusionRadius = 3,\r\n\t\tTDOF_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EFunctionInputType\r\n\tpublic enum EFunctionInputType : byte {\r\n\t\tFunctionInput_Scalar = 0,\r\n\t\tFunctionInput_Vector2 = 1,\r\n\t\tFunctionInput_Vector3 = 2,\r\n\t\tFunctionInput_Vector4 = 3,\r\n\t\tFunctionInput_Texture2D = 4,\r\n\t\tFunctionInput_TextureCube = 5,\r\n\t\tFunctionInput_Texture2DArray = 6,\r\n\t\tFunctionInput_VolumeTexture = 7,\r\n\t\tFunctionInput_StaticBool = 8,\r\n\t\tFunctionInput_MaterialAttributes = 9,\r\n\t\tFunctionInput_TextureExternal = 10,\r\n\t\tFunctionInput_MAX = 11\r\n\t};\r\n\r\n\t// Enum Engine.ENoiseFunction\r\n\tpublic enum ENoiseFunction : byte {\r\n\t\tNOISEFUNCTION_SimplexTex = 0,\r\n\t\tNOISEFUNCTION_GradientTex = 1,\r\n\t\tNOISEFUNCTION_GradientTex3D = 2,\r\n\t\tNOISEFUNCTION_GradientALU = 3,\r\n\t\tNOISEFUNCTION_ValueALU = 4,\r\n\t\tNOISEFUNCTION_VoronoiALU = 5,\r\n\t\tNOISEFUNCTION_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.ERuntimeVirtualTextureMipValueMode\r\n\tpublic enum ERuntimeVirtualTextureMipValueMode : byte {\r\n\t\tRVTMVM_None = 0,\r\n\t\tRVTMVM_MipLevel = 1,\r\n\t\tRVTMVM_MipBias = 2,\r\n\t\tRVTMVM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EMaterialSceneAttributeInputMode\r\n\tpublic enum EMaterialSceneAttributeInputMode : byte {\r\n\t\tCoordinates = 0,\r\n\t\tOffsetFraction = 1,\r\n\t\tEMaterialSceneAttributeInputMode_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ESpeedTreeLODType\r\n\tpublic enum ESpeedTreeLODType : byte {\r\n\t\tSTLOD_Pop = 0,\r\n\t\tSTLOD_Smooth = 1,\r\n\t\tSTLOD_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ESpeedTreeWindType\r\n\tpublic enum ESpeedTreeWindType : byte {\r\n\t\tSTW_None = 0,\r\n\t\tSTW_Fastest = 1,\r\n\t\tSTW_Fast = 2,\r\n\t\tSTW_Better = 3,\r\n\t\tSTW_Best = 4,\r\n\t\tSTW_Palm = 5,\r\n\t\tSTW_BestPlus = 6,\r\n\t\tSTW_MAX = 7\r\n\t};\r\n\r\n\t// Enum Engine.ESpeedTreeGeometryType\r\n\tpublic enum ESpeedTreeGeometryType : byte {\r\n\t\tSTG_Branch = 0,\r\n\t\tSTG_Frond = 1,\r\n\t\tSTG_Leaf = 2,\r\n\t\tSTG_FacingLeaf = 3,\r\n\t\tSTG_Billboard = 4,\r\n\t\tSTG_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EMaterialExposedTextureProperty\r\n\tpublic enum EMaterialExposedTextureProperty : byte {\r\n\t\tTMTM_TextureSize = 0,\r\n\t\tTMTM_TexelSize = 1,\r\n\t\tTMTM_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ETextureMipValueMode\r\n\tpublic enum ETextureMipValueMode : byte {\r\n\t\tTMVM_None = 0,\r\n\t\tTMVM_MipLevel = 1,\r\n\t\tTMVM_MipBias = 2,\r\n\t\tTMVM_Derivative = 3,\r\n\t\tTMVM_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EMaterialVectorCoordTransform\r\n\tpublic enum EMaterialVectorCoordTransform : byte {\r\n\t\tTRANSFORM_Tangent = 0,\r\n\t\tTRANSFORM_Local = 1,\r\n\t\tTRANSFORM_World = 2,\r\n\t\tTRANSFORM_View = 3,\r\n\t\tTRANSFORM_Camera = 4,\r\n\t\tTRANSFORM_ParticleWorld = 5,\r\n\t\tTRANSFORM_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.EMaterialVectorCoordTransformSource\r\n\tpublic enum EMaterialVectorCoordTransformSource : byte {\r\n\t\tTRANSFORMSOURCE_Tangent = 0,\r\n\t\tTRANSFORMSOURCE_Local = 1,\r\n\t\tTRANSFORMSOURCE_World = 2,\r\n\t\tTRANSFORMSOURCE_View = 3,\r\n\t\tTRANSFORMSOURCE_Camera = 4,\r\n\t\tTRANSFORMSOURCE_ParticleWorld = 5,\r\n\t\tTRANSFORMSOURCE_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.EMaterialPositionTransformSource\r\n\tpublic enum EMaterialPositionTransformSource : byte {\r\n\t\tTRANSFORMPOSSOURCE_Local = 0,\r\n\t\tTRANSFORMPOSSOURCE_World = 1,\r\n\t\tTRANSFORMPOSSOURCE_TranslatedWorld = 2,\r\n\t\tTRANSFORMPOSSOURCE_View = 3,\r\n\t\tTRANSFORMPOSSOURCE_Camera = 4,\r\n\t\tTRANSFORMPOSSOURCE_Particle = 5,\r\n\t\tTRANSFORMPOSSOURCE_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.EVectorNoiseFunction\r\n\tpublic enum EVectorNoiseFunction : byte {\r\n\t\tVNF_CellnoiseALU = 0,\r\n\t\tVNF_VectorALU = 1,\r\n\t\tVNF_GradientALU = 2,\r\n\t\tVNF_CurlALU = 3,\r\n\t\tVNF_VoronoiALU = 4,\r\n\t\tVNF_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EMaterialExposedViewProperty\r\n\tpublic enum EMaterialExposedViewProperty : byte {\r\n\t\tMEVP_BufferSize = 0,\r\n\t\tMEVP_FieldOfView = 1,\r\n\t\tMEVP_TanHalfFieldOfView = 2,\r\n\t\tMEVP_ViewSize = 3,\r\n\t\tMEVP_WorldSpaceViewPosition = 4,\r\n\t\tMEVP_WorldSpaceCameraPosition = 5,\r\n\t\tMEVP_ViewportOffset = 6,\r\n\t\tMEVP_TemporalSampleCount = 7,\r\n\t\tMEVP_TemporalSampleIndex = 8,\r\n\t\tMEVP_TemporalSampleOffset = 9,\r\n\t\tMEVP_RuntimeVirtualTextureOutputLevel = 10,\r\n\t\tMEVP_RuntimeVirtualTextureOutputDerivative = 11,\r\n\t\tMEVP_PreExposure = 12,\r\n\t\tMEVP_MAX = 13\r\n\t};\r\n\r\n\t// Enum Engine.EWorldPositionIncludedOffsets\r\n\tpublic enum EWorldPositionIncludedOffsets : byte {\r\n\t\tWPT_Default = 0,\r\n\t\tWPT_ExcludeAllShaderOffsets = 1,\r\n\t\tWPT_CameraRelative = 2,\r\n\t\tWPT_CameraRelativeNoOffsets = 3,\r\n\t\tWPT_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EMaterialFunctionUsage\r\n\tpublic enum EMaterialFunctionUsage : byte {\r\n\t\tDefault = 0,\r\n\t\tMaterialLayer = 1,\r\n\t\tMaterialLayerBlend = 2,\r\n\t\tEMaterialFunctionUsage_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EMaterialUsage\r\n\tpublic enum EMaterialUsage : byte {\r\n\t\tMATUSAGE_SkeletalMesh = 0,\r\n\t\tMATUSAGE_ParticleSprites = 1,\r\n\t\tMATUSAGE_BeamTrails = 2,\r\n\t\tMATUSAGE_MeshParticles = 3,\r\n\t\tMATUSAGE_StaticLighting = 4,\r\n\t\tMATUSAGE_MorphTargets = 5,\r\n\t\tMATUSAGE_SplineMesh = 6,\r\n\t\tMATUSAGE_InstancedStaticMeshes = 7,\r\n\t\tMATUSAGE_GeometryCollections = 8,\r\n\t\tMATUSAGE_Clothing = 9,\r\n\t\tMATUSAGE_NiagaraSprites = 10,\r\n\t\tMATUSAGE_NiagaraRibbons = 11,\r\n\t\tMATUSAGE_NiagaraMeshParticles = 12,\r\n\t\tMATUSAGE_GeometryCache = 13,\r\n\t\tMATUSAGE_Water = 14,\r\n\t\tMATUSAGE_HairStrands = 15,\r\n\t\tMATUSAGE_LidarPointCloud = 16,\r\n\t\tMATUSAGE_MAX = 17\r\n\t};\r\n\r\n\t// Enum Engine.EMaterialParameterAssociation\r\n\tpublic enum EMaterialParameterAssociation : byte {\r\n\t\tLayerParameter = 0,\r\n\t\tBlendParameter = 1,\r\n\t\tGlobalParameter = 2,\r\n\t\tEMaterialParameterAssociation_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EMaterialMergeType\r\n\tpublic enum EMaterialMergeType : byte {\r\n\t\tMaterialMergeType_Default = 0,\r\n\t\tMaterialMergeType_Simplygon = 1,\r\n\t\tMaterialMergeType_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ETextureSizingType\r\n\tpublic enum ETextureSizingType : byte {\r\n\t\tTextureSizingType_UseSingleTextureSize = 0,\r\n\t\tTextureSizingType_UseAutomaticBiasedSizes = 1,\r\n\t\tTextureSizingType_UseManualOverrideTextureSize = 2,\r\n\t\tTextureSizingType_UseSimplygonAutomaticSizing = 3,\r\n\t\tTextureSizingType_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.ESceneTextureId\r\n\tpublic enum ESceneTextureId : byte {\r\n\t\tPPI_SceneColor = 0,\r\n\t\tPPI_SceneDepth = 1,\r\n\t\tPPI_DiffuseColor = 2,\r\n\t\tPPI_SpecularColor = 3,\r\n\t\tPPI_SubsurfaceColor = 4,\r\n\t\tPPI_BaseColor = 5,\r\n\t\tPPI_Specular = 6,\r\n\t\tPPI_Metallic = 7,\r\n\t\tPPI_WorldNormal = 8,\r\n\t\tPPI_SeparateTranslucency = 9,\r\n\t\tPPI_Opacity = 10,\r\n\t\tPPI_Roughness = 11,\r\n\t\tPPI_MaterialAO = 12,\r\n\t\tPPI_CustomDepth = 13,\r\n\t\tPPI_PostProcessInput0 = 14,\r\n\t\tPPI_PostProcessInput1 = 15,\r\n\t\tPPI_PostProcessInput2 = 16,\r\n\t\tPPI_PostProcessInput3 = 17,\r\n\t\tPPI_PostProcessInput4 = 18,\r\n\t\tPPI_PostProcessInput5 = 19,\r\n\t\tPPI_PostProcessInput6 = 20,\r\n\t\tPPI_DecalMask = 21,\r\n\t\tPPI_ShadingModelColor = 22,\r\n\t\tPPI_ShadingModelID = 23,\r\n\t\tPPI_AmbientOcclusion = 24,\r\n\t\tPPI_CustomStencil = 25,\r\n\t\tPPI_StoredBaseColor = 26,\r\n\t\tPPI_StoredSpecular = 27,\r\n\t\tPPI_Velocity = 28,\r\n\t\tPPI_WorldTangent = 29,\r\n\t\tPPI_Anisotropy = 30,\r\n\t\tPPI_MAX = 31\r\n\t};\r\n\r\n\t// Enum Engine.EMaterialDomain\r\n\tpublic enum EMaterialDomain : byte {\r\n\t\tMD_Surface = 0,\r\n\t\tMD_DeferredDecal = 1,\r\n\t\tMD_LightFunction = 2,\r\n\t\tMD_Volume = 3,\r\n\t\tMD_PostProcess = 4,\r\n\t\tMD_UI = 5,\r\n\t\tMD_RuntimeVirtualTexture = 6,\r\n\t\tMD_MAX = 7\r\n\t};\r\n\r\n\t// Enum Engine.EMeshInstancingReplacementMethod\r\n\tpublic enum EMeshInstancingReplacementMethod : byte {\r\n\t\tRemoveOriginalActors = 0,\r\n\t\tKeepOriginalActorsAsEditorOnly = 1,\r\n\t\tEMeshInstancingReplacementMethod_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EUVOutput\r\n\tpublic enum EUVOutput : byte {\r\n\t\tDoNotOutputChannel = 0,\r\n\t\tOutputChannel = 1,\r\n\t\tEUVOutput_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EMeshMergeType\r\n\tpublic enum EMeshMergeType : byte {\r\n\t\tMeshMergeType_Default = 0,\r\n\t\tMeshMergeType_MergeActor = 1,\r\n\t\tMeshMergeType_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EMeshLODSelectionType\r\n\tpublic enum EMeshLODSelectionType : byte {\r\n\t\tAllLODs = 0,\r\n\t\tSpecificLOD = 1,\r\n\t\tCalculateLOD = 2,\r\n\t\tLowestDetailLOD = 3,\r\n\t\tEMeshLODSelectionType_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EProxyNormalComputationMethod\r\n\tpublic enum EProxyNormalComputationMethod : byte {\r\n\t\tAngleWeighted = 0,\r\n\t\tAreaWeighted = 1,\r\n\t\tEqualWeighted = 2,\r\n\t\tEProxyNormalComputationMethod_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ELandscapeCullingPrecision\r\n\tpublic enum ELandscapeCullingPrecision : byte {\r\n\t\tHigh = 0,\r\n\t\tMedium = 1,\r\n\t\tLow = 2,\r\n\t\tELandscapeCullingPrecision_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EStaticMeshReductionTerimationCriterion\r\n\tpublic enum EStaticMeshReductionTerimationCriterion : byte {\r\n\t\tTriangles = 0,\r\n\t\tVertices = 1,\r\n\t\tAny = 2,\r\n\t\tEStaticMeshReductionTerimationCriterion_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EMeshFeatureImportance\r\n\tpublic enum EMeshFeatureImportance : byte {\r\n\t\tOff = 0,\r\n\t\tLowest = 1,\r\n\t\tLow = 2,\r\n\t\tNormal = 3,\r\n\t\tHigh = 4,\r\n\t\tHighest = 5,\r\n\t\tEMeshFeatureImportance_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.EVertexPaintAxis\r\n\tpublic enum EVertexPaintAxis : byte {\r\n\t\tX = 0,\r\n\t\tY = 1,\r\n\t\tZ = 2,\r\n\t\tEVertexPaintAxis_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EMicroTransactionResult\r\n\tpublic enum EMicroTransactionResult : byte {\r\n\t\tMTR_Succeeded = 0,\r\n\t\tMTR_Failed = 1,\r\n\t\tMTR_Canceled = 2,\r\n\t\tMTR_RestoredFromServer = 3,\r\n\t\tMTR_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EMicroTransactionDelegate\r\n\tpublic enum EMicroTransactionDelegate : byte {\r\n\t\tMTD_PurchaseQueryComplete = 0,\r\n\t\tMTD_PurchaseComplete = 1,\r\n\t\tMTD_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.FNavigationSystemRunMode\r\n\tpublic enum FNavigationSystemRunMode : byte {\r\n\t\tInvalidMode = 0,\r\n\t\tGameMode = 1,\r\n\t\tEditorMode = 2,\r\n\t\tSimulationMode = 3,\r\n\t\tPIEMode = 4,\r\n\t\tFNavigationSystemRunMode_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.ENavigationQueryResult\r\n\tpublic enum ENavigationQueryResult : byte {\r\n\t\tInvalid = 0,\r\n\t\tError = 1,\r\n\t\tFail = 2,\r\n\t\tSuccess = 3,\r\n\t\tENavigationQueryResult_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.ENavPathEvent\r\n\tpublic enum ENavPathEvent : byte {\r\n\t\tCleared = 0,\r\n\t\tNewPath = 1,\r\n\t\tUpdatedDueToGoalMoved = 2,\r\n\t\tUpdatedDueToNavigationChanged = 3,\r\n\t\tInvalidated = 4,\r\n\t\tRePathFailed = 5,\r\n\t\tMetaPathUpdate = 6,\r\n\t\tCustom = 7,\r\n\t\tENavPathEvent_MAX = 8\r\n\t};\r\n\r\n\t// Enum Engine.ENavDataGatheringModeConfig\r\n\tpublic enum ENavDataGatheringModeConfig : byte {\r\n\t\tInvalid = 0,\r\n\t\tInstant = 1,\r\n\t\tLazy = 2,\r\n\t\tENavDataGatheringModeConfig_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ENavDataGatheringMode\r\n\tpublic enum ENavDataGatheringMode : byte {\r\n\t\tDefault = 0,\r\n\t\tInstant = 1,\r\n\t\tLazy = 2,\r\n\t\tENavDataGatheringMode_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ENavigationOptionFlag\r\n\tpublic enum ENavigationOptionFlag : byte {\r\n\t\tDefault = 0,\r\n\t\tEnable = 1,\r\n\t\tDisable = 2,\r\n\t\tMAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ENavLinkDirection\r\n\tpublic enum ENavLinkDirection : byte {\r\n\t\tBothWays = 0,\r\n\t\tLeftToRight = 1,\r\n\t\tRightToLeft = 2,\r\n\t\tENavLinkDirection_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EFastArraySerializerDeltaFlags\r\n\tpublic enum EFastArraySerializerDeltaFlags : byte {\r\n\t\tNone = 0,\r\n\t\tHasBeenSerialized = 1,\r\n\t\tHasDeltaBeenRequested = 2,\r\n\t\tIsUsingDeltaSerialization = 4,\r\n\t\tEFastArraySerializerDeltaFlags_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EEmitterRenderMode\r\n\tpublic enum EEmitterRenderMode : byte {\r\n\t\tERM_Normal = 0,\r\n\t\tERM_Point = 1,\r\n\t\tERM_Cross = 2,\r\n\t\tERM_LightsOnly = 3,\r\n\t\tERM_None = 4,\r\n\t\tERM_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EParticleSubUVInterpMethod\r\n\tpublic enum EParticleSubUVInterpMethod : byte {\r\n\t\tPSUVIM_None = 0,\r\n\t\tPSUVIM_Linear = 1,\r\n\t\tPSUVIM_Linear_Blend = 2,\r\n\t\tPSUVIM_Random = 3,\r\n\t\tPSUVIM_Random_Blend = 4,\r\n\t\tPSUVIM_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EParticleBurstMethod\r\n\tpublic enum EParticleBurstMethod : byte {\r\n\t\tEPBM_Instant = 0,\r\n\t\tEPBM_Interpolated = 1,\r\n\t\tEPBM_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EParticleSystemInsignificanceReaction\r\n\tpublic enum EParticleSystemInsignificanceReaction : byte {\r\n\t\tAuto = 0,\r\n\t\tComplete = 1,\r\n\t\tDisableTick = 2,\r\n\t\tDisableTickAndKill = 3,\r\n\t\tNum = 4,\r\n\t\tEParticleSystemInsignificanceReaction_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EParticleSignificanceLevel\r\n\tpublic enum EParticleSignificanceLevel : byte {\r\n\t\tLow = 0,\r\n\t\tMedium = 1,\r\n\t\tHigh = 2,\r\n\t\tCritical = 3,\r\n\t\tNum = 4,\r\n\t\tEParticleSignificanceLevel_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EParticleDetailMode\r\n\tpublic enum EParticleDetailMode : byte {\r\n\t\tPDM_Low = 0,\r\n\t\tPDM_Medium = 1,\r\n\t\tPDM_High = 2,\r\n\t\tPDM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EParticleSourceSelectionMethod\r\n\tpublic enum EParticleSourceSelectionMethod : byte {\r\n\t\tEPSSM_Random = 0,\r\n\t\tEPSSM_Sequential = 1,\r\n\t\tEPSSM_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EModuleType\r\n\tpublic enum EModuleType : byte {\r\n\t\tEPMT_General = 0,\r\n\t\tEPMT_TypeData = 1,\r\n\t\tEPMT_Beam = 2,\r\n\t\tEPMT_Trail = 3,\r\n\t\tEPMT_Spawn = 4,\r\n\t\tEPMT_Required = 5,\r\n\t\tEPMT_Event = 6,\r\n\t\tEPMT_Light = 7,\r\n\t\tEPMT_SubUV = 8,\r\n\t\tEPMT_MAX = 9\r\n\t};\r\n\r\n\t// Enum Engine.EAttractorParticleSelectionMethod\r\n\tpublic enum EAttractorParticleSelectionMethod : byte {\r\n\t\tEAPSM_Random = 0,\r\n\t\tEAPSM_Sequential = 1,\r\n\t\tEAPSM_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.Beam2SourceTargetTangentMethod\r\n\tpublic enum Beam2SourceTargetTangentMethod : byte {\r\n\t\tPEB2STTM_Direct = 0,\r\n\t\tPEB2STTM_UserSet = 1,\r\n\t\tPEB2STTM_Distribution = 2,\r\n\t\tPEB2STTM_Emitter = 3,\r\n\t\tPEB2STTM_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.Beam2SourceTargetMethod\r\n\tpublic enum Beam2SourceTargetMethod : byte {\r\n\t\tPEB2STM_Default = 0,\r\n\t\tPEB2STM_UserSet = 1,\r\n\t\tPEB2STM_Emitter = 2,\r\n\t\tPEB2STM_Particle = 3,\r\n\t\tPEB2STM_Actor = 4,\r\n\t\tPEB2STM_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.BeamModifierType\r\n\tpublic enum BeamModifierType : byte {\r\n\t\tPEB2MT_Source = 0,\r\n\t\tPEB2MT_Target = 1,\r\n\t\tPEB2MT_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EParticleCameraOffsetUpdateMethod\r\n\tpublic enum EParticleCameraOffsetUpdateMethod : byte {\r\n\t\tEPCOUM_DirectSet = 0,\r\n\t\tEPCOUM_Additive = 1,\r\n\t\tEPCOUM_Scalar = 2,\r\n\t\tEPCOUM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EParticleCollisionComplete\r\n\tpublic enum EParticleCollisionComplete : byte {\r\n\t\tEPCC_Kill = 0,\r\n\t\tEPCC_Freeze = 1,\r\n\t\tEPCC_HaltCollisions = 2,\r\n\t\tEPCC_FreezeTranslation = 3,\r\n\t\tEPCC_FreezeRotation = 4,\r\n\t\tEPCC_FreezeMovement = 5,\r\n\t\tEPCC_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.EParticleCollisionResponse\r\n\tpublic enum EParticleCollisionResponse : byte {\r\n\t\tBounce = 0,\r\n\t\tStop = 1,\r\n\t\tKill = 2,\r\n\t\tEParticleCollisionResponse_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ELocationBoneSocketSelectionMethod\r\n\tpublic enum ELocationBoneSocketSelectionMethod : byte {\r\n\t\tBONESOCKETSEL_Sequential = 0,\r\n\t\tBONESOCKETSEL_Random = 1,\r\n\t\tBONESOCKETSEL_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ELocationBoneSocketSource\r\n\tpublic enum ELocationBoneSocketSource : byte {\r\n\t\tBONESOCKETSOURCE_Bones = 0,\r\n\t\tBONESOCKETSOURCE_Sockets = 1,\r\n\t\tBONESOCKETSOURCE_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ELocationEmitterSelectionMethod\r\n\tpublic enum ELocationEmitterSelectionMethod : byte {\r\n\t\tELESM_Random = 0,\r\n\t\tELESM_Sequential = 1,\r\n\t\tELESM_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.CylinderHeightAxis\r\n\tpublic enum CylinderHeightAxis : byte {\r\n\t\tPMLPC_HEIGHTAXIS_X = 0,\r\n\t\tPMLPC_HEIGHTAXIS_Y = 1,\r\n\t\tPMLPC_HEIGHTAXIS_Z = 2,\r\n\t\tPMLPC_HEIGHTAXIS_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ELocationSkelVertSurfaceSource\r\n\tpublic enum ELocationSkelVertSurfaceSource : byte {\r\n\t\tVERTSURFACESOURCE_Vert = 0,\r\n\t\tVERTSURFACESOURCE_Surface = 1,\r\n\t\tVERTSURFACESOURCE_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EOrbitChainMode\r\n\tpublic enum EOrbitChainMode : byte {\r\n\t\tEOChainMode_Add = 0,\r\n\t\tEOChainMode_Scale = 1,\r\n\t\tEOChainMode_Link = 2,\r\n\t\tEOChainMode_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EParticleAxisLock\r\n\tpublic enum EParticleAxisLock : byte {\r\n\t\tEPAL_NONE = 0,\r\n\t\tEPAL_X = 1,\r\n\t\tEPAL_Y = 2,\r\n\t\tEPAL_Z = 3,\r\n\t\tEPAL_NEGATIVE_X = 4,\r\n\t\tEPAL_NEGATIVE_Y = 5,\r\n\t\tEPAL_NEGATIVE_Z = 6,\r\n\t\tEPAL_ROTATE_X = 7,\r\n\t\tEPAL_ROTATE_Y = 8,\r\n\t\tEPAL_ROTATE_Z = 9,\r\n\t\tEPAL_MAX = 10\r\n\t};\r\n\r\n\t// Enum Engine.EEmitterDynamicParameterValue\r\n\tpublic enum EEmitterDynamicParameterValue : byte {\r\n\t\tEDPV_UserSet = 0,\r\n\t\tEDPV_AutoSet = 1,\r\n\t\tEDPV_VelocityX = 2,\r\n\t\tEDPV_VelocityY = 3,\r\n\t\tEDPV_VelocityZ = 4,\r\n\t\tEDPV_VelocityMag = 5,\r\n\t\tEDPV_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.EEmitterNormalsMode\r\n\tpublic enum EEmitterNormalsMode : byte {\r\n\t\tENM_CameraFacing = 0,\r\n\t\tENM_Spherical = 1,\r\n\t\tENM_Cylindrical = 2,\r\n\t\tENM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EParticleSortMode\r\n\tpublic enum EParticleSortMode : byte {\r\n\t\tPSORTMODE_None = 0,\r\n\t\tPSORTMODE_ViewProjDepth = 1,\r\n\t\tPSORTMODE_DistanceToView = 2,\r\n\t\tPSORTMODE_Age_OldestFirst = 3,\r\n\t\tPSORTMODE_Age_NewestFirst = 4,\r\n\t\tPSORTMODE_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EParticleUVFlipMode\r\n\tpublic enum EParticleUVFlipMode : byte {\r\n\t\tNone = 0,\r\n\t\tFlipUV = 1,\r\n\t\tFlipUOnly = 2,\r\n\t\tFlipVOnly = 3,\r\n\t\tRandomFlipUV = 4,\r\n\t\tRandomFlipUOnly = 5,\r\n\t\tRandomFlipVOnly = 6,\r\n\t\tRandomFlipUVIndependent = 7,\r\n\t\tEParticleUVFlipMode_MAX = 8\r\n\t};\r\n\r\n\t// Enum Engine.ETrail2SourceMethod\r\n\tpublic enum ETrail2SourceMethod : byte {\r\n\t\tPET2SRCM_Default = 0,\r\n\t\tPET2SRCM_Particle = 1,\r\n\t\tPET2SRCM_Actor = 2,\r\n\t\tPET2SRCM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EBeamTaperMethod\r\n\tpublic enum EBeamTaperMethod : byte {\r\n\t\tPEBTM_None = 0,\r\n\t\tPEBTM_Full = 1,\r\n\t\tPEBTM_Partial = 2,\r\n\t\tPEBTM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EBeam2Method\r\n\tpublic enum EBeam2Method : byte {\r\n\t\tPEB2M_Distance = 0,\r\n\t\tPEB2M_Target = 1,\r\n\t\tPEB2M_Branch = 2,\r\n\t\tPEB2M_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EMeshCameraFacingOptions\r\n\tpublic enum EMeshCameraFacingOptions : byte {\r\n\t\tXAxisFacing_NoUp = 0,\r\n\t\tXAxisFacing_ZUp = 1,\r\n\t\tXAxisFacing_NegativeZUp = 2,\r\n\t\tXAxisFacing_YUp = 3,\r\n\t\tXAxisFacing_NegativeYUp = 4,\r\n\t\tLockedAxis_ZAxisFacing = 5,\r\n\t\tLockedAxis_NegativeZAxisFacing = 6,\r\n\t\tLockedAxis_YAxisFacing = 7,\r\n\t\tLockedAxis_NegativeYAxisFacing = 8,\r\n\t\tVelocityAligned_ZAxisFacing = 9,\r\n\t\tVelocityAligned_NegativeZAxisFacing = 10,\r\n\t\tVelocityAligned_YAxisFacing = 11,\r\n\t\tVelocityAligned_NegativeYAxisFacing = 12,\r\n\t\tEMeshCameraFacingOptions_MAX = 13\r\n\t};\r\n\r\n\t// Enum Engine.EMeshCameraFacingUpAxis\r\n\tpublic enum EMeshCameraFacingUpAxis : byte {\r\n\t\tCameraFacing_NoneUP = 0,\r\n\t\tCameraFacing_ZUp = 1,\r\n\t\tCameraFacing_NegativeZUp = 2,\r\n\t\tCameraFacing_YUp = 3,\r\n\t\tCameraFacing_NegativeYUp = 4,\r\n\t\tCameraFacing_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EMeshScreenAlignment\r\n\tpublic enum EMeshScreenAlignment : byte {\r\n\t\tPSMA_MeshFaceCameraWithRoll = 0,\r\n\t\tPSMA_MeshFaceCameraWithSpin = 1,\r\n\t\tPSMA_MeshFaceCameraWithLockedAxis = 2,\r\n\t\tPSMA_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ETrailsRenderAxisOption\r\n\tpublic enum ETrailsRenderAxisOption : byte {\r\n\t\tTrails_CameraUp = 0,\r\n\t\tTrails_SourceUp = 1,\r\n\t\tTrails_WorldUp = 2,\r\n\t\tTrails_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EParticleScreenAlignment\r\n\tpublic enum EParticleScreenAlignment : byte {\r\n\t\tPSA_FacingCameraPosition = 0,\r\n\t\tPSA_Square = 1,\r\n\t\tPSA_Rectangle = 2,\r\n\t\tPSA_Velocity = 3,\r\n\t\tPSA_AwayFromCenter = 4,\r\n\t\tPSA_TypeSpecific = 5,\r\n\t\tPSA_FacingCameraDistanceBlend = 6,\r\n\t\tPSA_MAX = 7\r\n\t};\r\n\r\n\t// Enum Engine.EParticleSystemOcclusionBoundsMethod\r\n\tpublic enum EParticleSystemOcclusionBoundsMethod : byte {\r\n\t\tEPSOBM_None = 0,\r\n\t\tEPSOBM_ParticleBounds = 1,\r\n\t\tEPSOBM_CustomBounds = 2,\r\n\t\tEPSOBM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ParticleSystemLODMethod\r\n\tpublic enum ParticleSystemLODMethod : byte {\r\n\t\tPARTICLESYSTEMLODMETHOD_Automatic = 0,\r\n\t\tPARTICLESYSTEMLODMETHOD_DirectSet = 1,\r\n\t\tPARTICLESYSTEMLODMETHOD_ActivateAutomatic = 2,\r\n\t\tPARTICLESYSTEMLODMETHOD_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EParticleSystemUpdateMode\r\n\tpublic enum EParticleSystemUpdateMode : byte {\r\n\t\tEPSUM_RealTime = 0,\r\n\t\tEPSUM_FixedTime = 1,\r\n\t\tEPSUM_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EParticleEventType\r\n\tpublic enum EParticleEventType : byte {\r\n\t\tEPET_Any = 0,\r\n\t\tEPET_Spawn = 1,\r\n\t\tEPET_Death = 2,\r\n\t\tEPET_Collision = 3,\r\n\t\tEPET_Burst = 4,\r\n\t\tEPET_Blueprint = 5,\r\n\t\tEPET_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.ParticleReplayState\r\n\tpublic enum ParticleReplayState : byte {\r\n\t\tPRS_Disabled = 0,\r\n\t\tPRS_Capturing = 1,\r\n\t\tPRS_Replaying = 2,\r\n\t\tPRS_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EParticleSysParamType\r\n\tpublic enum EParticleSysParamType : byte {\r\n\t\tPSPT_None = 0,\r\n\t\tPSPT_Scalar = 1,\r\n\t\tPSPT_ScalarRand = 2,\r\n\t\tPSPT_Vector = 3,\r\n\t\tPSPT_VectorRand = 4,\r\n\t\tPSPT_Color = 5,\r\n\t\tPSPT_Actor = 6,\r\n\t\tPSPT_Material = 7,\r\n\t\tPSPT_VectorUnitRand = 8,\r\n\t\tPSPT_MAX = 9\r\n\t};\r\n\r\n\t// Enum Engine.ESettingsLockedAxis\r\n\tpublic enum ESettingsLockedAxis : byte {\r\n\t\tNone = 0,\r\n\t\tX = 1,\r\n\t\tY = 2,\r\n\t\tZ = 3,\r\n\t\tInvalid = 4,\r\n\t\tESettingsLockedAxis_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.ESettingsDOF\r\n\tpublic enum ESettingsDOF : byte {\r\n\t\tFull3D = 0,\r\n\t\tYZPlane = 1,\r\n\t\tXZPlane = 2,\r\n\t\tXYPlane = 3,\r\n\t\tESettingsDOF_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EFrictionCombineMode\r\n\tpublic enum EFrictionCombineMode : byte {\r\n\t\tAverage = 0,\r\n\t\tMin = 1,\r\n\t\tMultiply = 2,\r\n\t\tMax = 3\r\n\t};\r\n\r\n\t// Enum Engine.EViewTargetBlendFunction\r\n\tpublic enum EViewTargetBlendFunction : byte {\r\n\t\tVTBlend_Linear = 0,\r\n\t\tVTBlend_Cubic = 1,\r\n\t\tVTBlend_EaseIn = 2,\r\n\t\tVTBlend_EaseOut = 3,\r\n\t\tVTBlend_EaseInOut = 4,\r\n\t\tVTBlend_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EDynamicForceFeedbackAction\r\n\tpublic enum EDynamicForceFeedbackAction : byte {\r\n\t\tStart = 0,\r\n\t\tUpdate = 1,\r\n\t\tStop = 2,\r\n\t\tEDynamicForceFeedbackAction_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ERendererStencilMask\r\n\tpublic enum ERendererStencilMask : byte {\r\n\t\tERSM_Default = 0,\r\n\t\tERSM_256 = 1,\r\n\t\tERSM_2 = 2,\r\n\t\tERSM_3 = 3,\r\n\t\tERSM_5 = 4,\r\n\t\tERSM_9 = 5,\r\n\t\tERSM_17 = 6,\r\n\t\tERSM_33 = 7,\r\n\t\tERSM_65 = 8,\r\n\t\tERSM_129 = 9,\r\n\t\tERSM_MAX = 10\r\n\t};\r\n\r\n\t// Enum Engine.EHasCustomNavigableGeometry\r\n\tpublic enum EHasCustomNavigableGeometry : byte {\r\n\t\tNo = 0,\r\n\t\tYes = 1,\r\n\t\tEvenIfNotCollidable = 2,\r\n\t\tDontExport = 3,\r\n\t\tEHasCustomNavigableGeometry_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.ECanBeCharacterBase\r\n\tpublic enum ECanBeCharacterBase : byte {\r\n\t\tECB_No = 0,\r\n\t\tECB_Yes = 1,\r\n\t\tECB_Owner = 2,\r\n\t\tECB_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ERichCurveExtrapolation\r\n\tpublic enum ERichCurveExtrapolation : byte {\r\n\t\tRCCE_Cycle = 0,\r\n\t\tRCCE_CycleWithOffset = 1,\r\n\t\tRCCE_Oscillate = 2,\r\n\t\tRCCE_Linear = 3,\r\n\t\tRCCE_Constant = 4,\r\n\t\tRCCE_None = 5,\r\n\t\tRCCE_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.ERichCurveInterpMode\r\n\tpublic enum ERichCurveInterpMode : byte {\r\n\t\tRCIM_Linear = 0,\r\n\t\tRCIM_Constant = 1,\r\n\t\tRCIM_Cubic = 2,\r\n\t\tRCIM_None = 3,\r\n\t\tRCIM_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EReflectionSourceType\r\n\tpublic enum EReflectionSourceType : byte {\r\n\t\tCapturedScene = 0,\r\n\t\tSpecifiedCubemap = 1,\r\n\t\tEReflectionSourceType_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EDefaultBackBufferPixelFormat\r\n\tpublic enum EDefaultBackBufferPixelFormat : byte {\r\n\t\tDBBPF_B8G8R8A8 = 0,\r\n\t\tDBBPF_A16B16G16R16_DEPRECATED = 1,\r\n\t\tDBBPF_FloatRGB_DEPRECATED = 2,\r\n\t\tDBBPF_FloatRGBA = 3,\r\n\t\tDBBPF_A2B10G10R10 = 4,\r\n\t\tDBBPF_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EAutoExposureMethodUI\r\n\tpublic enum EAutoExposureMethodUI : byte {\r\n\t\tAEM_Histogram = 0,\r\n\t\tAEM_Basic = 1,\r\n\t\tAEM_Manual = 2,\r\n\t\tAEM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EAlphaChannelMode\r\n\tpublic enum EAlphaChannelMode : byte {\r\n\t\tDisabled = 0,\r\n\t\tLinearColorSpaceOnly = 1,\r\n\t\tAllowThroughTonemapper = 2,\r\n\t\tEAlphaChannelMode_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EEarlyZPass\r\n\tpublic enum EEarlyZPass : byte {\r\n\t\tNone = 0,\r\n\t\tOpaqueOnly = 1,\r\n\t\tOpaqueAndMasked = 2,\r\n\t\tAuto = 3,\r\n\t\tEEarlyZPass_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.ECustomDepthStencil\r\n\tpublic enum ECustomDepthStencil : byte {\r\n\t\tDisabled = 0,\r\n\t\tEnabled = 1,\r\n\t\tEnabledOnDemand = 2,\r\n\t\tEnabledWithStencil = 3,\r\n\t\tECustomDepthStencil_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EMobileMSAASampleCount\r\n\tpublic enum EMobileMSAASampleCount : byte {\r\n\t\tOne = 1,\r\n\t\tTwo = 2,\r\n\t\tFour = 4,\r\n\t\tEight = 8,\r\n\t\tEMobileMSAASampleCount_MAX = 9\r\n\t};\r\n\r\n\t// Enum Engine.ECompositingSampleCount\r\n\tpublic enum ECompositingSampleCount : byte {\r\n\t\tOne = 1,\r\n\t\tTwo = 2,\r\n\t\tFour = 4,\r\n\t\tEight = 8,\r\n\t\tECompositingSampleCount_MAX = 9\r\n\t};\r\n\r\n\t// Enum Engine.EClearSceneOptions\r\n\tpublic enum EClearSceneOptions : byte {\r\n\t\tNoClear = 0,\r\n\t\tHardwareClear = 1,\r\n\t\tQuadAtMaxZ = 2,\r\n\t\tEClearSceneOptions_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EReporterLineStyle\r\n\tpublic enum EReporterLineStyle : byte {\r\n\t\tLine = 0,\r\n\t\tDash = 1,\r\n\t\tEReporterLineStyle_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ELegendPosition\r\n\tpublic enum ELegendPosition : byte {\r\n\t\tOutside = 0,\r\n\t\tInside = 1,\r\n\t\tELegendPosition_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EGraphDataStyle\r\n\tpublic enum EGraphDataStyle : byte {\r\n\t\tLines = 0,\r\n\t\tFilled = 1,\r\n\t\tEGraphDataStyle_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EGraphAxisStyle\r\n\tpublic enum EGraphAxisStyle : byte {\r\n\t\tLines = 0,\r\n\t\tNotches = 1,\r\n\t\tGrid = 2,\r\n\t\tEGraphAxisStyle_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ReverbPreset\r\n\tpublic enum ReverbPreset : byte {\r\n\t\tREVERB_Default = 0,\r\n\t\tREVERB_Bathroom = 1,\r\n\t\tREVERB_StoneRoom = 2,\r\n\t\tREVERB_Auditorium = 3,\r\n\t\tREVERB_ConcertHall = 4,\r\n\t\tREVERB_Cave = 5,\r\n\t\tREVERB_Hallway = 6,\r\n\t\tREVERB_StoneCorridor = 7,\r\n\t\tREVERB_Alley = 8,\r\n\t\tREVERB_Forest = 9,\r\n\t\tREVERB_City = 10,\r\n\t\tREVERB_Mountains = 11,\r\n\t\tREVERB_Quarry = 12,\r\n\t\tREVERB_Plain = 13,\r\n\t\tREVERB_ParkingLot = 14,\r\n\t\tREVERB_SewerPipe = 15,\r\n\t\tREVERB_Underwater = 16,\r\n\t\tREVERB_SmallRoom = 17,\r\n\t\tREVERB_MediumRoom = 18,\r\n\t\tREVERB_LargeRoom = 19,\r\n\t\tREVERB_MediumHall = 20,\r\n\t\tREVERB_LargeHall = 21,\r\n\t\tREVERB_Plate = 22,\r\n\t\tREVERB_MAX = 23\r\n\t};\r\n\r\n\t// Enum Engine.ERichCurveKeyTimeCompressionFormat\r\n\tpublic enum ERichCurveKeyTimeCompressionFormat : byte {\r\n\t\tRCKTCF_uint16 = 0,\r\n\t\tRCKTCF_float32 = 1,\r\n\t\tRCKTCF_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ERichCurveCompressionFormat\r\n\tpublic enum ERichCurveCompressionFormat : byte {\r\n\t\tRCCF_Empty = 0,\r\n\t\tRCCF_Constant = 1,\r\n\t\tRCCF_Linear = 2,\r\n\t\tRCCF_Cubic = 3,\r\n\t\tRCCF_Mixed = 4,\r\n\t\tRCCF_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.ERichCurveTangentWeightMode\r\n\tpublic enum ERichCurveTangentWeightMode : byte {\r\n\t\tRCTWM_WeightedNone = 0,\r\n\t\tRCTWM_WeightedArrive = 1,\r\n\t\tRCTWM_WeightedLeave = 2,\r\n\t\tRCTWM_WeightedBoth = 3,\r\n\t\tRCTWM_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.ERichCurveTangentMode\r\n\tpublic enum ERichCurveTangentMode : byte {\r\n\t\tRCTM_Auto = 0,\r\n\t\tRCTM_User = 1,\r\n\t\tRCTM_Break = 2,\r\n\t\tRCTM_None = 3,\r\n\t\tRCTM_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EConstraintTransform\r\n\tpublic enum EConstraintTransform : byte {\r\n\t\tAbsolute = 0,\r\n\t\tRelative = 1,\r\n\t\tEConstraintTransform_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EControlConstraint\r\n\tpublic enum EControlConstraint : byte {\r\n\t\tOrientation = 0,\r\n\t\tTranslation = 1,\r\n\t\tMAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ERootMotionFinishVelocityMode\r\n\tpublic enum ERootMotionFinishVelocityMode : byte {\r\n\t\tMaintainLastRootMotionVelocity = 0,\r\n\t\tSetVelocity = 1,\r\n\t\tClampVelocity = 2,\r\n\t\tERootMotionFinishVelocityMode_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ERootMotionSourceSettingsFlags\r\n\tpublic enum ERootMotionSourceSettingsFlags : byte {\r\n\t\tUseSensitiveLiftoffCheck = 1,\r\n\t\tDisablePartialEndTick = 2,\r\n\t\tIgnoreZAccumulate = 4,\r\n\t\tERootMotionSourceSettingsFlags_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.ERootMotionSourceStatusFlags\r\n\tpublic enum ERootMotionSourceStatusFlags : byte {\r\n\t\tPrepared = 1,\r\n\t\tFinished = 2,\r\n\t\tMarkedForRemoval = 4,\r\n\t\tERootMotionSourceStatusFlags_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.ERootMotionAccumulateMode\r\n\tpublic enum ERootMotionAccumulateMode : byte {\r\n\t\tOverride = 0,\r\n\t\tAdditive = 1,\r\n\t\tERootMotionAccumulateMode_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ERuntimeVirtualTextureMainPassType\r\n\tpublic enum ERuntimeVirtualTextureMainPassType : byte {\r\n\t\tNever = 0,\r\n\t\tExclusive = 1,\r\n\t\tAlways = 2,\r\n\t\tERuntimeVirtualTextureMainPassType_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ERuntimeVirtualTextureMaterialType\r\n\tpublic enum ERuntimeVirtualTextureMaterialType : byte {\r\n\t\tBaseColor = 0,\r\n\t\tBaseColor_Normal_DEPRECATED = 1,\r\n\t\tBaseColor_Normal_Specular = 2,\r\n\t\tBaseColor_Normal_Specular_YCoCg = 3,\r\n\t\tBaseColor_Normal_Specular_Mask_YCoCg = 4,\r\n\t\tWorldHeight = 5,\r\n\t\tCount = 6,\r\n\t\tERuntimeVirtualTextureMaterialType_MAX = 7\r\n\t};\r\n\r\n\t// Enum Engine.EReflectedAndRefractedRayTracedShadows\r\n\tpublic enum EReflectedAndRefractedRayTracedShadows : byte {\r\n\t\tDisabled = 0,\r\n\t\tHard_shadows = 1,\r\n\t\tArea_shadows = 2,\r\n\t\tEReflectedAndRefractedRayTracedShadows_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ERayTracingGlobalIlluminationType\r\n\tpublic enum ERayTracingGlobalIlluminationType : byte {\r\n\t\tDisabled = 0,\r\n\t\tBruteForce = 1,\r\n\t\tFinalGather = 2,\r\n\t\tERayTracingGlobalIlluminationType_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ETranslucencyType\r\n\tpublic enum ETranslucencyType : byte {\r\n\t\tRaster = 0,\r\n\t\tRayTracing = 1,\r\n\t\tETranslucencyType_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EReflectionsType\r\n\tpublic enum EReflectionsType : byte {\r\n\t\tScreenSpace = 0,\r\n\t\tRayTracing = 1,\r\n\t\tEReflectionsType_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ELightUnits\r\n\tpublic enum ELightUnits : byte {\r\n\t\tUnitless = 0,\r\n\t\tCandelas = 1,\r\n\t\tLumens = 2,\r\n\t\tELightUnits_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EBloomMethod\r\n\tpublic enum EBloomMethod : byte {\r\n\t\tBM_SOG = 0,\r\n\t\tBM_FFT = 1,\r\n\t\tBM_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EAutoExposureMethod\r\n\tpublic enum EAutoExposureMethod : byte {\r\n\t\tAEM_Histogram = 0,\r\n\t\tAEM_Basic = 1,\r\n\t\tAEM_Manual = 2,\r\n\t\tAEM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EAntiAliasingMethod\r\n\tpublic enum EAntiAliasingMethod : byte {\r\n\t\tAAM_None = 0,\r\n\t\tAAM_FXAA = 1,\r\n\t\tAAM_TemporalAA = 2,\r\n\t\tAAM_MSAA = 3,\r\n\t\tAAM_DLSS = 4,\r\n\t\tAAM_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EDepthOfFieldMethod\r\n\tpublic enum EDepthOfFieldMethod : byte {\r\n\t\tDOFM_BokehDOF = 0,\r\n\t\tDOFM_Gaussian = 1,\r\n\t\tDOFM_CircleDOF = 2,\r\n\t\tDOFM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ESceneCapturePrimitiveRenderMode\r\n\tpublic enum ESceneCapturePrimitiveRenderMode : byte {\r\n\t\tPRM_LegacySceneCapture = 0,\r\n\t\tPRM_RenderScenePrimitives = 1,\r\n\t\tPRM_UseShowOnlyList = 2,\r\n\t\tPRM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EMaterialProperty\r\n\tpublic enum EMaterialProperty : byte {\r\n\t\tMP_EmissiveColor = 0,\r\n\t\tMP_Opacity = 1,\r\n\t\tMP_OpacityMask = 2,\r\n\t\tMP_DiffuseColor = 3,\r\n\t\tMP_SpecularColor = 4,\r\n\t\tMP_BaseColor = 5,\r\n\t\tMP_Metallic = 6,\r\n\t\tMP_Specular = 7,\r\n\t\tMP_Roughness = 8,\r\n\t\tMP_Anisotropy = 9,\r\n\t\tMP_Normal = 10,\r\n\t\tMP_Tangent = 11,\r\n\t\tMP_WorldPositionOffset = 12,\r\n\t\tMP_WorldDisplacement = 13,\r\n\t\tMP_TessellationMultiplier = 14,\r\n\t\tMP_SubsurfaceColor = 15,\r\n\t\tMP_CustomData0 = 16,\r\n\t\tMP_CustomData1 = 17,\r\n\t\tMP_AmbientOcclusion = 18,\r\n\t\tMP_Refraction = 19,\r\n\t\tMP_CustomizedUVs0 = 20,\r\n\t\tMP_CustomizedUVs1 = 21,\r\n\t\tMP_CustomizedUVs2 = 22,\r\n\t\tMP_CustomizedUVs3 = 23,\r\n\t\tMP_CustomizedUVs4 = 24,\r\n\t\tMP_CustomizedUVs5 = 25,\r\n\t\tMP_CustomizedUVs6 = 26,\r\n\t\tMP_CustomizedUVs7 = 27,\r\n\t\tMP_PixelDepthOffset = 28,\r\n\t\tMP_ShadingModel = 29,\r\n\t\tMP_MaterialAttributes = 30,\r\n\t\tMP_CustomOutput = 31,\r\n\t\tMP_MAX = 32\r\n\t};\r\n\r\n\t// Enum Engine.ESkinCacheDefaultBehavior\r\n\tpublic enum ESkinCacheDefaultBehavior : byte {\r\n\t\tExclusive = 0,\r\n\t\tInclusive = 1,\r\n\t\tESkinCacheDefaultBehavior_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ESkinCacheUsage\r\n\tpublic enum ESkinCacheUsage : byte {\r\n\t\tAuto = 0,\r\n\t\tDisabled = 255,\r\n\t\tEnabled = 1,\r\n\t\t//ESkinCacheUsage_MAX = 256\r\n\t};\r\n\r\n\t// Enum Engine.EPhysicsTransformUpdateMode\r\n\tpublic enum EPhysicsTransformUpdateMode : byte {\r\n\t\tSimulationUpatesComponentTransform = 0,\r\n\t\tComponentTransformIsKinematic = 1,\r\n\t\tEPhysicsTransformUpdateMode_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EAnimationMode\r\n\tpublic enum EAnimationMode : byte {\r\n\t\tAnimationBlueprint = 0,\r\n\t\tAnimationSingleNode = 1,\r\n\t\tAnimationCustomMode = 2,\r\n\t\tEAnimationMode_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EKinematicBonesUpdateToPhysics\r\n\tpublic enum EKinematicBonesUpdateToPhysics : byte {\r\n\t\tSkipSimulatingBones = 0,\r\n\t\tSkipAllBones = 1,\r\n\t\tEKinematicBonesUpdateToPhysics_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EClothMassMode\r\n\tpublic enum EClothMassMode : byte {\r\n\t\tUniformMass = 0,\r\n\t\tTotalMass = 1,\r\n\t\tDensity = 2,\r\n\t\tMaxClothMassMode = 3,\r\n\t\tEClothMassMode_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EAnimCurveType\r\n\tpublic enum EAnimCurveType : byte {\r\n\t\tAttributeCurve = 0,\r\n\t\tMaterialCurve = 1,\r\n\t\tMorphTargetCurve = 2,\r\n\t\tMaxAnimCurveType = 3,\r\n\t\tEAnimCurveType_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.ESkeletalMeshSkinningImportVersions\r\n\tpublic enum ESkeletalMeshSkinningImportVersions : byte {\r\n\t\tBefore_Versionning = 0,\r\n\t\tSkeletalMeshBuildRefactor = 1,\r\n\t\tVersionPlusOne = 2,\r\n\t\tLatestVersion = 1,\r\n\t\tESkeletalMeshSkinningImportVersions_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ESkeletalMeshGeoImportVersions\r\n\tpublic enum ESkeletalMeshGeoImportVersions : byte {\r\n\t\tBefore_Versionning = 0,\r\n\t\tSkeletalMeshBuildRefactor = 1,\r\n\t\tVersionPlusOne = 2,\r\n\t\tLatestVersion = 1,\r\n\t\tESkeletalMeshGeoImportVersions_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EBoneFilterActionOption\r\n\tpublic enum EBoneFilterActionOption : byte {\r\n\t\tRemove = 0,\r\n\t\tKeep = 1,\r\n\t\tInvalid = 2,\r\n\t\tEBoneFilterActionOption_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.SkeletalMeshOptimizationImportance\r\n\tpublic enum SkeletalMeshOptimizationImportance : byte {\r\n\t\tSMOI_Off = 0,\r\n\t\tSMOI_Lowest = 1,\r\n\t\tSMOI_Low = 2,\r\n\t\tSMOI_Normal = 3,\r\n\t\tSMOI_High = 4,\r\n\t\tSMOI_Highest = 5,\r\n\t\tSMOI_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.SkeletalMeshOptimizationType\r\n\tpublic enum SkeletalMeshOptimizationType : byte {\r\n\t\tSMOT_NumOfTriangles = 0,\r\n\t\tSMOT_MaxDeviation = 1,\r\n\t\tSMOT_TriangleOrDeviation = 2,\r\n\t\tSMOT_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.SkeletalMeshTerminationCriterion\r\n\tpublic enum SkeletalMeshTerminationCriterion : byte {\r\n\t\tSMTC_NumOfTriangles = 0,\r\n\t\tSMTC_NumOfVerts = 1,\r\n\t\tSMTC_TriangleOrVert = 2,\r\n\t\tSMTC_AbsNumOfTriangles = 3,\r\n\t\tSMTC_AbsNumOfVerts = 4,\r\n\t\tSMTC_AbsTriangleOrVert = 5,\r\n\t\tSMTC_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.EBoneTranslationRetargetingMode\r\n\tpublic enum EBoneTranslationRetargetingMode : byte {\r\n\t\tAnimation = 0,\r\n\t\tSkeleton = 1,\r\n\t\tAnimationScaled = 2,\r\n\t\tAnimationRelative = 3,\r\n\t\tOrientAndScale = 4,\r\n\t\tEBoneTranslationRetargetingMode_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EBoneSpaces\r\n\tpublic enum EBoneSpaces : byte {\r\n\t\tWorldSpace = 0,\r\n\t\tComponentSpace = 1,\r\n\t\tEBoneSpaces_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EVisibilityBasedAnimTickOption\r\n\tpublic enum EVisibilityBasedAnimTickOption : byte {\r\n\t\tAlwaysTickPoseAndRefreshBones = 0,\r\n\t\tAlwaysTickPose = 1,\r\n\t\tOnlyTickMontagesWhenNotRendered = 2,\r\n\t\tOnlyTickPoseWhenRendered = 3,\r\n\t\tEVisibilityBasedAnimTickOption_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EPhysBodyOp\r\n\tpublic enum EPhysBodyOp : byte {\r\n\t\tPBO_None = 0,\r\n\t\tPBO_Term = 1,\r\n\t\tPBO_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EBoneVisibilityStatus\r\n\tpublic enum EBoneVisibilityStatus : byte {\r\n\t\tBVS_HiddenByParent = 0,\r\n\t\tBVS_Visible = 1,\r\n\t\tBVS_ExplicitlyHidden = 2,\r\n\t\tBVS_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ESkyAtmosphereTransformMode\r\n\tpublic enum ESkyAtmosphereTransformMode : byte {\r\n\t\tPlanetTopAtAbsoluteWorldOrigin = 0,\r\n\t\tPlanetTopAtComponentTransform = 1,\r\n\t\tPlanetCenterAtComponentTransform = 2,\r\n\t\tESkyAtmosphereTransformMode_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ESkyLightSourceType\r\n\tpublic enum ESkyLightSourceType : byte {\r\n\t\tSLS_CapturedScene = 0,\r\n\t\tSLS_SpecifiedCubemap = 1,\r\n\t\tSLS_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EPriorityAttenuationMethod\r\n\tpublic enum EPriorityAttenuationMethod : byte {\r\n\t\tLinear = 0,\r\n\t\tCustomCurve = 1,\r\n\t\tManual = 2,\r\n\t\tEPriorityAttenuationMethod_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ESubmixSendMethod\r\n\tpublic enum ESubmixSendMethod : byte {\r\n\t\tLinear = 0,\r\n\t\tCustomCurve = 1,\r\n\t\tManual = 2,\r\n\t\tESubmixSendMethod_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EReverbSendMethod\r\n\tpublic enum EReverbSendMethod : byte {\r\n\t\tLinear = 0,\r\n\t\tCustomCurve = 1,\r\n\t\tManual = 2,\r\n\t\tEReverbSendMethod_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EAirAbsorptionMethod\r\n\tpublic enum EAirAbsorptionMethod : byte {\r\n\t\tLinear = 0,\r\n\t\tCustomCurve = 1,\r\n\t\tEAirAbsorptionMethod_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ESoundSpatializationAlgorithm\r\n\tpublic enum ESoundSpatializationAlgorithm : byte {\r\n\t\tSPATIALIZATION_Default = 0,\r\n\t\tSPATIALIZATION_HRTF = 1,\r\n\t\tSPATIALIZATION_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ESoundDistanceCalc\r\n\tpublic enum ESoundDistanceCalc : byte {\r\n\t\tSOUNDDISTANCE_Normal = 0,\r\n\t\tSOUNDDISTANCE_InfiniteXYPlane = 1,\r\n\t\tSOUNDDISTANCE_InfiniteXZPlane = 2,\r\n\t\tSOUNDDISTANCE_InfiniteYZPlane = 3,\r\n\t\tSOUNDDISTANCE_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EVirtualizationMode\r\n\tpublic enum EVirtualizationMode : byte {\r\n\t\tDisabled = 0,\r\n\t\tPlayWhenSilent = 1,\r\n\t\tRestart = 2,\r\n\t\tEVirtualizationMode_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EMaxConcurrentResolutionRule\r\n\tpublic enum EMaxConcurrentResolutionRule : byte {\r\n\t\tPreventNew = 0,\r\n\t\tStopOldest = 1,\r\n\t\tStopFarthestThenPreventNew = 2,\r\n\t\tStopFarthestThenOldest = 3,\r\n\t\tStopLowestPriority = 4,\r\n\t\tStopQuietest = 5,\r\n\t\tStopLowestPriorityThenPreventNew = 6,\r\n\t\tCount = 7,\r\n\t\tEMaxConcurrentResolutionRule_MAX = 8\r\n\t};\r\n\r\n\t// Enum Engine.ESoundGroup\r\n\tpublic enum ESoundGroup : byte {\r\n\t\tSOUNDGROUP_Default = 0,\r\n\t\tSOUNDGROUP_Effects = 1,\r\n\t\tSOUNDGROUP_UI = 2,\r\n\t\tSOUNDGROUP_Music = 3,\r\n\t\tSOUNDGROUP_Voice = 4,\r\n\t\tSOUNDGROUP_GameSoundGroup1 = 5,\r\n\t\tSOUNDGROUP_GameSoundGroup2 = 6,\r\n\t\tSOUNDGROUP_GameSoundGroup3 = 7,\r\n\t\tSOUNDGROUP_GameSoundGroup4 = 8,\r\n\t\tSOUNDGROUP_GameSoundGroup5 = 9,\r\n\t\tSOUNDGROUP_GameSoundGroup6 = 10,\r\n\t\tSOUNDGROUP_GameSoundGroup7 = 11,\r\n\t\tSOUNDGROUP_GameSoundGroup8 = 12,\r\n\t\tSOUNDGROUP_GameSoundGroup9 = 13,\r\n\t\tSOUNDGROUP_GameSoundGroup10 = 14,\r\n\t\tSOUNDGROUP_GameSoundGroup11 = 15,\r\n\t\tSOUNDGROUP_GameSoundGroup12 = 16,\r\n\t\tSOUNDGROUP_GameSoundGroup13 = 17,\r\n\t\tSOUNDGROUP_GameSoundGroup14 = 18,\r\n\t\tSOUNDGROUP_GameSoundGroup15 = 19,\r\n\t\tSOUNDGROUP_GameSoundGroup16 = 20,\r\n\t\tSOUNDGROUP_GameSoundGroup17 = 21,\r\n\t\tSOUNDGROUP_GameSoundGroup18 = 22,\r\n\t\tSOUNDGROUP_GameSoundGroup19 = 23,\r\n\t\tSOUNDGROUP_GameSoundGroup20 = 24,\r\n\t\tSOUNDGROUP_MAX = 25\r\n\t};\r\n\r\n\t// Enum Engine.ModulationParamMode\r\n\tpublic enum ModulationParamMode : byte {\r\n\t\tMPM_Normal = 0,\r\n\t\tMPM_Abs = 1,\r\n\t\tMPM_Direct = 2,\r\n\t\tMPM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ESourceBusChannels\r\n\tpublic enum ESourceBusChannels : byte {\r\n\t\tMono = 0,\r\n\t\tStereo = 1,\r\n\t\tESourceBusChannels_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ESourceBusSendLevelControlMethod\r\n\tpublic enum ESourceBusSendLevelControlMethod : byte {\r\n\t\tLinear = 0,\r\n\t\tCustomCurve = 1,\r\n\t\tManual = 2,\r\n\t\tESourceBusSendLevelControlMethod_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ESendLevelControlMethod\r\n\tpublic enum ESendLevelControlMethod : byte {\r\n\t\tLinear = 0,\r\n\t\tCustomCurve = 1,\r\n\t\tManual = 2,\r\n\t\tESendLevelControlMethod_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EAudioRecordingExportType\r\n\tpublic enum EAudioRecordingExportType : byte {\r\n\t\tSoundWave = 0,\r\n\t\tWavFile = 1,\r\n\t\tEAudioRecordingExportType_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ESoundWaveFFTSize\r\n\tpublic enum ESoundWaveFFTSize : byte {\r\n\t\tVerySmall_65 = 0,\r\n\t\tSmall_257 = 1,\r\n\t\tMedium_513 = 2,\r\n\t\tLarge_1025 = 3,\r\n\t\tVeryLarge_2049 = 4,\r\n\t\tESoundWaveFFTSize_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EDecompressionType\r\n\tpublic enum EDecompressionType : byte {\r\n\t\tDTYPE_Setup = 0,\r\n\t\tDTYPE_Invalid = 1,\r\n\t\tDTYPE_Preview = 2,\r\n\t\tDTYPE_Native = 3,\r\n\t\tDTYPE_RealTime = 4,\r\n\t\tDTYPE_Procedural = 5,\r\n\t\tDTYPE_Xenon = 6,\r\n\t\tDTYPE_Streaming = 7,\r\n\t\tDTYPE_MAX = 8\r\n\t};\r\n\r\n\t// Enum Engine.ESoundWaveLoadingBehavior\r\n\tpublic enum ESoundWaveLoadingBehavior : byte {\r\n\t\tInherited = 0,\r\n\t\tRetainOnLoad = 1,\r\n\t\tPrimeOnLoad = 2,\r\n\t\tLoadOnDemand = 3,\r\n\t\tForceInline = 4,\r\n\t\tUninitialized = 255,\r\n\t\t//ESoundWaveLoadingBehavior_MAX = 256\r\n\t};\r\n\r\n\t// Enum Engine.ESplineCoordinateSpace\r\n\tpublic enum ESplineCoordinateSpace : byte {\r\n\t\tLocal = 0,\r\n\t\tWorld = 1,\r\n\t\tESplineCoordinateSpace_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ESplinePointType\r\n\tpublic enum ESplinePointType : byte {\r\n\t\tLinear = 0,\r\n\t\tCurve = 1,\r\n\t\tConstant = 2,\r\n\t\tCurveClamped = 3,\r\n\t\tCurveCustomTangent = 4,\r\n\t\tESplinePointType_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.ESplineMeshAxis\r\n\tpublic enum ESplineMeshAxis : byte {\r\n\t\tX = 0,\r\n\t\tY = 1,\r\n\t\tZ = 2,\r\n\t\tESplineMeshAxis_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EOptimizationType\r\n\tpublic enum EOptimizationType : byte {\r\n\t\tOT_NumOfTriangles = 0,\r\n\t\tOT_MaxDeviation = 1,\r\n\t\tOT_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EImportanceLevel\r\n\tpublic enum EImportanceLevel : byte {\r\n\t\tIL_Off = 0,\r\n\t\tIL_Lowest = 1,\r\n\t\tIL_Low = 2,\r\n\t\tIL_Normal = 3,\r\n\t\tIL_High = 4,\r\n\t\tIL_Highest = 5,\r\n\t\tTEMP_BROKEN2 = 6,\r\n\t\tEImportanceLevel_MAX = 7\r\n\t};\r\n\r\n\t// Enum Engine.ENormalMode\r\n\tpublic enum ENormalMode : byte {\r\n\t\tNM_PreserveSmoothingGroups = 0,\r\n\t\tNM_RecalculateNormals = 1,\r\n\t\tNM_RecalculateNormalsSmooth = 2,\r\n\t\tNM_RecalculateNormalsHard = 3,\r\n\t\tTEMP_BROKEN = 4,\r\n\t\tENormalMode_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EStereoLayerShape\r\n\tpublic enum EStereoLayerShape : byte {\r\n\t\tSLSH_QuadLayer = 0,\r\n\t\tSLSH_CylinderLayer = 1,\r\n\t\tSLSH_CubemapLayer = 2,\r\n\t\tSLSH_EquirectLayer = 3,\r\n\t\tSLSH_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EStereoLayerType\r\n\tpublic enum EStereoLayerType : byte {\r\n\t\tSLT_WorldLocked = 0,\r\n\t\tSLT_TrackerLocked = 1,\r\n\t\tSLT_FaceLocked = 2,\r\n\t\tSLT_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EOpacitySourceMode\r\n\tpublic enum EOpacitySourceMode : byte {\r\n\t\tOSM_Alpha = 0,\r\n\t\tOSM_ColorBrightness = 1,\r\n\t\tOSM_RedChannel = 2,\r\n\t\tOSM_GreenChannel = 3,\r\n\t\tOSM_BlueChannel = 4,\r\n\t\tOSM_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.ESubUVBoundingVertexCount\r\n\tpublic enum ESubUVBoundingVertexCount : byte {\r\n\t\tBVC_FourVertices = 0,\r\n\t\tBVC_EightVertices = 1,\r\n\t\tBVC_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EVerticalTextAligment\r\n\tpublic enum EVerticalTextAligment : byte {\r\n\t\tEVRTA_TextTop = 0,\r\n\t\tEVRTA_TextCenter = 1,\r\n\t\tEVRTA_TextBottom = 2,\r\n\t\tEVRTA_QuadTop = 3,\r\n\t\tEVRTA_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EHorizTextAligment\r\n\tpublic enum EHorizTextAligment : byte {\r\n\t\tEHTA_Left = 0,\r\n\t\tEHTA_Center = 1,\r\n\t\tEHTA_Right = 2,\r\n\t\tEHTA_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ETextureLossyCompressionAmount\r\n\tpublic enum ETextureLossyCompressionAmount : byte {\r\n\t\tTLCA_Default = 0,\r\n\t\tTLCA_None = 1,\r\n\t\tTLCA_Lowest = 2,\r\n\t\tTLCA_Low = 3,\r\n\t\tTLCA_Medium = 4,\r\n\t\tTLCA_High = 5,\r\n\t\tTLCA_Highest = 6,\r\n\t\tTLCA_MAX = 7\r\n\t};\r\n\r\n\t// Enum Engine.ETextureCompressionQuality\r\n\tpublic enum ETextureCompressionQuality : byte {\r\n\t\tTCQ_Default = 0,\r\n\t\tTCQ_Lowest = 1,\r\n\t\tTCQ_Low = 2,\r\n\t\tTCQ_Medium = 3,\r\n\t\tTCQ_High = 4,\r\n\t\tTCQ_Highest = 5,\r\n\t\tTCQ_MAX = 6\r\n\t};\r\n\r\n\t// Enum Engine.ETextureSourceFormat\r\n\tpublic enum ETextureSourceFormat : byte {\r\n\t\tTSF_Invalid = 0,\r\n\t\tTSF_G8 = 1,\r\n\t\tTSF_BGRA8 = 2,\r\n\t\tTSF_BGRE8 = 3,\r\n\t\tTSF_RGBA16 = 4,\r\n\t\tTSF_RGBA16F = 5,\r\n\t\tTSF_RGBA8 = 6,\r\n\t\tTSF_RGBE8 = 7,\r\n\t\tTSF_G16 = 8,\r\n\t\tTSF_MAX = 9\r\n\t};\r\n\r\n\t// Enum Engine.ETextureSourceArtType\r\n\tpublic enum ETextureSourceArtType : byte {\r\n\t\tTSAT_Uncompressed = 0,\r\n\t\tTSAT_PNGCompressed = 1,\r\n\t\tTSAT_DDSFile = 2,\r\n\t\tTSAT_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ETextureMipCount\r\n\tpublic enum ETextureMipCount : byte {\r\n\t\tTMC_ResidentMips = 0,\r\n\t\tTMC_AllMips = 1,\r\n\t\tTMC_AllMipsBiased = 2,\r\n\t\tTMC_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ECompositeTextureMode\r\n\tpublic enum ECompositeTextureMode : byte {\r\n\t\tCTM_Disabled = 0,\r\n\t\tCTM_NormalRoughnessToRed = 1,\r\n\t\tCTM_NormalRoughnessToGreen = 2,\r\n\t\tCTM_NormalRoughnessToBlue = 3,\r\n\t\tCTM_NormalRoughnessToAlpha = 4,\r\n\t\tCTM_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.TextureAddress\r\n\tpublic enum TextureAddress : byte {\r\n\t\tTA_Wrap = 0,\r\n\t\tTA_Clamp = 1,\r\n\t\tTA_Mirror = 2,\r\n\t\tTA_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.TextureFilter\r\n\tpublic enum TextureFilter : byte {\r\n\t\tTF_Nearest = 0,\r\n\t\tTF_Bilinear = 1,\r\n\t\tTF_Trilinear = 2,\r\n\t\tTF_Default = 3,\r\n\t\tTF_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.TextureCompressionSettings\r\n\tpublic enum TextureCompressionSettings : byte {\r\n\t\tTC_Default = 0,\r\n\t\tTC_Normalmap = 1,\r\n\t\tTC_Masks = 2,\r\n\t\tTC_Grayscale = 3,\r\n\t\tTC_Displacementmap = 4,\r\n\t\tTC_VectorDisplacementmap = 5,\r\n\t\tTC_HDR = 6,\r\n\t\tTC_EditorIcon = 7,\r\n\t\tTC_Alpha = 8,\r\n\t\tTC_DistanceFieldFont = 9,\r\n\t\tTC_HDR_Compressed = 10,\r\n\t\tTC_BC7 = 11,\r\n\t\tTC_MAX = 12\r\n\t};\r\n\r\n\t// Enum Engine.ETextureMipLoadOptions\r\n\tpublic enum ETextureMipLoadOptions : byte {\r\n\t\tDefault = 0,\r\n\t\tAllMips = 1,\r\n\t\tOnlyFirstMip = 2,\r\n\t\tETextureMipLoadOptions_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ETextureSamplerFilter\r\n\tpublic enum ETextureSamplerFilter : byte {\r\n\t\tPoint = 0,\r\n\t\tBilinear = 1,\r\n\t\tTrilinear = 2,\r\n\t\tAnisotropicPoint = 3,\r\n\t\tAnisotropicLinear = 4,\r\n\t\tETextureSamplerFilter_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.ETexturePowerOfTwoSetting\r\n\tpublic enum ETexturePowerOfTwoSetting : byte {\r\n\t\tNone = 0,\r\n\t\tPadToPowerOfTwo = 1,\r\n\t\tPadToSquarePowerOfTwo = 2,\r\n\t\tETexturePowerOfTwoSetting_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.TextureMipGenSettings\r\n\tpublic enum TextureMipGenSettings : byte {\r\n\t\tTMGS_FromTextureGroup = 0,\r\n\t\tTMGS_SimpleAverage = 1,\r\n\t\tTMGS_Sharpen0 = 2,\r\n\t\tTMGS_Sharpen1 = 3,\r\n\t\tTMGS_Sharpen2 = 4,\r\n\t\tTMGS_Sharpen3 = 5,\r\n\t\tTMGS_Sharpen4 = 6,\r\n\t\tTMGS_Sharpen5 = 7,\r\n\t\tTMGS_Sharpen6 = 8,\r\n\t\tTMGS_Sharpen7 = 9,\r\n\t\tTMGS_Sharpen8 = 10,\r\n\t\tTMGS_Sharpen9 = 11,\r\n\t\tTMGS_Sharpen10 = 12,\r\n\t\tTMGS_NoMipmaps = 13,\r\n\t\tTMGS_LeaveExistingMips = 14,\r\n\t\tTMGS_Blur1 = 15,\r\n\t\tTMGS_Blur2 = 16,\r\n\t\tTMGS_Blur3 = 17,\r\n\t\tTMGS_Blur4 = 18,\r\n\t\tTMGS_Blur5 = 19,\r\n\t\tTMGS_Unfiltered = 20,\r\n\t\tTMGS_MAX = 21\r\n\t};\r\n\r\n\t// Enum Engine.TextureGroup\r\n\tpublic enum TextureGroup : byte {\r\n\t\tTEXTUREGROUP_World = 0,\r\n\t\tTEXTUREGROUP_WorldNormalMap = 1,\r\n\t\tTEXTUREGROUP_WorldSpecular = 2,\r\n\t\tTEXTUREGROUP_Character = 3,\r\n\t\tTEXTUREGROUP_CharacterNormalMap = 4,\r\n\t\tTEXTUREGROUP_CharacterSpecular = 5,\r\n\t\tTEXTUREGROUP_Weapon = 6,\r\n\t\tTEXTUREGROUP_WeaponNormalMap = 7,\r\n\t\tTEXTUREGROUP_WeaponSpecular = 8,\r\n\t\tTEXTUREGROUP_Vehicle = 9,\r\n\t\tTEXTUREGROUP_VehicleNormalMap = 10,\r\n\t\tTEXTUREGROUP_VehicleSpecular = 11,\r\n\t\tTEXTUREGROUP_Cinematic = 12,\r\n\t\tTEXTUREGROUP_Effects = 13,\r\n\t\tTEXTUREGROUP_EffectsNotFiltered = 14,\r\n\t\tTEXTUREGROUP_Skybox = 15,\r\n\t\tTEXTUREGROUP_UI = 16,\r\n\t\tTEXTUREGROUP_Lightmap = 17,\r\n\t\tTEXTUREGROUP_RenderTarget = 18,\r\n\t\tTEXTUREGROUP_MobileFlattened = 19,\r\n\t\tTEXTUREGROUP_ProcBuilding_Face = 20,\r\n\t\tTEXTUREGROUP_ProcBuilding_LightMap = 21,\r\n\t\tTEXTUREGROUP_Shadowmap = 22,\r\n\t\tTEXTUREGROUP_ColorLookupTable = 23,\r\n\t\tTEXTUREGROUP_Terrain_Heightmap = 24,\r\n\t\tTEXTUREGROUP_Terrain_Weightmap = 25,\r\n\t\tTEXTUREGROUP_Bokeh = 26,\r\n\t\tTEXTUREGROUP_IESLightProfile = 27,\r\n\t\tTEXTUREGROUP_Pixels2D = 28,\r\n\t\tTEXTUREGROUP_HierarchicalLOD = 29,\r\n\t\tTEXTUREGROUP_Impostor = 30,\r\n\t\tTEXTUREGROUP_ImpostorNormalDepth = 31,\r\n\t\tTEXTUREGROUP_8BitData = 32,\r\n\t\tTEXTUREGROUP_16BitData = 33,\r\n\t\tTEXTUREGROUP_Project01 = 34,\r\n\t\tTEXTUREGROUP_Project02 = 35,\r\n\t\tTEXTUREGROUP_Project03 = 36,\r\n\t\tTEXTUREGROUP_Project04 = 37,\r\n\t\tTEXTUREGROUP_Project05 = 38,\r\n\t\tTEXTUREGROUP_Project06 = 39,\r\n\t\tTEXTUREGROUP_Project07 = 40,\r\n\t\tTEXTUREGROUP_Project08 = 41,\r\n\t\tTEXTUREGROUP_Project09 = 42,\r\n\t\tTEXTUREGROUP_Project10 = 43,\r\n\t\tTEXTUREGROUP_Project11 = 44,\r\n\t\tTEXTUREGROUP_Project12 = 45,\r\n\t\tTEXTUREGROUP_Project13 = 46,\r\n\t\tTEXTUREGROUP_Project14 = 47,\r\n\t\tTEXTUREGROUP_Project15 = 48,\r\n\t\tTEXTUREGROUP_MAX = 49\r\n\t};\r\n\r\n\t// Enum Engine.ETextureRenderTargetFormat\r\n\tpublic enum ETextureRenderTargetFormat : byte {\r\n\t\tRTF_R8 = 0,\r\n\t\tRTF_RG8 = 1,\r\n\t\tRTF_RGBA8 = 2,\r\n\t\tRTF_RGBA8_SRGB = 3,\r\n\t\tRTF_R16f = 4,\r\n\t\tRTF_RG16f = 5,\r\n\t\tRTF_RGBA16f = 6,\r\n\t\tRTF_R32f = 7,\r\n\t\tRTF_RG32f = 8,\r\n\t\tRTF_RGBA32f = 9,\r\n\t\tRTF_RGB10A2 = 10,\r\n\t\tRTF_MAX = 11\r\n\t};\r\n\r\n\t// Enum Engine.ETimecodeProviderSynchronizationState\r\n\tpublic enum ETimecodeProviderSynchronizationState : byte {\r\n\t\tClosed = 0,\r\n\t\tError = 1,\r\n\t\tSynchronized = 2,\r\n\t\tSynchronizing = 3,\r\n\t\tETimecodeProviderSynchronizationState_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.ETimelineDirection\r\n\tpublic enum ETimelineDirection : byte {\r\n\t\tForward = 0,\r\n\t\tBackward = 1,\r\n\t\tETimelineDirection_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ETimelineLengthMode\r\n\tpublic enum ETimelineLengthMode : byte {\r\n\t\tTL_TimelineLength = 0,\r\n\t\tTL_LastKeyFrame = 1,\r\n\t\tTL_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.ETimeStretchCurveMapping\r\n\tpublic enum ETimeStretchCurveMapping : byte {\r\n\t\tT_Original = 0,\r\n\t\tT_TargetMin = 1,\r\n\t\tT_TargetMax = 2,\r\n\t\tMAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ETwitterIntegrationDelegate\r\n\tpublic enum ETwitterIntegrationDelegate : byte {\r\n\t\tTID_AuthorizeComplete = 0,\r\n\t\tTID_TweetUIComplete = 1,\r\n\t\tTID_RequestComplete = 2,\r\n\t\tTID_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.ETwitterRequestMethod\r\n\tpublic enum ETwitterRequestMethod : byte {\r\n\t\tTRM_Get = 0,\r\n\t\tTRM_Post = 1,\r\n\t\tTRM_Delete = 2,\r\n\t\tTRM_MAX = 3\r\n\t};\r\n\r\n\t// Enum Engine.EUserDefinedStructureStatus\r\n\tpublic enum EUserDefinedStructureStatus : byte {\r\n\t\tUDSS_UpToDate = 0,\r\n\t\tUDSS_Dirty = 1,\r\n\t\tUDSS_Error = 2,\r\n\t\tUDSS_Duplicate = 3,\r\n\t\tUDSS_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EUIScalingRule\r\n\tpublic enum EUIScalingRule : byte {\r\n\t\tShortestSide = 0,\r\n\t\tLongestSide = 1,\r\n\t\tHorizontal = 2,\r\n\t\tVertical = 3,\r\n\t\tCustom = 4,\r\n\t\tEUIScalingRule_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.ERenderFocusRule\r\n\tpublic enum ERenderFocusRule : byte {\r\n\t\tAlways = 0,\r\n\t\tNonPointer = 1,\r\n\t\tNavigationOnly = 2,\r\n\t\tNever = 3,\r\n\t\tERenderFocusRule_MAX = 4\r\n\t};\r\n\r\n\t// Enum Engine.EVectorFieldConstructionOp\r\n\tpublic enum EVectorFieldConstructionOp : byte {\r\n\t\tVFCO_Extrude = 0,\r\n\t\tVFCO_Revolve = 1,\r\n\t\tVFCO_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EWindSourceType\r\n\tpublic enum EWindSourceType : byte {\r\n\t\tDirectional = 0,\r\n\t\tPoint = 1,\r\n\t\tEWindSourceType_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EPSCPoolMethod\r\n\tpublic enum EPSCPoolMethod : byte {\r\n\t\tNone = 0,\r\n\t\tAutoRelease = 1,\r\n\t\tManualRelease = 2,\r\n\t\tManualRelease_OnComplete = 3,\r\n\t\tFreeInPool = 4,\r\n\t\tEPSCPoolMethod_MAX = 5\r\n\t};\r\n\r\n\t// Enum Engine.EVolumeLightingMethod\r\n\tpublic enum EVolumeLightingMethod : byte {\r\n\t\tVLM_VolumetricLightmap = 0,\r\n\t\tVLM_SparseVolumeLightingSamples = 1,\r\n\t\tVLM_MAX = 2\r\n\t};\r\n\r\n\t// Enum Engine.EVisibilityAggressiveness\r\n\tpublic enum EVisibilityAggressiveness : byte {\r\n\t\tVIS_LeastAggressive = 0,\r\n\t\tVIS_ModeratelyAggressive = 1,\r\n\t\tVIS_MostAggressive = 2,\r\n\t\tVIS_Max = 3\r\n\t};\r\n\r\n\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Engine/FFontCharacter.cs",
    "content": "﻿namespace UAssetAPI.UnrealTypes;\n\n/// <summary>\n/// This struct is serialized using native serialization so any changes to it require a package version bump.\n/// </summary>\npublic struct FFontCharacter\n{\n    public int StartU;\n    public int StartV;\n    public int USize;\n    public int VSize;\n    public byte TextureIndex;\n    public int VerticalOffset;\n\n    public FFontCharacter(AssetBinaryReader reader)\n    {\n        StartU = reader.ReadInt32();\n        StartV = reader.ReadInt32();\n        USize = reader.ReadInt32();\n        VSize = reader.ReadInt32();\n        TextureIndex = reader.ReadByte();\n        VerticalOffset = reader.ReadInt32();\n    }\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        var offset = writer.BaseStream.Position;\n        writer.Write(StartU);\n        writer.Write(StartV);\n        writer.Write(USize);\n        writer.Write(VSize);\n        writer.Write(TextureIndex);\n        writer.Write(VerticalOffset);\n        return (int)(writer.BaseStream.Position - offset);\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Engine/FRichCurveKey.cs",
    "content": "using System;\nusing UAssetAPI.PropertyTypes.Objects;\nusing UAssetAPI.UnrealTypes.EngineEnums;\n\nnamespace UAssetAPI.UnrealTypes;\n\n/// <summary>\n/// One key in a rich, editable float curve\n/// </summary>\npublic struct FRichCurveKey : IStruct<FRichCurveKey>\n{\n    public ERichCurveInterpMode InterpMode;\n    public ERichCurveTangentMode TangentMode;\n    public ERichCurveTangentWeightMode TangentWeightMode;\n    public float Time;\n    public float Value;\n    public float ArriveTangent;\n    public float ArriveTangentWeight;\n    public float LeaveTangent;\n    public float LeaveTangentWeight;\n\n    public FRichCurveKey() { }\n\n    public FRichCurveKey(ERichCurveInterpMode interpMode, ERichCurveTangentMode tangentMode, ERichCurveTangentWeightMode tangentWeightMode, float time, float value, float arriveTangent, float arriveTangentWeight, float leaveTangent, float leaveTangentWeight)\n    {\n        InterpMode = interpMode;\n        TangentMode = tangentMode;\n        TangentWeightMode = tangentWeightMode;\n        Time = time;\n        Value = value;\n        ArriveTangent = arriveTangent;\n        ArriveTangentWeight = arriveTangentWeight;\n        LeaveTangent = leaveTangent;\n        LeaveTangentWeight = leaveTangentWeight;\n    }\n\n    public FRichCurveKey(AssetBinaryReader reader)\n    {\n        InterpMode = (ERichCurveInterpMode)reader.ReadByte();\n        TangentMode = (ERichCurveTangentMode)reader.ReadByte();\n        TangentWeightMode = (ERichCurveTangentWeightMode)reader.ReadByte();\n        Time = reader.ReadSingle();\n        Value = reader.ReadSingle();\n        ArriveTangent = reader.ReadSingle();\n        ArriveTangentWeight = reader.ReadSingle();\n        LeaveTangent = reader.ReadSingle();\n        LeaveTangentWeight = reader.ReadSingle();\n    }\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        writer.Write((byte)InterpMode);\n        writer.Write((byte)TangentMode);\n        writer.Write((byte)TangentWeightMode);\n        writer.Write(Time);\n        writer.Write(Value);\n        writer.Write(ArriveTangent);\n        writer.Write(ArriveTangentWeight);\n        writer.Write(LeaveTangent);\n        writer.Write(LeaveTangentWeight);\n        return sizeof(float) * 6 + sizeof(byte) * 3;\n    }\n\n    public static FRichCurveKey Read(AssetBinaryReader reader) => new FRichCurveKey(reader); \n\n    public override string ToString()\n    {\n        return $\"({InterpMode}, {TangentMode}, {TangentWeightMode}, {Time}, {Value}, {ArriveTangent}, {ArriveTangentWeight}, {LeaveTangent}, {LeaveTangentWeight})\";\n    }\n\n    public static FRichCurveKey FromString(string[] d, UAsset asset)\n    {\n        Enum.TryParse<ERichCurveInterpMode>(d[0], out var InterpMode);\n        Enum.TryParse<ERichCurveTangentMode>(d[1], out var TangentMode);\n        Enum.TryParse<ERichCurveTangentWeightMode>(d[2], out var TangentWeightMode);\n        float.TryParse(d[3], out float res1);\n        float.TryParse(d[4], out float res2);\n        float.TryParse(d[5], out float res3);\n        float.TryParse(d[6], out float res4);\n        float.TryParse(d[7], out float res5);\n        float.TryParse(d[8], out float res6);\n        return new FRichCurveKey(InterpMode, TangentMode, TangentWeightMode, res1, res2, res3, res4, res5, res6);\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Engine/FSkeletalMeshSamplingRegionBuiltData.cs",
    "content": "using System;\r\nusing UAssetAPI.CustomVersions;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\n\r\nnamespace UAssetAPI.UnrealTypes;\r\n\r\n/// <summary>\r\n/// Built data for sampling a single region of a skeletal mesh\r\n/// </summary>\r\npublic class FSkeletalMeshSamplingRegionBuiltData : IStruct<FSkeletalMeshSamplingRegionBuiltData>\r\n{\r\n    /** Triangles included in this region. */\r\n    public int[] TriangleIndices;\r\n\r\n    /** Vertices included in this region. */\r\n    public int[] Vertices;\r\n\r\n    /** Bones included in this region. */\r\n    public int[] BoneIndices;\r\n\r\n    /** Provides random area weighted sampling of the TriangleIndices array. */\r\n    FSkeletalMeshAreaWeightedTriangleSampler AreaWeightedSampler;\r\n\r\n    public FSkeletalMeshSamplingRegionBuiltData()\r\n    {\r\n        TriangleIndices = [];\r\n        Vertices = [];\r\n        BoneIndices = [];\r\n        AreaWeightedSampler = new FSkeletalMeshAreaWeightedTriangleSampler();\r\n    }\r\n\r\n    public FSkeletalMeshSamplingRegionBuiltData(AssetBinaryReader reader)\r\n    {\r\n        TriangleIndices = reader.ReadArray(reader.ReadInt32);\r\n        BoneIndices = reader.ReadArray(reader.ReadInt32);\r\n\r\n        AreaWeightedSampler = new FSkeletalMeshAreaWeightedTriangleSampler(reader);\r\n\r\n        if (reader.Asset.GetCustomVersion<FNiagaraObjectVersion>() >= FNiagaraObjectVersion.SkeletalMeshVertexSampling)\r\n        {\r\n            Vertices = reader.ReadArray(reader.ReadInt32);\r\n        }\r\n    }\r\n\r\n    public static FSkeletalMeshSamplingRegionBuiltData Read(AssetBinaryReader reader) => new FSkeletalMeshSamplingRegionBuiltData(reader);\r\n\r\n    public int Write(AssetBinaryWriter writer)\r\n    {\r\n        var offset = writer.BaseStream.Position;\r\n\r\n        if (TriangleIndices == null) TriangleIndices = Array.Empty<int>();\r\n        writer.Write(TriangleIndices.Length);\r\n        foreach (var t in TriangleIndices)\r\n        {\r\n            writer.Write(t);\r\n        }\r\n\r\n        if (BoneIndices == null) BoneIndices = Array.Empty<int>();\r\n        writer.Write(BoneIndices.Length);\r\n        foreach (var b in BoneIndices)\r\n        {\r\n            writer.Write(b);\r\n        }\r\n\r\n        if (AreaWeightedSampler == null) AreaWeightedSampler = new FSkeletalMeshAreaWeightedTriangleSampler();\r\n        AreaWeightedSampler.Write(writer);\r\n\r\n        if (writer.Asset.GetCustomVersion<FNiagaraObjectVersion>() >= FNiagaraObjectVersion.SkeletalMeshVertexSampling)\r\n        {\r\n            if (Vertices == null) Vertices = Array.Empty<int>();\r\n            writer.Write(Vertices.Length);\r\n            foreach (var v in Vertices)\r\n            {\r\n                writer.Write(v);\r\n            }\r\n        }\r\n\r\n        return (int)(writer.BaseStream.Position - offset);\r\n    }\r\n\r\n    public static FSkeletalMeshSamplingRegionBuiltData FromString(string[] d, UAsset asset)\r\n    {\r\n        throw new NotImplementedException();\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Engine/FWeightedRandomSampler.cs",
    "content": "using System;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\n\r\nnamespace UAssetAPI.UnrealTypes;\r\n\r\npublic class FWeightedRandomSampler : ICloneable, IStruct<FWeightedRandomSampler>\r\n{\r\n    public float[] Prob;\r\n    public int[] Alias;\r\n    public float TotalWeight;\r\n\r\n    public FWeightedRandomSampler()\r\n    {\r\n        Prob = [];\r\n        Alias = [];\r\n        TotalWeight = 0;\r\n    }\r\n\r\n    public FWeightedRandomSampler(float[] prob, int[] alias, float totalWeight)\r\n    {\r\n        Prob = prob;\r\n        Alias = alias;\r\n        TotalWeight = totalWeight;\r\n    }\r\n\r\n    public FWeightedRandomSampler(AssetBinaryReader reader)\r\n    {\r\n        Prob = reader.ReadArray(reader.ReadSingle);\r\n        Alias = reader.ReadArray(reader.ReadInt32);\r\n        TotalWeight = reader.ReadSingle();\r\n    }\r\n\r\n    public int Write(AssetBinaryWriter writer)\r\n    {\r\n        var offset = writer.BaseStream.Position;\r\n\r\n        writer.Write(Prob.Length);\r\n        foreach (var p in Prob)\r\n        {\r\n            writer.Write(p);\r\n        }\r\n\r\n        writer.Write(Alias.Length);\r\n        foreach (var a in Alias)\r\n        {\r\n            writer.Write(a);\r\n        }\r\n\r\n        writer.Write(TotalWeight);\r\n\r\n        return (int)(writer.BaseStream.Position - offset);\r\n    }\r\n\r\n    public object Clone() => new FWeightedRandomSampler((float[])Prob.Clone(), (int[])Alias.Clone(), TotalWeight);\r\n\r\n    public static FWeightedRandomSampler Read(AssetBinaryReader reader) => new FWeightedRandomSampler(reader);\r\n\r\n    public override string ToString()\r\n    {\r\n        string oup = \"(\";\r\n\r\n        oup += \"(\";\r\n        for (int i = 0; i < Prob.Length; i++)\r\n        {\r\n            oup += Convert.ToString(Prob[i]) + \", \";\r\n        }\r\n        oup = oup.Remove(oup.Length - 2) + \")\";\r\n\r\n        oup += \"(\";\r\n        for (int i = 0; i < Alias.Length; i++)\r\n        {\r\n            oup += Convert.ToString(Alias[i]) + \", \";\r\n        }\r\n        oup = oup.Remove(oup.Length - 2) + \")\";\r\n\r\n        oup += \", \" + TotalWeight + \")\";\r\n\r\n        return oup;\r\n    }\r\n\r\n    public static FWeightedRandomSampler FromString(string[] d, UAsset asset)\r\n    {\r\n        throw new NotImplementedException();\r\n    }\r\n}\r\n\r\n/// <summary>\r\n/// Allows area weighted sampling of triangles on a skeletal mesh.\r\n/// </summary>\r\npublic class FSkeletalMeshAreaWeightedTriangleSampler : FWeightedRandomSampler\r\n{\r\n    public FSkeletalMeshAreaWeightedTriangleSampler(AssetBinaryReader reader) : base(reader) { }\r\n\r\n    public FSkeletalMeshAreaWeightedTriangleSampler() { }\r\n}"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Engine/GameFramework/UniqueNetIdReplPropertyData.cs",
    "content": "﻿using System.Text;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\n\r\nnamespace UAssetAPI.UnrealTypes;\r\n\r\npublic class FUniqueNetId\r\n{\r\n    public FName Type;\r\n    public FString Contents;\r\n\r\n    public FUniqueNetId(FName type, FString contents)\r\n    {\r\n        Type = type;\r\n        Contents = contents;\r\n    }\r\n\r\n    public FUniqueNetId(AssetBinaryReader reader)\r\n    {\r\n        if (reader.ReadInt32() <= 0) return;\r\n        if (reader.Asset.GetEngineVersion() >= EngineVersion.VER_UE4_20)\r\n            Type = reader.ReadFName();\r\n        Contents = reader.ReadFString();\r\n    }\r\n\r\n    public int Write(AssetBinaryWriter writer)\r\n    {\r\n        if (Type is null && Contents is null)\r\n        {\r\n            writer.Write(0);\r\n            return sizeof(int);\r\n        }\r\n\r\n        var size = sizeof(int);\r\n        if (writer.Asset.GetEngineVersion() >= EngineVersion.VER_UE4_20)\r\n        {\r\n            size += sizeof(int) * 2;\r\n        }\r\n\r\n        if (Contents != null)\r\n        {\r\n            size += Contents.Encoding is UnicodeEncoding ? (Contents.Value.Length + 1) * 2 : (Contents.Value.Length + 1);\r\n        }\r\n\r\n        //not sure about this alignment, maybe need this only in old versions\r\n        writer.Write(size + 3 & ~3);\r\n\r\n        if (writer.Asset.GetEngineVersion() >= EngineVersion.VER_UE4_20)\r\n            writer.Write(Type);\r\n        writer.Write(Contents);\r\n\r\n        return size+sizeof(int);\r\n    }\r\n}\r\n\r\npublic class UniqueNetIdReplPropertyData : PropertyData<FUniqueNetId>\r\n{\r\n    public UniqueNetIdReplPropertyData(FName name) : base(name) { } \r\n\r\n    public UniqueNetIdReplPropertyData() { }\r\n\r\n    private static readonly FString CurrentPropertyType = new FString(\"UniqueNetIdRepl\");\r\n    public override bool HasCustomStructSerialization => true;\r\n    public override FString PropertyType => CurrentPropertyType;\r\n\r\n    public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.ReadEndPropertyTag(reader);\r\n        }\r\n\r\n        Value = new FUniqueNetId(reader);\r\n    }\r\n\r\n    public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n    {\r\n        if (includeHeader)\r\n        {\r\n            this.WriteEndPropertyTag(writer);\r\n        }\r\n\r\n        if (Value is null)\r\n        {\r\n            writer.Write(0);\r\n            return sizeof(int);\r\n        }\r\n      \r\n        return Value.Write(writer);\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/Engine/Niagara/FNiagaraDataInterfaceGPUParamInfo.cs",
    "content": "using System;\r\nusing UAssetAPI.CustomVersions;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\n\r\nnamespace UAssetAPI.UnrealTypes;\r\n\r\npublic struct FNiagaraVariableCommonReference(AssetBinaryReader reader)\r\n{\r\n    public FName Name = reader.ReadFName();\r\n    public FPackageIndex Type = new FPackageIndex(reader);\r\n\r\n    public void Write(AssetBinaryWriter writer)\r\n    {\r\n        writer.Write(Name);\r\n        Type.Write(writer);\r\n    }\r\n}\r\n\r\npublic class FNiagaraDataInterfaceGeneratedFunction\r\n{\r\n    /** Name of the function as defined by the data interface. */\r\n    public FName DefinitionName;\r\n\r\n    /** Name of the instance. Derived from the definition name but made unique for this DI instance and specifier values. */\r\n    public FString InstanceName;\r\n\r\n    /** Specifier values for this instance. */\r\n    public (FName, FName)[] Specifiers;\r\n\r\n    public FNiagaraVariableCommonReference[] VariadicInputs = [];\r\n    public FNiagaraVariableCommonReference[] VariadicOutputs = [];\r\n    public ushort MiscUsageBitMask;\r\n\r\n    public FNiagaraDataInterfaceGeneratedFunction() { }\r\n\r\n    public FNiagaraDataInterfaceGeneratedFunction(AssetBinaryReader reader)\r\n    {\r\n        DefinitionName = reader.ReadFName();\r\n        InstanceName = reader.ReadFString();\r\n\r\n        Specifiers = reader.ReadArray(() => (reader.ReadFName(), reader.ReadFName()));\r\n\r\n        if (reader.Asset.GetCustomVersion<FNiagaraCustomVersion>() >= FNiagaraCustomVersion.AddVariadicParametersToGPUFunctionInfo)\r\n        {\r\n            VariadicInputs = reader.ReadArray(() => new FNiagaraVariableCommonReference(reader));\r\n            VariadicOutputs = reader.ReadArray(() => new FNiagaraVariableCommonReference(reader));\r\n        }\r\n\r\n        if (reader.Asset.GetCustomVersion<FNiagaraCustomVersion>() >= FNiagaraCustomVersion.SerializeUsageBitMaskToGPUFunctionInfo)\r\n            MiscUsageBitMask = reader.ReadUInt16();\r\n    }\r\n\r\n    public void Write(AssetBinaryWriter writer)\r\n    {\r\n        writer.Write(DefinitionName);\r\n        writer.Write(InstanceName);\r\n\r\n        writer.Write(Specifiers.Length);\r\n        foreach (var spec in Specifiers)\r\n        {\r\n            writer.Write(spec.Item1);\r\n            writer.Write(spec.Item2);\r\n        }\r\n\r\n        if (writer.Asset.GetCustomVersion<FNiagaraCustomVersion>() >= FNiagaraCustomVersion.AddVariadicParametersToGPUFunctionInfo)\r\n        {\r\n            writer.Write(VariadicInputs.Length);\r\n            foreach (var input in VariadicInputs)\r\n            {\r\n                input.Write(writer);\r\n            }\r\n\r\n            writer.Write(VariadicOutputs.Length);\r\n            foreach (var output in VariadicOutputs)\r\n            {\r\n                output.Write(writer);\r\n            }\r\n        }\r\n\r\n        if (writer.Asset.GetCustomVersion<FNiagaraCustomVersion>() >= FNiagaraCustomVersion.SerializeUsageBitMaskToGPUFunctionInfo)\r\n            writer.Write(MiscUsageBitMask);\r\n    }\r\n}\r\n\r\npublic class FNiagaraDataInterfaceGPUParamInfo : IStruct<FNiagaraDataInterfaceGPUParamInfo>\r\n{\r\n    /** Symbol of this DI in the hlsl. Used for binding parameters. */\r\n    public FString DataInterfaceHLSLSymbol;\r\n\r\n    /** Name of the class for this data interface. Used for constructing the correct parameters struct. */\r\n    public FString DIClassName;\r\n\r\n    /** Information about all the functions generated by the translator for this data interface. */\r\n    public FNiagaraDataInterfaceGeneratedFunction[] GeneratedFunctions = [];\r\n\r\n    public FNiagaraDataInterfaceGPUParamInfo() { }\r\n\r\n    public FNiagaraDataInterfaceGPUParamInfo(AssetBinaryReader reader)\r\n    {\r\n        DataInterfaceHLSLSymbol = reader.ReadFString();\r\n        DIClassName = reader.ReadFString();\r\n\r\n        if (reader.Asset.GetCustomVersion<FNiagaraCustomVersion>() >= FNiagaraCustomVersion.AddGeneratedFunctionsToGPUParamInfo)\r\n        {\r\n            GeneratedFunctions = reader.ReadArray(() => new FNiagaraDataInterfaceGeneratedFunction(reader));\r\n        }\r\n    }\r\n\r\n    public static FNiagaraDataInterfaceGPUParamInfo Read(AssetBinaryReader reader) => new FNiagaraDataInterfaceGPUParamInfo(reader);\r\n\r\n    public int Write(AssetBinaryWriter writer)\r\n    {\r\n        var offset = writer.BaseStream.Position;\r\n        writer.Write(DataInterfaceHLSLSymbol);\r\n        writer.Write(DIClassName);\r\n        if (writer.Asset.GetCustomVersion<FNiagaraCustomVersion>() >= FNiagaraCustomVersion.AddGeneratedFunctionsToGPUParamInfo)\r\n        {\r\n            writer.Write(GeneratedFunctions.Length);\r\n            foreach (var func in GeneratedFunctions)\r\n            {\r\n                func.Write(writer);\r\n            }\r\n        }\r\n\r\n        return (int)(writer.BaseStream.Position - offset);\r\n    }\r\n\r\n    public static FNiagaraDataInterfaceGPUParamInfo FromString(string[] d, UAsset asset)\r\n    {\r\n        throw new NotImplementedException();\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/Objects/SlateCore/FFontData.cs",
    "content": "﻿namespace UAssetAPI.UnrealTypes;\n\npublic enum EFontHinting : byte\n{\n    /** Use the default hinting specified in the font. */\n    Default,\n    /** Force the use of an automatic hinting algorithm. */\n    Auto,\n    /** Force the use of an automatic light hinting algorithm, optimized for non-monochrome displays. */\n    AutoLight,\n    /** Force the use of an automatic hinting algorithm optimized for monochrome displays. */\n    Monochrome,\n    /** Do not use hinting. */\n    None,\n}\n\npublic enum EFontLoadingPolicy : byte\n{\n    /** Lazy load the entire font into memory. This will consume more memory than Streaming, however there will be zero file-IO when rendering glyphs within the font, although the initial load may cause a hitch. */\n    LazyLoad,\n    /** Stream the font from disk. This will consume less memory than LazyLoad or Inline, however there will be file-IO when rendering glyphs, which may cause hitches under certain circumstances or on certain platforms. */\n    Stream,\n    /** Embed the font data within the asset. This will consume more memory than Streaming, however it is guaranteed to be hitch free (only valid for font data within a Font Face asset). */\n    Inline,\n}\n\npublic class FFontData\n{\n    public FPackageIndex LocalFontFaceAsset; // UObject\n    public FString FontFilename;\n    public EFontHinting Hinting;\n    public EFontLoadingPolicy LoadingPolicy;\n    public int SubFaceIndex;\n    public bool bIsCooked;\n\n    public FFontData()\r\n    {\r\n        bIsCooked = false;\r\n    }\n\n    public FFontData(AssetBinaryReader reader)\n    {\n        bIsCooked = reader.ReadBooleanInt();\n        if (bIsCooked)\n        {\n            LocalFontFaceAsset = new FPackageIndex(reader);\n\n            if (LocalFontFaceAsset.Index == 0)\n            {\n                FontFilename = reader.ReadFString();\n                Hinting = (EFontHinting)reader.ReadByte();\n                LoadingPolicy = (EFontLoadingPolicy)reader.ReadByte();\n            }\r\n\r\n            if (reader.Asset.GetEngineVersion() >= EngineVersion.VER_UE4_20)\r\n                SubFaceIndex = reader.ReadInt32();\n        }\n    }\n\n    public int Write(AssetBinaryWriter writer)\n    {\n        var offset = writer.BaseStream.Position;\n\n        writer.Write(bIsCooked ? 1 : 0);\n        if (bIsCooked)\n        {\n            writer.Write(LocalFontFaceAsset?.Index ?? 0);\n\n            if (LocalFontFaceAsset.Index == 0)\n            {\n                writer.Write(FontFilename);\n                writer.Write((byte)Hinting);\n                writer.Write((byte)LoadingPolicy);\n            }\n\n            if (writer.Asset.GetEngineVersion() >= EngineVersion.VER_UE4_20)\r\n                writer.Write(SubFaceIndex);\n        }\n\n        return (int)(writer.BaseStream.Position - offset);\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/UnrealTypes/TMap.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.Collections.Specialized;\r\nusing System.Linq;\r\n\r\n/*\r\n    The code in this file is modified from mattmc3's dotmore @ https://github.com/mattmc3/dotmore/tree/b032bbf871d46bffd698c9b7a233c533d9d2f0ebs for usage in UAssetAPI.\r\n\r\n    The MIT License (MIT)\r\n\r\n    Copyright (c) 2014 mattmc3\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE.\r\n*/\r\n\r\nnamespace UAssetAPI.UnrealTypes\r\n{\r\n    internal static class StringExtensions\r\n    {\r\n        /// <summary>\r\n        /// Provides a more natural way to call String.Format() on a string.\r\n        /// </summary>\r\n        /// <param name=\"s\">The string to format.</param>\r\n        /// <param name=\"args\">An object array that contains zero or more objects to format</param>\r\n        public static string FormatWith(this string s, params object[] args)\r\n        {\r\n            if (s == null) return null;\r\n            return string.Format(s, args);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Provides a more natural way to call String.Format() on a string.\r\n        /// </summary>\r\n        /// <param name=\"s\">The string to format.</param>\r\n        /// <param name=\"provider\">An object that supplies the culture specific formatting</param>\r\n        /// <param name=\"args\">An object array that contains zero or more objects to format</param>\r\n        public static string FormatWith(this string s, IFormatProvider provider, params object[] args)\r\n        {\r\n            if (s == null) return null;\r\n            return string.Format(provider, s, args);\r\n        }\r\n    }\r\n\r\n    public class DictionaryEnumerator<TKey, TValue> : IDictionaryEnumerator, IDisposable\r\n    {\r\n        readonly IEnumerator<KeyValuePair<TKey, TValue>> _impl;\r\n        public void Dispose() { _impl.Dispose(); }\r\n        public DictionaryEnumerator(IDictionary<TKey, TValue> value)\r\n        {\r\n            this._impl = value.GetEnumerator();\r\n        }\r\n        public void Reset() { _impl.Reset(); }\r\n        public bool MoveNext() { return _impl.MoveNext(); }\r\n        public DictionaryEntry Entry\r\n        {\r\n            get\r\n            {\r\n                var pair = _impl.Current;\r\n                return new DictionaryEntry(pair.Key, pair.Value);\r\n            }\r\n        }\r\n        public object Key { get { return _impl.Current.Key; } }\r\n        public object Value { get { return _impl.Current.Value; } }\r\n        public object Current { get { return Entry; } }\r\n    }\r\n\r\n    public class Comparer2<T> : Comparer<T>\r\n    {\r\n        private readonly Comparison<T> _compareFunction;\r\n\r\n        public Comparer2(Comparison<T> comparison)\r\n        {\r\n            if (comparison == null) throw new ArgumentNullException(\"comparison\");\r\n            _compareFunction = comparison;\r\n        }\r\n\r\n        public override int Compare(T arg1, T arg2)\r\n        {\r\n            return _compareFunction(arg1, arg2);\r\n        }\r\n    }\r\n    \r\n    /// <summary>\r\n    /// A concrete implementation of the abstract KeyedCollection class using lambdas for the\r\n    /// implementation.\r\n    /// </summary>\r\n    public class KeyedCollection2<TKey, TItem> : KeyedCollection<TKey, TItem>\r\n    {\r\n        private const string DelegateNullExceptionMessage = \"Delegate passed cannot be null\";\r\n        private Func<TItem, TKey> _getKeyForItemFunction;\r\n\r\n        public KeyedCollection2(Func<TItem, TKey> getKeyForItemFunction) : base()\r\n        {\r\n            if (getKeyForItemFunction == null) throw new ArgumentNullException(DelegateNullExceptionMessage);\r\n            _getKeyForItemFunction = getKeyForItemFunction;\r\n        }\r\n\r\n        public KeyedCollection2(Func<TItem, TKey> getKeyForItemDelegate, IEqualityComparer<TKey> comparer) : base(comparer)\r\n        {\r\n            if (getKeyForItemDelegate == null) throw new ArgumentNullException(DelegateNullExceptionMessage);\r\n            _getKeyForItemFunction = getKeyForItemDelegate;\r\n        }\r\n\r\n        protected override TKey GetKeyForItem(TItem item)\r\n        {\r\n            return _getKeyForItemFunction(item);\r\n        }\r\n\r\n        public void SortByKeys()\r\n        {\r\n            var comparer = Comparer<TKey>.Default;\r\n            SortByKeys(comparer);\r\n        }\r\n\r\n        public void SortByKeys(IComparer<TKey> keyComparer)\r\n        {\r\n            var comparer = new Comparer2<TItem>((x, y) => keyComparer.Compare(GetKeyForItem(x), GetKeyForItem(y)));\r\n            Sort(comparer);\r\n        }\r\n\r\n        public void SortByKeys(Comparison<TKey> keyComparison)\r\n        {\r\n            var comparer = new Comparer2<TItem>((x, y) => keyComparison(GetKeyForItem(x), GetKeyForItem(y)));\r\n            Sort(comparer);\r\n        }\r\n\r\n        public void Sort()\r\n        {\r\n            var comparer = Comparer<TItem>.Default;\r\n            Sort(comparer);\r\n        }\r\n\r\n        public void Sort(Comparison<TItem> comparison)\r\n        {\r\n            var newComparer = new Comparer2<TItem>((x, y) => comparison(x, y));\r\n            Sort(newComparer);\r\n        }\r\n\r\n        public void Sort(IComparer<TItem> comparer)\r\n        {\r\n            List<TItem> list = base.Items as List<TItem>;\r\n            if (list != null)\r\n            {\r\n                list.Sort(comparer);\r\n            }\r\n        }\r\n    }\r\n\r\n    public interface IOrderedDictionary<TKey, TValue> : IDictionary<TKey, TValue>, IOrderedDictionary\r\n    {\r\n        new TValue this[int index] { get; set; }\r\n        new TValue this[TKey key] { get; set; }\r\n        new int Count { get; }\r\n        new ICollection<TKey> Keys { get; }\r\n        new ICollection<TValue> Values { get; }\r\n        new void Add(TKey key, TValue value);\r\n        new void Clear();\r\n        void Insert(int index, TKey key, TValue value);\r\n        int IndexOf(TKey key);\r\n        bool ContainsValue(TValue value);\r\n        bool ContainsValue(TValue value, IEqualityComparer<TValue> comparer);\r\n        new bool ContainsKey(TKey key);\r\n        new IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator();\r\n        new bool Remove(TKey key);\r\n        new void RemoveAt(int index);\r\n        new bool TryGetValue(TKey key, out TValue value);\r\n        TValue GetValue(TKey key);\r\n        void SetValue(TKey key, TValue value);\r\n        KeyValuePair<TKey, TValue> GetItem(int index);\r\n        void SetItem(int index, TValue value);\r\n    }\r\n\r\n    /// <summary>\r\n    /// A dictionary object that allows rapid hash lookups using keys, but also\r\n    /// maintains the key insertion order so that values can be retrieved by\r\n    /// key index.\r\n    /// </summary>\r\n    public class TMap<TKey, TValue> : IOrderedDictionary<TKey, TValue>\r\n    {\r\n        #region Fields/Properties\r\n\r\n        private KeyedCollection2<TKey, KeyValuePair<TKey, TValue>> _keyedCollection;\r\n\r\n        /// <summary>\r\n        /// Gets or sets the value associated with the specified key.\r\n        /// </summary>\r\n        /// <param name=\"key\">The key associated with the value to get or set.</param>\r\n        public TValue this[TKey key]\r\n        {\r\n            get\r\n            {\r\n                return GetValue(key);\r\n            }\r\n            set\r\n            {\r\n                SetValue(key, value);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the value at the specified index.\r\n        /// </summary>\r\n        /// <param name=\"index\">The index of the value to get or set.</param>\r\n        public TValue this[int index]\r\n        {\r\n            get\r\n            {\r\n                return GetItem(index).Value;\r\n            }\r\n            set\r\n            {\r\n                SetItem(index, value);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the number of items in the dictionary\r\n        /// </summary>\r\n        public int Count\r\n        {\r\n            get { return _keyedCollection.Count; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets all the keys in the ordered dictionary in their proper order.\r\n        /// </summary>\r\n        public ICollection<TKey> Keys\r\n        {\r\n            get\r\n            {\r\n                return _keyedCollection.Select(x => x.Key).ToList();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets all the values in the ordered dictionary in their proper order.\r\n        /// </summary>\r\n        public ICollection<TValue> Values\r\n        {\r\n            get\r\n            {\r\n                return _keyedCollection.Select(x => x.Value).ToList();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the key comparer for this dictionary\r\n        /// </summary>\r\n        public IEqualityComparer<TKey> Comparer\r\n        {\r\n            get;\r\n            private set;\r\n        }\r\n\r\n        #endregion\r\n        \r\n        #region Constructors\r\n\r\n        public TMap()\r\n        {\r\n            Initialize();\r\n        }\r\n\r\n        public TMap(IEqualityComparer<TKey> comparer)\r\n        {\r\n            Initialize(comparer);\r\n        }\r\n\r\n        public TMap(IOrderedDictionary<TKey, TValue> dictionary)\r\n        {\r\n            Initialize();\r\n            foreach (KeyValuePair<TKey, TValue> pair in dictionary)\r\n            {\r\n                _keyedCollection.Add(pair);\r\n            }\r\n        }\r\n\r\n        public TMap(IOrderedDictionary<TKey, TValue> dictionary, IEqualityComparer<TKey> comparer)\r\n        {\r\n            Initialize(comparer);\r\n            foreach (KeyValuePair<TKey, TValue> pair in dictionary)\r\n            {\r\n                _keyedCollection.Add(pair);\r\n            }\r\n        }\r\n\r\n        public TMap(IEnumerable<KeyValuePair<TKey, TValue>> items)\r\n        {\r\n            Initialize();\r\n            foreach (KeyValuePair<TKey, TValue> pair in items)\r\n            {\r\n                _keyedCollection.Add(pair);\r\n            }\r\n        }\r\n\r\n        public TMap(IEnumerable<KeyValuePair<TKey, TValue>> items, IEqualityComparer<TKey> comparer)\r\n        {\r\n            Initialize(comparer);\r\n            foreach (KeyValuePair<TKey, TValue> pair in items)\r\n            {\r\n                _keyedCollection.Add(pair);\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Methods\r\n\r\n        private void Initialize(IEqualityComparer<TKey> comparer = null)\r\n        {\r\n            this.Comparer = comparer;\r\n            if (comparer != null)\r\n            {\r\n                _keyedCollection = new KeyedCollection2<TKey, KeyValuePair<TKey, TValue>>(x => x.Key, comparer);\r\n            }\r\n            else\r\n            {\r\n                _keyedCollection = new KeyedCollection2<TKey, KeyValuePair<TKey, TValue>>(x => x.Key);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Adds the specified key and value to the dictionary.\r\n        /// </summary>\r\n        /// <param name=\"key\">The key of the element to add.</param>\r\n        /// <param name=\"value\">The value of the element to add.  The value can be null for reference types.</param>\r\n        public void Add(TKey key, TValue value)\r\n        {\r\n            _keyedCollection.Add(new KeyValuePair<TKey, TValue>(key, value));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes all keys and values from this object.\r\n        /// </summary>\r\n        public void Clear()\r\n        {\r\n            _keyedCollection.Clear();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Inserts a new key-value pair at the index specified.\r\n        /// </summary>\r\n        /// <param name=\"index\">The insertion index.  This value must be between 0 and the count of items in this object.</param>\r\n        /// <param name=\"key\">A unique key for the element to add</param>\r\n        /// <param name=\"value\">The value of the element to add.  Can be null for reference types.</param>\r\n        public void Insert(int index, TKey key, TValue value)\r\n        {\r\n            _keyedCollection.Insert(index, new KeyValuePair<TKey, TValue>(key, value));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the index of the key specified.\r\n        /// </summary>\r\n        /// <param name=\"key\">The key whose index will be located</param>\r\n        /// <returns>Returns the index of the key specified if found.  Returns -1 if the key could not be located.</returns>\r\n        public int IndexOf(TKey key)\r\n        {\r\n            if (_keyedCollection.Contains(key))\r\n            {\r\n                return _keyedCollection.IndexOf(_keyedCollection[key]);\r\n            }\r\n            else\r\n            {\r\n                return -1;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determines whether this object contains the specified value.\r\n        /// </summary>\r\n        /// <param name=\"value\">The value to locate in this object.</param>\r\n        /// <returns>True if the value is found.  False otherwise.</returns>\r\n        public bool ContainsValue(TValue value)\r\n        {\r\n            return this.Values.Contains(value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determines whether this object contains the specified value.\r\n        /// </summary>\r\n        /// <param name=\"value\">The value to locate in this object.</param>\r\n        /// <param name=\"comparer\">The equality comparer used to locate the specified value in this object.</param>\r\n        /// <returns>True if the value is found.  False otherwise.</returns>\r\n        public bool ContainsValue(TValue value, IEqualityComparer<TValue> comparer)\r\n        {\r\n            return this.Values.Contains(value, comparer);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determines whether this object contains the specified key.\r\n        /// </summary>\r\n        /// <param name=\"key\">The key to locate in this object.</param>\r\n        /// <returns>True if the key is found.  False otherwise.</returns>\r\n        public bool ContainsKey(TKey key)\r\n        {\r\n            return _keyedCollection.Contains(key);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the KeyValuePair at the index specified.\r\n        /// </summary>\r\n        /// <param name=\"index\">The index of the KeyValuePair desired</param>\r\n        /// <exception cref=\"ArgumentOutOfRangeException\">\r\n        /// Thrown when the index specified does not refer to a KeyValuePair in this object\r\n        /// </exception>\r\n        public KeyValuePair<TKey, TValue> GetItem(int index)\r\n        {\r\n            if (index < 0 || index >= _keyedCollection.Count)\r\n            {\r\n                throw new ArgumentException(\"The index was outside the bounds of the dictionary: {0}\".FormatWith(index));\r\n            }\r\n            return _keyedCollection[index];\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets the value at the index specified.\r\n        /// </summary>\r\n        /// <param name=\"index\">The index of the value desired</param>\r\n        /// <param name=\"value\">The value to set</param>\r\n        /// <exception cref=\"ArgumentOutOfRangeException\">\r\n        /// Thrown when the index specified does not refer to a KeyValuePair in this object\r\n        /// </exception>\r\n        public void SetItem(int index, TValue value)\r\n        {\r\n            if (index < 0 || index >= _keyedCollection.Count)\r\n            {\r\n                throw new ArgumentException(\"The index is outside the bounds of the dictionary: {0}\".FormatWith(index));\r\n            }\r\n            var kvp = new KeyValuePair<TKey, TValue>(_keyedCollection[index].Key, value);\r\n            _keyedCollection[index] = kvp;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns an enumerator that iterates through all the KeyValuePairs in this object.\r\n        /// </summary>\r\n        public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()\r\n        {\r\n            return _keyedCollection.GetEnumerator();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes the key-value pair for the specified key.\r\n        /// </summary>\r\n        /// <param name=\"key\">The key to remove from the dictionary.</param>\r\n        /// <returns>True if the item specified existed and the removal was successful.  False otherwise.</returns>\r\n        public bool Remove(TKey key)\r\n        {\r\n            return _keyedCollection.Remove(key);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes the key-value pair at the specified index.\r\n        /// </summary>\r\n        /// <param name=\"index\">The index of the key-value pair to remove from the dictionary.</param>\r\n        public void RemoveAt(int index)\r\n        {\r\n            if (index < 0 || index >= _keyedCollection.Count)\r\n            {\r\n                throw new ArgumentException(\"The index was outside the bounds of the dictionary: {0}\".FormatWith(index));\r\n            }\r\n            _keyedCollection.RemoveAt(index);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the value associated with the specified key.\r\n        /// </summary>\r\n        /// <param name=\"key\">The key associated with the value to get.</param>\r\n        public TValue GetValue(TKey key)\r\n        {\r\n            if (_keyedCollection.Contains(key) == false)\r\n            {\r\n                throw new ArgumentException(\"The given key is not present in the dictionary: {0}\".FormatWith(key));\r\n            }\r\n            var kvp = _keyedCollection[key];\r\n            return kvp.Value;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets the value associated with the specified key.\r\n        /// </summary>\r\n        /// <param name=\"key\">The key associated with the value to set.</param>\r\n        /// <param name=\"value\">The the value to set.</param>\r\n        public void SetValue(TKey key, TValue value)\r\n        {\r\n            var kvp = new KeyValuePair<TKey, TValue>(key, value);\r\n            var idx = IndexOf(key);\r\n            if (idx > -1)\r\n            {\r\n                _keyedCollection[idx] = kvp;\r\n            }\r\n            else\r\n            {\r\n                _keyedCollection.Add(kvp);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Tries to get the value associated with the specified key.\r\n        /// </summary>\r\n        /// <param name=\"key\">The key of the desired element.</param>\r\n        /// <param name=\"value\">\r\n        /// When this method returns, contains the value associated with the specified key if\r\n        /// that key was found.  Otherwise it will contain the default value for parameter's type.\r\n        /// This parameter should be provided uninitialized.\r\n        /// </param>\r\n        /// <returns>True if the value was found.  False otherwise.</returns>\r\n        /// <remarks></remarks>\r\n        public bool TryGetValue(TKey key, out TValue value)\r\n        {\r\n            if (_keyedCollection.Contains(key))\r\n            {\r\n                value = _keyedCollection[key].Value;\r\n                return true;\r\n            }\r\n            else\r\n            {\r\n                value = default(TValue);\r\n                return false;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Sorting\r\n        public void SortKeys()\r\n        {\r\n            _keyedCollection.SortByKeys();\r\n        }\r\n\r\n        public void SortKeys(IComparer<TKey> comparer)\r\n        {\r\n            _keyedCollection.SortByKeys(comparer);\r\n        }\r\n\r\n        public void SortKeys(Comparison<TKey> comparison)\r\n        {\r\n            _keyedCollection.SortByKeys(comparison);\r\n        }\r\n\r\n        public void SortValues()\r\n        {\r\n            var comparer = Comparer<TValue>.Default;\r\n            SortValues(comparer);\r\n        }\r\n\r\n        public void SortValues(IComparer<TValue> comparer)\r\n        {\r\n            _keyedCollection.Sort((x, y) => comparer.Compare(x.Value, y.Value));\r\n        }\r\n\r\n        public void SortValues(Comparison<TValue> comparison)\r\n        {\r\n            _keyedCollection.Sort((x, y) => comparison(x.Value, y.Value));\r\n        }\r\n        #endregion\r\n\r\n        #region IDictionary<TKey, TValue>\r\n\r\n        void IDictionary<TKey, TValue>.Add(TKey key, TValue value)\r\n        {\r\n            Add(key, value);\r\n        }\r\n\r\n        bool IDictionary<TKey, TValue>.ContainsKey(TKey key)\r\n        {\r\n            return ContainsKey(key);\r\n        }\r\n\r\n        ICollection<TKey> IDictionary<TKey, TValue>.Keys\r\n        {\r\n            get { return Keys; }\r\n        }\r\n\r\n        bool IDictionary<TKey, TValue>.Remove(TKey key)\r\n        {\r\n            return Remove(key);\r\n        }\r\n\r\n        bool IDictionary<TKey, TValue>.TryGetValue(TKey key, out TValue value)\r\n        {\r\n            return TryGetValue(key, out value);\r\n        }\r\n\r\n        ICollection<TValue> IDictionary<TKey, TValue>.Values\r\n        {\r\n            get { return Values; }\r\n        }\r\n\r\n        TValue IDictionary<TKey, TValue>.this[TKey key]\r\n        {\r\n            get\r\n            {\r\n                return this[key];\r\n            }\r\n            set\r\n            {\r\n                this[key] = value;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ICollection<KeyValuePair<TKey, TValue>>\r\n\r\n        void ICollection<KeyValuePair<TKey, TValue>>.Add(KeyValuePair<TKey, TValue> item)\r\n        {\r\n            _keyedCollection.Add(item);\r\n        }\r\n\r\n        void ICollection<KeyValuePair<TKey, TValue>>.Clear()\r\n        {\r\n            _keyedCollection.Clear();\r\n        }\r\n\r\n        bool ICollection<KeyValuePair<TKey, TValue>>.Contains(KeyValuePair<TKey, TValue> item)\r\n        {\r\n            return _keyedCollection.Contains(item);\r\n        }\r\n\r\n        void ICollection<KeyValuePair<TKey, TValue>>.CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex)\r\n        {\r\n            _keyedCollection.CopyTo(array, arrayIndex);\r\n        }\r\n\r\n        int ICollection<KeyValuePair<TKey, TValue>>.Count\r\n        {\r\n            get { return _keyedCollection.Count; }\r\n        }\r\n\r\n        bool ICollection<KeyValuePair<TKey, TValue>>.IsReadOnly\r\n        {\r\n            get { return false; }\r\n        }\r\n\r\n        bool ICollection<KeyValuePair<TKey, TValue>>.Remove(KeyValuePair<TKey, TValue> item)\r\n        {\r\n            return _keyedCollection.Remove(item);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IEnumerable<KeyValuePair<TKey, TValue>>\r\n\r\n        IEnumerator<KeyValuePair<TKey, TValue>> IEnumerable<KeyValuePair<TKey, TValue>>.GetEnumerator()\r\n        {\r\n            return GetEnumerator();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IEnumerable\r\n\r\n        IEnumerator IEnumerable.GetEnumerator()\r\n        {\r\n            return GetEnumerator();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IOrderedDictionary\r\n\r\n        IDictionaryEnumerator IOrderedDictionary.GetEnumerator()\r\n        {\r\n            return new DictionaryEnumerator<TKey, TValue>(this);\r\n        }\r\n\r\n        void IOrderedDictionary.Insert(int index, object key, object value)\r\n        {\r\n            Insert(index, (TKey)key, (TValue)value);\r\n        }\r\n\r\n        void IOrderedDictionary.RemoveAt(int index)\r\n        {\r\n            RemoveAt(index);\r\n        }\r\n\r\n        object IOrderedDictionary.this[int index]\r\n        {\r\n            get\r\n            {\r\n                return this[index];\r\n            }\r\n            set\r\n            {\r\n                this[index] = (TValue)value;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IDictionary\r\n\r\n        void IDictionary.Add(object key, object value)\r\n        {\r\n            Add((TKey)key, (TValue)value);\r\n        }\r\n\r\n        void IDictionary.Clear()\r\n        {\r\n            Clear();\r\n        }\r\n\r\n        bool IDictionary.Contains(object key)\r\n        {\r\n            return _keyedCollection.Contains((TKey)key);\r\n        }\r\n\r\n        IDictionaryEnumerator IDictionary.GetEnumerator()\r\n        {\r\n            return new DictionaryEnumerator<TKey, TValue>(this);\r\n        }\r\n\r\n        bool IDictionary.IsFixedSize\r\n        {\r\n            get { return false; }\r\n        }\r\n\r\n        bool IDictionary.IsReadOnly\r\n        {\r\n            get { return false; }\r\n        }\r\n\r\n        ICollection IDictionary.Keys\r\n        {\r\n            get { return (ICollection)this.Keys; }\r\n        }\r\n\r\n        void IDictionary.Remove(object key)\r\n        {\r\n            Remove((TKey)key);\r\n        }\r\n\r\n        ICollection IDictionary.Values\r\n        {\r\n            get { return (ICollection)this.Values; }\r\n        }\r\n\r\n        object IDictionary.this[object key]\r\n        {\r\n            get\r\n            {\r\n                return this[(TKey)key];\r\n            }\r\n            set\r\n            {\r\n                this[(TKey)key] = (TValue)value;\r\n            }\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region ICollection\r\n\r\n        void ICollection.CopyTo(Array array, int index)\r\n        {\r\n            ((ICollection)_keyedCollection).CopyTo(array, index);\r\n        }\r\n\r\n        int ICollection.Count\r\n        {\r\n            get { return ((ICollection)_keyedCollection).Count; }\r\n        }\r\n\r\n        bool ICollection.IsSynchronized\r\n        {\r\n            get { return ((ICollection)_keyedCollection).IsSynchronized; }\r\n        }\r\n\r\n        object ICollection.SyncRoot\r\n        {\r\n            get { return ((ICollection)_keyedCollection).SyncRoot; }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI/UnrealTypes/UE4VersionToObjectVersion.cs",
    "content": "namespace UAssetAPI.UnrealTypes\r\n{\r\n    public enum UE4VersionToObjectVersion\r\n    {\r\n        VER_UE4_0 = 342,\r\n        VER_UE4_1 = 352,\r\n        VER_UE4_2 = 363,\r\n        VER_UE4_3 = 382,\r\n        VER_UE4_4 = 385,\r\n        VER_UE4_5 = 401,\r\n        VER_UE4_6 = 413,\r\n        VER_UE4_7 = 434,\r\n        VER_UE4_8 = 451,\r\n        VER_UE4_9 = 482,\r\n        VER_UE4_10 = 482,\r\n        VER_UE4_11 = 498,\r\n        VER_UE4_12 = 504,\r\n        VER_UE4_13 = 505,\r\n        VER_UE4_14 = 508,\r\n        VER_UE4_15 = 510,\r\n        VER_UE4_16 = 513,\r\n        VER_UE4_17 = 513,\r\n        VER_UE4_18 = 514,\r\n        VER_UE4_19 = 516,\r\n        VER_UE4_20 = 516,\r\n        VER_UE4_21 = 517,\r\n        VER_UE4_22 = 517,\r\n        VER_UE4_23 = 517,\r\n        VER_UE4_24 = 518,\r\n        VER_UE4_25 = 518,\r\n        VER_UE4_26 = 519,\r\n        VER_UE4_27 = 522,\r\n        VER_UE5_0EA = 522,\r\n        VER_UE5_0 = 522,\r\n        VER_UE5_1 = 522,\r\n        VER_UE5_2 = 522,\r\n        VER_UE5_3 = 522,\r\n        VER_UE5_4 = 522,\r\n        VER_UE5_5 = 522,\r\n        VER_UE5_6 = 522,\r\n        VER_UE5_7 = 522,\r\n    }\r\n\r\n    public enum UE5VersionToObjectVersion\r\n    {\r\n        VER_UE5_0_EA = 1002,\r\n        VER_UE5_0 = 1004,\r\n        VER_UE5_1 = 1008,\r\n        VER_UE5_2 = 1009,\r\n        VER_UE5_3 = 1009,\r\n        VER_UE5_4 = 1012,\r\n        VER_UE5_5 = 1013,\r\n        VER_UE5_6 = 1017,\r\n        VER_UE5_7 = 1017,\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Unversioned/FFragment.cs",
    "content": "﻿using System;\r\n\r\nnamespace UAssetAPI.Unversioned\r\n{\r\n    /// <summary>\r\n    /// Unversioned header fragment.\r\n    /// </summary>\r\n    public class FFragment\r\n    {\r\n        /// <summary>\r\n        /// Number of properties to skip before values.\r\n        /// </summary>\r\n        public int SkipNum;\r\n\r\n        /// <summary>\r\n        /// Number of subsequent property values stored.\r\n        /// </summary>\r\n        public int ValueNum = 0;\r\n\r\n        /// <summary>\r\n        /// Is this the last fragment of the header?\r\n        /// </summary>\r\n        public bool bIsLast = false;\r\n\r\n        public int FirstNum = -1;\r\n        public int LastNum\r\n        {\r\n            get\r\n            {\r\n                return FirstNum + ValueNum - 1;\r\n            }\r\n        }\r\n\r\n        public bool bHasAnyZeroes = false;\r\n\r\n        internal static readonly byte SkipMax = 127;\r\n        internal static readonly byte ValueMax = 127;\r\n        internal static readonly uint SkipNumMask = 0x007fu;\r\n        internal static readonly uint HasZeroMask = 0x0080u;\r\n        internal static readonly int ValueNumShift = 9;\r\n        internal static readonly uint IsLastMask = 0x0100u;\r\n\r\n        public override string ToString()\r\n        {\r\n            return \"{\" + SkipNum + \",\" + ValueNum + \",\" + bHasAnyZeroes + \",\" + bIsLast + \"}\";\r\n        }\r\n\r\n        public ushort Pack()\r\n        {\r\n            if (SkipNum > SkipMax) throw new InvalidOperationException(\"Skip num \" + SkipNum + \" is greater than maximum possible value \" + SkipMax);\r\n            if (ValueNum > ValueMax) throw new InvalidOperationException(\"Value num \" + ValueNum + \" is greater than maximum possible value \" + ValueMax);\r\n            return (ushort)((byte)SkipNum | (bHasAnyZeroes ? HasZeroMask : 0) | (ushort)((byte)ValueNum << ValueNumShift) | (bIsLast ? IsLastMask : 0));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Used for debugging\r\n        /// </summary>\r\n        internal string PackedForm => BitConverter.ToString(BitConverter.GetBytes(Pack()));\r\n\r\n        public static FFragment Unpack(ushort Int)\r\n        {\r\n            FFragment Fragment = new FFragment();\r\n            Fragment.SkipNum = (byte)(Int & SkipNumMask);\r\n            Fragment.bHasAnyZeroes = (Int & HasZeroMask) != 0;\r\n            Fragment.ValueNum = (byte)(Int >> ValueNumShift);\r\n            Fragment.bIsLast = (Int & IsLastMask) != 0;\r\n            return Fragment;\r\n        }\r\n\r\n        public static FFragment GetFromBounds(int LastNumBefore, int FirstNum, int LastNum, bool hasAnyZeros, bool isLast) // for 1st fragment: LastNumBefore = -1\r\n        {\r\n            FFragment Fragment = new FFragment();\r\n            Fragment.SkipNum = FirstNum - LastNumBefore - 1;\r\n            Fragment.ValueNum = LastNum - FirstNum + 1;\r\n            Fragment.bHasAnyZeroes = hasAnyZeros;\r\n            Fragment.bIsLast = isLast;\r\n\r\n            Fragment.FirstNum = FirstNum;\r\n            return Fragment;\r\n        }\r\n\r\n        public FFragment()\r\n        {\r\n\r\n        }\r\n\r\n        public FFragment(int skipNum, int valueNum, bool bIsLast, bool bHasAnyZeroes, int firstNum = -1) // specifying firstNum is not usually necessary\r\n        {\r\n            SkipNum = skipNum;\r\n            ValueNum = valueNum;\r\n            this.bIsLast = bIsLast;\r\n            this.bHasAnyZeroes = bHasAnyZeroes;\r\n            this.FirstNum = firstNum;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Unversioned/FUnversionedHeader.cs",
    "content": "﻿using System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\n\r\nnamespace UAssetAPI.Unversioned\r\n{\r\n    // https://github.com/EpicGames/UnrealEngine/blob/master/Engine/Source/Runtime/CoreUObject/Private/Serialization/UnversionedPropertySerialization.cpp#L414\r\n\r\n    /// <summary>\r\n    /// List of serialized property indices and which of them are non-zero.\r\n    /// Serialized as a stream of 16-bit skip-x keep-y fragments and a zero bitmask.\r\n    /// </summary>\r\n    public class FUnversionedHeader\r\n    {\r\n        public LinkedList<FFragment> Fragments;\r\n        public LinkedListNode<FFragment> CurrentFragment;\r\n        public int UnversionedPropertyIndex = 0;\r\n        public int ZeroMaskIndex = 0;\r\n        public uint ZeroMaskNum = 0;\r\n        public BitArray ZeroMask;\r\n        public bool bHasNonZeroValues = false;\r\n\r\n        public void Read(AssetBinaryReader reader)\r\n        {\r\n            if (!reader.Asset.HasUnversionedProperties) return;\r\n            Fragments = new LinkedList<FFragment>();\r\n\r\n            FFragment Fragment;\r\n            uint UnmaskedNum = 0;\r\n            int firstNum = 0;\r\n            do\r\n            {\r\n                Fragment = FFragment.Unpack(reader.ReadUInt16());\r\n                Fragment.FirstNum = firstNum + Fragment.SkipNum;\r\n                firstNum = firstNum + Fragment.SkipNum + Fragment.ValueNum;\r\n                Fragments.AddLast(Fragment);\r\n#if DEBUGVERBOSE\r\n                Debug.WriteLine(\"R: \" + Fragment);\r\n#endif\r\n\r\n                if (Fragment.bHasAnyZeroes)\r\n                {\r\n                    ZeroMaskNum += (uint)Fragment.ValueNum;\r\n                }\r\n                else\r\n                {\r\n                    UnmaskedNum += (uint)Fragment.ValueNum;\r\n                }\r\n            }\r\n            while (!Fragment.bIsLast);\r\n\r\n            if (ZeroMaskNum > 0)\r\n            {\r\n                LoadZeroMaskData(reader, ZeroMaskNum);\r\n                bHasNonZeroValues = UnmaskedNum > 0 || !CheckIfZeroMaskIsAllOnes();\r\n            }\r\n            else\r\n            {\r\n                ZeroMask = new BitArray(0);\r\n                bHasNonZeroValues = UnmaskedNum > 0;\r\n            }\r\n\r\n            CurrentFragment = Fragments.First;\r\n            UnversionedPropertyIndex = CurrentFragment.Value.FirstNum;\r\n        }\r\n\r\n        public void LoadZeroMaskData(AssetBinaryReader reader, uint NumBits)\r\n        {\r\n            if (NumBits <= 8)\r\n            {\r\n                ZeroMask = new BitArray(reader.ReadBytes(1));\r\n            }\r\n            else if (NumBits <= 16)\r\n            {\r\n                ZeroMask = new BitArray(reader.ReadBytes(2));\r\n            }\r\n            else\r\n            {\r\n                int numWords = UAPUtils.DivideAndRoundUp((int)NumBits, 32);\r\n                int[] intData = new int[numWords];\r\n                for (int i = 0; i < numWords; i++)\r\n                {\r\n                    intData[i] = reader.ReadInt32();\r\n                }\r\n                ZeroMask = new BitArray(intData);\r\n            }\r\n        }\r\n\r\n        public byte[] SaveZeroMaskData()\r\n        {\r\n            int NumBits = ZeroMask.Length;\r\n\r\n            byte[] res;\r\n            if (NumBits <= 8)\r\n            {\r\n                res = new byte[1];\r\n            }\r\n            else if (NumBits <= 16)\r\n            {\r\n                res = new byte[2];\r\n            }\r\n            else\r\n            {\r\n                int numWords = UAPUtils.DivideAndRoundUp(NumBits, 32);\r\n                res = new byte[numWords * sizeof(int)];\r\n            }\r\n\r\n            ZeroMask.CopyTo(res, 0);\r\n            return res;\r\n        }\r\n\r\n        public bool CheckIfZeroMaskIsAllOnes()\r\n        {\r\n            for (int i = 0; i < ZeroMask.Length; i++)\r\n            {\r\n                if (!ZeroMask[i]) return false;\r\n            }\r\n            return true;\r\n        }\r\n\r\n        public void Write(AssetBinaryWriter writer)\r\n        {\r\n            if (!writer.Asset.HasUnversionedProperties) return;\r\n            foreach (FFragment Fragment in Fragments)\r\n            {\r\n                writer.Write(Fragment.Pack());\r\n            }\r\n\r\n            if (ZeroMask.Length > 0)\r\n            {\r\n                writer.Write(SaveZeroMaskData());\r\n            }\r\n        }\r\n\r\n        public bool HasValues()\r\n        {\r\n            return bHasNonZeroValues | (ZeroMask.Length > 0);\r\n        }\r\n\r\n        public bool HasNonZeroValues()\r\n        {\r\n            return bHasNonZeroValues;\r\n        }\r\n\r\n        public FUnversionedHeader(AssetBinaryReader reader)\r\n        {\r\n            Read(reader);\r\n        }\r\n\r\n        public FUnversionedHeader()\r\n        {\r\n\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Unversioned/Oodle.cs",
    "content": "﻿using System;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Net;\r\nusing System.Reflection;\r\nusing System.Runtime.InteropServices;\r\nusing System.Text.RegularExpressions;\r\n\r\nnamespace UAssetAPI.Unversioned\r\n{\r\n    public class Oodle\r\n    {\r\n        // oodle download link is broken\r\n        public const string OODLE_DOWNLOAD_LINK = \"https://cdn.discordapp.com/attachments/817251677086285848/992648087371792404/oo2core_9_win64.dll\";\r\n        public const string OODLE_DLL_NAME = @\"oo2core_9_win64.dll\";\r\n        private static Regex RemoveFilePrefixRegex = new Regex(@\"^file:?[\\\\\\/]+\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\r\n\r\n        [DllImport(OODLE_DLL_NAME)]\r\n        private static extern int OodleLZ_Decompress(byte[] buffer, long bufferSize, byte[] outputBuffer, long outputBufferSize, uint a, uint b, ulong c, uint d, uint e, uint f, uint g, uint h, uint i, uint threadModule);\r\n\r\n        public static byte[] Decompress(byte[] buffer, int size, int uncompressedSize)\r\n        {\r\n            throw new NotImplementedException(\"Oodle decompression is no longer supported\");\r\n\r\n            /*var targetPath = Path.Combine(Path.GetDirectoryName(RemoveFilePrefixRegex.Replace(Assembly.GetAssembly(typeof(Oodle)).CodeBase, string.Empty)), OODLE_DLL_NAME);\r\n            if (!File.Exists(targetPath))\r\n            {\r\n                Directory.CreateDirectory(Path.GetDirectoryName(targetPath));\r\n                using (var client = new WebClient())\r\n                {\r\n                    client.DownloadFile(OODLE_DOWNLOAD_LINK, targetPath);\r\n                }\r\n            }\r\n\r\n            byte[] decompressedBuffer = new byte[uncompressedSize];\r\n            int decompressedCount = OodleLZ_Decompress(buffer, size, decompressedBuffer, uncompressedSize, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3);\r\n\r\n            if (decompressedCount == uncompressedSize)\r\n            {\r\n                return decompressedBuffer;\r\n            }\r\n            else if (decompressedCount < uncompressedSize)\r\n            {\r\n                return decompressedBuffer.Take(decompressedCount).ToArray();\r\n            }\r\n\r\n            return new byte[0];*/\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Unversioned/SaveGame.cs",
    "content": "﻿using Newtonsoft.Json;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing UAssetAPI.UnrealTypes;\n\nnamespace UAssetAPI.Unversioned\n{\n    public enum ESaveGameFileVersion\n    {\n        InitialVersion = 1,\n        // serializing custom versions into the savegame data to handle that type of versioning\n        AddedCustomVersions = 2,\n        // added a new UE5 version number to FPackageFileSummary\n        PackageFileSummaryVersionChange = 3,\n\n        // -----<new versions can be added above this line>-------------------------------------------------\n        VersionPlusOne,\n        LatestVersion = VersionPlusOne - 1\n    }\n\n    public enum ECustomVersionSerializationFormat\n    {\n        Unknown,\n        Guids,\n        Enums,\n        Optimized\n    }\n\n    /// <summary>\n    /// Represents an Unreal save game file. Parsing is only implemented for engine and custom version data.\n    /// </summary>\n    public class SaveGame\n    {\n        /// <summary>\n        /// The path of the file on disk.\n        /// </summary>\n        [JsonIgnore]\n        public string FilePath = null;\n\n        public ESaveGameFileVersion SaveGameFileVersion;\n        public ObjectVersion ObjectVersion;\n        public ObjectVersionUE5 ObjectVersionUE5;\n        public FEngineVersion EngineVersion;\n\n        public ECustomVersionSerializationFormat CustomVersionSerializationFormat;\n        /// <summary>\n        /// All the custom versions stored in the archive.\n        /// </summary>\n        public List<CustomVersion> CustomVersionContainer = null;\n\n        /// <summary>\n        /// Creates a MemoryStream from an asset path.\n        /// </summary>\n        /// <param name=\"p\">The path to the input file.</param>\n        /// <returns>A new MemoryStream that stores the binary data of the input file.</returns>\n        public MemoryStream PathToStream(string p)\n        {\n            using (FileStream origStream = File.Open(p, FileMode.Open))\n            {\n                MemoryStream completeStream = new MemoryStream();\n                origStream.CopyTo(completeStream);\n\n                completeStream.Seek(0, SeekOrigin.Begin);\n                return completeStream;\n            }\n        }\n\n        /// <summary>\n        /// Creates a BinaryReader from an asset path.\n        /// </summary>\n        /// <param name=\"p\">The path to the input file.</param>\n        /// <returns>A new BinaryReader that stores the binary data of the input file.</returns>\n        public UnrealBinaryReader PathToReader(string p)\n        {\n            return new UnrealBinaryReader(PathToStream(p));\n        }\n\n        public static readonly byte[] SAVE_MAGIC = Encoding.ASCII.GetBytes(\"GVAS\");\n        /// <summary>\n        /// Reads a save game from disk.\n        /// <para/>\n        /// Parsing is only implemented for engine and custom version data.\n        /// </summary>\n        /// <param name=\"reader\">The binary reader to use.</param>\n        public void Read(UnrealBinaryReader reader)\n        {\n            if (!reader.ReadBytes(SAVE_MAGIC.Length).SequenceEqual(SAVE_MAGIC)) throw new FormatException(\"Invalid save game magic\");\n            SaveGameFileVersion = (ESaveGameFileVersion)reader.ReadUInt32();\n            ObjectVersion = (ObjectVersion)reader.ReadUInt32();\n            if (SaveGameFileVersion >= ESaveGameFileVersion.PackageFileSummaryVersionChange) ObjectVersionUE5 = (ObjectVersionUE5)reader.ReadUInt32();\n            EngineVersion = new FEngineVersion(reader);\n            if (SaveGameFileVersion >= ESaveGameFileVersion.AddedCustomVersions)\n            {\n                CustomVersionSerializationFormat = (ECustomVersionSerializationFormat)reader.ReadUInt32();\n                CustomVersionContainer = reader.ReadCustomVersionContainer(CustomVersionSerializationFormat);\n            }\n        }\n\n        /// <summary>\n        /// Patches a .usmap file to contain the versioning info within this save file.\n        /// </summary>\n        /// <param name=\"usmapPath\">The path to the .usmap file to patch.</param>\n        public void PatchUsmap(string usmapPath)\n        {\n            byte[] restOfData = new byte[0];\n            UsmapVersion ver = UsmapVersion.Initial;\n            using (FileStream origStream = File.Open(usmapPath, FileMode.Open))\n            {\n                UnrealBinaryReader reader = new UnrealBinaryReader(origStream);\n\n                reader.BaseStream.Seek(0, SeekOrigin.Begin);\n                ushort fileSignature = reader.ReadUInt16();\n                if (fileSignature != Usmap.USMAP_MAGIC) throw new FormatException(\".usmap: File signature mismatch\");\n\n                ver = (UsmapVersion)reader.ReadByte();\n                if (ver < UsmapVersion.Initial || ver > UsmapVersion.Latest) throw new FormatException(\".usmap: Unknown file version \" + ver);\n                if (ver >= UsmapVersion.PackageVersioning)\n                {\n                    bool bHasVersioning = reader.ReadInt32() > 0;\n                    if (bHasVersioning)\n                    {\n                        reader.ReadUInt32();\n                        reader.ReadUInt32();\n                        reader.ReadCustomVersionContainer(ECustomVersionSerializationFormat.Optimized);\n                        reader.ReadUInt32();\n                    }\n                }\n\n                restOfData = reader.ReadBytes((int)(reader.BaseStream.Length - reader.BaseStream.Position));\n            }\n\n            if (ver < UsmapVersion.PackageVersioning) ver = UsmapVersion.PackageVersioning;\n\n            using (FileStream origStream = File.Open(usmapPath, FileMode.Create))\n            {\n                UnrealBinaryWriter writer = new UnrealBinaryWriter(origStream);\n\n                writer.Seek(0, SeekOrigin.Begin);\n                writer.Write(Usmap.USMAP_MAGIC);\n                writer.Write((byte)ver);\n                writer.Write((int)1);\n                writer.Write((uint)ObjectVersion);\n                writer.Write((uint)ObjectVersionUE5);\n                writer.WriteCustomVersionContainer(ECustomVersionSerializationFormat.Optimized, CustomVersionContainer);\n                writer.Write(EngineVersion.Changelist);\n                writer.Write(restOfData); \n            }\n        }\n\n        /// <summary>\n        /// Reads a save game from disk and initializes a new instance of the <see cref=\"SaveGame\"/> class to store its data in memory.\n        /// <para/>\n        /// Parsing is only implemented for engine and custom version data.\n        /// </summary>\n        /// <param name=\"path\">The path of the .sav file on disk that this instance will read from.</param>\n        /// <exception cref=\"FormatException\">Throw when the asset cannot be parsed correctly.</exception>\n        public SaveGame(string path)\n        {\n            FilePath = path;\n            Read(PathToReader(FilePath));\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"SaveGame\"/> class. This instance will store no file data and does not represent any file in particular until the <see cref=\"Read\"/> method is manually called.\n        /// </summary>\n        public SaveGame()\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "UAssetAPI/Unversioned/Usmap.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing Newtonsoft.Json.Converters;\r\nusing System;\r\nusing System.Collections.Concurrent;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing UAssetAPI.CustomVersions;\r\nusing UAssetAPI.ExportTypes;\r\nusing UAssetAPI.FieldTypes;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.UnrealTypes;\r\n\r\nnamespace UAssetAPI.Unversioned\r\n{\r\n    public class UsmapSchemaPropertiesJsonConverter : JsonConverter<IReadOnlyDictionary<int, UsmapProperty>>\r\n    {\r\n        public override IReadOnlyDictionary<int, UsmapProperty> ReadJson(JsonReader reader, Type objectType, IReadOnlyDictionary<int, UsmapProperty> existingValue, bool hasExistingValue, JsonSerializer serializer)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public override void WriteJson(JsonWriter writer, IReadOnlyDictionary<int, UsmapProperty> value, JsonSerializer serializer)\r\n        {\r\n            writer.WriteStartObject();\r\n            foreach (KeyValuePair<int, UsmapProperty> entry in value)\r\n            {\r\n                if (entry.Value == null) continue;\r\n                writer.WritePropertyName(entry.Value.Name);\r\n                serializer.Serialize(writer, entry.Value.PropertyData?.ToString() ?? \"null\");\r\n            }\r\n            writer.WriteEndObject();\r\n        }\r\n    }\r\n\r\n\r\n    public enum UsmapVersion : byte\r\n    {\r\n        /// <summary>\r\n        /// Initial format.\r\n        /// </summary>\r\n        Initial,\r\n\r\n        /// <summary>\r\n        /// Adds optional asset package versioning\r\n        /// </summary>\r\n        PackageVersioning,\r\n\r\n        /// <summary>\r\n        /// 16-bit wide names in name map\r\n        /// </summary>\r\n        LongFName,\r\n\r\n        /// <summary>\r\n        /// 16-bit enum entry count\r\n        /// </summary>\r\n        LargeEnums,\r\n\r\n        /// <summary>\r\n        /// Adds enum values (instead of assuming ordinal)\r\n        /// </summary>\r\n        ExplicitEnumValues,\r\n\r\n        LatestPlusOne,\r\n        Latest = LatestPlusOne - 1\r\n    }\r\n\r\n    public enum UsmapExtensionLayoutVersion : byte\r\n    {\r\n        /// <summary>\r\n        /// Initial format.\r\n        /// </summary>\r\n        Initial\r\n    }\r\n\r\n    public enum UsmapStructKind : byte\r\n    {\r\n        None = 0,\r\n        UScriptStruct = 1,\r\n        UClass = 2,\r\n    }\r\n\r\n    public enum ECompressionMethod : byte\r\n    {\r\n        None,\r\n        Oodle,\r\n        Brotli,\r\n        ZStandard,\r\n\r\n        Unknown = 0xFF\r\n    };\r\n\r\n    public enum EPropertyType\r\n    {\r\n        ByteProperty,\r\n        BoolProperty,\r\n        IntProperty,\r\n        FloatProperty,\r\n        ObjectProperty,\r\n        NameProperty,\r\n        DelegateProperty,\r\n        DoubleProperty,\r\n        ArrayProperty,\r\n        StructProperty,\r\n        StrProperty,\r\n        TextProperty,\r\n        InterfaceProperty,\r\n        MulticastDelegateProperty,\r\n        WeakObjectProperty, //\r\n        LazyObjectProperty, // When deserialized, these 3 properties will be SoftObjects\r\n        AssetObjectProperty, //\r\n        SoftObjectProperty,\r\n        UInt64Property,\r\n        UInt32Property,\r\n        UInt16Property,\r\n        Int64Property,\r\n        Int16Property,\r\n        Int8Property,\r\n        MapProperty,\r\n        SetProperty,\r\n        EnumProperty,\r\n        FieldPathProperty,\r\n        OptionalProperty,\r\n        Utf8StrProperty,\r\n        AnsiStrProperty,\r\n\r\n        Unknown = 0xFF\r\n    };\r\n\r\n    public class UsmapMapData : UsmapPropertyData\r\n    {\r\n        public UsmapPropertyData InnerType;\r\n        public UsmapPropertyData ValueType;\r\n\r\n        public UsmapMapData()\r\n        {\r\n            Type = EPropertyType.MapProperty;\r\n        }\r\n        public override string ToString()\r\n        {\r\n            return base.ToString() + \"<\" + InnerType.ToString() + \", \" + ValueType.ToString() + \">\";\r\n        }\r\n\r\n    }\r\n\r\n    public class UsmapArrayData : UsmapPropertyData\r\n    {\r\n        public UsmapPropertyData InnerType;\r\n\r\n        public UsmapArrayData(EPropertyType type) // array or map\r\n        {\r\n            Type = type;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return base.ToString() + \"<\" + InnerType.ToString() + \">\";\r\n        }\r\n    }\r\n\r\n    public class UsmapStructData : UsmapPropertyData\r\n    {\r\n        public string StructType;\r\n\r\n        public UsmapStructData(string structType)\r\n        {\r\n            StructType = structType;\r\n            Type = EPropertyType.StructProperty;\r\n        }\r\n\r\n        public UsmapStructData()\r\n        {\r\n            Type = EPropertyType.StructProperty;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return base.ToString() + \"<\" + StructType + \">\";\r\n        }\r\n    }\r\n\r\n    public class UsmapEnumData : UsmapPropertyData\r\n    {\r\n        public UsmapPropertyData InnerType;\r\n        public string Name;\r\n        public List<string> Values;\r\n\r\n        public UsmapEnumData(string name, List<string> values)\r\n        {\r\n            Name = name;\r\n            Values = values;\r\n            Type = EPropertyType.EnumProperty;\r\n        }\r\n\r\n        public UsmapEnumData()\r\n        {\r\n            Type = EPropertyType.EnumProperty;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return base.ToString() + \"<\" + Name + \"<\" + InnerType.ToString() + \">>\";\r\n        }\r\n    }\r\n\r\n    public class UsmapPropertyData\r\n    {\r\n        public EPropertyType Type = EPropertyType.Unknown;\r\n\r\n        public UsmapPropertyData(EPropertyType type)\r\n        {\r\n            Type = type;\r\n        }\r\n\r\n        public UsmapPropertyData()\r\n        {\r\n\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return Type.ToString();\r\n        }\r\n    }\r\n\r\n    public class UsmapProperty : ICloneable\r\n    {\r\n        public string Name;\r\n        public ushort SchemaIndex;\r\n        public ushort ArrayIndex; // not serialized\r\n        public byte ArraySize;\r\n        [JsonConverter(typeof(StringEnumConverter))]\r\n        public EPropertyFlags PropertyFlags;\r\n        public UsmapPropertyData PropertyData;\r\n\r\n        public UsmapProperty(string name, ushort schemaIndex, ushort arrayIndex, byte arraySize, UsmapPropertyData propertyData)\r\n        {\r\n            Name = name;\r\n            SchemaIndex = schemaIndex;\r\n            ArrayIndex = arrayIndex;\r\n            ArraySize = arraySize;\r\n            PropertyData = propertyData;\r\n        }\r\n\r\n        public object Clone()\r\n        {\r\n            return new UsmapProperty(Name, SchemaIndex, ArrayIndex, ArraySize, PropertyData);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return Name + \" : \" + SchemaIndex + \" : \" + ArrayIndex + \" : \" + ArraySize + \" : (\" + PropertyData.ToString() + \")\";\r\n        }\r\n    }\r\n\r\n    internal class PropertyMapComparer : IEqualityComparer<Tuple<string, int>>\r\n    {\r\n        public StringComparer Comparer;\r\n\r\n        public bool Equals(Tuple<string, int> lhs, Tuple<string, int> rhs)\r\n        {\r\n            return Comparer.Equals(lhs.Item1, rhs.Item1) && lhs.Item2 == rhs.Item2;\r\n        }\r\n\r\n        public int GetHashCode(Tuple<string, int> tuple)\r\n        {\r\n            return Comparer.GetHashCode(tuple.Item1) ^ tuple.Item2.GetHashCode();\r\n        }\r\n    }\r\n\r\n    public class UsmapSchema\r\n    {\r\n        public string Name;\r\n        public string SuperType;\r\n        public string SuperTypeModulePath;\r\n        [JsonIgnore]\r\n        public ushort PropCount;\r\n        public string ModulePath;\r\n        /// <summary>\r\n        /// Whether or not this schema was retrieved from a .uasset file.\r\n        /// </summary>\r\n        [JsonIgnore]\r\n        public bool FromAsset = false;\r\n\r\n        [JsonConverter(typeof(UsmapSchemaPropertiesJsonConverter))]\r\n        public IReadOnlyDictionary<int, UsmapProperty> Properties => properties;\r\n\r\n        [JsonIgnore]\r\n        private ConcurrentDictionary<int, UsmapProperty> properties;\r\n        [JsonIgnore]\r\n        private ConcurrentDictionary<Tuple<string, int>, UsmapProperty> propertiesMap;\r\n\r\n        [JsonConverter(typeof(StringEnumConverter))]\r\n        public UsmapStructKind StructKind;\r\n        public int StructOrClassFlags;\r\n\r\n        public UsmapProperty GetProperty(string key, int dupIndex)\r\n        {\r\n            var keyTuple = new Tuple<string, int>(key, dupIndex);\r\n            return propertiesMap.ContainsKey(keyTuple) ? propertiesMap[keyTuple] : null;\r\n        }\r\n\r\n        public void ConstructPropertiesMap(bool isCaseInsensitive)\r\n        {\r\n            propertiesMap = new ConcurrentDictionary<Tuple<string, int>, UsmapProperty>(new PropertyMapComparer { Comparer = isCaseInsensitive ? StringComparer.InvariantCultureIgnoreCase : StringComparer.InvariantCulture });\r\n            foreach (KeyValuePair<int, UsmapProperty> entry in properties)\r\n            {\r\n                propertiesMap[new Tuple<string, int>(entry.Value.Name, entry.Value.ArrayIndex)] = entry.Value;\r\n            }\r\n        }\r\n\r\n        public UsmapSchema(string name, string superType, ushort propCount, ConcurrentDictionary<int, UsmapProperty> props, bool isCaseInsensitive, string superTypeModulePath, bool fromAsset = false)\r\n        {\r\n            Name = name;\r\n            SuperType = superType;\r\n            SuperTypeModulePath = superTypeModulePath;\r\n            PropCount = propCount;\r\n            properties = props;\r\n            FromAsset = fromAsset;\r\n\r\n            ConstructPropertiesMap(isCaseInsensitive);\r\n        }\r\n\r\n        public UsmapSchema()\r\n        {\r\n\r\n        }\r\n    }\r\n\r\n    public class UsmapEnum\r\n    {\r\n        public string Name;\r\n        public string ModulePath;\r\n        public int EnumFlags;\r\n        public ConcurrentDictionary<long, string> Values;\r\n\r\n        public UsmapEnum(string name, ConcurrentDictionary<long, string> values)\r\n        {\r\n            Name = name;\r\n            Values = values;\r\n        }\r\n\r\n        public UsmapEnum()\r\n        {\r\n\r\n        }\r\n    }\r\n\r\n\r\n    public class Usmap\r\n    {\r\n        /// <summary>\r\n        /// The path of the file on disk. This does not need to be specified for regular parsing.\r\n        /// </summary>\r\n        [JsonIgnore]\r\n        public string FilePath;\r\n\r\n        /// <summary>\r\n        /// Magic number for the .usmap format\r\n        /// </summary>\r\n        [JsonIgnore]\r\n        public static readonly ushort USMAP_MAGIC = 0x30C4;\r\n\r\n        /// <summary>\r\n        /// .usmap file version\r\n        /// </summary>\r\n        [JsonConverter(typeof(StringEnumConverter))]\r\n        public UsmapVersion Version;\r\n\r\n        /// <summary>\r\n        /// Game UE4 object version\r\n        /// </summary>\r\n        public ObjectVersion FileVersionUE4;\r\n\r\n        /// <summary>\r\n        /// Game UE5 object version\r\n        /// </summary>\r\n        public ObjectVersionUE5 FileVersionUE5;\r\n\r\n        /// <summary>\r\n        /// All the custom versions stored in the archive.\r\n        /// </summary>\r\n        public List<CustomVersion> CustomVersionContainer = null;\r\n\r\n        public uint NetCL;\r\n\r\n        private bool _AreFNamesCaseInsensitive = true;\r\n        /// <summary>\r\n        /// Whether or not FNames are case insensitive. Modifying this property is an expensive operation, and will re-construct several dictionaries.\r\n        /// </summary>\r\n        public bool AreFNamesCaseInsensitive\r\n        {\r\n            get\r\n            {\r\n                return _AreFNamesCaseInsensitive;\r\n            }\r\n            set\r\n            {\r\n                if (value == _AreFNamesCaseInsensitive) return;\r\n                _AreFNamesCaseInsensitive = value;\r\n\r\n                var EnumMapNuevo = new Dictionary<string, UsmapEnum>(value ? StringComparer.InvariantCultureIgnoreCase : StringComparer.InvariantCulture);\r\n                foreach (var entry in EnumMap) EnumMapNuevo.Add(entry.Key, entry.Value);\r\n                EnumMap = EnumMapNuevo;\r\n\r\n                var SchemasNuevo = new Dictionary<string, UsmapSchema>(value ? StringComparer.InvariantCultureIgnoreCase : StringComparer.InvariantCulture);\r\n                foreach (var entry in Schemas)\r\n                {\r\n                    entry.Value.ConstructPropertiesMap(value);\r\n                    SchemasNuevo.Add(entry.Key, entry.Value);\r\n                }\r\n                Schemas = SchemasNuevo;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not to skip blueprint schemas serialized in this mappings file. Only useful for testing.\r\n        /// </summary>\r\n        [JsonIgnore]\r\n        public bool SkipBlueprintSchemas = false;\r\n\r\n        /// <summary>\r\n        /// .usmap name map\r\n        /// </summary>\r\n        [JsonIgnore]\r\n        public List<string> NameMap;\r\n\r\n        /// <summary>\r\n        /// .usmap enum map\r\n        /// </summary>\r\n        public IDictionary<string, UsmapEnum> EnumMap;\r\n\r\n        /// <summary>\r\n        /// .usmap schema map\r\n        /// </summary>\r\n        public IDictionary<string, UsmapSchema> Schemas;\r\n\r\n        /// <summary>\r\n        /// List of extensions that failed to parse.\r\n        /// </summary>\r\n        public List<string> FailedExtensions;\r\n\r\n        /// <summary>\r\n        /// Serialize this usmap as JSON. This should only be used for debugging or visualization.\r\n        /// <para/>\r\n        /// The serialized JSON is lossy and cannot be converted back into a complete .usmap file.\r\n        /// </summary>\r\n        /// <returns>The serialized JSON as a string.</returns>\r\n        public string SerializeJSON(Formatting jsonFormatting = Formatting.None)\r\n        {\r\n            return JsonConvert.SerializeObject(this, jsonFormatting);\r\n        }\r\n\r\n        private static UsmapPropertyData ConvertFPropertyToUsmapPropertyData(StructExport exp, FProperty entry)\r\n        {\r\n            var typ = entry.GetUsmapPropertyType();\r\n            UsmapPropertyData converted1;\r\n            switch (typ)\r\n            {\r\n                case EPropertyType.EnumProperty:\r\n                    {\r\n                        FPackageIndex enumIndex = (entry as FEnumProperty).Enum;\r\n                        var underlyingProp = (entry as FEnumProperty).UnderlyingProp;\r\n                        if (enumIndex.IsExport())\r\n                        {\r\n                            var exp2 = enumIndex.ToExport<EnumExport>(exp.Asset);\r\n                            var allNames = new List<string>();\r\n                            foreach (var cosa in exp2.Enum.Names) allNames.Add(cosa.Item1.ToString());\r\n                            converted1 = new UsmapEnumData(exp2.ObjectName.ToString(), allNames) { InnerType = ConvertFPropertyToUsmapPropertyData(exp, underlyingProp) };\r\n                        }\r\n                        else if (enumIndex.IsImport())\r\n                        {\r\n                            string enumName = enumIndex.ToImport(exp.Asset).ObjectName?.Value.Value;\r\n                            if (string.IsNullOrEmpty(enumName) || !exp.Asset.Mappings.EnumMap.TryGetValue(enumName, out UsmapEnum value))\r\n                            {\r\n                                if (!exp.Asset.HasUnversionedProperties)\r\n                                {\r\n                                    return new UsmapEnumData(enumName, []) { InnerType = new UsmapPropertyData(EPropertyType.ByteProperty) };\r\n                                }\r\n                                else\r\n                                {\r\n                                    throw new InvalidOperationException(\"Attempt to index into non-existent enum \" + enumName);\r\n                                }\r\n                            }\r\n                            var allNames = new List<string>();\r\n                            foreach (var cosa in value.Values) allNames.Add(cosa.ToString());\r\n                            converted1 = new UsmapEnumData(enumName, allNames) { InnerType = ConvertFPropertyToUsmapPropertyData(exp, underlyingProp) };\r\n                        }\r\n                        else\r\n                        {\r\n                            converted1 = null;\r\n                        }\r\n                    }\r\n                    break;\r\n                case EPropertyType.ByteProperty:\r\n                    {\r\n                        FPackageIndex enumIndex = (entry as FByteProperty).Enum;\r\n                        if (enumIndex.IsExport())\r\n                        {\r\n                            var exp2 = enumIndex.ToExport<EnumExport>(exp.Asset);\r\n                            var allNames = new List<string>();\r\n                            foreach (var cosa in exp2.Enum.Names) allNames.Add(cosa.Item1.ToString());\r\n                            converted1 = new UsmapEnumData(exp2.ObjectName.ToString(), allNames) { InnerType = new UsmapPropertyData(EPropertyType.ByteProperty) };\r\n                        }\r\n                        else if (enumIndex.IsImport())\r\n                        {\r\n                            string enumName = enumIndex.ToImport(exp.Asset).ObjectName?.Value.Value;\r\n                            if (string.IsNullOrEmpty(enumName) || !exp.Asset.Mappings.EnumMap.TryGetValue(enumName, out UsmapEnum value))\r\n                            {\r\n                                if (!exp.Asset.HasUnversionedProperties)\r\n                                {\r\n                                    return new UsmapEnumData(enumName, []) { InnerType = new UsmapPropertyData(EPropertyType.ByteProperty) };\r\n                                }\r\n                                else\r\n                                {\r\n                                    throw new InvalidOperationException(\"Attempt to index into non-existent enum \" + enumName);\r\n                                }\r\n                            }\r\n                            var allNames = new List<string>();\r\n                            foreach (var cosa in value.Values) allNames.Add(cosa.ToString());\r\n                            converted1 = new UsmapEnumData(enumName, allNames) { InnerType = new UsmapPropertyData(EPropertyType.ByteProperty) };\r\n                        }\r\n                        else\r\n                        {\r\n                            converted1 = new UsmapPropertyData(EPropertyType.ByteProperty); // this is most likely an InnerType of an EnumProperty\r\n                        }\r\n                    }\r\n                    break;\r\n                case EPropertyType.StructProperty:\r\n                    var strucstr = Export.GetClassTypeForAncestry((entry as FStructProperty).Struct, exp.Asset, out _);\r\n                    converted1 = new UsmapStructData(strucstr.ToString());\r\n                    break;\r\n                case EPropertyType.SetProperty:\r\n                    converted1 = new UsmapArrayData(typ) { InnerType = ConvertFPropertyToUsmapPropertyData(exp, (entry as FSetProperty).ElementProp) };\r\n                    break;\r\n                case EPropertyType.ArrayProperty:\r\n                    converted1 = new UsmapArrayData(typ) { InnerType = ConvertFPropertyToUsmapPropertyData(exp, (entry as FArrayProperty).Inner) };\r\n                    break;\r\n                case EPropertyType.MapProperty:\r\n                    converted1 = new UsmapMapData()\r\n                    { \r\n                        InnerType = ConvertFPropertyToUsmapPropertyData(exp, (entry as FMapProperty).KeyProp),\r\n                        ValueType = ConvertFPropertyToUsmapPropertyData(exp, (entry as FMapProperty).ValueProp)\r\n                    };\r\n                    break;\r\n                default:\r\n                    converted1 = new UsmapPropertyData(typ);\r\n                    break;\r\n            }\r\n            return converted1;\r\n        }\r\n\r\n        private static UsmapPropertyData ConvertUPropertyToUsmapPropertyData(PropertyExport exp)\r\n        {\r\n            var asset = exp.Asset;\r\n            var typ = exp.Property.GetUsmapPropertyType();\r\n            UsmapPropertyData converted;\r\n            switch (exp.Property)\r\n            {\r\n                case UEnumProperty enumprop:\r\n                    var enumIndex = enumprop.Enum;\r\n                    var underlyingProp = enumprop.UnderlyingProp;\r\n                    if (enumIndex.IsExport())\r\n                    {\r\n                        var exp2 = enumIndex.ToExport<EnumExport>(exp.Asset);\r\n                        var allNames = new List<string>();\r\n                        foreach (var cosa in exp2.Enum.Names) allNames.Add(cosa.Item1.ToString());\r\n                        converted = new UsmapEnumData(exp2.ObjectName.ToString(), allNames) { InnerType = ConvertUPropertyToUsmapPropertyData(underlyingProp.ToExport<PropertyExport>(asset)) };\r\n                    }\r\n                    else if (enumIndex.IsImport())\r\n                    {\r\n                        string enumName = enumIndex.ToImport(exp.Asset).ObjectName?.Value.Value;\r\n                        if (enumName == null || !exp.Asset.Mappings.EnumMap.TryGetValue(enumName, out UsmapEnum value))\r\n                        {\r\n                            if (!exp.Asset.HasUnversionedProperties)\r\n                            {\r\n                                return new UsmapEnumData(enumName, []) { InnerType = new UsmapPropertyData(EPropertyType.ByteProperty) };\r\n                            }\r\n                            else\r\n                            {\r\n                                throw new InvalidOperationException(\"Attempt to index into non-existent enum \" + enumName);\r\n                            }\r\n                        }\r\n                        var allNames = new List<string>();\r\n                        foreach (var cosa in value.Values) allNames.Add(cosa.ToString());\r\n                        converted = new UsmapEnumData(enumName, allNames) { InnerType = ConvertUPropertyToUsmapPropertyData(underlyingProp.ToExport<PropertyExport>(asset)) };\r\n                    }\r\n                    else\r\n                    {\r\n                        converted = null;\r\n                    }\r\n                    break;\r\n                case UByteProperty byt:\r\n                    enumIndex = byt.Enum;\r\n                    if (enumIndex.IsExport())\r\n                    {\r\n                        var exp2 = enumIndex.ToExport<EnumExport>(exp.Asset);\r\n                        var allNames = new List<string>();\r\n                        foreach (var cosa in exp2.Enum.Names) allNames.Add(cosa.Item1.ToString());\r\n                        converted = new UsmapEnumData(exp2.ObjectName.ToString(), allNames) { InnerType = new UsmapPropertyData(EPropertyType.ByteProperty) };\r\n                    }\r\n                    else if (enumIndex.IsImport())\r\n                    {\r\n                        string enumName = enumIndex.ToImport(exp.Asset).ObjectName?.Value.Value;\r\n                        if (enumName == null || !exp.Asset.Mappings.EnumMap.TryGetValue(enumName, out UsmapEnum value))\r\n                        {\r\n                            if (!exp.Asset.HasUnversionedProperties)\r\n                            {\r\n                                return new UsmapEnumData(enumName, []) { InnerType = new UsmapPropertyData(EPropertyType.ByteProperty) };\r\n                            }\r\n                            else\r\n                            {\r\n                                //should not happen cause it was before 425 \r\n                                throw new InvalidOperationException(\"Attempt to index into non-existent enum \" + enumName);\r\n                            }\r\n                        }\r\n                        var allNames = new List<string>();\r\n                        foreach (var cosa in value.Values) allNames.Add(cosa.ToString());\r\n                        converted = new UsmapEnumData(enumName, allNames) { InnerType = new UsmapPropertyData(EPropertyType.ByteProperty) };\r\n                    }\r\n                    else\r\n                    {\r\n                        converted = new UsmapPropertyData(EPropertyType.ByteProperty); // this is most likely an InnerType of an EnumProperty\r\n                    }\r\n                    break;\r\n                case UStructProperty strukt:\r\n                    var strucstr = Export.GetClassTypeForAncestry(strukt.Struct, asset, out _);\r\n                    converted = new UsmapStructData(strucstr.ToString());\r\n                    break;\r\n                case UArrayProperty array:\r\n                    converted = new UsmapArrayData(EPropertyType.ArrayProperty) { InnerType = ConvertUPropertyToUsmapPropertyData(array.Inner.ToExport<PropertyExport>(asset)) };\r\n                    break;\r\n                case USetProperty set:\r\n                    converted = new UsmapArrayData(EPropertyType.SetProperty) { InnerType = ConvertUPropertyToUsmapPropertyData(set.ElementProp.ToExport<PropertyExport>(asset)) };\r\n                    break;\r\n                case UMapProperty map:\r\n                    converted = new UsmapMapData()\r\n                    {\r\n                        InnerType = ConvertUPropertyToUsmapPropertyData(map.KeyProp.ToExport<PropertyExport>(asset)),\r\n                        ValueType = ConvertUPropertyToUsmapPropertyData(map.ValueProp.ToExport<PropertyExport>(asset))\r\n                    };\r\n                    break;\r\n                default:\r\n                    converted = new UsmapPropertyData(typ);\r\n                    break;\r\n            }\r\n            return converted;\r\n        }\r\n\r\n        public static UsmapSchema GetSchemaFromStructExport(string exportName, UAsset asset)\r\n        {\r\n            if (asset == null) throw new InvalidOperationException(\"Cannot evaluate struct export without package reference\");\r\n            foreach (var exp in asset.Exports)\r\n            {\r\n                if (exp.ObjectName.Value.Value == exportName && exp is StructExport sexp) return GetSchemaFromStructExport(sexp, asset.Mappings?.AreFNamesCaseInsensitive ?? true);\r\n            }\r\n            return null;\r\n        }\r\n\r\n        public static UsmapSchema GetSchemaFromStructExport(StructExport exp, bool isCaseInsensitive)\r\n        {\r\n            var res = new ConcurrentDictionary<int, UsmapProperty>();\r\n            int idx = 0;\r\n            if (exp.Asset.GetCustomVersion<FCoreObjectVersion>() >= FCoreObjectVersion.FProperties)\r\n            {\r\n                foreach (FProperty entry in exp.LoadedProperties)\r\n                {\r\n                    UsmapProperty converted = new UsmapProperty(entry.Name.ToString(), (ushort)idx, 0, 1, ConvertFPropertyToUsmapPropertyData(exp, entry));\r\n                    res[idx] = converted;\r\n                    idx++;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                List<FPackageIndex> childlist = [];\r\n                if (exp.Asset.GetCustomVersion<FFrameworkObjectVersion>() < FFrameworkObjectVersion.RemoveUField_Next && exp.Children.Length > 0)\r\n                {\r\n                    var next = exp.Children.First();\r\n                    while (!next.IsNull())\r\n                    {\r\n                        childlist.Add(next);\r\n                        next = next.ToExport(exp.Asset) switch\r\n                        {\r\n                            FunctionExport func => func.Field?.Next,\r\n                            PropertyExport prop => prop.Property?.Next,\r\n                            _ => null\r\n                        };\r\n                    }\r\n                }\r\n                var children = exp.Asset.GetCustomVersion<FFrameworkObjectVersion>() >= FFrameworkObjectVersion.RemoveUField_Next ? exp.Children : childlist.ToArray();\r\n\r\n                foreach (var entry in children)\r\n                {\r\n                    if (entry.ToExport(exp.Asset) is not PropertyExport field) continue;\r\n\r\n                    UsmapProperty converted = new UsmapProperty(field.ObjectName.ToString(), (ushort)idx, 0, 1, ConvertUPropertyToUsmapPropertyData(field));\r\n                    res[idx] = converted;\r\n                    idx++;\r\n                }\r\n            }\r\n\r\n            string ssName = exp.SuperStruct.IsImport() ? exp.SuperStruct.ToImport(exp.Asset).ObjectName.ToString() : null;\r\n            string ssPath = (exp.SuperStruct.IsImport() && exp.SuperStruct.ToImport(exp.Asset).OuterIndex.IsImport()) ? exp.SuperStruct.ToImport(exp.Asset).OuterIndex.ToImport(exp.Asset).ObjectName.ToString() : null;\r\n            return new UsmapSchema(exp.ObjectName.ToString(), ssName, (ushort)res.Count, res, isCaseInsensitive, ssPath, true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieve all the properties that a particular schema can reference.\r\n        /// </summary>\r\n        /// <param name=\"schemaName\">The name of the schema of interest.</param>\r\n        /// <param name=\"modulePath\">Module path of the schema of interest.</param>\r\n        /// <param name=\"asset\">An asset to also search for schemas within.</param>\r\n        /// <returns>All the properties that the schema can reference.</returns>\r\n        public IList<UsmapProperty> GetAllProperties(string schemaName, string modulePath = null, UAsset asset = null)\r\n        {\r\n            List<UsmapProperty> res = new List<UsmapProperty>();\r\n            UsmapSchema relevantSchema = this.GetSchemaFromName(schemaName, asset, modulePath);\r\n            while (schemaName != null && relevantSchema != null)\r\n            {\r\n                res.AddRange(relevantSchema.Properties.Values);\r\n                schemaName = relevantSchema.SuperType;\r\n                relevantSchema = this.GetSchemaFromName(schemaName, asset);\r\n            }\r\n            return res;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieve all the properties that a particular schema can reference as an annotated, human-readable text file.\r\n        /// </summary>\r\n        /// <param name=\"schemaName\">The name of the schema of interest.</param>\r\n        /// <param name=\"asset\">An asset to also search for schemas within.</param>\r\n        /// <param name=\"customAnnotations\">A map of strings to give custom annotations.</param>\r\n        /// <param name=\"recursive\">Whether or not to dump data for parent schemas as well.</param>\r\n        /// <param name=\"headerPrefix\">The prefix of the subheader for each relevant schema.</param>\r\n        /// <param name=\"headerSuffix\">The suffix of the subheader for each relevant schema.</param>\r\n        /// <returns>An annotated, human-readable text file containing the properties that the schema can reference.</returns>\r\n        public string GetAllPropertiesAnnotated(string schemaName, UAsset asset, IDictionary<string, string> customAnnotations = null, bool recursive = true, string headerPrefix = \"--- \", string headerSuffix = \" ---\")\r\n        {\r\n            List<string> res = new List<string>();\r\n            bool hasDoneFirst = false;\r\n            UsmapSchema relevantSchema = this.GetSchemaFromName(schemaName, asset);\r\n            while (schemaName != null && relevantSchema != null)\r\n            {\r\n                string schemaAnnotation = relevantSchema.FromAsset ? \" (blueprint)\" : string.Empty;\r\n                res.Add(headerPrefix + schemaName + schemaAnnotation + headerSuffix);\r\n\r\n                if (recursive || !hasDoneFirst)\r\n                {\r\n                    foreach (UsmapProperty prop in relevantSchema.Properties.Values)\r\n                    {\r\n                        if (prop.ArrayIndex > 0) continue;\r\n                        string propAnnotation = customAnnotations != null && customAnnotations.ContainsKey(prop.Name) ? (\" (\" + customAnnotations[prop.Name] + \")\") : string.Empty;\r\n                        res.Add(prop.Name + propAnnotation);\r\n                        res.Add(\"\\t\" + (prop.PropertyData?.Type.ToString() ?? \"Unknown type\"));\r\n                    }\r\n                    if (relevantSchema.Properties.Values.Count() == 0) res.Add(\"N/A\");\r\n                    res.Add(string.Empty);\r\n                }\r\n\r\n                schemaName = relevantSchema.SuperType;\r\n                relevantSchema = this.GetSchemaFromName(schemaName, asset);\r\n                hasDoneFirst = true;\r\n            }\r\n            return string.Join(\"\\n\", res.ToArray());\r\n        }\r\n\r\n        // not a set to ensure thread safety\r\n        public ConcurrentDictionary<string, byte> PathsAlreadyProcessedForSchemas = new ConcurrentDictionary<string, byte>();\r\n        public UsmapSchema GetSchemaFromName(string nm, UAsset asset = null, string modulePath = null, bool throwExceptions = true)\r\n        {\r\n            if (string.IsNullOrEmpty(nm)) return null;\r\n\r\n            string withModulePath = null;\r\n            if (modulePath != null) withModulePath = modulePath + \".\" + nm;\r\n\r\n            string[] withoutModulePathComponents = nm.Split(\".\");\r\n            string withoutModulePath = withoutModulePathComponents.Length > 1 ? withoutModulePathComponents[withoutModulePathComponents.Length - 1] : null;\r\n\r\n            UsmapSchema relevantSchema = null;\r\n            if (withModulePath != null && this.Schemas.ContainsKey(withModulePath))\r\n            {\r\n                relevantSchema = this.Schemas[withModulePath];\r\n            }\r\n            else if (this.Schemas.ContainsKey(nm)) // fallback to without module path\r\n            {\r\n                relevantSchema = this.Schemas[nm];\r\n            }\r\n            else if (withoutModulePath != null && this.Schemas.ContainsKey(withoutModulePath))\r\n            {\r\n                relevantSchema = this.Schemas[withoutModulePath];\r\n            }\r\n            else \r\n            {\r\n                // note: this is probably not needed anymore since we now collate schemas on asset load\r\n                relevantSchema = Usmap.GetSchemaFromStructExport(nm, asset);\r\n            }\r\n            if (throwExceptions && relevantSchema == null) throw new FormatException(\"Failed to find a valid schema for parent name \" + nm);\r\n            return relevantSchema;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Attempts to retrieve the corresponding .usmap property, given its ancestry.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\">The type of property to output.</typeparam>\r\n        /// <param name=\"propertyName\">The name of the property to search for.</param>\r\n        /// <param name=\"ancestry\">The ancestry of the property to search for.</param>\r\n        /// <param name=\"dupIndex\">The duplication index of the property to search for. If unknown, set to 0.</param>\r\n        /// <param name=\"asset\">An asset to also search for schemas within.</param>\r\n        /// <param name=\"propDat\">The property.</param>\r\n        /// <param name=\"idx\">The index of the property.</param>\r\n        /// <returns>Whether or not the property was successfully found.</returns>\r\n        public bool TryGetProperty<T>(FName propertyName, AncestryInfo ancestry, int dupIndex, UAsset asset, out T propDat, out int idx) where T : UsmapProperty\r\n        {\r\n            propDat = null;\r\n\r\n            idx = 0;\r\n            var schemaName = ancestry.Parent.ToString();\r\n            UsmapSchema relevantSchema = this.GetSchemaFromName(schemaName, asset);\r\n            while (schemaName != null && relevantSchema != null)\r\n            {\r\n                propDat = relevantSchema.GetProperty(propertyName.ToString(), dupIndex) as T;\r\n                if (propDat != null)\r\n                {\r\n                    idx += propDat.SchemaIndex;\r\n                    return true;\r\n                }\r\n\r\n                idx += relevantSchema.PropCount;\r\n                schemaName = relevantSchema.SuperType;\r\n                relevantSchema = this.GetSchemaFromName(schemaName, asset);\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Attempts to retrieve the corresponding .usmap property data corresponding to a specific property, given its ancestry.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\">The type of property data to output.</typeparam>\r\n        /// <param name=\"propertyName\">The name of the property to search for.</param>\r\n        /// <param name=\"ancestry\">The ancestry of the property to search for.</param>\r\n        /// <param name=\"asset\">An asset to also search for schemas within.</param>\r\n        /// <param name=\"propDat\">The property data.</param>\r\n        /// <returns>Whether or not the property data was successfully found.</returns>\r\n        public bool TryGetPropertyData<T>(FName propertyName, AncestryInfo ancestry, UAsset asset, out T propDat) where T : UsmapPropertyData\r\n        {\r\n            propDat = null;\r\n\r\n            if (propertyName == null) return false;\r\n\r\n            if (propertyName.IsDummy && int.TryParse(propertyName.Value.Value, out _))\r\n            {\r\n                // this is actually an array member; try to find its parent array\r\n                if (this.TryGetPropertyData(ancestry.Parent, ancestry.CloneWithoutParent(), asset, out UsmapArrayData arrDat))\r\n                {\r\n                    propDat = arrDat.InnerType as T;\r\n                    if (propDat != null) return true;\r\n                }\r\n            }\r\n\r\n            var schemaName = ancestry.Parent?.Value?.Value;\r\n            UsmapSchema relevantSchema = this.GetSchemaFromName(schemaName, asset, null, false);\r\n            while (schemaName != null && relevantSchema != null)\r\n            {\r\n                propDat = relevantSchema.GetProperty(propertyName.Value.Value, 0)?.PropertyData as T;\r\n                if (propDat != null) return true;\r\n                schemaName = relevantSchema.SuperType;\r\n                relevantSchema = this.GetSchemaFromName(schemaName, asset, null, false);\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a MemoryStream from an asset path.\r\n        /// </summary>\r\n        /// <param name=\"p\">The path to the input file.</param>\r\n        /// <returns>A new MemoryStream that stores the binary data of the input file.</returns>\r\n        public static MemoryStream PathToStream(string p)\r\n        {\r\n            using (FileStream origStream = File.Open(p, FileMode.Open))\r\n            {\r\n                MemoryStream completeStream = new MemoryStream();\r\n                origStream.CopyTo(completeStream);\r\n\r\n                completeStream.Seek(0, SeekOrigin.Begin);\r\n                return completeStream;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a BinaryReader from an asset path.\r\n        /// </summary>\r\n        /// <param name=\"p\">The path to the input file.</param>\r\n        /// <returns>A new BinaryReader that stores the binary data of the input file.</returns>\r\n        public UsmapBinaryReader PathToReader(string p)\r\n        {\r\n            return new UsmapBinaryReader(PathToStream(p), this);\r\n        }\r\n\r\n        public UsmapBinaryReader ReadHeader(UsmapBinaryReader reader)\r\n        {\r\n            reader.BaseStream.Seek(0, SeekOrigin.Begin);\r\n            ushort fileSignature = reader.ReadUInt16();\r\n            if (fileSignature != USMAP_MAGIC) throw new FormatException(\".usmap: File signature mismatch\");\r\n\r\n            Version = (UsmapVersion)reader.ReadByte();\r\n            if (Version < UsmapVersion.Initial || Version > UsmapVersion.Latest) throw new FormatException(\".usmap: Unknown file version \" + Version);\r\n\r\n            // package versioning\r\n            if (Version >= UsmapVersion.PackageVersioning)\r\n            {\r\n                bool bHasVersioning = reader.ReadInt32() > 0;\r\n                if (bHasVersioning)\r\n                {\r\n                    FileVersionUE4 = (ObjectVersion)reader.ReadInt32();\r\n                    FileVersionUE5 = (ObjectVersionUE5)reader.ReadInt32();\r\n\r\n                    CustomVersionContainer = new List<CustomVersion>();\r\n                    int numCustomVersions = reader.ReadInt32();\r\n                    for (int i = 0; i < numCustomVersions; i++)\r\n                    {\r\n                        var customVersionID = new Guid(reader.ReadBytes(16));\r\n                        var customVersionNumber = reader.ReadInt32();\r\n                        CustomVersionContainer.Add(new CustomVersion(customVersionID, customVersionNumber));\r\n                    }\r\n\r\n                    NetCL = reader.ReadUInt32();\r\n                }\r\n            }\r\n\r\n            ECompressionMethod compressionMethod = (ECompressionMethod)reader.ReadByte();\r\n\r\n            uint compressedSize = reader.ReadUInt32();\r\n            uint decompressedSize = reader.ReadUInt32();\r\n\r\n            switch (compressionMethod)\r\n            {\r\n                case ECompressionMethod.None:\r\n                    if (compressedSize != decompressedSize) throw new FormatException(\".usmap: Compressed size must be equal to decompressed size\");\r\n                    return reader;\r\n                case ECompressionMethod.ZStandard:\r\n                    {\r\n                        byte[] dat = new ZstdSharp.Decompressor().Unwrap(reader.ReadBytes((int)compressedSize), (int)decompressedSize).ToArray();\r\n                        return new UsmapBinaryReader(new MemoryStream(dat), this);\r\n                    }\r\n                case ECompressionMethod.Oodle:\r\n                    {\r\n                        byte[] dat = Oodle.Decompress(reader.ReadBytes((int)compressedSize), (int)compressedSize, (int)decompressedSize);\r\n                        return new UsmapBinaryReader(new MemoryStream(dat), this);\r\n                    }\r\n                default:\r\n                    throw new NotImplementedException(\".usmap: Compression method \" + compressionMethod + \" is unimplemented\");\r\n            }\r\n        }\r\n\r\n        private UsmapPropertyData InitPropData(EPropertyType typ)\r\n        {\r\n            switch (typ)\r\n            {\r\n                case EPropertyType.EnumProperty:\r\n                    return new UsmapEnumData();\r\n                case EPropertyType.StructProperty:\r\n                    return new UsmapStructData();\r\n                case EPropertyType.SetProperty:\r\n                case EPropertyType.ArrayProperty:\r\n                case EPropertyType.OptionalProperty:\r\n                    return new UsmapArrayData(typ);\r\n                case EPropertyType.MapProperty:\r\n                    return new UsmapMapData();\r\n            }\r\n\r\n            return new UsmapPropertyData(typ);\r\n        }\r\n\r\n        private UsmapPropertyData DeserializePropData(UsmapBinaryReader reader)\r\n        {\r\n            var res = InitPropData((EPropertyType)reader.ReadByte());\r\n            switch (res.Type)\r\n            {\r\n                case EPropertyType.EnumProperty:\r\n                    ((UsmapEnumData)res).InnerType = DeserializePropData(reader);\r\n                    ((UsmapEnumData)res).Name = reader.ReadName();\r\n                    break;\r\n                case EPropertyType.StructProperty:\r\n                    ((UsmapStructData)res).StructType = reader.ReadName();\r\n                    break;\r\n                case EPropertyType.SetProperty:\r\n                case EPropertyType.ArrayProperty:\r\n                case EPropertyType.OptionalProperty:\r\n                    ((UsmapArrayData)res).InnerType = DeserializePropData(reader);\r\n                    break;\r\n                case EPropertyType.MapProperty:\r\n                    ((UsmapMapData)res).InnerType = DeserializePropData(reader);\r\n                    ((UsmapMapData)res).ValueType = DeserializePropData(reader);\r\n                    break;\r\n                default:\r\n                    break;\r\n            }\r\n            return res;\r\n        }\r\n\r\n        public void Read(UsmapBinaryReader compressedReader)\r\n        {\r\n            var reader = ReadHeader(compressedReader);\r\n\r\n            // part 1: names\r\n            //Console.WriteLine(reader.BaseStream.Position);\r\n            NameMap = new List<string>();\r\n            int numNames = reader.ReadInt32();\r\n            for (int i = 0; i < numNames; i++)\r\n            {\r\n                int fixedLength = Version >= UsmapVersion.LongFName ? (int)reader.ReadInt16() : (int)reader.ReadByte();\r\n                var str = reader.ReadString(fixedLength);\r\n                NameMap.Add(str);\r\n            }\r\n\r\n            // part 2: enums\r\n            //Console.WriteLine(reader.BaseStream.Position);\r\n            EnumMap = new ConcurrentDictionary<string, UsmapEnum>(AreFNamesCaseInsensitive ? StringComparer.InvariantCultureIgnoreCase : StringComparer.InvariantCulture);\r\n            int numEnums = reader.ReadInt32();\r\n            UsmapEnum[] enumIndexMap = new UsmapEnum[numEnums];\r\n            for (int i = 0; i < numEnums; i++)\r\n            {\r\n                string enumName = reader.ReadName();\r\n\r\n                var newEnum = new UsmapEnum(enumName, new ConcurrentDictionary<long, string>());\r\n                int numEnumEntries = Version >= UsmapVersion.LargeEnums ? (int)reader.ReadInt16() : (int)reader.ReadByte();\r\n\r\n                if (Version >= UsmapVersion.ExplicitEnumValues)\r\n                {\r\n                    for (int j = 0; j < numEnumEntries; j++)\r\n                    {\r\n                        var value = reader.ReadInt64();\r\n                        var name = reader.ReadName();\r\n                        newEnum.Values[value] = name;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    for (int j = 0; j < numEnumEntries; j++)\r\n                    {\r\n                        newEnum.Values[j] = reader.ReadName();\r\n                    }\r\n                }\r\n\r\n                if (!EnumMap.ContainsKey(enumName))\r\n                {\r\n                    enumIndexMap[i] = newEnum;\r\n                    EnumMap[enumName] = newEnum;\r\n                }\r\n            }\r\n\r\n            // part 3: schema\r\n            //Console.WriteLine(reader.BaseStream.Position);\r\n            Schemas = new ConcurrentDictionary<string, UsmapSchema>(AreFNamesCaseInsensitive ? StringComparer.InvariantCultureIgnoreCase : StringComparer.InvariantCulture);\r\n            int numSchema = reader.ReadInt32();\r\n            UsmapSchema[] schemaIndexMap = new UsmapSchema[numSchema];\r\n            for (int i = 0; i < numSchema; i++)\r\n            {\r\n                string schemaName = reader.ReadName();\r\n                string schemaSuperName = reader.ReadName();\r\n                ushort numProps = reader.ReadUInt16();\r\n                ushort serializablePropCount = reader.ReadUInt16();\r\n                ConcurrentDictionary<int, UsmapProperty> props = new ConcurrentDictionary<int, UsmapProperty>();\r\n                for (int j = 0; j < serializablePropCount; j++)\r\n                {\r\n                    ushort SchemaIdx = reader.ReadUInt16();\r\n                    byte ArraySize = reader.ReadByte();\r\n                    string Name = reader.ReadName();\r\n\r\n                    var currProp = new UsmapProperty(Name, SchemaIdx, 0, ArraySize, null);\r\n                    currProp.PropertyData = DeserializePropData(reader);\r\n                    for (int k = 0; k < ArraySize; k++)\r\n                    {\r\n                        var cln = (UsmapProperty)currProp.Clone();\r\n                        cln.SchemaIndex = (ushort)(SchemaIdx + k);\r\n                        cln.ArrayIndex = (ushort)k;\r\n                        props[SchemaIdx + k] = cln;\r\n                    }\r\n                }\r\n\r\n                var newSchema = new UsmapSchema(schemaName, schemaSuperName, numProps, props, this.AreFNamesCaseInsensitive, null);\r\n                schemaIndexMap[i] = newSchema;\r\n\r\n                if (SkipBlueprintSchemas && schemaName.Length >= 2 && schemaName.EndsWith(\"_C\")) continue;\r\n                if (SkipBlueprintSchemas && schemaName == \"AnimBlueprintGeneratedConstantData\") continue;\r\n                if (SkipBlueprintSchemas && schemaName == \"AnimBlueprintGeneratedMutableData\") continue;\r\n\r\n                // add to schema map\r\n                Schemas[schemaName] = newSchema;\r\n            }\r\n\r\n            void ReadExtension(string extId, uint extLeng)\r\n            {\r\n                long endPos = reader.BaseStream.Position + extLeng;\r\n\r\n                switch(extId)\r\n                {\r\n                    case \"PPTH\": // Replaces MODL, reuses name map and added full names for Enums\r\n                        byte ppthVer = reader.ReadByte();\r\n                        if (ppthVer > 0) break;\r\n\r\n                        int ppthNumEnums = reader.ReadInt32();\r\n                        for (int i = 0; i < ppthNumEnums; i++)\r\n                        {\r\n                            enumIndexMap[i].ModulePath = reader.ReadName();\r\n                        }\r\n                        int ppthNumSchemas = reader.ReadInt32();\r\n                        for (int i = 0; i < ppthNumSchemas; i++)\r\n                        {\r\n                            schemaIndexMap[i].ModulePath = reader.ReadName();\r\n                            Schemas[schemaIndexMap[i].ModulePath + \".\" + schemaIndexMap[i].Name] = schemaIndexMap[i];\r\n                        }\r\n\r\n                        if (reader.BaseStream.Position != endPos) throw new FormatException(\"Failed to parse extension \" + extId + \": ended at \" + reader.BaseStream.Position + \", expected \" + endPos);\r\n                        break;\r\n                    case \"EATR\": // Extended Attributes\r\n                        byte eatrVer = reader.ReadByte();\r\n                        if (eatrVer > 0) break;\r\n\r\n                        int eatrNumEnums = reader.ReadInt32();\r\n                        for (int i = 0; i < eatrNumEnums; i++)\r\n                        {\r\n                            enumIndexMap[i].EnumFlags = reader.ReadInt32();\r\n                        }\r\n                        int eatrNumSchemas = reader.ReadInt32();\r\n                        for (int i = 0; i < eatrNumSchemas; i++)\r\n                        {\r\n                            schemaIndexMap[i].StructKind = (UsmapStructKind)reader.ReadByte();\r\n                            schemaIndexMap[i].StructOrClassFlags = reader.ReadInt32();\r\n                            int eatrNumProps = reader.ReadInt32();\r\n                            for (int j = 0; j < eatrNumProps; j++)\r\n                            {\r\n                                var flgs = (EPropertyFlags)reader.ReadUInt64();\r\n                                if (j < schemaIndexMap[i].Properties.Count) schemaIndexMap[i].Properties[j].PropertyFlags = flgs;\r\n                            }\r\n                        }\r\n\r\n                        if (reader.BaseStream.Position != endPos) throw new FormatException(\"Failed to parse extension \" + extId + \": ended at \" + reader.BaseStream.Position + \", expected \" + endPos);\r\n                        break;\r\n                    case \"ENVP\": // Enum Name Value Pairs\r\n                        byte envpVer = reader.ReadByte();\r\n                        if (envpVer > 0) break;\r\n\r\n                        int envpNumEnums = reader.ReadInt32();\r\n                        for (int i = 0; i < envpNumEnums; i++)\r\n                        {\r\n                            enumIndexMap[i].Values.Clear();\r\n                            int envpNumEnumEntries = reader.ReadInt32(); // not a byte this time!!!\r\n                            for (int j = 0; j < envpNumEnumEntries; j++)\r\n                            {\r\n                                string envpEntryVal = reader.ReadName();\r\n                                long envpEntryKey = reader.ReadInt64();\r\n                                enumIndexMap[i].Values[envpEntryKey] = envpEntryVal;\r\n                            }\r\n                        }\r\n\r\n                        if (reader.BaseStream.Position != endPos) throw new FormatException(\"Failed to parse extension \" + extId + \": ended at \" + reader.BaseStream.Position + \", expected \" + endPos);\r\n                        break;\r\n                    case \"MODL\": // traditional list of module paths\r\n                        ushort numModulePaths = reader.ReadUInt16();\r\n                        string[] modulePaths = new string[numModulePaths];\r\n                        for (int i = 0; i < numModulePaths; i++) modulePaths[i] = reader.ReadString();\r\n                        for (int i = 0; i < schemaIndexMap.Length; i++)\r\n                        {\r\n                            schemaIndexMap[i].ModulePath = modulePaths[numModulePaths > byte.MaxValue ? reader.ReadUInt16() : reader.ReadByte()];\r\n                        }\r\n\r\n                        if (reader.BaseStream.Position != endPos) throw new FormatException(\"Failed to parse extension \" + extId + \": ended at \" + reader.BaseStream.Position + \", expected \" + endPos);\r\n                        break;\r\n                    default:\r\n                        break;\r\n                }\r\n\r\n                reader.BaseStream.Position = endPos;\r\n            }\r\n\r\n            // read extension data if it's present\r\n            FailedExtensions = new List<string>();\r\n            if (reader.BaseStream.Length > reader.BaseStream.Position)\r\n            {\r\n                uint usmapExtensionsMagic = reader.ReadUInt32();\r\n                if (usmapExtensionsMagic == 0x54584543) // \"CEXT\"\r\n                {\r\n                    UsmapExtensionLayoutVersion layoutVer = (UsmapExtensionLayoutVersion)reader.ReadByte();\r\n                    switch(layoutVer)\r\n                    {\r\n                        case UsmapExtensionLayoutVersion.Initial:\r\n                            int numExtensions = reader.ReadInt32();\r\n                            for (int i = 0; i < numExtensions; i++)\r\n                            {\r\n                                string extId = reader.ReadString(4);\r\n                                uint extLeng = reader.ReadUInt32();\r\n                                try\r\n                                {\r\n                                    ReadExtension(extId, extLeng);\r\n                                }\r\n                                catch\r\n                                {\r\n                                    FailedExtensions.Add(extId);\r\n                                }\r\n                            }\r\n                            break;\r\n                        default:\r\n                            throw new InvalidOperationException(\"Unknown extension layout version \" + layoutVer);\r\n                    }\r\n                }\r\n                else if (usmapExtensionsMagic == 1) // legacy\r\n                {\r\n                    ReadExtension(\"MODL\", (uint)(reader.BaseStream.Length - reader.BaseStream.Position));\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads a .usmap file from disk and initializes a new instance of the <see cref=\"Usmap\"/> class to store its data in memory.\r\n        /// </summary>\r\n        /// <param name=\"path\">The path of the file file on disk that this instance will read from.</param>\r\n        /// <exception cref=\"FormatException\">Throw when the file cannot be parsed correctly.</exception>\r\n        public Usmap(string path)\r\n        {\r\n            this.FilePath = path;\r\n            Read(PathToReader(path));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Reads a .usmap file from a UsmapBinaryReader and initializes a new instance of the <see cref=\"Usmap\"/> class to store its data in memory.\r\n        /// </summary>\r\n        /// <param name=\"reader\">The file's UsmapBinaryReader that this instance will read from.</param>\r\n        /// <exception cref=\"FormatException\">Throw when the asset cannot be parsed correctly.</exception>\r\n        public Usmap(UsmapBinaryReader reader)\r\n        {\r\n            Read(reader);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"Usmap\"/> class. This instance will store no data and does not represent any file in particular until the <see cref=\"Read\"/> method is manually called.\r\n        /// </summary>\r\n        public Usmap()\r\n        {\r\n\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI/Unversioned/UsmapBinaryReader.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Text;\r\nusing UAssetAPI.Kismet.Bytecode;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\nusing UAssetAPI.Unversioned;\r\n\r\nnamespace UAssetAPI\r\n{\r\n    /// <summary>\r\n    /// Reads primitive data types from .usmap files.\r\n    /// </summary>\r\n    public class UsmapBinaryReader : BinaryReader\r\n    {\r\n        public Usmap File;\r\n\r\n        public UsmapBinaryReader(Stream stream, Usmap file) : base(stream)\r\n        {\r\n            File = file;\r\n        }\r\n\r\n        private byte[] ReverseIfBigEndian(byte[] data)\r\n        {\r\n            if (!BitConverter.IsLittleEndian) Array.Reverse(data);\r\n            return data;\r\n        }\r\n\r\n        public override short ReadInt16()\r\n        {\r\n            return BitConverter.ToInt16(ReverseIfBigEndian(base.ReadBytes(2)), 0);\r\n        }\r\n\r\n        public override ushort ReadUInt16()\r\n        {\r\n            return BitConverter.ToUInt16(ReverseIfBigEndian(base.ReadBytes(2)), 0);\r\n        }\r\n\r\n        public override int ReadInt32()\r\n        {\r\n            return BitConverter.ToInt32(ReverseIfBigEndian(base.ReadBytes(4)), 0);\r\n        }\r\n\r\n        public override uint ReadUInt32()\r\n        {\r\n            return BitConverter.ToUInt32(ReverseIfBigEndian(base.ReadBytes(4)), 0);\r\n        }\r\n\r\n        public override long ReadInt64()\r\n        {\r\n            return BitConverter.ToInt64(ReverseIfBigEndian(base.ReadBytes(8)), 0);\r\n        }\r\n\r\n        public override ulong ReadUInt64()\r\n        {\r\n            return BitConverter.ToUInt64(ReverseIfBigEndian(base.ReadBytes(8)), 0);\r\n        }\r\n\r\n        public override float ReadSingle()\r\n        {\r\n            return BitConverter.ToSingle(ReverseIfBigEndian(base.ReadBytes(4)), 0);\r\n        }\r\n\r\n        public override double ReadDouble()\r\n        {\r\n            return BitConverter.ToDouble(ReverseIfBigEndian(base.ReadBytes(8)), 0);\r\n        }\r\n\r\n        public override string ReadString()\r\n        {\r\n            return ReadString(-1);\r\n        }\r\n\r\n        public string ReadString(int fixedLength = -1)\r\n        {\r\n            int length = fixedLength > -1 ? fixedLength : this.ReadByte();\r\n            switch (length)\r\n            {\r\n                case 0:\r\n                    return null;\r\n                default:\r\n                    byte[] data = this.ReadBytes(length);\r\n                    return Encoding.ASCII.GetString(data, 0, data.Length);\r\n            }\r\n        }\r\n\r\n        public string ReadName()\r\n        {\r\n            int val = ReadInt32();\r\n            if (val < 0) return null;\r\n            return File.NameMap[val];\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI.Benchmark/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<configuration>\r\n    <startup> \r\n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.7.2\" />\r\n    </startup>\r\n</configuration>"
  },
  {
    "path": "UAssetAPI.Benchmark/Program.cs",
    "content": "﻿using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing UAssetAPI.CustomVersions;\r\nusing UAssetAPI.ExportTypes;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.Unversioned;\r\n\r\nnamespace UAssetAPI.Benchmark\r\n{\r\n    public class Program\r\n    {\r\n        private static double BenchmarkAsset(string path, EngineVersion ver, Usmap mappings = null)\r\n        {\r\n            var timer = new Stopwatch();\r\n            timer.Start();\r\n            var loaded = new UAsset(path, ver, mappings);\r\n            timer.Stop();\r\n\r\n            bool passBinaryEq = false;\r\n            try\r\n            {\r\n                passBinaryEq = loaded.VerifyBinaryEquality();\r\n            }\r\n            catch { passBinaryEq = false; }\r\n\r\n            if (!passBinaryEq)\r\n            {\r\n                try\r\n                {\r\n                    loaded.Write(\"test.uasset\");\r\n                }\r\n                catch { }\r\n            }\r\n\r\n            int numPassedExportsTotal = 0;\r\n            int numExportsTotal = 0;\r\n            try\r\n            {\r\n                foreach (Export testExport in loaded.Exports)\r\n                {\r\n                    if (testExport is not RawExport)\r\n                    {\r\n                        numPassedExportsTotal += 1;\r\n                    }\r\n                    numExportsTotal += 1;\r\n                }\r\n            }\r\n            catch { }\r\n\r\n            Console.WriteLine(Path.GetFileName(path) + \" parsed in \" + timer.Elapsed.TotalMilliseconds + \" ms\");\r\n            Console.WriteLine(\"Binary equality: \" + (passBinaryEq ? \"PASS\" : \"FAIL\"));\r\n            Console.WriteLine(numPassedExportsTotal + \"/\" + numExportsTotal + \" exports (\" + NumberToTwoDecimalPlaces(100 * numPassedExportsTotal / (double)numExportsTotal) + \"%) passed\");\r\n            return timer.Elapsed.TotalMilliseconds;\r\n        }\r\n\r\n        private static string NumberToTwoDecimalPlaces(double num)\r\n        {\r\n            // avoid any other formatting (e.g. commas), just round decimal places\r\n            int secondPart = (int)(num * 100 % 100);\r\n            return (int)num + \".\" + (secondPart < 10 ? \"0\" : \"\") + secondPart;\r\n        }\r\n\r\n        private static HashSet<string> allowedExtensions = new HashSet<string>()\r\n        {\r\n            \".umap\",\r\n            \".uasset\"\r\n        };\r\n\r\n        public static void Run(string[] args)\r\n        {\r\n            Dictionary<string, string> allTestAssetVersions = JsonConvert.DeserializeObject<Dictionary<string, string>>(File.ReadAllText(Path.Combine(\"TestAssets\", \"_asset_versions.json\")));\r\n\r\n            // initialize a uasset a few times for good measure\r\n            for (int i = 0; i < 3; i++)\r\n            {\r\n                new UAsset(Path.Combine(\"TestAssets\", \"Staging_T2.umap\"), EngineVersion.VER_UE4_23);\r\n            }\r\n\r\n            var timer = new Stopwatch();\r\n\r\n            switch (args[0])\r\n            {\r\n                case \"testset\":\r\n                    string[] allTestingAssets = Directory.GetFiles(\"TestAssets\");\r\n                    int num1 = 0;\r\n                    double totalTime = 0;\r\n                    foreach (string assetPath in allTestingAssets)\r\n                    {\r\n                        if (!allowedExtensions.Contains(Path.GetExtension(assetPath))) continue;\r\n                        if (!allTestAssetVersions.ContainsKey(Path.GetFileNameWithoutExtension(assetPath))) continue;\r\n                        totalTime += BenchmarkAsset(assetPath, (EngineVersion)Enum.Parse(typeof(EngineVersion), allTestAssetVersions[Path.GetFileNameWithoutExtension(assetPath)]));\r\n                        num1 += 1;\r\n                    }\r\n                    Console.WriteLine(\"\\n\" + num1 + \" assets parsed in \" + NumberToTwoDecimalPlaces(totalTime) + \" ms\");\r\n                    break;\r\n                case \"testall\":\r\n                    string[] allRelevantArgs = args.Skip(1).Take(args.Length - 2).ToArray();\r\n                    string[] allTestingAssets2 = Directory.GetFiles(string.Join(\" \", allRelevantArgs), \"*.*\", SearchOption.AllDirectories);\r\n                    EngineVersion ver = (EngineVersion)Enum.Parse(typeof(EngineVersion), args[args.Length - 1]);\r\n\r\n                    // load mappings\r\n                    Usmap mappings = null;\r\n                    timer.Restart();\r\n                    foreach (string assetPath in allTestingAssets2)\r\n                    {\r\n                        if (Path.GetExtension(assetPath) == \".usmap\")\r\n                        {\r\n                            timer.Start();\r\n                            mappings = new Usmap();\r\n                            mappings.SkipBlueprintSchemas = true;\r\n                            mappings.Read(mappings.PathToReader(assetPath));\r\n                            timer.Stop();\r\n                            Console.WriteLine(\"Mappings parsed in \" + NumberToTwoDecimalPlaces(timer.Elapsed.TotalMilliseconds) + \" ms\");\r\n                            break;\r\n                        }\r\n                    }\r\n\r\n                    // get num assets in total for status update\r\n                    int numTotal = 0;\r\n                    foreach (string assetPath in allTestingAssets2)\r\n                    {\r\n                        if (!allowedExtensions.Contains(Path.GetExtension(assetPath))) continue;\r\n                        numTotal += 1;\r\n                    }\r\n\r\n                    int num = 0;\r\n                    int numPassedBinaryEq = 0;\r\n                    int numPassedAllExports = 0;\r\n                    int numExportsTotal = 0;\r\n                    int numPassedExportsTotal = 0;\r\n                    timer.Restart();\r\n\r\n                    int thresholdToForceStatusUpdate = numTotal / 4;\r\n                    int numAtLastStatusUpdate = 0;\r\n                    double lastMsGaveStatusUpdate = double.MinValue;\r\n                    ISet<string> problemAssets = new HashSet<string>();\r\n                    ISet<string> notEqualAssets = new HashSet<string>();\r\n                    ISet<string> notParsed = new HashSet<string>();\r\n                    Dictionary<string, Dictionary<int, string>> rawExports = new();\r\n                    foreach (string assetPath in allTestingAssets2)\r\n                    {\r\n                        if (!allowedExtensions.Contains(Path.GetExtension(assetPath))) continue;\r\n\r\n                        // give status update every once in a while\r\n                        if (timer.Elapsed.TotalMilliseconds - lastMsGaveStatusUpdate >= 3000 || (timer.Elapsed.TotalMilliseconds - lastMsGaveStatusUpdate >= 500 && (num - numAtLastStatusUpdate) > thresholdToForceStatusUpdate))\r\n                        {\r\n                            lastMsGaveStatusUpdate = timer.Elapsed.TotalMilliseconds;\r\n                            numAtLastStatusUpdate = num;\r\n                            Console.WriteLine(\"[\" + NumberToTwoDecimalPlaces(timer.Elapsed.TotalMilliseconds / 1000) + \" s] \" + num + \"/\" + numTotal + \" assets parsed\" + new string(' ', 15));\r\n                            Console.Write(\"[\" + NumberToTwoDecimalPlaces(timer.Elapsed.TotalMilliseconds / 1000) + \" s] \" + numPassedExportsTotal + \"/\" + numExportsTotal + \" exports (\" + NumberToTwoDecimalPlaces(numExportsTotal < 1 ? 0 : (numPassedExportsTotal / (double)numExportsTotal * 100)) + \"%) passing\" + new string(' ', 15));\r\n                            Console.CursorTop -= 1;\r\n                            Console.CursorLeft = 0;\r\n                        }\r\n\r\n                        timer.Start();\r\n                        UAsset loaded = null;\r\n                        try\r\n                        {\r\n                            loaded = new UAsset(assetPath, ver, mappings);\r\n                        }\r\n                        catch\r\n                        {\r\n                            timer.Stop();\r\n                            numExportsTotal += loaded?.Exports?.Count ?? 0;\r\n                            num += 1;\r\n                            loaded = null;\r\n                            notParsed.Add(assetPath);\r\n                            continue;\r\n                        }\r\n                        timer.Stop();\r\n\r\n                        bool isProblemAsset = false;\r\n                        bool isNotEqual = false;\r\n                        try\r\n                        {\r\n                            if (loaded.VerifyBinaryEquality())\r\n                            {\r\n                                numPassedBinaryEq += 1;\r\n                            }\r\n                            else\r\n                            {\r\n                                isProblemAsset = true;\r\n                                isNotEqual = true;\r\n                            }\r\n                        }\r\n                        catch\r\n                        {\r\n                            isProblemAsset = true;\r\n                            isNotEqual = true;\r\n                        }\r\n\r\n                        bool passedAllExports = true;\r\n                        try\r\n                        {\r\n                            for (int i = 0; i < loaded.Exports.Count; i++)\r\n                            {\r\n                                Export testExport = loaded.Exports[i];\r\n                                if (testExport is RawExport)\r\n                                {\r\n                                    passedAllExports = false;\r\n                                    if (!rawExports.ContainsKey(assetPath)) rawExports[assetPath] = [];\r\n                                    var clas = testExport.ClassIndex.IsImport() ? testExport.ClassIndex.ToImport(loaded).ObjectName.ToString() : testExport.ClassIndex.ToExport(loaded).ObjectName.ToString();\r\n                                    rawExports[assetPath].Add(i, clas);\r\n                                    Console.WriteLine(\"Raw export found for \" + assetPath + \" at index \" + i + \" with class \" + clas);\r\n                                }\r\n                                else\r\n                                {\r\n                                    numPassedExportsTotal += 1;\r\n                                }\r\n                                numExportsTotal += 1;\r\n                            }\r\n                        }\r\n                        catch\r\n                        {\r\n                            passedAllExports = false;\r\n                        }\r\n\r\n                        if (passedAllExports)\r\n                        {\r\n                            numPassedAllExports += 1;\r\n                        }\r\n                        else\r\n                        {\r\n                            isProblemAsset = true;\r\n                        }\r\n\r\n                        if (isProblemAsset) problemAssets.Add(assetPath);\r\n                        if (isNotEqual) notEqualAssets.Add(assetPath);\r\n                        num += 1;\r\n                        loaded = null;\r\n                    }\r\n\r\n                    Console.WriteLine();\r\n                    Console.WriteLine(num + \" assets parsed in \" + NumberToTwoDecimalPlaces(timer.Elapsed.TotalMilliseconds) + \" ms combined (\" + NumberToTwoDecimalPlaces(timer.Elapsed.TotalMilliseconds / num) + \" ms/asset, on average)\");\r\n                    Console.WriteLine(numExportsTotal + \" exports were parsed (\" + NumberToTwoDecimalPlaces(timer.Elapsed.TotalMilliseconds / numExportsTotal * 100) + \" ms per 100 exports, on average)\");\r\n                    Console.WriteLine(numPassedExportsTotal + \"/\" + numExportsTotal + \" exports (\" + NumberToTwoDecimalPlaces(numPassedExportsTotal / (double)numExportsTotal * 100) + \"%) passed\");\r\n                    Console.WriteLine(numPassedBinaryEq + \"/\" + num + \" assets (\" + NumberToTwoDecimalPlaces(numPassedBinaryEq / (double)num * 100) + \"%) passed binary equality\");\r\n                    Console.WriteLine(numPassedAllExports + \"/\" + num + \" assets (\" + NumberToTwoDecimalPlaces(numPassedAllExports / (double)num * 100) + \"%) passed on all exports\");\r\n\r\n                    if (notEqualAssets.Count > 0)\r\n                    {\r\n                        Console.WriteLine(\"\\nList of non equal assets:\");\r\n                        File.WriteAllText(\"noneuqal_assets.txt\", string.Join('\\n', notEqualAssets));\r\n                        Console.WriteLine(\"Written to noneuqal_assets.txt\");\r\n                    }\r\n\r\n                    if (notParsed.Count > 0)\r\n                    {\r\n                        Console.WriteLine(\"\\nList of not parsed assets:\");\r\n                        File.WriteAllText(\"nonparsed_assets.txt\", string.Join('\\n', notParsed));\r\n                        Console.WriteLine(\"Written to nonparsed_assets.txt\");\r\n                    }\r\n\r\n                    if (problemAssets.Count > 0)\r\n                    {\r\n                        int i = 0;\r\n                        Console.WriteLine(\"\\nList of problematic assets:\");\r\n                        foreach (string problemAsset in problemAssets)\r\n                        {\r\n                            Console.WriteLine(problemAsset);\r\n                            i++;\r\n                            if (i >= 50) break;\r\n                        }\r\n                        if (problemAssets.Count > 50) Console.WriteLine(\"...\");\r\n\r\n                        File.WriteAllText(\"problematic_assets.txt\", string.Join('\\n', problemAssets));\r\n                        Console.WriteLine(\"Written to problematic_assets.txt\");\r\n                    }\r\n\r\n                    if (rawExports.Count > 0)\r\n                    {\r\n                        Console.WriteLine(\"\\nList of raw export assets:\");\r\n                        File.WriteAllText(\"raw_export.txt\", JsonConvert.SerializeObject(rawExports, Formatting.Indented));\r\n                        Console.WriteLine(\"Written to raw_export.txt\");\r\n                    }\r\n                    break;\r\n                case \"testcpu\":\r\n                    int numCpuTrials = 5;\r\n                    double trialSum = 0;\r\n                    for (int i = 0; i < numCpuTrials; i++)\r\n                    {\r\n                        // load each time to avoid any weird stream optimizations\r\n                        MemoryStream oneBigAsset = new UAsset().PathToStream(Path.Combine(\"TestAssets\", \"PlayerBase01.umap\"));\r\n                        var binReader = new AssetBinaryReader(oneBigAsset, null);\r\n\r\n                        timer.Restart();\r\n                        timer.Start();\r\n                        new UAsset(binReader, EngineVersion.VER_UE4_22);\r\n                        timer.Stop();\r\n\r\n                        oneBigAsset.Dispose();\r\n                        trialSum += timer.Elapsed.TotalMilliseconds;\r\n                        Console.WriteLine(\"CPU trial \" + (i + 1) + \" completed in \" + timer.Elapsed.TotalMilliseconds + \" ms\");\r\n                    }\r\n                    Console.WriteLine(\"\\n\" + numCpuTrials + \" CPU trials completed in \" + trialSum + \" ms (\" + (trialSum / numCpuTrials) + \" ms/trial)\");\r\n                    break;\r\n                case \"test\":\r\n                    // replace \"!\" for \" \" as stupid hack lol...\r\n                    Usmap singleMappings = null;\r\n                    if (args.Length >= 4) singleMappings = new Usmap(args[3].Replace(\"!\", \" \"));\r\n                    BenchmarkAsset(args[1].Replace(\"!\", \" \"), (EngineVersion)Enum.Parse(typeof(EngineVersion), args[2].Replace(\"!\", \" \")), singleMappings);\r\n                    break;\r\n                case \"guesscustomversion\":\r\n                    timer.Restart();\r\n                    timer.Start();\r\n                    UAsset.GuessCustomVersionFromTypeAndEngineVersion(EngineVersion.VER_UE4_AUTOMATIC_VERSION, typeof(FReleaseObjectVersion));\r\n                    timer.Stop();\r\n                    Console.WriteLine(\"Custom version first retrieved in \" + timer.Elapsed.TotalMilliseconds + \" ms\");\r\n\r\n                    int numCustomVersionTrials = 20000;\r\n                    EngineVersion testingEngineVersion = EngineVersion.VER_UE4_16;\r\n                    timer.Restart();\r\n                    timer.Start();\r\n                    for (int i = 0; i < numCustomVersionTrials; i++)\r\n                    {\r\n                        UAsset.GuessCustomVersionFromTypeAndEngineVersion(testingEngineVersion, typeof(FReleaseObjectVersion));\r\n\r\n                        testingEngineVersion += 1;\r\n                        if (testingEngineVersion > EngineVersion.VER_UE4_27) testingEngineVersion = EngineVersion.VER_UE4_16;\r\n                    }\r\n                    timer.Stop();\r\n                    Console.WriteLine(\"Custom version then retrieved \" + numCustomVersionTrials + \" times in \" + timer.Elapsed.TotalMilliseconds + \" ms (\" + (timer.Elapsed.TotalMilliseconds / numCustomVersionTrials) + \" ms/trial)\");\r\n                    break;\r\n                case \"longestnames\":\r\n                    timer.Restart();\r\n                    timer.Start();\r\n                    Assembly relevantAssembly = typeof(UAsset).Assembly;\r\n                    List<string> lineas = new List<string>();\r\n                    foreach (Type type in relevantAssembly.GetTypes())\r\n                    {\r\n                        if (type.IsEnum) continue;\r\n                        lineas.Add(type.Name);\r\n                        foreach (MemberInfo memb in type.GetMembers()) lineas.Add(memb.Name);\r\n                    }\r\n\r\n                    Console.WriteLine(string.Join('\\n', lineas.OrderByDescending(x => x.Length).Distinct().Take(20)));\r\n                    Console.WriteLine(\"Operation completed in \" + timer.Elapsed.TotalMilliseconds + \" ms\");\r\n                    timer.Stop();\r\n                    break;\r\n                case \"dumpmappings\":\r\n                    {\r\n                        string usmapPath = args[1];\r\n                        Usmap usmapToDump = new Usmap(usmapPath);\r\n                        if (args.Length >= 3)\r\n                        {\r\n                            string filterStr = args[2];\r\n                            foreach (KeyValuePair<string, UsmapEnum> entry in usmapToDump.EnumMap)\r\n                            {\r\n                                if (!entry.Value.ModulePath.Contains(filterStr)) usmapToDump.EnumMap.Remove(entry.Key);\r\n                            }\r\n                            foreach (KeyValuePair<string, UsmapSchema> entry in usmapToDump.Schemas)\r\n                            {\r\n                                if (!entry.Value.ModulePath.Contains(filterStr)) usmapToDump.Schemas.Remove(entry.Key);\r\n                            }\r\n                        }\r\n                        File.WriteAllText(Path.ChangeExtension(usmapPath, \".json\"), usmapToDump.SerializeJSON(Formatting.Indented));\r\n                    }\r\n                    break;\r\n            }\r\n        }\r\n\r\n        public static void Main(string[] args)\r\n        {\r\n#if DEBUG || DEBUG_VERBOSE\r\n            //Run(new string[] { \"abcd\" });\r\n\r\n            while (true)\r\n            {\r\n                Console.Write(\"Input: \");\r\n                string inp = Console.ReadLine();\r\n                if (string.IsNullOrWhiteSpace(inp)) return;\r\n                Run(inp.Split(' '));\r\n                Console.WriteLine();\r\n            }\r\n#else\r\n            Run(args);\r\n#endif\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI.Benchmark/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible\r\n// to COM components.  If you need to access a type in this assembly from\r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"a74e7e85-1797-477c-aec1-583ae7d109d0\")]\r\n"
  },
  {
    "path": "UAssetAPI.Benchmark/TestAssets/_asset_versions.json",
    "content": "﻿{\r\n  \"HUB_Restaurant\": \"VER_UE4_22\",\r\n  \"PlayerBase01\": \"VER_UE4_22\",\r\n  \"Staging_T2\": \"VER_UE4_23\"\r\n}"
  },
  {
    "path": "UAssetAPI.Benchmark/UAssetAPI.Benchmark.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\r\n  <PropertyGroup>\r\n    <ProjectGuid>{A74E7E85-1797-477C-AEC1-583AE7D109D0}</ProjectGuid>\r\n    <OutputType>Exe</OutputType>\r\n    <TargetFramework>net8.0</TargetFramework>\r\n    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>\r\n    <AssemblyTitle>UAssetAPI.Benchmark</AssemblyTitle>\r\n    <Product>UAssetAPI.Benchmark</Product>\r\n    <Copyright>Copyright © Atenfyr 2024</Copyright>\r\n    <OutputPath>bin\\$(Configuration)\\</OutputPath>\r\n    <Configurations>Debug;Release;DebugVerbose;DebugTracing</Configurations>\r\n    <Platforms>AnyCPU;x86</Platforms>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugType>full</DebugType>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x86'\">\r\n    <DebugType>full</DebugType>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugVerbose|AnyCPU'\">\r\n    <DebugType>full</DebugType>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugVerbose|x86'\">\r\n    <DebugType>full</DebugType>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugTracing|AnyCPU'\">\r\n    <DebugType>full</DebugType>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugTracing|x86'\">\r\n    <DebugType>full</DebugType>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x86'\">\r\n    <DebugType>pdbonly</DebugType>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <None Include=\"TestAssets\\Staging_T2.uexp\">\r\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r\n    </None>\r\n    <None Include=\"TestAssets\\Staging_T2.umap\">\r\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r\n    </None>\r\n    <None Include=\"TestAssets\\_asset_versions.json\">\r\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r\n    </None>\r\n    <None Include=\"TestAssets\\HUB_Restaurant.uexp\">\r\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r\n    </None>\r\n    <None Include=\"TestAssets\\HUB_Restaurant.umap\">\r\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r\n    </None>\r\n    <None Include=\"TestAssets\\PlayerBase01.uexp\">\r\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r\n    </None>\r\n    <None Include=\"TestAssets\\PlayerBase01.umap\">\r\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r\n    </None>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\UAssetAPI\\UAssetAPI.csproj\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Remove=\"obj\\Debug Verbose\\.NETFramework,Version=v4.7.2.AssemblyAttributes.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Update=\"TestAssets\\Begin_Player.uasset\">\r\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r\n    </None>\r\n    <None Update=\"TestAssets\\B_Gamemode.uasset\">\r\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r\n    </None>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"13.0.3\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "UAssetAPI.Tests/AssetUnitTests.cs",
    "content": "﻿using Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing UAssetAPI.ExportTypes;\r\nusing UAssetAPI.PropertyTypes.Objects;\r\nusing UAssetAPI.PropertyTypes.Structs;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.Unversioned;\r\n\r\nnamespace UAssetAPI.Tests\r\n{\r\n    [TestClass]\r\n    public class AssetUnitTests\r\n    {\r\n        /// <summary>\r\n        /// Checks if two files have the same binary data.\r\n        /// </summary>\r\n        public void VerifyBinaryEquality(string file1, string file2)\r\n        {\r\n            int file1byte;\r\n            int file2byte;\r\n            FileStream fs1;\r\n            FileStream fs2;\r\n\r\n            if (file1 == file2) return;\r\n\r\n            fs1 = new FileStream(file1, FileMode.Open);\r\n            fs2 = new FileStream(file2, FileMode.Open);\r\n\r\n            if (fs1.Length != fs2.Length)\r\n            {\r\n                fs1.Close();\r\n                fs2.Close();\r\n                Assert.IsTrue(false);\r\n            }\r\n\r\n            do\r\n            {\r\n                file1byte = fs1.ReadByte();\r\n                file2byte = fs2.ReadByte();\r\n            }\r\n            while ((file1byte == file2byte) && (file1byte != -1));\r\n\r\n            fs1.Close();\r\n            fs2.Close();\r\n\r\n            Assert.IsTrue((file1byte - file2byte) == 0);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Asserts that all exports in an asset have parsed correctly.\r\n        /// </summary>\r\n        /// <param name=\"tester\">The asset to test.</param>\r\n        public void AssertAllExportsParsedCorrectly(UAsset tester)\r\n        {\r\n            foreach (Export testExport in tester.Exports)\r\n            {\r\n                Assert.IsFalse(testExport is RawExport, $\"Export '{testExport.ObjectName}' in '{tester.FilePath}' was not parsed correctly (RawExport)\");\r\n                if (testExport is FunctionExport funcExport)\r\n                {\r\n                    Assert.IsNotNull(funcExport.ScriptBytecode, $\"FunctionExport '{testExport.ObjectName}' in '{tester.FilePath}' has null ScriptBytecode (failed to parse Kismet bytecode)\");\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieves all the test assets in a particular folder.\r\n        /// </summary>\r\n        /// <param name=\"folder\">The folder to check for test assets.</param>\r\n        /// <returns>An array of paths to assets that should be tested.</returns>\r\n        public string[] GetAllTestAssets(string folder)\r\n        {\r\n            List<string> allFilesToTest = Directory.GetFiles(folder, \"*.uasset\", SearchOption.AllDirectories).ToList();\r\n            allFilesToTest.AddRange(Directory.GetFiles(folder, \"*.umap\", SearchOption.AllDirectories));\r\n            return allFilesToTest.ToArray();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Tests <see cref=\"FSoftObjectPath\"/> equality functionality including IEquatable implementation.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestFSoftObjectPathEquality()\r\n        {\r\n            // Create a dummy asset for FName construction\r\n            var dummyAsset = new UAsset(Path.Combine(\"TestAssets\", \"TestManyAssets\", \"Astroneer\", \"Augment_BroadBrush.uasset\"), EngineVersion.VER_UE4_23);\r\n            \r\n            // Create test instances\r\n            var packageName1 = new FName(dummyAsset, \"TestPackage\");\r\n            var assetName1 = new FName(dummyAsset, \"TestAsset\");\r\n            var subPath1 = new FString(\"SubPath1\");\r\n            \r\n            var packageName2 = new FName(dummyAsset, \"TestPackage\");\r\n            var assetName2 = new FName(dummyAsset, \"TestAsset\");\r\n            var subPath2 = new FString(\"SubPath1\");\r\n            \r\n            var packageName3 = new FName(dummyAsset, \"DifferentPackage\");\r\n            var assetName3 = new FName(dummyAsset, \"DifferentAsset\");\r\n            var subPath3 = new FString(\"SubPath2\");\r\n\r\n            var path1 = new FSoftObjectPath(packageName1, assetName1, subPath1);\r\n            var path2 = new FSoftObjectPath(packageName2, assetName2, subPath2); // Same values\r\n            var path3 = new FSoftObjectPath(packageName3, assetName3, subPath3); // Different values\r\n            var path4 = new FSoftObjectPath(packageName1, assetName1, null); // Null subpath\r\n\r\n            // Test IEquatable<FSoftObjectPath>.Equals\r\n            Assert.IsTrue(path1.Equals(path2), \"Equal paths should return true with typed Equals\");\r\n            Assert.IsTrue(path2.Equals(path1), \"Equal paths should return true with typed Equals (symmetry)\");\r\n            Assert.IsFalse(path1.Equals(path3), \"Different paths should return false with typed Equals\");\r\n            Assert.IsFalse(path1.Equals(path4), \"Paths with different subpaths should return false with typed Equals\");\r\n\r\n            // Test object.Equals\r\n            Assert.IsTrue(path1.Equals((object)path2), \"Equal paths should return true with object Equals\");\r\n            Assert.IsFalse(path1.Equals((object)path3), \"Different paths should return false with object Equals\");\r\n            Assert.IsFalse(path1.Equals(null), \"Path should not equal null\");\r\n            Assert.IsFalse(path1.Equals(\"string\"), \"Path should not equal different type\");\r\n\r\n            // Test == operator\r\n            Assert.IsTrue(path1 == path2, \"Equal paths should return true with == operator\");\r\n            Assert.IsFalse(path1 == path3, \"Different paths should return false with == operator\");\r\n\r\n            // Test != operator\r\n            Assert.IsFalse(path1 != path2, \"Equal paths should return false with != operator\");\r\n            Assert.IsTrue(path1 != path3, \"Different paths should return true with != operator\");\r\n\r\n            // Test GetHashCode consistency\r\n            Assert.IsTrue(path1.GetHashCode() == path2.GetHashCode(), \"Equal paths should have equal hash codes\");\r\n            \r\n            // Test with null values\r\n            var pathWithNullPackage = new FSoftObjectPath(new FTopLevelAssetPath(null, assetName1), subPath1);\r\n            var pathWithNullAsset = new FSoftObjectPath(new FTopLevelAssetPath(packageName1, null), subPath1);\r\n            var pathWithNullSubPath = new FSoftObjectPath(packageName1, assetName1, null);\r\n            \r\n            Assert.IsFalse(path1.Equals(pathWithNullPackage), \"Paths with null package should not equal non-null\");\r\n            Assert.IsFalse(path1.Equals(pathWithNullAsset), \"Paths with null asset should not equal non-null\");\r\n            Assert.IsFalse(path1.Equals(pathWithNullSubPath), \"Paths with null subpath should not equal non-null\");\r\n            \r\n            // Test null equality\r\n            var pathAllNull = new FSoftObjectPath(new FTopLevelAssetPath(null, null), null);\r\n            var pathAllNull2 = new FSoftObjectPath(new FTopLevelAssetPath(null, null), null);\r\n            Assert.IsTrue(pathAllNull.Equals(pathAllNull2), \"Paths with all null values should be equal\");\r\n            \r\n            // Test partial equality scenarios\r\n            var pathSamePackageAsset = new FSoftObjectPath(new FTopLevelAssetPath(packageName1, assetName1), subPath3);\r\n            Assert.IsFalse(path1.Equals(pathSamePackageAsset), \"Paths with same package/asset but different subpath should not be equal\");\r\n            \r\n            var pathSamePackageSubPath = new FSoftObjectPath(new FTopLevelAssetPath(packageName1, assetName3), subPath1);\r\n            Assert.IsFalse(path1.Equals(pathSamePackageSubPath), \"Paths with same package/subpath but different asset should not be equal\");\r\n            \r\n            var pathSameAssetSubPath = new FSoftObjectPath(new FTopLevelAssetPath(packageName3, assetName1), subPath1);\r\n            Assert.IsFalse(path1.Equals(pathSameAssetSubPath), \"Paths with same asset/subpath but different package should not be equal\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Tests <see cref=\"FName.ToString\"/> and <see cref=\"FName.FromString\"/>.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestNameConstruction()\r\n        {\r\n            var dummyAsset = new UAsset(Path.Combine(\"TestAssets\", \"TestManyAssets\", \"Astroneer\", \"Augment_BroadBrush.uasset\"), EngineVersion.VER_UE4_23);\r\n\r\n            FName test = FName.FromString(dummyAsset, \"HelloWorld_0\");\r\n            Assert.IsTrue(test.Value.Value == \"HelloWorld\" && test.Number == 1);\r\n            Assert.IsTrue(test.ToString() == \"HelloWorld_0\");\r\n\r\n            test = FName.FromString(dummyAsset, \"5_72\");\r\n            Assert.IsTrue(test.Value.Value == \"5\" && test.Number == 73);\r\n            Assert.IsTrue(test.ToString() == \"5_72\");\r\n\r\n            test = FName.FromString(dummyAsset, \"_3\");\r\n            Assert.IsTrue(test.Value.Value == \"_3\" && test.Number == 0);\r\n            Assert.IsTrue(test.ToString() == \"_3\");\r\n\r\n            test = FName.FromString(dummyAsset, \"hi_\");\r\n            Assert.IsTrue(test.Value.Value == \"hi_\" && test.Number == 0);\r\n            Assert.IsTrue(test.ToString() == \"hi_\");\r\n\r\n            test = FName.FromString(dummyAsset, \"hi_01\");\r\n            Assert.IsTrue(test.Value.Value == \"hi_01\" && test.Number == 0);\r\n            Assert.IsTrue(test.ToString() == \"hi_01\");\r\n\r\n            test = FName.FromString(dummyAsset, \"hi_10\");\r\n            Assert.IsTrue(test.Value.Value == \"hi\" && test.Number == 11);\r\n            Assert.IsTrue(test.ToString() == \"hi_10\");\r\n\r\n            test = FName.FromString(dummyAsset, \"blah\");\r\n            Assert.IsTrue(test.Value.Value == \"blah\" && test.Number == 0);\r\n            Assert.IsTrue(test.ToString() == \"blah\");\r\n\r\n            test = new FName(dummyAsset, \"HelloWorld\", 2);\r\n            Assert.IsTrue(test.ToString() == \"HelloWorld_1\");\r\n\r\n            test = new FName(dummyAsset, \"HelloWorld\", 0);\r\n            Assert.IsTrue(test.ToString() == \"HelloWorld\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Tests modifying values within the class default object of an asset.\r\n        /// Binary equality is expected.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestCDOModification()\r\n        {\r\n            var tester = new UAsset(Path.Combine(\"TestAssets\", \"TestManyAssets\", \"Astroneer\", \"Augment_BroadBrush.uasset\"), EngineVersion.VER_UE4_23);\r\n            Assert.IsTrue(tester.VerifyBinaryEquality());\r\n\r\n            NormalExport cdoExport = null;\r\n            foreach (Export testExport in tester.Exports)\r\n            {\r\n                if (testExport.ObjectFlags.HasFlag(EObjectFlags.RF_ClassDefaultObject))\r\n                {\r\n                    cdoExport = (NormalExport)testExport;\r\n                    break;\r\n                }\r\n            }\r\n            Assert.IsNotNull(cdoExport);\r\n\r\n            cdoExport[\"PickupActor\"] = new ObjectPropertyData() { Value = FPackageIndex.FromRawIndex(0) };\r\n\r\n            Assert.IsTrue(cdoExport[\"PickupActor\"] is ObjectPropertyData);\r\n            Assert.IsTrue(((ObjectPropertyData)cdoExport[\"PickupActor\"]).Value.Index == 0);\r\n        }\r\n\r\n        /// <summary>\r\n        /// MapProperties contain no easy way to determine the type of structs within them.\r\n        /// For C++ classes, it is impossible without access to the headers, but for blueprint classes, the correct serialization is contained within the UClass.\r\n        /// In this test, we take an asset with custom struct serialization in a map and extract data from the ClassExport in order to determine the correct serialization for the structs.\r\n        /// Binary equality is expected.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestCustomSerializationStructsInMap()\r\n        {\r\n            var tester = new UAsset(Path.Combine(\"TestAssets\", \"TestCustomSerializationStructsInMap\", \"wtf.uasset\"), EngineVersion.VER_UE4_25);\r\n            Assert.IsTrue(tester.VerifyBinaryEquality());\r\n\r\n            // Get the map property in export 2\r\n            Export exportTwo = FPackageIndex.FromRawIndex(2).ToExport(tester);\r\n            Assert.IsTrue(exportTwo is NormalExport);\r\n\r\n            NormalExport exportTwoNormal = (NormalExport)exportTwo;\r\n\r\n            var mapPropertyName = FName.FromString(tester, \"KekWait\");\r\n            MapPropertyData testMap = exportTwoNormal[mapPropertyName] as MapPropertyData;\r\n            Assert.IsNotNull(testMap);\r\n            Assert.IsTrue(testMap == exportTwoNormal[mapPropertyName.Value.Value]);\r\n\r\n            // Get the first entry of the map\r\n            StructPropertyData entryKey = testMap?.Value?.Keys?.ElementAt(0) as StructPropertyData;\r\n            StructPropertyData entryValue = testMap?.Value?[0] as StructPropertyData;\r\n            Assert.IsNotNull(entryKey?.Value?[0]);\r\n            Assert.IsNotNull(entryValue?.Value?[0]);\r\n\r\n            // Check that the properties are correct\r\n            Assert.IsTrue(entryKey.Value[0] is VectorPropertyData);\r\n            Assert.IsTrue(entryValue.Value[0] is LinearColorPropertyData);\r\n        }\r\n\r\n        /// <summary>\r\n        /// In this test, we examine a cooked asset that has been modified by an external tool.\r\n        /// As a result of external modification, the asset now has new name map entries whose hashes were left empty.\r\n        /// Binary equality is expected. Expected behavior is for UAssetAPI to detect this and override its normal hash algorithm.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestImproperNameMapHashes()\r\n        {\r\n            var tester = new UAsset(Path.Combine(\"TestAssets\", \"TestImproperNameMapHashes\", \"OC_Gatling_DamageB_B.uasset\"), EngineVersion.VER_UE4_25);\r\n            Assert.IsTrue(tester.VerifyBinaryEquality());\r\n\r\n            Dictionary<string, bool> testingEntries = new Dictionary<string, bool>();\r\n            testingEntries[\"/Game/WeaponsNTools/GatlingGun/Overclocks/OC_BonusesAndPenalties/OC_Bonus_MovmentBonus_150p\"] = false;\r\n            testingEntries[\"/Game/WeaponsNTools/GatlingGun/Overclocks/OC_BonusesAndPenalties/OC_Bonus_MovmentBonus_150p.OC_Bonus_MovmentBonus_150p\"] = false;\r\n\r\n            foreach (KeyValuePair<FString, uint> overrideHashes in tester.OverrideNameMapHashes)\r\n            {\r\n                if (testingEntries.ContainsKey(overrideHashes.Key.Value))\r\n                {\r\n                    Assert.IsTrue(overrideHashes.Value == 0);\r\n                    testingEntries[overrideHashes.Key.Value] = true;\r\n                }\r\n            }\r\n\r\n            foreach (KeyValuePair<string, bool> testingEntry in testingEntries)\r\n            {\r\n                Assert.IsTrue(testingEntry.Value);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// In this test, we examine a cooked asset that has been modified by an external tool.\r\n        /// As a result of external modification, two identical entries now exist in the name map, which never occurs in assets cooked by the Unreal Engine.\r\n        /// Binary equality is not expected, but the asset must successfully parse anyways.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestDuplicateNameMapEntries()\r\n        {\r\n            var tester = new UAsset(Path.Combine(\"TestAssets\", \"TestDuplicateNameMapEntries\", \"BIOME_AzureWeald.uasset\"), EngineVersion.VER_UE4_25);\r\n\r\n            // Make sure a duplicate entry actually exists\r\n            bool duplicatesExist = false;\r\n            Dictionary<string, bool> enumeratedEntries = new Dictionary<string, bool>();\r\n            foreach (FString entry in tester.GetNameMapIndexList())\r\n            {\r\n                if (enumeratedEntries.ContainsKey(entry.Value) && enumeratedEntries[entry.Value])\r\n                {\r\n                    duplicatesExist = true;\r\n                    break;\r\n                }\r\n                enumeratedEntries[entry.Value] = true;\r\n            }\r\n            Assert.IsTrue(duplicatesExist);\r\n\r\n            // Make sure all exports parsed correctly\r\n            AssertAllExportsParsedCorrectly(tester);\r\n        }\r\n\r\n        /// <summary>\r\n        /// In this test, we have an asset with a few properties that UAssetAPI has no serialization for. (The properties do not actually exist in the engine itself, so this is expected behavior.)\r\n        /// UAssetAPI must fallback to UnknownPropertyType to parse the asset correctly and maintain binary equality.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestUnknownProperties()\r\n        {\r\n            var tester = new UAsset(Path.Combine(\"TestAssets\", \"TestUnknownProperties\", \"BP_DetPack_Charge.uasset\"), EngineVersion.VER_UE4_25);\r\n            Assert.IsTrue(tester.VerifyBinaryEquality());\r\n            AssertAllExportsParsedCorrectly(tester);\r\n\r\n            // Check that only the expected unknown properties are present\r\n            Dictionary<string, bool> newUnknownProperties = new Dictionary<string, bool>();\r\n            newUnknownProperties.Add(\"GarbagePropty\", false);\r\n            newUnknownProperties.Add(\"EvenMoreGarbageTestingPropertyy\", false);\r\n\r\n            foreach (Export testExport in tester.Exports)\r\n            {\r\n                if (testExport is NormalExport normalTestExport)\r\n                {\r\n                    foreach (PropertyData prop in normalTestExport.Data)\r\n                    {\r\n                        if (prop is UnknownPropertyData unknownProp)\r\n                        {\r\n                            string serializingType = unknownProp?.SerializingPropertyType?.Value;\r\n                            Assert.AreNotEqual(serializingType, null);\r\n                            Assert.IsTrue(newUnknownProperties.ContainsKey(serializingType));\r\n                            newUnknownProperties[serializingType] = true;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            foreach (KeyValuePair<string, bool> entry in newUnknownProperties)\r\n            {\r\n                Assert.IsTrue(entry.Value);\r\n            }\r\n        }\r\n\r\n        private void TestManyAssetsSubsection(string game, EngineVersion version, Usmap mappings = null)\r\n        {\r\n            string[] allTestingAssets = GetAllTestAssets(Path.Combine(\"TestAssets\", \"TestManyAssets\", game));\r\n            foreach (string assetPath in allTestingAssets)\r\n            {\r\n                Console.WriteLine(assetPath);\r\n                var tester = new UAsset(assetPath, version, mappings);\r\n                Assert.IsTrue(tester.VerifyBinaryEquality());\r\n                AssertAllExportsParsedCorrectly(tester);\r\n                Console.WriteLine(tester.GetEngineVersion());\r\n            }\r\n        }\r\n\r\n        private void TestUE5_3Subsection(string game, EngineVersion version, Usmap mappings = null)\r\n        {\r\n            string[] allTestingAssets = GetAllTestAssets(Path.Combine(\"TestAssets\", \"TestUE5_3\", game));\r\n            foreach (string assetPath in allTestingAssets)\r\n            {\r\n                Console.WriteLine(assetPath);\r\n                var tester = new UAsset(assetPath, version, mappings);\r\n                Assert.IsTrue(tester.VerifyBinaryEquality());\r\n                AssertAllExportsParsedCorrectly(tester);\r\n                Console.WriteLine(tester.GetEngineVersion());\r\n            }\r\n        }\r\n\r\n        private void TestUE5_4Subsection(string game, EngineVersion version, Usmap mappings = null)\r\n        {\r\n            string[] allTestingAssets = GetAllTestAssets(Path.Combine(\"TestAssets\", \"TestUE5_4\", game));\r\n            foreach (string assetPath in allTestingAssets)\r\n            {\r\n                Console.WriteLine(assetPath);\r\n                var tester = new UAsset(assetPath, version, mappings);\r\n                Assert.IsTrue(tester.VerifyBinaryEquality());\r\n                AssertAllExportsParsedCorrectly(tester);\r\n                Console.WriteLine(tester.GetEngineVersion());\r\n            }\r\n        }\r\n\r\n        private void TestUE5_5Subsection(string game, EngineVersion version, Usmap mappings = null)\r\n        {\r\n            string[] allTestingAssets = GetAllTestAssets(Path.Combine(\"TestAssets\", \"TestUE5_5\", game));\r\n            foreach (string assetPath in allTestingAssets)\r\n            {\r\n                Console.WriteLine(assetPath);\r\n                var tester = new UAsset(assetPath, version, mappings);\r\n                Assert.IsTrue(tester.VerifyBinaryEquality());\r\n                AssertAllExportsParsedCorrectly(tester);\r\n                Console.WriteLine(tester.GetEngineVersion());\r\n            }\r\n        }\r\n        \r\n        private void TestUE5_6Subsection(string game, EngineVersion version, Usmap mappings = null)\r\n        {\r\n            string[] allTestingAssets = GetAllTestAssets(Path.Combine(\"TestAssets\", \"TestUE5_6\", game));\r\n            foreach (string assetPath in allTestingAssets)\r\n            {\r\n                Console.WriteLine(assetPath);\r\n                var tester = new UAsset(assetPath, version, mappings);\r\n                Assert.IsTrue(tester.VerifyBinaryEquality());\r\n                AssertAllExportsParsedCorrectly(tester);\r\n                Console.WriteLine(tester.GetEngineVersion());\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Tests the GUID/string conversion operations to ensure that they match the Unreal implementation.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestGUIDs()\r\n        {\r\n            string input = \"{CF873D05-4977-597A-F120-7F9F90B1ED09}\";\r\n            Guid test = input.ConvertToGUID();\r\n            Assert.IsTrue(test.ConvertToString() == input);\r\n            Assert.IsTrue(test.ToByteArray().SequenceEqual(UAPUtils.ConvertHexStringToByteArray(\"05 3D 87 CF 7A 59 77 49 9F 7F 20 F1 09 ED B1 90\")));\r\n        }\r\n\r\n        /// <summary>\r\n        /// In this test, we examine a variety of assets from different games and ensure that they parse correctly and maintain binary equality.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestManyAssets()\r\n        {\r\n            TestManyAssetsSubsection(\"Biodigital\", EngineVersion.VER_UE4_14);\r\n            TestManyAssetsSubsection(\"SnakePass\", EngineVersion.VER_UE4_14);\r\n            TestManyAssetsSubsection(\"Tekken\", EngineVersion.VER_UE4_14);\r\n            TestManyAssetsSubsection(\"MidAir\", EngineVersion.VER_UE4_17);\r\n            TestManyAssetsSubsection(\"MutantYearZero\", EngineVersion.VER_UE4_17);\r\n            TestManyAssetsSubsection(\"Bloodstained\", EngineVersion.VER_UE4_18);\r\n            TestManyAssetsSubsection(\"BurningDaylight\", EngineVersion.VER_UE4_18);\r\n            TestManyAssetsSubsection(\"CodeVein\", EngineVersion.VER_UE4_18);\r\n            TestManyAssetsSubsection(\"Liminal\", EngineVersion.VER_UE4_18);\r\n            TestManyAssetsSubsection(\"ToTheCore\", EngineVersion.VER_UE4_18);\r\n            TestManyAssetsSubsection(\"TheBeastInside\", EngineVersion.VER_UE4_19);\r\n            TestManyAssetsSubsection(\"TheOccupation\", EngineVersion.VER_UE4_19);\r\n            TestManyAssetsSubsection(\"Astroneer\", EngineVersion.VER_UE4_23);\r\n            TestManyAssetsSubsection(\"StarlitSeason\", EngineVersion.VER_UE4_24);\r\n            TestManyAssetsSubsection(\"MISC_426\", EngineVersion.VER_UE4_26);\r\n            TestManyAssetsSubsection(\"VERSIONED\", EngineVersion.UNKNOWN);\r\n\r\n            // traditional, NOT zen/io store. includes unversioned properties\r\n            TestManyAssetsSubsection(\"LiesOfP\", EngineVersion.VER_UE4_27, new Usmap(Path.Combine(\"TestAssets\", \"TestManyAssets\", \"LiesOfP\", \"LiesOfP.usmap\")));\r\n            TestManyAssetsSubsection(\"Palia\", EngineVersion.VER_UE5_1, new Usmap(Path.Combine(\"TestAssets\", \"TestManyAssets\", \"Palia\", \"Palia.usmap\")));\r\n            TestManyAssetsSubsection(\"F1Manager2023\", EngineVersion.VER_UE5_1, new Usmap(Path.Combine(\"TestAssets\", \"TestManyAssets\", \"F1Manager2023\", \"F1Manager2023.usmap\")));\r\n            TestManyAssetsSubsection(\"Palworld\", EngineVersion.VER_UE5_1, new Usmap(Path.Combine(\"TestAssets\", \"TestManyAssets\", \"Palworld\", \"Palworld.usmap\")));\r\n        }\r\n\r\n        /// <summary>\r\n        /// In this test, we examine and modify a DataTable to ensure that it parses correctly and maintains binary equality.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestDataTables()\r\n        {\r\n            var assetPath = Path.Combine(\"TestAssets\", \"TestManyAssets\", \"Bloodstained\", \"PB_DT_RandomizerRoomCheck.uasset\");\r\n            var tester = new UAsset(assetPath, EngineVersion.VER_UE4_18);\r\n            Assert.IsTrue(tester.VerifyBinaryEquality());\r\n            AssertAllExportsParsedCorrectly(tester);\r\n            Assert.IsTrue(tester.Exports.Count == 1);\r\n\r\n            var ourDataTableExport = tester.Exports[0] as DataTableExport;\r\n            var ourTable = ourDataTableExport?.Table;\r\n            Assert.IsNotNull(ourTable);\r\n\r\n            // Check out the first entry to make sure it's parsing alright, and flip all the flags for later testing\r\n            StructPropertyData firstEntry = ourTable.Data[0];\r\n\r\n            bool didFindTestName = false;\r\n            for (int i = 0; i < firstEntry.Value.Count; i++)\r\n            {\r\n                var propData = firstEntry.Value[i];\r\n                Console.WriteLine(i + \": \" + propData.Name + \", \" + propData.PropertyType);\r\n                if (propData.Name == new FName(tester, \"AcceleratorANDDoubleJump\")) didFindTestName = true;\r\n                if (propData is BoolPropertyData boolProp) boolProp.Value = !boolProp.Value;\r\n            }\r\n            Assert.IsTrue(didFindTestName);\r\n\r\n            // Save the modified table\r\n            tester.Write(Path.Combine(\"TestAssets\", \"MODIFIED.uasset\"));\r\n\r\n            // Load the modified table back in and make sure we're good\r\n            var tester2 = new UAsset(Path.Combine(\"TestAssets\", \"MODIFIED.uasset\"), EngineVersion.VER_UE4_18);\r\n            Assert.IsTrue(tester2.VerifyBinaryEquality());\r\n            AssertAllExportsParsedCorrectly(tester2);\r\n            Assert.IsTrue(tester2.Exports.Count == 1);\r\n\r\n            // Flip the flags back to what they originally were\r\n            firstEntry = (tester2.Exports[0] as DataTableExport)?.Table?.Data?[0];\r\n            Assert.IsNotNull(firstEntry);\r\n            for (int i = 0; i < firstEntry.Value.Count; i++)\r\n            {\r\n                if (firstEntry.Value[i] is BoolPropertyData boolProp) boolProp.Value = !boolProp.Value;\r\n            }\r\n\r\n            // Save and check that it's binary equal to what we originally had\r\n            tester2.Write(tester2.FilePath);\r\n            Assert.IsTrue(File.ReadAllBytes(assetPath).SequenceEqual(File.ReadAllBytes(Path.Combine(\"TestAssets\", \"MODIFIED.uasset\"))));\r\n        }\r\n\r\n        private void TestJsonOnFile(string file, EngineVersion version, string subFolder = \"TestJson\", string mappingsFile = null)\r\n        {\r\n            Usmap mappings = string.IsNullOrEmpty(mappingsFile) ? null : new Usmap(Path.Combine(\"TestAssets\", subFolder, mappingsFile));\r\n\r\n            Console.WriteLine(file);\r\n            var tester = new UAsset(Path.Combine(\"TestAssets\", subFolder, file), version, mappings);\r\n            Assert.IsTrue(tester.VerifyBinaryEquality());\r\n            AssertAllExportsParsedCorrectly(tester);\r\n\r\n            string jsonSerializedAsset = tester.SerializeJson();\r\n            File.WriteAllText(Path.Combine(\"TestAssets\", subFolder, \"raw.json\"), jsonSerializedAsset);\r\n\r\n            var tester2 = UAsset.DeserializeJson(File.ReadAllText(Path.Combine(\"TestAssets\", subFolder, \"raw.json\")));\r\n            tester2.Mappings = mappings;\r\n            tester2.Write(Path.Combine(\"TestAssets\", subFolder, \"MODIFIED.uasset\"));\r\n\r\n            // For the assets we're testing binary equality is maintained and can be used as a metric of success, but binary equality is not guaranteed for all assets\r\n            Assert.IsTrue(File.ReadAllBytes(Path.Combine(\"TestAssets\", subFolder, file)).SequenceEqual(File.ReadAllBytes(Path.Combine(\"TestAssets\", subFolder, \"MODIFIED.uasset\"))));\r\n        }\r\n\r\n        /// <summary>\r\n        /// In this test, we serialize some assets to JSON and back to test if the JSON serialization system is functional.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestJson()\r\n        {\r\n            TestJsonOnFile(\"PB_DT_RandomizerRoomCheck.uasset\", EngineVersion.VER_UE4_18, Path.Combine(\"TestManyAssets\", \"Bloodstained\"));\r\n            TestJsonOnFile(\"m02VIL_004_Gimmick.umap\", EngineVersion.VER_UE4_18, Path.Combine(\"TestManyAssets\", \"Bloodstained\"));\r\n            TestJsonOnFile(\"Staging_T2.umap\", EngineVersion.VER_UE4_23, Path.Combine(\"TestManyAssets\", \"Astroneer\"));\r\n            TestJsonOnFile(\"Items.uasset\", EngineVersion.VER_UE4_23); // string table\r\n            //TestJsonOnFile(\"ABP_SMG_A.uasset\", UE4Version.VER_UE4_25);\r\n            TestJsonOnFile(\"WPN_LockOnRifle.uasset\", EngineVersion.VER_UE4_25);\r\n            TestJsonOnFile(\"Map_FrontEnd_Hotel_LS_Night.umap\", EngineVersion.VER_UE4_27);\r\n            TestJsonOnFile(\"AssetDatabase_AutoGenerated.uasset\", EngineVersion.VER_UE4_27);\r\n            TestJsonOnFile(\"RaceSimDataAsset.uasset\", EngineVersion.VER_UE4_27);\r\n            TestJsonOnFile(\"TurboAcres_Environment.uasset\", EngineVersion.VER_UE4_27);\r\n            TestJsonOnFile(\"MGA_HeavyWeapon_Parent.uasset\", EngineVersion.VER_UE4_25, \"TestJson\", \"Outriders.usmap\");\r\n            TestJsonOnFile(\"Atlas_6x4_Semi.uasset\", EngineVersion.VER_UE5_5, \"TestJson\", \"MotorTown.usmap\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// In this test, we add a new property called \"CoolProperty\" in the tests assembly to test whether or not PropertyData-inheriting classes in dependent assemblies are registered by UAssetAPI.\r\n        /// </summary>\r\n        /// <see cref=\"CoolPropertyData\"/>\r\n        [TestMethod]\r\n        public void TestCustomProperty()\r\n        {\r\n            var tester = new UAsset(Path.Combine(\"TestAssets\", \"TestCustomProperty\", \"AlternateStartActor.uasset\"), EngineVersion.VER_UE4_23);\r\n            Assert.IsTrue(tester.VerifyBinaryEquality());\r\n            AssertAllExportsParsedCorrectly(tester);\r\n\r\n            // Make sure that there are no unknown properties, and that there is at least one CoolProperty with a value of 72\r\n            bool hasCoolProperty = false;\r\n            foreach (Export testExport in tester.Exports)\r\n            {\r\n                if (testExport is NormalExport normalTestExport)\r\n                {\r\n                    foreach (PropertyData prop in normalTestExport.Data)\r\n                    {\r\n                        Assert.IsFalse(prop is UnknownPropertyData);\r\n                        if (prop is CoolPropertyData coolProp)\r\n                        {\r\n                            hasCoolProperty = true;\r\n                            Assert.IsTrue(coolProp.Value == 72);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            Assert.IsTrue(hasCoolProperty);\r\n        }\r\n\r\n        /// <summary>\r\n        /// In this test, we verify that Ace Combat 7 decryption works.\r\n        /// Binary equality is expected.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestACE7()\r\n        {\r\n            // Create copies of original files\r\n            foreach (var path in Directory.GetFiles(Path.Combine(\"TestAssets\", \"TestACE7\"), \"*.*\"))\r\n            {\r\n                File.Copy(path, path + \".bak\", true);\r\n            }\r\n\r\n            // Decrypt them\r\n            var decrypter = new AC7Decrypt();\r\n            decrypter.Decrypt(Path.Combine(\"TestAssets\", \"TestACE7\", \"plwp_6aam_a0.uasset\"), Path.Combine(\"TestAssets\", \"TestACE7\", \"plwp_6aam_a0.uasset\"));\r\n            decrypter.Decrypt(Path.Combine(\"TestAssets\", \"TestACE7\", \"ex02_IGC_03_Subtitle.uasset\"), Path.Combine(\"TestAssets\", \"TestACE7\", \"ex02_IGC_03_Subtitle.uasset\"));\r\n\r\n            // Verify the files can be parsed\r\n            var tester = new UAsset(Path.Combine(\"TestAssets\", \"TestACE7\", \"plwp_6aam_a0.uasset\"), EngineVersion.VER_UE4_18);\r\n            Assert.IsTrue(tester.VerifyBinaryEquality());\r\n            AssertAllExportsParsedCorrectly(tester);\r\n\r\n            tester = new UAsset(Path.Combine(\"TestAssets\", \"TestACE7\", \"ex02_IGC_03_Subtitle.uasset\"), EngineVersion.VER_UE4_18);\r\n            Assert.IsTrue(tester.VerifyBinaryEquality());\r\n            AssertAllExportsParsedCorrectly(tester);\r\n\r\n            // Encrypt them\r\n            decrypter.Encrypt(Path.Combine(\"TestAssets\", \"TestACE7\", \"plwp_6aam_a0.uasset\"), Path.Combine(\"TestAssets\", \"TestACE7\", \"plwp_6aam_a0.uasset\"));\r\n            decrypter.Encrypt(Path.Combine(\"TestAssets\", \"TestACE7\", \"ex02_IGC_03_Subtitle.uasset\"), Path.Combine(\"TestAssets\", \"TestACE7\", \"ex02_IGC_03_Subtitle.uasset\"));\r\n\r\n            // Verify binary equality\r\n            foreach (var path in Directory.GetFiles(Path.Combine(\"TestAssets\", \"TestACE7\"), \"*.bak\"))\r\n            {\r\n                VerifyBinaryEquality(path, path.Substring(0, path.Length - 4));\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// In this test, we verify that material assets parses correctly and maintains binary equality.\r\n        /// Binary equality is expected.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestMaterials()\r\n        {\r\n            // Verify the files can be parsed\r\n            var tester = new UAsset(Path.Combine(\"TestAssets\", \"TestMaterials\", \"M_COM_DetailMaster_B.uasset\"), EngineVersion.VER_UE4_18);\r\n            Assert.IsTrue(tester.VerifyBinaryEquality());\r\n            AssertAllExportsParsedCorrectly(tester);\r\n\r\n            tester = new UAsset(Path.Combine(\"TestAssets\", \"TestMaterials\", \"as_mt_base.uasset\"), EngineVersion.VER_UE4_20);\r\n            Assert.IsTrue(tester.VerifyBinaryEquality());\r\n            AssertAllExportsParsedCorrectly(tester);\r\n        }\r\n\r\n        /// <summary>\r\n        /// In this test, we are trying to read a source asset.\r\n        /// Binary equality is expected.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestEditorAssets()\r\n        {\r\n            var soundClass = new UAsset(Path.Combine(\"TestAssets\", \"TestEditorAssets\", \"TestSoundClass.uasset\"), EngineVersion.VER_UE4_27);\r\n            Assert.IsTrue(soundClass.VerifyBinaryEquality());\r\n            AssertAllExportsParsedCorrectly(soundClass);\r\n\r\n            var material = new UAsset(Path.Combine(\"TestAssets\", \"TestEditorAssets\", \"TestMaterial.uasset\"), EngineVersion.VER_UE4_27);\r\n            Assert.IsTrue(material.VerifyBinaryEquality());\r\n            AssertAllExportsParsedCorrectly(material);\r\n\r\n            var blueprint = new UAsset(Path.Combine(\"TestAssets\", \"TestEditorAssets\", \"TestActorBP.uasset\"), EngineVersion.VER_UE4_27);\r\n            Assert.IsTrue(blueprint.VerifyBinaryEquality());\r\n            AssertAllExportsParsedCorrectly(blueprint);\r\n        }\r\n      \r\n        /// <summary>\r\n        /// In this test, we test several traditional assets specifically from Unreal Engine 5.3 games.\r\n        /// Binary equality is expected.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestTraditionalUE5_3()\r\n        {\r\n            TestUE5_3Subsection(\"Engine\", EngineVersion.VER_UE5_3, new Usmap(Path.Combine(\"TestAssets\", \"TestUE5_3\", \"Engine\", \"Engine.usmap\")));\r\n            TestUE5_3Subsection(\"RON\", EngineVersion.VER_UE5_3, new Usmap(Path.Combine(\"TestAssets\", \"TestUE5_3\", \"RON\", \"ReadyOrNot.usmap\")));\r\n        }\r\n\r\n        /// <summary>\r\n        /// In this test, we test several traditional assets specifically from Unreal Engine 5.4 games.\r\n        /// Binary equality is expected.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestTraditionalUE5_4()\r\n        {\r\n            TestUE5_4Subsection(\"BlankGame\", EngineVersion.VER_UE5_4, new Usmap(Path.Combine(\"TestAssets\", \"TestUE5_4\", \"BlankGame\", \"BlankGame_Dumper-7.usmap\")));\r\n            TestUE5_4Subsection(\"Bellwright\", EngineVersion.VER_UE5_4, new Usmap(Path.Combine(\"TestAssets\", \"TestUE5_4\", \"Bellwright\", \"Bellwright.usmap\")));\r\n            TestUE5_4Subsection(\"TheForeverWinter\", EngineVersion.VER_UE5_4, new Usmap(Path.Combine(\"TestAssets\", \"TestUE5_4\", \"TheForeverWinter\", \"TheForeverWinter.usmap\")));\r\n            TestUE5_4Subsection(\"Billiards\", EngineVersion.VER_UE5_4, new Usmap(Path.Combine(\"TestAssets\", \"TestUE5_4\", \"Billiards\", \"5.4.3-34507850+++UE5+Release-5.4-DeepSpace7.usmap\")));\r\n            TestUE5_4Subsection(\"JOY\", EngineVersion.VER_UE5_4, new Usmap(Path.Combine(\"TestAssets\", \"TestUE5_4\", \"JOY\", \"5.4.3-34507850+++UE5+Release-5.4-JOY.usmap\")));\r\n        }\r\n\r\n        /// <summary>\r\n        /// In this test, we test several traditional assets specifically from Unreal Engine 5.5 games.\r\n        /// Binary equality is expected.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestTraditionalUE5_5()\r\n        {\r\n            TestUE5_5Subsection(\"BlankGame\", EngineVersion.VER_UE5_5, new Usmap(Path.Combine(\"TestAssets\", \"TestUE5_5\", \"BlankGame\", \"BlankUE5_5.usmap\")));\r\n        }\r\n        \r\n        /// <summary>\r\n        /// In this test, we test several traditional assets specifically from Unreal Engine 5.6 games.\r\n        /// Binary equality is expected.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestTraditionalUE5_6()\r\n        {\r\n            TestUE5_6Subsection(\"BpThirdPerson\", EngineVersion.VER_UE5_6, new Usmap(Path.Combine(\"TestAssets\", \"TestUE5_6\", \"BpThirdPerson\", \"ExplicitEnumValuesExample.usmap\")));\r\n        }\r\n\r\n        /// <summary>\r\n        /// In this test, we test the Clone function, along with indexers for assets and exports.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestClone()\r\n        {\r\n            var mappings = new Usmap(Path.Combine(\"TestAssets\", \"TestUE5_3\", \"RON\", \"ReadyOrNot.usmap\"));\r\n\r\n            // clone everything and check for binary equality\r\n            var blueprint = new UAsset(Path.Combine(\"TestAssets\", \"TestUE5_3\", \"RON\", \"AmmoDataTable.uasset\"), EngineVersion.VER_UE5_3, mappings);\r\n            for (int i = 0; i < blueprint.Exports.Count; i++)\r\n            {\r\n                Export curExp = blueprint.Exports[i];\r\n                if (curExp is NormalExport nExp)\r\n                {\r\n                    for (int j = 0; j < nExp.Data.Count; j++)\r\n                    {\r\n                        nExp.Data[j] = (PropertyData)nExp.Data[j].Clone();\r\n                    }\r\n                }\r\n                if (curExp is DataTableExport dtExp)\r\n                {\r\n                    for (int j = 0; j < dtExp.Table.Data.Count; j++)\r\n                    {\r\n                        dtExp.Table.Data[j] = (StructPropertyData)dtExp.Table.Data[j].Clone();\r\n                    }\r\n                }\r\n            }\r\n            Assert.IsTrue(blueprint.VerifyBinaryEquality());\r\n\r\n            // some basic tests with the indexers\r\n            DataTableExport exp = (DataTableExport)blueprint[\"AmmoDataTable\"];\r\n            StructPropertyData struc = (StructPropertyData)exp[\"556x45JHP\"];\r\n            StructPropertyData nuevo = (StructPropertyData)struc.Clone();\r\n            nuevo[\"Damage\"] = new FloatPropertyData() { Value = 60 };\r\n            exp[\"556x45JHP_MODIFIED\"] = nuevo;\r\n\r\n            // save, read again, and verify\r\n            blueprint.Write(blueprint.FilePath);\r\n\r\n            var blueprint2 = new UAsset(blueprint.FilePath, EngineVersion.VER_UE5_3, mappings);\r\n            Assert.IsTrue(blueprint2.VerifyBinaryEquality());\r\n\r\n            DataTableExport exp2 = (DataTableExport)blueprint[\"AmmoDataTable\"];\r\n            StructPropertyData struc2 = (StructPropertyData)exp[\"556x45JHP\"];\r\n            StructPropertyData struc2_2 = (StructPropertyData)exp[\"556x45JHP_MODIFIED\"];\r\n            Assert.IsTrue(struc2[\"Damage\"] is FloatPropertyData blah2 && blah2.Value == 30);\r\n            Assert.IsTrue(struc2_2[\"Damage\"] is FloatPropertyData blah3 && blah3.Value == 60);\r\n        }\r\n\r\n        /// <summary>\r\n        /// In this test, we save and load a .pak file to verify functionality of the repak interop.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestRepak()\r\n        {\r\n            Console.WriteLine(\"Writing pak\");\r\n            using (FileStream stream = new FileStream(\"output2.pak\", FileMode.Create))\r\n            {\r\n                var builder = new PakBuilder();\r\n                var pak_writer = builder.Writer(stream);\r\n                pak_writer.WriteFile(\"a_file.txt\", Encoding.ASCII.GetBytes(\"some file contents\\n\"));\r\n                pak_writer.WriteFile(\"another_file.txt\", Encoding.ASCII.GetBytes(\"lorem ipsum\\ndolor sit\\n\"));\r\n                pak_writer.WriteFile(\"nested/file.txt\", Encoding.ASCII.GetBytes(\"hello world\\n\"));\r\n                pak_writer.WriteIndex();\r\n            }\r\n            Console.WriteLine(\"Reading pak\");\r\n            using (FileStream stream = new FileStream(\"output2.pak\", FileMode.Open))\r\n            {\r\n                var builder = new PakBuilder();\r\n                var pak_reader = builder.Reader(stream);\r\n                foreach (var file in pak_reader.Files())\r\n                {\r\n                    Console.WriteLine($\"File: {file}\");\r\n                    var bytes = pak_reader.Get(stream, file);\r\n                    Console.WriteLine($\"Contents: {Encoding.ASCII.GetString(bytes)}\");\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// In this test, we parse a .usmap containing an OptionalProperty (as currently produced by Dumper-7) to verify compatibility.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestUsmapWithOptionalProperty()\r\n        {\r\n            var usmap = new Usmap(Path.Combine(\"TestAssets\", \"TestUE5_4\", \"BlankGame\", \"BlankGame_Dumper-7.usmap\"));\r\n            Assert.AreEqual(31948, usmap.NameMap.Count);\r\n            Assert.AreEqual(1565, usmap.EnumMap.Count);\r\n            Assert.AreEqual(7657, usmap.Schemas.Count);\r\n        }\r\n\r\n        /// <summary>\r\n        /// In this test, we parse a .usmap with explicit enum values.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestUsmapWithExplicitEnumValues()\r\n        {\r\n            var usmap = new Usmap(Path.Combine(\"TestAssets\", \"TestUE5_6\", \"BpThirdPerson\", \"ExplicitEnumValuesExample.usmap\"));\r\n            Assert.AreEqual(36767, usmap.NameMap.Count);\r\n            Assert.AreEqual(1739, usmap.EnumMap.Count);\r\n            Assert.AreEqual(9230, usmap.Schemas.Count);\r\n        }\r\n\r\n        /// <summary>\r\n        /// In this test, we do tests for various underlying enum types within a DataTable row to ensure that it parses correctly and maintains binary equality.\r\n        /// </summary>\r\n        [TestMethod]\r\n        public void TestUnderlyingEnumTypes()\r\n        {\r\n            var usmap = new Usmap(Path.Combine(\"TestAssets\", \"TestUE5_1\", \"UnderlyingEnumTypes\", \"UnderlyingEnumTypes.usmap\"));\r\n            var assetPath = Path.Combine(\"TestAssets\", \"TestUE5_1\", \"UnderlyingEnumTypes\", \"NewDataTable.uasset\");\r\n            var tester = new UAsset(assetPath, EngineVersion.VER_UE5_1, usmap);\r\n            Assert.IsTrue(tester.VerifyBinaryEquality());\r\n            AssertAllExportsParsedCorrectly(tester);\r\n            Assert.IsTrue(tester.Exports.Count == 1);\r\n\r\n            var ourDataTableExport = tester.Exports[0] as DataTableExport;\r\n            var ourTable = ourDataTableExport?.Table;\r\n            Assert.IsNotNull(ourTable);\r\n\r\n            // Check out the first entry to make sure it's parsing alright\r\n            StructPropertyData firstEntry = ourTable.Data[1];\r\n            for (int i = 0; i < firstEntry.Value.Count; i++)\r\n            {\r\n                var propData = firstEntry.Value[i];\r\n                if (propData is EnumPropertyData enumProp && enumProp.InnerType?.Value?.Value != \"Int64Property\") enumProp.Value = FName.DefineDummy(tester, \"Two\");\r\n                if (propData is EnumPropertyData enumProp64 && enumProp64.InnerType?.Value?.Value == \"Int64Property\") enumProp64.Value = FName.DefineDummy(tester, \"None\");\r\n            }\r\n\r\n            // Save the modified table\r\n            tester.Write(Path.Combine(\"TestAssets\", \"MODIFIED.uasset\"));\r\n\r\n            // Load the modified table back in and make sure we're good\r\n            var tester2 = new UAsset(Path.Combine(\"TestAssets\", \"MODIFIED.uasset\"), EngineVersion.VER_UE5_1, usmap);\r\n            Assert.IsTrue(tester2.VerifyBinaryEquality());\r\n            AssertAllExportsParsedCorrectly(tester2);\r\n            Assert.IsTrue(tester2.Exports.Count == 1);\r\n\r\n            firstEntry = (tester2.Exports[0] as DataTableExport)?.Table?.Data?[1];\r\n            Assert.IsNotNull(firstEntry);\r\n            Console.WriteLine($\"{\"#\",-2} {\"Name\",-20} {\"Type\",-15} {\"Sub Type\",-15} {\"Value\",-10} Offset\");\r\n            Console.WriteLine(\"-------------------------------------------------------------------------\");\r\n            for (int i = 0; i < firstEntry.Value.Count; i++)\r\n            {\r\n                var propData = firstEntry.Value[i];\r\n                if (propData is EnumPropertyData enumProp) {\r\n                    Console.WriteLine($\"{i}: {propData.Name,-20} {propData.PropertyType,-15} {enumProp.InnerType?.Value?.Value,-15} {propData.RawValue,-10} {propData.Offset}\");\r\n                }\r\n                else\r\n                {\r\n                    Console.WriteLine($\"{i}: {propData.Name,-20} {propData.PropertyType,-15} {\"None\",-15} {propData.RawValue,-10} {propData.Offset}\");\r\n                }\r\n            }\r\n\r\n            // Save and check that it's binary equal to what we originally had\r\n            tester2.Write(tester2.FilePath);\r\n            Assert.IsTrue(File.ReadAllBytes(assetPath).SequenceEqual(File.ReadAllBytes(Path.Combine(\"TestAssets\", \"MODIFIED.uasset\"))));\r\n        }\r\n\r\n        public static MemoryStream PathToStream(string p)\r\n        {\r\n            using (FileStream origStream = File.Open(p, FileMode.Open, new FileInfo(p).IsReadOnly ? FileAccess.Read : FileAccess.ReadWrite))\r\n            {\r\n                MemoryStream completeStream = new MemoryStream();\r\n                origStream.CopyTo(completeStream);\r\n\r\n                try\r\n                {\r\n                    var targetFile = Path.ChangeExtension(p, \"uexp\");\r\n                    if (File.Exists(targetFile))\r\n                    {\r\n                        using (FileStream newStream = File.Open(targetFile, FileMode.Open))\r\n                        {\r\n                            completeStream.Seek(0, SeekOrigin.End);\r\n                            newStream.CopyTo(completeStream);\r\n                        }\r\n                    }\r\n                }\r\n                catch (FileNotFoundException) { }\r\n\r\n                completeStream.Seek(0, SeekOrigin.Begin);\r\n                return completeStream;\r\n            }\r\n        }\r\n\r\n#if DEBUGTRACING\r\n        [TestMethod]\r\n        public void TestTracing()\r\n        {\r\n            Console.WriteLine(\"asdf\");\r\n\r\n            var stream = new UAssetAPI.Trace.TraceStream(PathToStream(Path.Combine(\"TestAssets\", \"TestMaterials\", \"M_COM_DetailMaster_B.uasset\")));\r\n\r\n            // Verify the files can be parsed\r\n\r\n            Trace.LoggingAspect.Start(stream);\r\n            var tester = new UAsset(new AssetBinaryReader(stream), EngineVersion.VER_UE4_18);\r\n            Trace.LoggingAspect.Stop();\r\n\r\n            //Assert.IsTrue(tester.VerifyBinaryEquality());\r\n            //CheckAllExportsParsedCorrectly(tester);\r\n        }\r\n#endif\r\n\r\n        [AssemblyCleanup()]\r\n        public static void AssemblyCleanup()\r\n        {\r\n            foreach (var path in Directory.GetDirectories(\".\"))\r\n            {\r\n                if (Path.GetFileName(path).Length < 4 || Path.GetFileName(path).Substring(0, 4).ToLowerInvariant() != \"test\") continue;\r\n                try\r\n                {\r\n                    Directory.Delete(path, true);\r\n                }\r\n                catch { }\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI.Tests/CoolPropertyData.cs",
    "content": "﻿using System;\r\nusing System.IO;\r\nusing UAssetAPI.UnrealTypes;\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.PropertyTypes.Objects\r\n{\r\n    /// <summary>\r\n    /// Describes something very cool!\r\n    /// </summary>\r\n    public class CoolPropertyData : PropertyData<int>\r\n    {\r\n        public CoolPropertyData(FName name) : base(name)\r\n        {\r\n\r\n        }\r\n\r\n        public CoolPropertyData()\r\n        {\r\n\r\n        }\r\n\r\n        private static readonly FString CurrentPropertyType = new FString(\"CoolProperty\");\r\n        public override FString PropertyType { get { return CurrentPropertyType; } }\r\n\r\n        public override void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2 = 0, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n        {\r\n            if (includeHeader)\r\n            {\r\n                this.ReadEndPropertyTag(reader);\r\n            }\r\n            Value = (int)reader.ReadByte();\r\n        }\r\n\r\n        public override int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext = PropertySerializationContext.Normal)\r\n        {\r\n            if (includeHeader)\r\n            {\r\n                this.WriteEndPropertyTag(writer);\r\n            }\r\n\r\n            writer.Write((byte)Value);\r\n            return sizeof(byte);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return Convert.ToString(Value);\r\n        }\r\n\r\n        public override void FromString(string[] d, UAsset asset)\r\n        {\r\n            if (int.TryParse(d[0], out int x)) Value = x;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "UAssetAPI.Tests/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.InteropServices;\r\n\r\n[assembly: ComVisible(false)]\r\n\r\n[assembly: Guid(\"cb796120-5ef8-4e9d-bcdb-d2f60a4efc69\")]\r\n"
  },
  {
    "path": "UAssetAPI.Tests/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.42000\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\nusing UAssetAPI.ExportTypes;\r\n\r\nnamespace UAssetAPI.Tests.Properties\r\n{\r\n\r\n\r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    internal class Resources {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal Resources() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"UAssetAPI.Tests.Properties.Resources\", typeof(Resources).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "UAssetAPI.Tests/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n</root>"
  },
  {
    "path": "UAssetAPI.Tests/TestAssets/TestACE7/ex02_IGC_03_Subtitle.uexp",
    "content": "<|7df\u0013\n!x%$\u0016V9$ij\u0005C]eXM:WLcY\u0001="
  },
  {
    "path": "UAssetAPI.Tests/UAssetAPI.Tests.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\r\n  <PropertyGroup>\r\n    <ProjectGuid>{CB796120-5EF8-4E9D-BCDB-D2F60A4EFC69}</ProjectGuid>\r\n    <TargetFramework>net8.0</TargetFramework>\r\n    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\r\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\r\n    <ReferencePath>$(ProgramFiles)\\Common Files\\microsoft shared\\VSTT\\$(VisualStudioVersion)\\UITestExtensionPackages</ReferencePath>\r\n    <IsCodedUITest>False</IsCodedUITest>\r\n    <TestProjectType>UnitTest</TestProjectType>\r\n    <AssemblyTitle>UAssetAPI.Tests</AssemblyTitle>\r\n    <Product>UAssetAPI.Tests</Product>\r\n    <Copyright>Copyright © Atenfyr 2024</Copyright>\r\n    <OutputPath>bin\\$(Configuration)\\</OutputPath>\r\n    <Configurations>Debug;Release;DebugVerbose;DebugTracing</Configurations>\r\n    <Platforms>AnyCPU;x86</Platforms>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugType>full</DebugType>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x86'\">\r\n    <DebugType>full</DebugType>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugVerbose|AnyCPU'\">\r\n    <DebugType>full</DebugType>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugVerbose|x86'\">\r\n    <DebugType>full</DebugType>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugTracing|AnyCPU'\">\r\n    <DebugType>full</DebugType>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugTracing|x86'\">\r\n    <DebugType>full</DebugType>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x86'\">\r\n    <DebugType>pdbonly</DebugType>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets\" Condition=\"Exists('$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets')\" />\r\n  <ItemGroup>\r\n    <Compile Update=\"Properties\\Resources.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Resources.resx</DependentUpon>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"MSTest.TestAdapter\" Version=\"2.1.2\" />\r\n    <PackageReference Include=\"MSTest.TestFramework\" Version=\"2.1.2\" />\r\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" Version=\"17.6.0\" />\r\n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"13.0.3\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\UAssetAPI\\UAssetAPI.csproj\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Update=\"TestAssets\\**\\*.*\">\r\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r\n    </None>\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "UAssetAPI.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.4.33103.184\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"UAssetAPI\", \"UAssetAPI\\UAssetAPI.csproj\", \"{178417EC-1177-413E-BE85-C83AECD64279}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"UAssetAPI.Tests\", \"UAssetAPI.Tests\\UAssetAPI.Tests.csproj\", \"{CB796120-5EF8-4E9D-BCDB-D2F60A4EFC69}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"UAssetAPI.Benchmark\", \"UAssetAPI.Benchmark\\UAssetAPI.Benchmark.csproj\", \"{A74E7E85-1797-477C-AEC1-583AE7D109D0}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebugTracing|Any CPU = DebugTracing|Any CPU\r\n\t\tDebugTracing|x64 = DebugTracing|x64\r\n\t\tDebugVerbose|Any CPU = DebugVerbose|Any CPU\r\n\t\tDebugVerbose|x64 = DebugVerbose|x64\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{178417EC-1177-413E-BE85-C83AECD64279}.DebugTracing|Any CPU.ActiveCfg = DebugTracing|Any CPU\r\n\t\t{178417EC-1177-413E-BE85-C83AECD64279}.DebugTracing|Any CPU.Build.0 = DebugTracing|Any CPU\r\n\t\t{178417EC-1177-413E-BE85-C83AECD64279}.DebugTracing|x64.ActiveCfg = DebugTracing|Any CPU\r\n\t\t{178417EC-1177-413E-BE85-C83AECD64279}.DebugTracing|x64.Build.0 = DebugTracing|Any CPU\r\n\t\t{178417EC-1177-413E-BE85-C83AECD64279}.DebugVerbose|Any CPU.ActiveCfg = DebugVerbose|Any CPU\r\n\t\t{178417EC-1177-413E-BE85-C83AECD64279}.DebugVerbose|Any CPU.Build.0 = DebugVerbose|Any CPU\r\n\t\t{178417EC-1177-413E-BE85-C83AECD64279}.DebugVerbose|x64.ActiveCfg = DebugVerbose|Any CPU\r\n\t\t{178417EC-1177-413E-BE85-C83AECD64279}.DebugVerbose|x64.Build.0 = DebugVerbose|Any CPU\r\n\t\t{178417EC-1177-413E-BE85-C83AECD64279}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{178417EC-1177-413E-BE85-C83AECD64279}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{178417EC-1177-413E-BE85-C83AECD64279}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{178417EC-1177-413E-BE85-C83AECD64279}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{178417EC-1177-413E-BE85-C83AECD64279}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{178417EC-1177-413E-BE85-C83AECD64279}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{178417EC-1177-413E-BE85-C83AECD64279}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{178417EC-1177-413E-BE85-C83AECD64279}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{CB796120-5EF8-4E9D-BCDB-D2F60A4EFC69}.DebugTracing|Any CPU.ActiveCfg = DebugTracing|Any CPU\r\n\t\t{CB796120-5EF8-4E9D-BCDB-D2F60A4EFC69}.DebugTracing|Any CPU.Build.0 = DebugTracing|Any CPU\r\n\t\t{CB796120-5EF8-4E9D-BCDB-D2F60A4EFC69}.DebugTracing|x64.ActiveCfg = DebugTracing|Any CPU\r\n\t\t{CB796120-5EF8-4E9D-BCDB-D2F60A4EFC69}.DebugTracing|x64.Build.0 = DebugTracing|Any CPU\r\n\t\t{CB796120-5EF8-4E9D-BCDB-D2F60A4EFC69}.DebugVerbose|Any CPU.ActiveCfg = DebugVerbose|Any CPU\r\n\t\t{CB796120-5EF8-4E9D-BCDB-D2F60A4EFC69}.DebugVerbose|Any CPU.Build.0 = DebugVerbose|Any CPU\r\n\t\t{CB796120-5EF8-4E9D-BCDB-D2F60A4EFC69}.DebugVerbose|x64.ActiveCfg = DebugVerbose|Any CPU\r\n\t\t{CB796120-5EF8-4E9D-BCDB-D2F60A4EFC69}.DebugVerbose|x64.Build.0 = DebugVerbose|Any CPU\r\n\t\t{CB796120-5EF8-4E9D-BCDB-D2F60A4EFC69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{CB796120-5EF8-4E9D-BCDB-D2F60A4EFC69}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{CB796120-5EF8-4E9D-BCDB-D2F60A4EFC69}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{CB796120-5EF8-4E9D-BCDB-D2F60A4EFC69}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{CB796120-5EF8-4E9D-BCDB-D2F60A4EFC69}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{CB796120-5EF8-4E9D-BCDB-D2F60A4EFC69}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{CB796120-5EF8-4E9D-BCDB-D2F60A4EFC69}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{CB796120-5EF8-4E9D-BCDB-D2F60A4EFC69}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{A74E7E85-1797-477C-AEC1-583AE7D109D0}.DebugTracing|Any CPU.ActiveCfg = DebugTracing|Any CPU\r\n\t\t{A74E7E85-1797-477C-AEC1-583AE7D109D0}.DebugTracing|Any CPU.Build.0 = DebugTracing|Any CPU\r\n\t\t{A74E7E85-1797-477C-AEC1-583AE7D109D0}.DebugTracing|x64.ActiveCfg = DebugTracing|Any CPU\r\n\t\t{A74E7E85-1797-477C-AEC1-583AE7D109D0}.DebugTracing|x64.Build.0 = DebugTracing|Any CPU\r\n\t\t{A74E7E85-1797-477C-AEC1-583AE7D109D0}.DebugVerbose|Any CPU.ActiveCfg = DebugVerbose|Any CPU\r\n\t\t{A74E7E85-1797-477C-AEC1-583AE7D109D0}.DebugVerbose|Any CPU.Build.0 = DebugVerbose|Any CPU\r\n\t\t{A74E7E85-1797-477C-AEC1-583AE7D109D0}.DebugVerbose|x64.ActiveCfg = DebugVerbose|Any CPU\r\n\t\t{A74E7E85-1797-477C-AEC1-583AE7D109D0}.DebugVerbose|x64.Build.0 = DebugVerbose|Any CPU\r\n\t\t{A74E7E85-1797-477C-AEC1-583AE7D109D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{A74E7E85-1797-477C-AEC1-583AE7D109D0}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{A74E7E85-1797-477C-AEC1-583AE7D109D0}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{A74E7E85-1797-477C-AEC1-583AE7D109D0}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{A74E7E85-1797-477C-AEC1-583AE7D109D0}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{A74E7E85-1797-477C-AEC1-583AE7D109D0}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{A74E7E85-1797-477C-AEC1-583AE7D109D0}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{A74E7E85-1797-477C-AEC1-583AE7D109D0}.Release|x64.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {7A4553E8-6A4B-46A5-B429-7F9128492CAD}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "docs/book.toml",
    "content": "[book]\nauthors = [\"atenfyr\"]\nlanguage = \"en\"\nmultilingual = false\nsrc = \"src\"\ntitle = \"UAssetAPI Documentation\"\n\n[output.html]\nadditional-css = [\"css/custom.css\"]\n\n[output.html.fold]\nenable = true\nlevel = 0"
  },
  {
    "path": "docs/correct_pages.py",
    "content": "import glob, re\r\n\r\nSUBSTRINGS_TO_CHANGE = {\r\n    re.escape(\"\"\"### **Item**\r\n\r\n```csharp\r\npublic PropertyData Item { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\n\r\n\"\"\"): \"\",\r\n\r\n    re.escape(\"\"\"### **Item**\r\n\r\n```csharp\r\npublic Export Item { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Export](./uassetapi.exporttypes.export.md)<br>\r\n\r\n\"\"\"): \"\",\r\n\r\n    r\", [\\S]+?, Version=[\\d\\.]+, Culture=.+?, PublicKeyToken=.+?\\]\": \"]\",\r\n\r\n\r\n}\r\n\r\nfor file in glob.glob(\"src/api/*.md\"):\r\n    dat = \"\"\r\n    with open(file, \"r\") as f:\r\n        dat = f.read()\r\n    for entry in SUBSTRINGS_TO_CHANGE:\r\n        dat = re.sub(entry, SUBSTRINGS_TO_CHANGE[entry], dat)\r\n    with open(file, \"w\") as f:\r\n        f.write(dat)"
  },
  {
    "path": "docs/correct_summary.py",
    "content": "dat = \"\"\r\nwith open(\"index.md\", \"r\") as f:\r\n    dat = f.read()\r\n\r\nres = dat.replace(\"\\n\\n\", \"\\n\").split(\"\\n\")[1:]\r\nfor i in range(len(res)):\r\n    if len(res[i]) < 2: continue\r\n    if res[i][:2] == \"##\":\r\n        res[i] = \"  - [\" + res[i][3:] + \"]()\"\r\n    else:\r\n        res[i] = \"    - \" + res[i].replace(\"./\", \"api/\")\r\n    res[i] += \"\\n\"\r\n\r\nres_header = \"\"\r\nwith open(\"src/SUMMARY_header.md\", \"r\") as f:\r\n    res_header = f.read()\r\nwith open(\"src/SUMMARY.md\", \"w\") as f:\r\n    f.write(res_header)\r\n    f.write(\"\\n# Full Documentation\\n- [Class Documentation]()\\n\")\r\n    f.writelines(res)\r\n"
  },
  {
    "path": "docs/css/custom.css",
    "content": ":root {\r\n    --sidebar-width: 375px;\r\n}"
  },
  {
    "path": "docs/generate_docs.bat",
    "content": "@echo off\r\nset \"startdir=%cd%\"\r\ncd ..\\UAssetAPI\\bin\\Debug\\net8.0\r\ncopy /Y \"%UserProfile%\\.nuget\\packages\\newtonsoft.json\\13.0.3\\lib\\netstandard2.0\" .\r\nrd /S /Q \"%startdir%\\src\\api\"\r\n\"%startdir%\\XMLDoc2Markdown\\XMLDoc2Markdown.exe\" UAssetAPI.dll \"%startdir%\\src\\api\"\r\ncd %startdir%\r\nmove \".\\src\\api\\index.md\" .\r\npython correct_summary.py\r\npython correct_pages.py\r\ndel index.md\r\n"
  },
  {
    "path": "docs/generate_docs.sh",
    "content": "#!/bin/bash\n\n# cd to script dir https://stackoverflow.com/a/17744637\ncd \"$(cd -P -- \"$(dirname -- \"$0\")\" && pwd -P)\"\n\nstartdir=\"$(pwd)\"\n(\n  cd ../UAssetAPI/bin/Debug/net8.0\n  cp -r \"$HOME/.nuget/packages/newtonsoft.json/13.0.3/lib/netstandard2.0/\"* .\n  rm -r \"$startdir/src/api\"\n  \"$startdir/XMLDoc2Markdown/XMLDoc2Markdown\" UAssetAPI.dll \"$startdir/src/api\"\n)\nmv src/api/index.md .\npython correct_summary.py\npython correct_pages.py\nrm index.md\n"
  },
  {
    "path": "docs/src/README.md",
    "content": "# UAssetAPI Documentation\n\nUAssetAPI is a .NET library for reading and writing Unreal Engine game assets.\n\n## Features\n- Low-level read/write capability for a wide variety of cooked and uncooked .uasset files from ~4.13 to 5.3\n- Support for more than 100 property types and 12 export types\n- Support for JSON export and import to a proprietary format that maintains binary equality\n- Support for reading and writing raw Kismet (blueprint) bytecode\n- Reading capability for the unofficial .usmap format to parse ambiguous and unversioned properties\n- Robust fail-safes for many properties and exports that fail serialization\n- Automatic reflection for new property types in other loaded assemblies\n\n## Usage\nTo get started using UAssetAPI, first build the API using the [Build Instructions guide](guide/build.md) and learn how to perform basic operations on your cooked .uasset files using the [Basic Usage guide](guide/basic.md).\n\nUAssetGUI, a graphical wrapper around UAssetAPI which allows you to directly view and modify game assets by hand, is also available and can be downloaded for free on GitHub at [https://github.com/atenfyr/UAssetGUI/releases](https://github.com/atenfyr/UAssetGUI/releases).\n\n## Support\nThe source code of UAssetAPI is publicly available on GitHub at [https://github.com/atenfyr/UAssetAPI](https://github.com/atenfyr/UAssetAPI), and all contributions are greatly appreciated.\n\nAny bugs or feature requests that you may have can be submitted on the GitHub page as an issue. You can also direct any questions you may have to the folks on the Unreal Engine Modding Discord server, which you can join with this invite link: [https://discord.gg/zVvsE9mEEa](https://discord.gg/zVvsE9mEEa)."
  },
  {
    "path": "docs/src/SUMMARY.md",
    "content": "# Summary\r\n[Introduction](README.md)\r\n\r\n# User Guide\r\n- [Build Instructions](guide/build.md)\r\n- [Basic Usage](guide/basic.md)\r\n- [More Examples](guide/extras.md)\r\n\r\n# Full Documentation\r\n- [Class Documentation]()\r\n  - [UAssetAPI]()\r\n    - [AC7Decrypt](api/uassetapi.ac7decrypt.md)\r\n    - [AC7XorKey](api/uassetapi.ac7xorkey.md)\r\n    - [AssetBinaryReader](api/uassetapi.assetbinaryreader.md)\r\n    - [AssetBinaryWriter](api/uassetapi.assetbinarywriter.md)\r\n    - [CRCGenerator](api/uassetapi.crcgenerator.md)\r\n    - [CustomSerializationFlags](api/uassetapi.customserializationflags.md)\r\n    - [CustomVersion](api/uassetapi.customversion.md)\r\n    - [FEngineVersion](api/uassetapi.fengineversion.md)\r\n    - [FGenerationInfo](api/uassetapi.fgenerationinfo.md)\r\n    - [Import](api/uassetapi.import.md)\r\n    - [INameMap](api/uassetapi.inamemap.md)\r\n    - [InvalidMappingsException](api/uassetapi.invalidmappingsexception.md)\r\n    - [MainSerializer](api/uassetapi.mainserializer.md)\r\n    - [NameMapOutOfRangeException](api/uassetapi.namemapoutofrangeexception.md)\r\n    - [PakBuilder](api/uassetapi.pakbuilder.md)\r\n    - [PakCompression](api/uassetapi.pakcompression.md)\r\n    - [PakReader](api/uassetapi.pakreader.md)\r\n    - [PakVersion](api/uassetapi.pakversion.md)\r\n    - [PakWriter](api/uassetapi.pakwriter.md)\r\n    - [RePakInterop](api/uassetapi.repakinterop.md)\r\n    - [StreamCallbacks](api/uassetapi.streamcallbacks.md)\r\n    - [UAPUtils](api/uassetapi.uaputils.md)\r\n    - [UAsset](api/uassetapi.uasset.md)\r\n    - [UnknownEngineVersionException](api/uassetapi.unknownengineversionexception.md)\r\n    - [UnrealBinaryReader](api/uassetapi.unrealbinaryreader.md)\r\n    - [UnrealBinaryWriter](api/uassetapi.unrealbinarywriter.md)\r\n    - [UsmapBinaryReader](api/uassetapi.usmapbinaryreader.md)\r\n  - [UAssetAPI.CustomVersions]()\r\n    - [FAnimPhysObjectVersion](api/uassetapi.customversions.fanimphysobjectversion.md)\r\n    - [FAssetRegistryVersion](api/uassetapi.customversions.fassetregistryversion.md)\r\n    - [FCoreObjectVersion](api/uassetapi.customversions.fcoreobjectversion.md)\r\n    - [FEditorObjectVersion](api/uassetapi.customversions.feditorobjectversion.md)\r\n    - [FFortniteMainBranchObjectVersion](api/uassetapi.customversions.ffortnitemainbranchobjectversion.md)\r\n    - [FFortniteReleaseBranchCustomObjectVersion](api/uassetapi.customversions.ffortnitereleasebranchcustomobjectversion.md)\r\n    - [FFrameworkObjectVersion](api/uassetapi.customversions.fframeworkobjectversion.md)\r\n    - [FNiagaraCustomVersion](api/uassetapi.customversions.fniagaracustomversion.md)\r\n    - [FNiagaraObjectVersion](api/uassetapi.customversions.fniagaraobjectversion.md)\r\n    - [FReleaseObjectVersion](api/uassetapi.customversions.freleaseobjectversion.md)\r\n    - [FSequencerObjectVersion](api/uassetapi.customversions.fsequencerobjectversion.md)\r\n    - [FUE5ReleaseStreamObjectVersion](api/uassetapi.customversions.fue5releasestreamobjectversion.md)\r\n    - [IntroducedAttribute](api/uassetapi.customversions.introducedattribute.md)\r\n  - [UAssetAPI.ExportTypes]()\r\n    - [ClassExport](api/uassetapi.exporttypes.classexport.md)\r\n    - [DataTableExport](api/uassetapi.exporttypes.datatableexport.md)\r\n    - [EClassSerializationControlExtension](api/uassetapi.exporttypes.eclassserializationcontrolextension.md)\r\n    - [ECppForm](api/uassetapi.exporttypes.ecppform.md)\r\n    - [EExportFilterFlags](api/uassetapi.exporttypes.eexportfilterflags.md)\r\n    - [EnumExport](api/uassetapi.exporttypes.enumexport.md)\r\n    - [Export](api/uassetapi.exporttypes.export.md)\r\n    - [FieldExport](api/uassetapi.exporttypes.fieldexport.md)\r\n    - [FStringTable](api/uassetapi.exporttypes.fstringtable.md)\r\n    - [FunctionExport](api/uassetapi.exporttypes.functionexport.md)\r\n    - [FURL](api/uassetapi.exporttypes.furl.md)\r\n    - [LevelExport](api/uassetapi.exporttypes.levelexport.md)\r\n    - [MetaDataExport](api/uassetapi.exporttypes.metadataexport.md)\r\n    - [NormalExport](api/uassetapi.exporttypes.normalexport.md)\r\n    - [ObjectMetaDataEntry](api/uassetapi.exporttypes.objectmetadataentry.md)\r\n    - [PropertyExport](api/uassetapi.exporttypes.propertyexport.md)\r\n    - [RawExport](api/uassetapi.exporttypes.rawexport.md)\r\n    - [SerializedInterfaceReference](api/uassetapi.exporttypes.serializedinterfacereference.md)\r\n    - [StringTableExport](api/uassetapi.exporttypes.stringtableexport.md)\r\n    - [StructExport](api/uassetapi.exporttypes.structexport.md)\r\n    - [UDataTable](api/uassetapi.exporttypes.udatatable.md)\r\n    - [UEnum](api/uassetapi.exporttypes.uenum.md)\r\n    - [UserDefinedStructExport](api/uassetapi.exporttypes.userdefinedstructexport.md)\r\n  - [UAssetAPI.FieldTypes]()\r\n    - [EArrayDim](api/uassetapi.fieldtypes.earraydim.md)\r\n    - [ELifetimeCondition](api/uassetapi.fieldtypes.elifetimecondition.md)\r\n    - [FArrayProperty](api/uassetapi.fieldtypes.farrayproperty.md)\r\n    - [FBoolProperty](api/uassetapi.fieldtypes.fboolproperty.md)\r\n    - [FByteProperty](api/uassetapi.fieldtypes.fbyteproperty.md)\r\n    - [FClassProperty](api/uassetapi.fieldtypes.fclassproperty.md)\r\n    - [FDelegateProperty](api/uassetapi.fieldtypes.fdelegateproperty.md)\r\n    - [FEnumProperty](api/uassetapi.fieldtypes.fenumproperty.md)\r\n    - [FField](api/uassetapi.fieldtypes.ffield.md)\r\n    - [FGenericProperty](api/uassetapi.fieldtypes.fgenericproperty.md)\r\n    - [FInterfaceProperty](api/uassetapi.fieldtypes.finterfaceproperty.md)\r\n    - [FMapProperty](api/uassetapi.fieldtypes.fmapproperty.md)\r\n    - [FMulticastDelegateProperty](api/uassetapi.fieldtypes.fmulticastdelegateproperty.md)\r\n    - [FMulticastInlineDelegateProperty](api/uassetapi.fieldtypes.fmulticastinlinedelegateproperty.md)\r\n    - [FNumericProperty](api/uassetapi.fieldtypes.fnumericproperty.md)\r\n    - [FObjectProperty](api/uassetapi.fieldtypes.fobjectproperty.md)\r\n    - [FOptionalProperty](api/uassetapi.fieldtypes.foptionalproperty.md)\r\n    - [FProperty](api/uassetapi.fieldtypes.fproperty.md)\r\n    - [FSetProperty](api/uassetapi.fieldtypes.fsetproperty.md)\r\n    - [FSoftClassProperty](api/uassetapi.fieldtypes.fsoftclassproperty.md)\r\n    - [FSoftObjectProperty](api/uassetapi.fieldtypes.fsoftobjectproperty.md)\r\n    - [FStructProperty](api/uassetapi.fieldtypes.fstructproperty.md)\r\n    - [FWeakObjectProperty](api/uassetapi.fieldtypes.fweakobjectproperty.md)\r\n    - [UArrayProperty](api/uassetapi.fieldtypes.uarrayproperty.md)\r\n    - [UAssetClassProperty](api/uassetapi.fieldtypes.uassetclassproperty.md)\r\n    - [UAssetObjectProperty](api/uassetapi.fieldtypes.uassetobjectproperty.md)\r\n    - [UBoolProperty](api/uassetapi.fieldtypes.uboolproperty.md)\r\n    - [UByteProperty](api/uassetapi.fieldtypes.ubyteproperty.md)\r\n    - [UClassProperty](api/uassetapi.fieldtypes.uclassproperty.md)\r\n    - [UDelegateProperty](api/uassetapi.fieldtypes.udelegateproperty.md)\r\n    - [UDoubleProperty](api/uassetapi.fieldtypes.udoubleproperty.md)\r\n    - [UEnumProperty](api/uassetapi.fieldtypes.uenumproperty.md)\r\n    - [UField](api/uassetapi.fieldtypes.ufield.md)\r\n    - [UFloatProperty](api/uassetapi.fieldtypes.ufloatproperty.md)\r\n    - [UGenericProperty](api/uassetapi.fieldtypes.ugenericproperty.md)\r\n    - [UInt16Property](api/uassetapi.fieldtypes.uint16property.md)\r\n    - [UInt64Property](api/uassetapi.fieldtypes.uint64property.md)\r\n    - [UInt8Property](api/uassetapi.fieldtypes.uint8property.md)\r\n    - [UInterfaceProperty](api/uassetapi.fieldtypes.uinterfaceproperty.md)\r\n    - [UIntProperty](api/uassetapi.fieldtypes.uintproperty.md)\r\n    - [ULazyObjectProperty](api/uassetapi.fieldtypes.ulazyobjectproperty.md)\r\n    - [UMapProperty](api/uassetapi.fieldtypes.umapproperty.md)\r\n    - [UMulticastDelegateProperty](api/uassetapi.fieldtypes.umulticastdelegateproperty.md)\r\n    - [UMulticastInlineDelegateProperty](api/uassetapi.fieldtypes.umulticastinlinedelegateproperty.md)\r\n    - [UMulticastSparseDelegateProperty](api/uassetapi.fieldtypes.umulticastsparsedelegateproperty.md)\r\n    - [UNameProperty](api/uassetapi.fieldtypes.unameproperty.md)\r\n    - [UNumericProperty](api/uassetapi.fieldtypes.unumericproperty.md)\r\n    - [UObjectProperty](api/uassetapi.fieldtypes.uobjectproperty.md)\r\n    - [UProperty](api/uassetapi.fieldtypes.uproperty.md)\r\n    - [USetProperty](api/uassetapi.fieldtypes.usetproperty.md)\r\n    - [USoftClassProperty](api/uassetapi.fieldtypes.usoftclassproperty.md)\r\n    - [USoftObjectProperty](api/uassetapi.fieldtypes.usoftobjectproperty.md)\r\n    - [UStrProperty](api/uassetapi.fieldtypes.ustrproperty.md)\r\n    - [UStructProperty](api/uassetapi.fieldtypes.ustructproperty.md)\r\n    - [UTextProperty](api/uassetapi.fieldtypes.utextproperty.md)\r\n    - [UUInt16Property](api/uassetapi.fieldtypes.uuint16property.md)\r\n    - [UUInt32Property](api/uassetapi.fieldtypes.uuint32property.md)\r\n    - [UUInt64Property](api/uassetapi.fieldtypes.uuint64property.md)\r\n    - [UWeakObjectProperty](api/uassetapi.fieldtypes.uweakobjectproperty.md)\r\n  - [UAssetAPI.JSON]()\r\n    - [ByteArrayJsonConverter](api/uassetapi.json.bytearrayjsonconverter.md)\r\n    - [FNameJsonConverter](api/uassetapi.json.fnamejsonconverter.md)\r\n    - [FPackageIndexJsonConverter](api/uassetapi.json.fpackageindexjsonconverter.md)\r\n    - [FSignedZeroJsonConverter](api/uassetapi.json.fsignedzerojsonconverter.md)\r\n    - [FStringJsonConverter](api/uassetapi.json.fstringjsonconverter.md)\r\n    - [FStringTableJsonConverter](api/uassetapi.json.fstringtablejsonconverter.md)\r\n    - [GuidJsonConverter](api/uassetapi.json.guidjsonconverter.md)\r\n    - [TMapJsonConverter&lt;TKey, TValue&gt;](api/uassetapi.json.tmapjsonconverter-2.md)\r\n    - [UAssetContractResolver](api/uassetapi.json.uassetcontractresolver.md)\r\n  - [UAssetAPI.Kismet]()\r\n    - [KismetSerializer](api/uassetapi.kismet.kismetserializer.md)\r\n  - [UAssetAPI.Kismet.Bytecode]()\r\n    - [EBlueprintTextLiteralType](api/uassetapi.kismet.bytecode.eblueprinttextliteraltype.md)\r\n    - [ECastToken](api/uassetapi.kismet.bytecode.ecasttoken.md)\r\n    - [EExprToken](api/uassetapi.kismet.bytecode.eexprtoken.md)\r\n    - [EScriptInstrumentationType](api/uassetapi.kismet.bytecode.escriptinstrumentationtype.md)\r\n    - [ExpressionSerializer](api/uassetapi.kismet.bytecode.expressionserializer.md)\r\n    - [FScriptText](api/uassetapi.kismet.bytecode.fscripttext.md)\r\n    - [KismetExpression](api/uassetapi.kismet.bytecode.kismetexpression.md)\r\n    - [KismetExpression&lt;T&gt;](api/uassetapi.kismet.bytecode.kismetexpression-1.md)\r\n    - [KismetPropertyPointer](api/uassetapi.kismet.bytecode.kismetpropertypointer.md)\r\n  - [UAssetAPI.Kismet.Bytecode.Expressions]()\r\n    - [EX_AddMulticastDelegate](api/uassetapi.kismet.bytecode.expressions.ex_addmulticastdelegate.md)\r\n    - [EX_ArrayConst](api/uassetapi.kismet.bytecode.expressions.ex_arrayconst.md)\r\n    - [EX_ArrayGetByRef](api/uassetapi.kismet.bytecode.expressions.ex_arraygetbyref.md)\r\n    - [EX_Assert](api/uassetapi.kismet.bytecode.expressions.ex_assert.md)\r\n    - [EX_BindDelegate](api/uassetapi.kismet.bytecode.expressions.ex_binddelegate.md)\r\n    - [EX_BitFieldConst](api/uassetapi.kismet.bytecode.expressions.ex_bitfieldconst.md)\r\n    - [EX_Breakpoint](api/uassetapi.kismet.bytecode.expressions.ex_breakpoint.md)\r\n    - [EX_ByteConst](api/uassetapi.kismet.bytecode.expressions.ex_byteconst.md)\r\n    - [EX_CallMath](api/uassetapi.kismet.bytecode.expressions.ex_callmath.md)\r\n    - [EX_CallMulticastDelegate](api/uassetapi.kismet.bytecode.expressions.ex_callmulticastdelegate.md)\r\n    - [EX_CastBase](api/uassetapi.kismet.bytecode.expressions.ex_castbase.md)\r\n    - [EX_ClassContext](api/uassetapi.kismet.bytecode.expressions.ex_classcontext.md)\r\n    - [EX_ClassSparseDataVariable](api/uassetapi.kismet.bytecode.expressions.ex_classsparsedatavariable.md)\r\n    - [EX_ClearMulticastDelegate](api/uassetapi.kismet.bytecode.expressions.ex_clearmulticastdelegate.md)\r\n    - [EX_ComputedJump](api/uassetapi.kismet.bytecode.expressions.ex_computedjump.md)\r\n    - [EX_Context](api/uassetapi.kismet.bytecode.expressions.ex_context.md)\r\n    - [EX_Context_FailSilent](api/uassetapi.kismet.bytecode.expressions.ex_context_failsilent.md)\r\n    - [EX_CrossInterfaceCast](api/uassetapi.kismet.bytecode.expressions.ex_crossinterfacecast.md)\r\n    - [EX_DefaultVariable](api/uassetapi.kismet.bytecode.expressions.ex_defaultvariable.md)\r\n    - [EX_DeprecatedOp4A](api/uassetapi.kismet.bytecode.expressions.ex_deprecatedop4a.md)\r\n    - [EX_DoubleConst](api/uassetapi.kismet.bytecode.expressions.ex_doubleconst.md)\r\n    - [EX_DynamicCast](api/uassetapi.kismet.bytecode.expressions.ex_dynamiccast.md)\r\n    - [EX_EndArray](api/uassetapi.kismet.bytecode.expressions.ex_endarray.md)\r\n    - [EX_EndArrayConst](api/uassetapi.kismet.bytecode.expressions.ex_endarrayconst.md)\r\n    - [EX_EndFunctionParms](api/uassetapi.kismet.bytecode.expressions.ex_endfunctionparms.md)\r\n    - [EX_EndMap](api/uassetapi.kismet.bytecode.expressions.ex_endmap.md)\r\n    - [EX_EndMapConst](api/uassetapi.kismet.bytecode.expressions.ex_endmapconst.md)\r\n    - [EX_EndOfScript](api/uassetapi.kismet.bytecode.expressions.ex_endofscript.md)\r\n    - [EX_EndParmValue](api/uassetapi.kismet.bytecode.expressions.ex_endparmvalue.md)\r\n    - [EX_EndSet](api/uassetapi.kismet.bytecode.expressions.ex_endset.md)\r\n    - [EX_EndSetConst](api/uassetapi.kismet.bytecode.expressions.ex_endsetconst.md)\r\n    - [EX_EndStructConst](api/uassetapi.kismet.bytecode.expressions.ex_endstructconst.md)\r\n    - [EX_False](api/uassetapi.kismet.bytecode.expressions.ex_false.md)\r\n    - [EX_FieldPathConst](api/uassetapi.kismet.bytecode.expressions.ex_fieldpathconst.md)\r\n    - [EX_FinalFunction](api/uassetapi.kismet.bytecode.expressions.ex_finalfunction.md)\r\n    - [EX_FloatConst](api/uassetapi.kismet.bytecode.expressions.ex_floatconst.md)\r\n    - [EX_InstanceDelegate](api/uassetapi.kismet.bytecode.expressions.ex_instancedelegate.md)\r\n    - [EX_InstanceVariable](api/uassetapi.kismet.bytecode.expressions.ex_instancevariable.md)\r\n    - [EX_InstrumentationEvent](api/uassetapi.kismet.bytecode.expressions.ex_instrumentationevent.md)\r\n    - [EX_Int64Const](api/uassetapi.kismet.bytecode.expressions.ex_int64const.md)\r\n    - [EX_IntConst](api/uassetapi.kismet.bytecode.expressions.ex_intconst.md)\r\n    - [EX_IntConstByte](api/uassetapi.kismet.bytecode.expressions.ex_intconstbyte.md)\r\n    - [EX_InterfaceContext](api/uassetapi.kismet.bytecode.expressions.ex_interfacecontext.md)\r\n    - [EX_InterfaceToObjCast](api/uassetapi.kismet.bytecode.expressions.ex_interfacetoobjcast.md)\r\n    - [EX_IntOne](api/uassetapi.kismet.bytecode.expressions.ex_intone.md)\r\n    - [EX_IntZero](api/uassetapi.kismet.bytecode.expressions.ex_intzero.md)\r\n    - [EX_Jump](api/uassetapi.kismet.bytecode.expressions.ex_jump.md)\r\n    - [EX_JumpIfNot](api/uassetapi.kismet.bytecode.expressions.ex_jumpifnot.md)\r\n    - [EX_Let](api/uassetapi.kismet.bytecode.expressions.ex_let.md)\r\n    - [EX_LetBase](api/uassetapi.kismet.bytecode.expressions.ex_letbase.md)\r\n    - [EX_LetBool](api/uassetapi.kismet.bytecode.expressions.ex_letbool.md)\r\n    - [EX_LetDelegate](api/uassetapi.kismet.bytecode.expressions.ex_letdelegate.md)\r\n    - [EX_LetMulticastDelegate](api/uassetapi.kismet.bytecode.expressions.ex_letmulticastdelegate.md)\r\n    - [EX_LetObj](api/uassetapi.kismet.bytecode.expressions.ex_letobj.md)\r\n    - [EX_LetValueOnPersistentFrame](api/uassetapi.kismet.bytecode.expressions.ex_letvalueonpersistentframe.md)\r\n    - [EX_LetWeakObjPtr](api/uassetapi.kismet.bytecode.expressions.ex_letweakobjptr.md)\r\n    - [EX_LocalFinalFunction](api/uassetapi.kismet.bytecode.expressions.ex_localfinalfunction.md)\r\n    - [EX_LocalOutVariable](api/uassetapi.kismet.bytecode.expressions.ex_localoutvariable.md)\r\n    - [EX_LocalVariable](api/uassetapi.kismet.bytecode.expressions.ex_localvariable.md)\r\n    - [EX_LocalVirtualFunction](api/uassetapi.kismet.bytecode.expressions.ex_localvirtualfunction.md)\r\n    - [EX_MapConst](api/uassetapi.kismet.bytecode.expressions.ex_mapconst.md)\r\n    - [EX_MetaCast](api/uassetapi.kismet.bytecode.expressions.ex_metacast.md)\r\n    - [EX_NameConst](api/uassetapi.kismet.bytecode.expressions.ex_nameconst.md)\r\n    - [EX_NoInterface](api/uassetapi.kismet.bytecode.expressions.ex_nointerface.md)\r\n    - [EX_NoObject](api/uassetapi.kismet.bytecode.expressions.ex_noobject.md)\r\n    - [EX_Nothing](api/uassetapi.kismet.bytecode.expressions.ex_nothing.md)\r\n    - [EX_NothingInt32](api/uassetapi.kismet.bytecode.expressions.ex_nothingint32.md)\r\n    - [EX_ObjectConst](api/uassetapi.kismet.bytecode.expressions.ex_objectconst.md)\r\n    - [EX_ObjToInterfaceCast](api/uassetapi.kismet.bytecode.expressions.ex_objtointerfacecast.md)\r\n    - [EX_PopExecutionFlow](api/uassetapi.kismet.bytecode.expressions.ex_popexecutionflow.md)\r\n    - [EX_PopExecutionFlowIfNot](api/uassetapi.kismet.bytecode.expressions.ex_popexecutionflowifnot.md)\r\n    - [EX_PrimitiveCast](api/uassetapi.kismet.bytecode.expressions.ex_primitivecast.md)\r\n    - [EX_PropertyConst](api/uassetapi.kismet.bytecode.expressions.ex_propertyconst.md)\r\n    - [EX_PushExecutionFlow](api/uassetapi.kismet.bytecode.expressions.ex_pushexecutionflow.md)\r\n    - [EX_RemoveMulticastDelegate](api/uassetapi.kismet.bytecode.expressions.ex_removemulticastdelegate.md)\r\n    - [EX_Return](api/uassetapi.kismet.bytecode.expressions.ex_return.md)\r\n    - [EX_RotationConst](api/uassetapi.kismet.bytecode.expressions.ex_rotationconst.md)\r\n    - [EX_Self](api/uassetapi.kismet.bytecode.expressions.ex_self.md)\r\n    - [EX_SetArray](api/uassetapi.kismet.bytecode.expressions.ex_setarray.md)\r\n    - [EX_SetConst](api/uassetapi.kismet.bytecode.expressions.ex_setconst.md)\r\n    - [EX_SetMap](api/uassetapi.kismet.bytecode.expressions.ex_setmap.md)\r\n    - [EX_SetSet](api/uassetapi.kismet.bytecode.expressions.ex_setset.md)\r\n    - [EX_Skip](api/uassetapi.kismet.bytecode.expressions.ex_skip.md)\r\n    - [EX_SkipOffsetConst](api/uassetapi.kismet.bytecode.expressions.ex_skipoffsetconst.md)\r\n    - [EX_SoftObjectConst](api/uassetapi.kismet.bytecode.expressions.ex_softobjectconst.md)\r\n    - [EX_StringConst](api/uassetapi.kismet.bytecode.expressions.ex_stringconst.md)\r\n    - [EX_StructConst](api/uassetapi.kismet.bytecode.expressions.ex_structconst.md)\r\n    - [EX_StructMemberContext](api/uassetapi.kismet.bytecode.expressions.ex_structmembercontext.md)\r\n    - [EX_SwitchValue](api/uassetapi.kismet.bytecode.expressions.ex_switchvalue.md)\r\n    - [EX_TextConst](api/uassetapi.kismet.bytecode.expressions.ex_textconst.md)\r\n    - [EX_Tracepoint](api/uassetapi.kismet.bytecode.expressions.ex_tracepoint.md)\r\n    - [EX_TransformConst](api/uassetapi.kismet.bytecode.expressions.ex_transformconst.md)\r\n    - [EX_True](api/uassetapi.kismet.bytecode.expressions.ex_true.md)\r\n    - [EX_UInt64Const](api/uassetapi.kismet.bytecode.expressions.ex_uint64const.md)\r\n    - [EX_UnicodeStringConst](api/uassetapi.kismet.bytecode.expressions.ex_unicodestringconst.md)\r\n    - [EX_VariableBase](api/uassetapi.kismet.bytecode.expressions.ex_variablebase.md)\r\n    - [EX_Vector3fConst](api/uassetapi.kismet.bytecode.expressions.ex_vector3fconst.md)\r\n    - [EX_VectorConst](api/uassetapi.kismet.bytecode.expressions.ex_vectorconst.md)\r\n    - [EX_VirtualFunction](api/uassetapi.kismet.bytecode.expressions.ex_virtualfunction.md)\r\n    - [EX_WireTracepoint](api/uassetapi.kismet.bytecode.expressions.ex_wiretracepoint.md)\r\n    - [FKismetSwitchCase](api/uassetapi.kismet.bytecode.expressions.fkismetswitchcase.md)\r\n  - [UAssetAPI.PropertyTypes.Objects]()\r\n    - [AncestryInfo](api/uassetapi.propertytypes.objects.ancestryinfo.md)\r\n    - [ArrayPropertyData](api/uassetapi.propertytypes.objects.arraypropertydata.md)\r\n    - [AssetObjectPropertyData](api/uassetapi.propertytypes.objects.assetobjectpropertydata.md)\r\n    - [BasePropertyData&lt;T&gt;](api/uassetapi.propertytypes.objects.basepropertydata-1.md)\r\n    - [BoolPropertyData](api/uassetapi.propertytypes.objects.boolpropertydata.md)\r\n    - [BytePropertyData](api/uassetapi.propertytypes.objects.bytepropertydata.md)\r\n    - [BytePropertyType](api/uassetapi.propertytypes.objects.bytepropertytype.md)\r\n    - [DelegatePropertyData](api/uassetapi.propertytypes.objects.delegatepropertydata.md)\r\n    - [DoublePropertyData](api/uassetapi.propertytypes.objects.doublepropertydata.md)\r\n    - [EnumPropertyData](api/uassetapi.propertytypes.objects.enumpropertydata.md)\r\n    - [EOverriddenPropertyOperation](api/uassetapi.propertytypes.objects.eoverriddenpropertyoperation.md)\r\n    - [EPropertyTagExtension](api/uassetapi.propertytypes.objects.epropertytagextension.md)\r\n    - [EPropertyTagFlags](api/uassetapi.propertytypes.objects.epropertytagflags.md)\r\n    - [ETextFlag](api/uassetapi.propertytypes.objects.etextflag.md)\r\n    - [ETransformType](api/uassetapi.propertytypes.objects.etransformtype.md)\r\n    - [FDelegate](api/uassetapi.propertytypes.objects.fdelegate.md)\r\n    - [FFormatArgumentData](api/uassetapi.propertytypes.objects.fformatargumentdata.md)\r\n    - [FFormatArgumentValue](api/uassetapi.propertytypes.objects.fformatargumentvalue.md)\r\n    - [FieldPathPropertyData](api/uassetapi.propertytypes.objects.fieldpathpropertydata.md)\r\n    - [FloatPropertyData](api/uassetapi.propertytypes.objects.floatpropertydata.md)\r\n    - [FNumberFormattingOptions](api/uassetapi.propertytypes.objects.fnumberformattingoptions.md)\r\n    - [FSoftObjectPath](api/uassetapi.propertytypes.objects.fsoftobjectpath.md)\r\n    - [FTopLevelAssetPath](api/uassetapi.propertytypes.objects.ftoplevelassetpath.md)\r\n    - [Int16PropertyData](api/uassetapi.propertytypes.objects.int16propertydata.md)\r\n    - [Int64PropertyData](api/uassetapi.propertytypes.objects.int64propertydata.md)\r\n    - [Int8PropertyData](api/uassetapi.propertytypes.objects.int8propertydata.md)\r\n    - [InterfacePropertyData](api/uassetapi.propertytypes.objects.interfacepropertydata.md)\r\n    - [IntPropertyData](api/uassetapi.propertytypes.objects.intpropertydata.md)\r\n    - [IStruct&lt;T&gt;](api/uassetapi.propertytypes.objects.istruct-1.md)\r\n    - [MapPropertyData](api/uassetapi.propertytypes.objects.mappropertydata.md)\r\n    - [MulticastDelegatePropertyData](api/uassetapi.propertytypes.objects.multicastdelegatepropertydata.md)\r\n    - [MulticastInlineDelegatePropertyData](api/uassetapi.propertytypes.objects.multicastinlinedelegatepropertydata.md)\r\n    - [MulticastSparseDelegatePropertyData](api/uassetapi.propertytypes.objects.multicastsparsedelegatepropertydata.md)\r\n    - [NamePropertyData](api/uassetapi.propertytypes.objects.namepropertydata.md)\r\n    - [ObjectPropertyData](api/uassetapi.propertytypes.objects.objectpropertydata.md)\r\n    - [PropertyData](api/uassetapi.propertytypes.objects.propertydata.md)\r\n    - [PropertyData&lt;T&gt;](api/uassetapi.propertytypes.objects.propertydata-1.md)\r\n    - [PropertySerializationContext](api/uassetapi.propertytypes.objects.propertyserializationcontext.md)\r\n    - [SetPropertyData](api/uassetapi.propertytypes.objects.setpropertydata.md)\r\n    - [SoftObjectPropertyData](api/uassetapi.propertytypes.objects.softobjectpropertydata.md)\r\n    - [StrPropertyData](api/uassetapi.propertytypes.objects.strpropertydata.md)\r\n    - [TextHistoryType](api/uassetapi.propertytypes.objects.texthistorytype.md)\r\n    - [TextPropertyData](api/uassetapi.propertytypes.objects.textpropertydata.md)\r\n    - [UInt16PropertyData](api/uassetapi.propertytypes.objects.uint16propertydata.md)\r\n    - [UInt32PropertyData](api/uassetapi.propertytypes.objects.uint32propertydata.md)\r\n    - [UInt64PropertyData](api/uassetapi.propertytypes.objects.uint64propertydata.md)\r\n    - [UnknownPropertyData](api/uassetapi.propertytypes.objects.unknownpropertydata.md)\r\n    - [WeakObjectPropertyData](api/uassetapi.propertytypes.objects.weakobjectpropertydata.md)\r\n  - [UAssetAPI.PropertyTypes.Structs]()\r\n    - [Box2DPropertyData](api/uassetapi.propertytypes.structs.box2dpropertydata.md)\r\n    - [Box2fPropertyData](api/uassetapi.propertytypes.structs.box2fpropertydata.md)\r\n    - [BoxPropertyData](api/uassetapi.propertytypes.structs.boxpropertydata.md)\r\n    - [ClothLODDataCommonPropertyData](api/uassetapi.propertytypes.structs.clothloddatacommonpropertydata.md)\r\n    - [ClothLODDataPropertyData](api/uassetapi.propertytypes.structs.clothloddatapropertydata.md)\r\n    - [ClothTetherDataPropertyData](api/uassetapi.propertytypes.structs.clothtetherdatapropertydata.md)\r\n    - [ColorMaterialInputPropertyData](api/uassetapi.propertytypes.structs.colormaterialinputpropertydata.md)\r\n    - [ColorPropertyData](api/uassetapi.propertytypes.structs.colorpropertydata.md)\r\n    - [DateTimePropertyData](api/uassetapi.propertytypes.structs.datetimepropertydata.md)\r\n    - [DeprecateSlateVector2DPropertyData](api/uassetapi.propertytypes.structs.deprecateslatevector2dpropertydata.md)\r\n    - [ESectionEvaluationFlags](api/uassetapi.propertytypes.structs.esectionevaluationflags.md)\r\n    - [ExpressionInputPropertyData](api/uassetapi.propertytypes.structs.expressioninputpropertydata.md)\r\n    - [FEntityAndMetaDataIndex](api/uassetapi.propertytypes.structs.fentityandmetadataindex.md)\r\n    - [FEntry](api/uassetapi.propertytypes.structs.fentry.md)\r\n    - [FEvaluationTreeEntryHandle](api/uassetapi.propertytypes.structs.fevaluationtreeentryhandle.md)\r\n    - [FLevelSequenceLegacyObjectReference](api/uassetapi.propertytypes.structs.flevelsequencelegacyobjectreference.md)\r\n    - [FloatRangePropertyData](api/uassetapi.propertytypes.structs.floatrangepropertydata.md)\r\n    - [FMeshToMeshVertData](api/uassetapi.propertytypes.structs.fmeshtomeshvertdata.md)\r\n    - [FMovieSceneChannel&lt;T&gt;](api/uassetapi.propertytypes.structs.fmoviescenechannel-1.md)\r\n    - [FMovieSceneDoubleChannel](api/uassetapi.propertytypes.structs.fmoviescenedoublechannel.md)\r\n    - [FMovieSceneDoubleValue](api/uassetapi.propertytypes.structs.fmoviescenedoublevalue.md)\r\n    - [FMovieSceneEvaluationFieldEntityTree](api/uassetapi.propertytypes.structs.fmoviesceneevaluationfieldentitytree.md)\r\n    - [FMovieSceneEvaluationKey](api/uassetapi.propertytypes.structs.fmoviesceneevaluationkey.md)\r\n    - [FMovieSceneEvaluationTree](api/uassetapi.propertytypes.structs.fmoviesceneevaluationtree.md)\r\n    - [FMovieSceneEvaluationTreeNode](api/uassetapi.propertytypes.structs.fmoviesceneevaluationtreenode.md)\r\n    - [FMovieSceneEvaluationTreeNodeHandle](api/uassetapi.propertytypes.structs.fmoviesceneevaluationtreenodehandle.md)\r\n    - [FMovieSceneEventParameters](api/uassetapi.propertytypes.structs.fmoviesceneeventparameters.md)\r\n    - [FMovieSceneFloatChannel](api/uassetapi.propertytypes.structs.fmoviescenefloatchannel.md)\r\n    - [FMovieSceneFloatValue](api/uassetapi.propertytypes.structs.fmoviescenefloatvalue.md)\r\n    - [FMovieSceneSegment](api/uassetapi.propertytypes.structs.fmoviescenesegment.md)\r\n    - [FMovieSceneSubSectionData](api/uassetapi.propertytypes.structs.fmoviescenesubsectiondata.md)\r\n    - [FMovieSceneSubSectionFieldData](api/uassetapi.propertytypes.structs.fmoviescenesubsectionfielddata.md)\r\n    - [FMovieSceneSubSequenceTree](api/uassetapi.propertytypes.structs.fmoviescenesubsequencetree.md)\r\n    - [FMovieSceneSubSequenceTreeEntry](api/uassetapi.propertytypes.structs.fmoviescenesubsequencetreeentry.md)\r\n    - [FMovieSceneTangentData](api/uassetapi.propertytypes.structs.fmoviescenetangentdata.md)\r\n    - [FMovieSceneTrackFieldData](api/uassetapi.propertytypes.structs.fmoviescenetrackfielddata.md)\r\n    - [FMovieSceneValue&lt;T&gt;](api/uassetapi.propertytypes.structs.fmoviescenevalue-1.md)\r\n    - [FNameCurveKey](api/uassetapi.propertytypes.structs.fnamecurvekey.md)\r\n    - [FNavAgentSelector](api/uassetapi.propertytypes.structs.fnavagentselector.md)\r\n    - [FontCharacterPropertyData](api/uassetapi.propertytypes.structs.fontcharacterpropertydata.md)\r\n    - [FontDataPropertyData](api/uassetapi.propertytypes.structs.fontdatapropertydata.md)\r\n    - [FrameNumberPropertyData](api/uassetapi.propertytypes.structs.framenumberpropertydata.md)\r\n    - [FSectionEvaluationDataTree](api/uassetapi.propertytypes.structs.fsectionevaluationdatatree.md)\r\n    - [FStringCurveKey](api/uassetapi.propertytypes.structs.fstringcurvekey.md)\r\n    - [GameplayTagContainerPropertyData](api/uassetapi.propertytypes.structs.gameplaytagcontainerpropertydata.md)\r\n    - [GuidPropertyData](api/uassetapi.propertytypes.structs.guidpropertydata.md)\r\n    - [IntPointPropertyData](api/uassetapi.propertytypes.structs.intpointpropertydata.md)\r\n    - [IntVector2PropertyData](api/uassetapi.propertytypes.structs.intvector2propertydata.md)\r\n    - [IntVectorPropertyData](api/uassetapi.propertytypes.structs.intvectorpropertydata.md)\r\n    - [KeyHandleMapPropertyData](api/uassetapi.propertytypes.structs.keyhandlemappropertydata.md)\r\n    - [LevelSequenceObjectReferenceMapPropertyData](api/uassetapi.propertytypes.structs.levelsequenceobjectreferencemappropertydata.md)\r\n    - [LinearColorPropertyData](api/uassetapi.propertytypes.structs.linearcolorpropertydata.md)\r\n    - [MaterialAttributesInputPropertyData](api/uassetapi.propertytypes.structs.materialattributesinputpropertydata.md)\r\n    - [MaterialInputPropertyData&lt;T&gt;](api/uassetapi.propertytypes.structs.materialinputpropertydata-1.md)\r\n    - [MaterialOverrideNanitePropertyData](api/uassetapi.propertytypes.structs.materialoverridenanitepropertydata.md)\r\n    - [MatrixPropertyData](api/uassetapi.propertytypes.structs.matrixpropertydata.md)\r\n    - [MovieSceneDoubleChannelPropertyData](api/uassetapi.propertytypes.structs.moviescenedoublechannelpropertydata.md)\r\n    - [MovieSceneEvalTemplatePtrPropertyData](api/uassetapi.propertytypes.structs.moviesceneevaltemplateptrpropertydata.md)\r\n    - [MovieSceneEvaluationFieldEntityTreePropertyData](api/uassetapi.propertytypes.structs.moviesceneevaluationfieldentitytreepropertydata.md)\r\n    - [MovieSceneEvaluationKeyPropertyData](api/uassetapi.propertytypes.structs.moviesceneevaluationkeypropertydata.md)\r\n    - [MovieSceneEventParametersPropertyData](api/uassetapi.propertytypes.structs.moviesceneeventparameterspropertydata.md)\r\n    - [MovieSceneFloatChannelPropertyData](api/uassetapi.propertytypes.structs.moviescenefloatchannelpropertydata.md)\r\n    - [MovieSceneFloatValuePropertyData](api/uassetapi.propertytypes.structs.moviescenefloatvaluepropertydata.md)\r\n    - [MovieSceneFrameRangePropertyData](api/uassetapi.propertytypes.structs.moviesceneframerangepropertydata.md)\r\n    - [MovieSceneGenerationLedgerPropertyData](api/uassetapi.propertytypes.structs.moviescenegenerationledgerpropertydata.md)\r\n    - [MovieSceneSegmentIdentifierPropertyData](api/uassetapi.propertytypes.structs.moviescenesegmentidentifierpropertydata.md)\r\n    - [MovieSceneSegmentPropertyData](api/uassetapi.propertytypes.structs.moviescenesegmentpropertydata.md)\r\n    - [MovieSceneSequenceIDPropertyData](api/uassetapi.propertytypes.structs.moviescenesequenceidpropertydata.md)\r\n    - [MovieSceneSequenceInstanceDataPtrPropertyData](api/uassetapi.propertytypes.structs.moviescenesequenceinstancedataptrpropertydata.md)\r\n    - [MovieSceneSubSectionFieldDataPropertyData](api/uassetapi.propertytypes.structs.moviescenesubsectionfielddatapropertydata.md)\r\n    - [MovieSceneSubSequenceTreePropertyData](api/uassetapi.propertytypes.structs.moviescenesubsequencetreepropertydata.md)\r\n    - [MovieSceneTemplatePropertyData](api/uassetapi.propertytypes.structs.moviescenetemplatepropertydata.md)\r\n    - [MovieSceneTrackFieldDataPropertyData](api/uassetapi.propertytypes.structs.moviescenetrackfielddatapropertydata.md)\r\n    - [MovieSceneTrackIdentifierPropertyData](api/uassetapi.propertytypes.structs.moviescenetrackidentifierpropertydata.md)\r\n    - [MovieSceneTrackImplementationPtrPropertyData](api/uassetapi.propertytypes.structs.moviescenetrackimplementationptrpropertydata.md)\r\n    - [NameCurveKeyPropertyData](api/uassetapi.propertytypes.structs.namecurvekeypropertydata.md)\r\n    - [NavAgentSelectorPropertyData](api/uassetapi.propertytypes.structs.navagentselectorpropertydata.md)\r\n    - [NiagaraDataChannelVariablePropertyData](api/uassetapi.propertytypes.structs.niagaradatachannelvariablepropertydata.md)\r\n    - [NiagaraDataInterfaceGPUParamInfoPropertyData](api/uassetapi.propertytypes.structs.niagaradatainterfacegpuparaminfopropertydata.md)\r\n    - [NiagaraVariableBasePropertyData](api/uassetapi.propertytypes.structs.niagaravariablebasepropertydata.md)\r\n    - [NiagaraVariablePropertyData](api/uassetapi.propertytypes.structs.niagaravariablepropertydata.md)\r\n    - [NiagaraVariableWithOffsetPropertyData](api/uassetapi.propertytypes.structs.niagaravariablewithoffsetpropertydata.md)\r\n    - [PerPlatformBoolPropertyData](api/uassetapi.propertytypes.structs.perplatformboolpropertydata.md)\r\n    - [PerPlatformFloatPropertyData](api/uassetapi.propertytypes.structs.perplatformfloatpropertydata.md)\r\n    - [PerPlatformFrameRatePropertyData](api/uassetapi.propertytypes.structs.perplatformframeratepropertydata.md)\r\n    - [PerPlatformIntPropertyData](api/uassetapi.propertytypes.structs.perplatformintpropertydata.md)\r\n    - [PerQualityLevelFloatPropertyData](api/uassetapi.propertytypes.structs.perqualitylevelfloatpropertydata.md)\r\n    - [PerQualityLevelIntPropertyData](api/uassetapi.propertytypes.structs.perqualitylevelintpropertydata.md)\r\n    - [PlanePropertyData](api/uassetapi.propertytypes.structs.planepropertydata.md)\r\n    - [QuatPropertyData](api/uassetapi.propertytypes.structs.quatpropertydata.md)\r\n    - [RawStructPropertyData](api/uassetapi.propertytypes.structs.rawstructpropertydata.md)\r\n    - [RichCurveKeyPropertyData](api/uassetapi.propertytypes.structs.richcurvekeypropertydata.md)\r\n    - [RotatorPropertyData](api/uassetapi.propertytypes.structs.rotatorpropertydata.md)\r\n    - [ScalarMaterialInputPropertyData](api/uassetapi.propertytypes.structs.scalarmaterialinputpropertydata.md)\r\n    - [SectionEvaluationDataTreePropertyData](api/uassetapi.propertytypes.structs.sectionevaluationdatatreepropertydata.md)\r\n    - [SkeletalMeshAreaWeightedTriangleSamplerPropertyData](api/uassetapi.propertytypes.structs.skeletalmeshareaweightedtrianglesamplerpropertydata.md)\r\n    - [SkeletalMeshSamplingLODBuiltDataPropertyData](api/uassetapi.propertytypes.structs.skeletalmeshsamplinglodbuiltdatapropertydata.md)\r\n    - [SmartNamePropertyData](api/uassetapi.propertytypes.structs.smartnamepropertydata.md)\r\n    - [SoftAssetPathPropertyData](api/uassetapi.propertytypes.structs.softassetpathpropertydata.md)\r\n    - [SoftClassPathPropertyData](api/uassetapi.propertytypes.structs.softclasspathpropertydata.md)\r\n    - [SoftObjectPathPropertyData](api/uassetapi.propertytypes.structs.softobjectpathpropertydata.md)\r\n    - [StringAssetReferencePropertyData](api/uassetapi.propertytypes.structs.stringassetreferencepropertydata.md)\r\n    - [StringClassReferencePropertyData](api/uassetapi.propertytypes.structs.stringclassreferencepropertydata.md)\r\n    - [StringCurveKeyPropertyData](api/uassetapi.propertytypes.structs.stringcurvekeypropertydata.md)\r\n    - [StructPropertyData](api/uassetapi.propertytypes.structs.structpropertydata.md)\r\n    - [TBoxPropertyData&lt;T&gt;](api/uassetapi.propertytypes.structs.tboxpropertydata-1.md)\r\n    - [TEvaluationTreeEntryContainer&lt;T&gt;](api/uassetapi.propertytypes.structs.tevaluationtreeentrycontainer-1.md)\r\n    - [TimespanPropertyData](api/uassetapi.propertytypes.structs.timespanpropertydata.md)\r\n    - [TMovieSceneEvaluationTree&lt;T&gt;](api/uassetapi.propertytypes.structs.tmoviesceneevaluationtree-1.md)\r\n    - [TPerPlatformPropertyData&lt;T&gt;](api/uassetapi.propertytypes.structs.tperplatformpropertydata-1.md)\r\n    - [TPerQualityLevelPropertyData&lt;T&gt;](api/uassetapi.propertytypes.structs.tperqualitylevelpropertydata-1.md)\r\n    - [TwoVectorsPropertyData](api/uassetapi.propertytypes.structs.twovectorspropertydata.md)\r\n    - [Vector2DPropertyData](api/uassetapi.propertytypes.structs.vector2dpropertydata.md)\r\n    - [Vector2fPropertyData](api/uassetapi.propertytypes.structs.vector2fpropertydata.md)\r\n    - [Vector2MaterialInputPropertyData](api/uassetapi.propertytypes.structs.vector2materialinputpropertydata.md)\r\n    - [Vector3fPropertyData](api/uassetapi.propertytypes.structs.vector3fpropertydata.md)\r\n    - [Vector4fPropertyData](api/uassetapi.propertytypes.structs.vector4fpropertydata.md)\r\n    - [Vector4PropertyData](api/uassetapi.propertytypes.structs.vector4propertydata.md)\r\n    - [VectorMaterialInputPropertyData](api/uassetapi.propertytypes.structs.vectormaterialinputpropertydata.md)\r\n    - [VectorNetQuantize100PropertyData](api/uassetapi.propertytypes.structs.vectornetquantize100propertydata.md)\r\n    - [VectorNetQuantize10PropertyData](api/uassetapi.propertytypes.structs.vectornetquantize10propertydata.md)\r\n    - [VectorNetQuantizeNormalPropertyData](api/uassetapi.propertytypes.structs.vectornetquantizenormalpropertydata.md)\r\n    - [VectorNetQuantizePropertyData](api/uassetapi.propertytypes.structs.vectornetquantizepropertydata.md)\r\n    - [VectorPropertyData](api/uassetapi.propertytypes.structs.vectorpropertydata.md)\r\n    - [ViewTargetBlendFunction](api/uassetapi.propertytypes.structs.viewtargetblendfunction.md)\r\n    - [ViewTargetBlendParamsPropertyData](api/uassetapi.propertytypes.structs.viewtargetblendparamspropertydata.md)\r\n    - [WeightedRandomSamplerPropertyData](api/uassetapi.propertytypes.structs.weightedrandomsamplerpropertydata.md)\r\n  - [UAssetAPI.StructTypes]()\r\n    - [SkeletalMeshSamplingRegionBuiltDataPropertyData](api/uassetapi.structtypes.skeletalmeshsamplingregionbuiltdatapropertydata.md)\r\n  - [UAssetAPI.UnrealTypes]()\r\n    - [Comparer2&lt;T&gt;](api/uassetapi.unrealtypes.comparer2-1.md)\r\n    - [DictionaryEnumerator&lt;TKey, TValue&gt;](api/uassetapi.unrealtypes.dictionaryenumerator-2.md)\r\n    - [EAxis](api/uassetapi.unrealtypes.eaxis.md)\r\n    - [EClassFlags](api/uassetapi.unrealtypes.eclassflags.md)\r\n    - [EFontHinting](api/uassetapi.unrealtypes.efonthinting.md)\r\n    - [EFontLoadingPolicy](api/uassetapi.unrealtypes.efontloadingpolicy.md)\r\n    - [EFunctionFlags](api/uassetapi.unrealtypes.efunctionflags.md)\r\n    - [EInterpCurveMode](api/uassetapi.unrealtypes.einterpcurvemode.md)\r\n    - [EMappedNameType](api/uassetapi.unrealtypes.emappednametype.md)\r\n    - [EngineVersion](api/uassetapi.unrealtypes.engineversion.md)\r\n    - [EObjectDataResourceFlags](api/uassetapi.unrealtypes.eobjectdataresourceflags.md)\r\n    - [EObjectDataResourceVersion](api/uassetapi.unrealtypes.eobjectdataresourceversion.md)\r\n    - [EObjectFlags](api/uassetapi.unrealtypes.eobjectflags.md)\r\n    - [EPackageFlags](api/uassetapi.unrealtypes.epackageflags.md)\r\n    - [EPropertyFlags](api/uassetapi.unrealtypes.epropertyflags.md)\r\n    - [ERangeBoundTypes](api/uassetapi.unrealtypes.erangeboundtypes.md)\r\n    - [FFieldPath](api/uassetapi.unrealtypes.ffieldpath.md)\r\n    - [FFontCharacter](api/uassetapi.unrealtypes.ffontcharacter.md)\r\n    - [FFontData](api/uassetapi.unrealtypes.ffontdata.md)\r\n    - [FFrameNumber](api/uassetapi.unrealtypes.fframenumber.md)\r\n    - [FFrameRate](api/uassetapi.unrealtypes.fframerate.md)\r\n    - [FFrameTime](api/uassetapi.unrealtypes.fframetime.md)\r\n    - [FGatherableTextData](api/uassetapi.unrealtypes.fgatherabletextdata.md)\r\n    - [FIntVector](api/uassetapi.unrealtypes.fintvector.md)\r\n    - [FIntVector2](api/uassetapi.unrealtypes.fintvector2.md)\r\n    - [FLinearColor](api/uassetapi.unrealtypes.flinearcolor.md)\r\n    - [FLocMetadataObject](api/uassetapi.unrealtypes.flocmetadataobject.md)\r\n    - [FMatrix](api/uassetapi.unrealtypes.fmatrix.md)\r\n    - [FName](api/uassetapi.unrealtypes.fname.md)\r\n    - [FNiagaraDataInterfaceGeneratedFunction](api/uassetapi.unrealtypes.fniagaradatainterfacegeneratedfunction.md)\r\n    - [FNiagaraDataInterfaceGPUParamInfo](api/uassetapi.unrealtypes.fniagaradatainterfacegpuparaminfo.md)\r\n    - [FNiagaraVariableCommonReference](api/uassetapi.unrealtypes.fniagaravariablecommonreference.md)\r\n    - [FObjectDataResource](api/uassetapi.unrealtypes.fobjectdataresource.md)\r\n    - [FObjectThumbnail](api/uassetapi.unrealtypes.fobjectthumbnail.md)\r\n    - [FPackageIndex](api/uassetapi.unrealtypes.fpackageindex.md)\r\n    - [FPlane](api/uassetapi.unrealtypes.fplane.md)\r\n    - [FPropertyTypeName](api/uassetapi.unrealtypes.fpropertytypename.md)\r\n    - [FPropertyTypeNameConverter](api/uassetapi.unrealtypes.fpropertytypenameconverter.md)\r\n    - [FPropertyTypeNameNode](api/uassetapi.unrealtypes.fpropertytypenamenode.md)\r\n    - [FQualifiedFrameTime](api/uassetapi.unrealtypes.fqualifiedframetime.md)\r\n    - [FQuat](api/uassetapi.unrealtypes.fquat.md)\r\n    - [FRichCurveKey](api/uassetapi.unrealtypes.frichcurvekey.md)\r\n    - [FRotator](api/uassetapi.unrealtypes.frotator.md)\r\n    - [FSkeletalMeshAreaWeightedTriangleSampler](api/uassetapi.unrealtypes.fskeletalmeshareaweightedtrianglesampler.md)\r\n    - [FSkeletalMeshSamplingRegionBuiltData](api/uassetapi.unrealtypes.fskeletalmeshsamplingregionbuiltdata.md)\r\n    - [FString](api/uassetapi.unrealtypes.fstring.md)\r\n    - [FTextSourceData](api/uassetapi.unrealtypes.ftextsourcedata.md)\r\n    - [FTextSourceSiteContext](api/uassetapi.unrealtypes.ftextsourcesitecontext.md)\r\n    - [FTimecode](api/uassetapi.unrealtypes.ftimecode.md)\r\n    - [FTransform](api/uassetapi.unrealtypes.ftransform.md)\r\n    - [FTwoVectors](api/uassetapi.unrealtypes.ftwovectors.md)\r\n    - [FUniqueNetId](api/uassetapi.unrealtypes.funiquenetid.md)\r\n    - [FVector](api/uassetapi.unrealtypes.fvector.md)\r\n    - [FVector2D](api/uassetapi.unrealtypes.fvector2d.md)\r\n    - [FVector2f](api/uassetapi.unrealtypes.fvector2f.md)\r\n    - [FVector3f](api/uassetapi.unrealtypes.fvector3f.md)\r\n    - [FVector4](api/uassetapi.unrealtypes.fvector4.md)\r\n    - [FVector4f](api/uassetapi.unrealtypes.fvector4f.md)\r\n    - [FWeightedRandomSampler](api/uassetapi.unrealtypes.fweightedrandomsampler.md)\r\n    - [FWorldTileInfo](api/uassetapi.unrealtypes.fworldtileinfo.md)\r\n    - [FWorldTileLayer](api/uassetapi.unrealtypes.fworldtilelayer.md)\r\n    - [FWorldTileLODInfo](api/uassetapi.unrealtypes.fworldtilelodinfo.md)\r\n    - [IOrderedDictionary&lt;TKey, TValue&gt;](api/uassetapi.unrealtypes.iordereddictionary-2.md)\r\n    - [KeyedCollection2&lt;TKey, TItem&gt;](api/uassetapi.unrealtypes.keyedcollection2-2.md)\r\n    - [LinearHelpers](api/uassetapi.unrealtypes.linearhelpers.md)\r\n    - [ObjectVersion](api/uassetapi.unrealtypes.objectversion.md)\r\n    - [ObjectVersionUE5](api/uassetapi.unrealtypes.objectversionue5.md)\r\n    - [TBox&lt;T&gt;](api/uassetapi.unrealtypes.tbox-1.md)\r\n    - [TMap&lt;TKey, TValue&gt;](api/uassetapi.unrealtypes.tmap-2.md)\r\n    - [TPerQualityLevel&lt;T&gt;](api/uassetapi.unrealtypes.tperqualitylevel-1.md)\r\n    - [TRange&lt;T&gt;](api/uassetapi.unrealtypes.trange-1.md)\r\n    - [TRangeBound&lt;T&gt;](api/uassetapi.unrealtypes.trangebound-1.md)\r\n    - [UE4VersionToObjectVersion](api/uassetapi.unrealtypes.ue4versiontoobjectversion.md)\r\n    - [UE5VersionToObjectVersion](api/uassetapi.unrealtypes.ue5versiontoobjectversion.md)\r\n    - [UniqueNetIdReplPropertyData](api/uassetapi.unrealtypes.uniquenetidreplpropertydata.md)\r\n    - [UniversalObjectLocatorFragmentPropertyData](api/uassetapi.unrealtypes.universalobjectlocatorfragmentpropertydata.md)\r\n  - [UAssetAPI.UnrealTypes.EngineEnums]()\r\n    - [AnimationCompressionFormat](api/uassetapi.unrealtypes.engineenums.animationcompressionformat.md)\r\n    - [AnimationKeyFormat](api/uassetapi.unrealtypes.engineenums.animationkeyformat.md)\r\n    - [AnimPhysCollisionType](api/uassetapi.unrealtypes.engineenums.animphyscollisiontype.md)\r\n    - [AnimPhysTwistAxis](api/uassetapi.unrealtypes.engineenums.animphystwistaxis.md)\r\n    - [Beam2SourceTargetMethod](api/uassetapi.unrealtypes.engineenums.beam2sourcetargetmethod.md)\r\n    - [Beam2SourceTargetTangentMethod](api/uassetapi.unrealtypes.engineenums.beam2sourcetargettangentmethod.md)\r\n    - [BeamModifierType](api/uassetapi.unrealtypes.engineenums.beammodifiertype.md)\r\n    - [CylinderHeightAxis](api/uassetapi.unrealtypes.engineenums.cylinderheightaxis.md)\r\n    - [DistributionParamMode](api/uassetapi.unrealtypes.engineenums.distributionparammode.md)\r\n    - [EActorUpdateOverlapsMethod](api/uassetapi.unrealtypes.engineenums.eactorupdateoverlapsmethod.md)\r\n    - [EAdditiveAnimationType](api/uassetapi.unrealtypes.engineenums.eadditiveanimationtype.md)\r\n    - [EAdditiveBasePoseType](api/uassetapi.unrealtypes.engineenums.eadditivebaseposetype.md)\r\n    - [EAdManagerDelegate](api/uassetapi.unrealtypes.engineenums.eadmanagerdelegate.md)\r\n    - [EAirAbsorptionMethod](api/uassetapi.unrealtypes.engineenums.eairabsorptionmethod.md)\r\n    - [EAlphaBlendOption](api/uassetapi.unrealtypes.engineenums.ealphablendoption.md)\r\n    - [EAlphaChannelMode](api/uassetapi.unrealtypes.engineenums.ealphachannelmode.md)\r\n    - [EAngularConstraintMotion](api/uassetapi.unrealtypes.engineenums.eangularconstraintmotion.md)\r\n    - [EAngularDriveMode](api/uassetapi.unrealtypes.engineenums.eangulardrivemode.md)\r\n    - [EAnimAlphaInputType](api/uassetapi.unrealtypes.engineenums.eanimalphainputtype.md)\r\n    - [EAnimAssetCurveFlags](api/uassetapi.unrealtypes.engineenums.eanimassetcurveflags.md)\r\n    - [EAnimationMode](api/uassetapi.unrealtypes.engineenums.eanimationmode.md)\r\n    - [EAnimCurveType](api/uassetapi.unrealtypes.engineenums.eanimcurvetype.md)\r\n    - [EAnimGroupRole](api/uassetapi.unrealtypes.engineenums.eanimgrouprole.md)\r\n    - [EAnimInterpolationType](api/uassetapi.unrealtypes.engineenums.eaniminterpolationtype.md)\r\n    - [EAnimLinkMethod](api/uassetapi.unrealtypes.engineenums.eanimlinkmethod.md)\r\n    - [EAnimNotifyEventType](api/uassetapi.unrealtypes.engineenums.eanimnotifyeventtype.md)\r\n    - [EAntiAliasingMethod](api/uassetapi.unrealtypes.engineenums.eantialiasingmethod.md)\r\n    - [EApplicationState](api/uassetapi.unrealtypes.engineenums.eapplicationstate.md)\r\n    - [EAspectRatioAxisConstraint](api/uassetapi.unrealtypes.engineenums.easpectratioaxisconstraint.md)\r\n    - [EAttachLocation](api/uassetapi.unrealtypes.engineenums.eattachlocation.md)\r\n    - [EAttachmentRule](api/uassetapi.unrealtypes.engineenums.eattachmentrule.md)\r\n    - [EAttenuationDistanceModel](api/uassetapi.unrealtypes.engineenums.eattenuationdistancemodel.md)\r\n    - [EAttenuationShape](api/uassetapi.unrealtypes.engineenums.eattenuationshape.md)\r\n    - [EAttractorParticleSelectionMethod](api/uassetapi.unrealtypes.engineenums.eattractorparticleselectionmethod.md)\r\n    - [EAudioComponentPlayState](api/uassetapi.unrealtypes.engineenums.eaudiocomponentplaystate.md)\r\n    - [EAudioFaderCurve](api/uassetapi.unrealtypes.engineenums.eaudiofadercurve.md)\r\n    - [EAudioOutputTarget](api/uassetapi.unrealtypes.engineenums.eaudiooutputtarget.md)\r\n    - [EAudioRecordingExportType](api/uassetapi.unrealtypes.engineenums.eaudiorecordingexporttype.md)\r\n    - [EAutoExposureMethod](api/uassetapi.unrealtypes.engineenums.eautoexposuremethod.md)\r\n    - [EAutoExposureMethodUI](api/uassetapi.unrealtypes.engineenums.eautoexposuremethodui.md)\r\n    - [EAutoPossessAI](api/uassetapi.unrealtypes.engineenums.eautopossessai.md)\r\n    - [EAutoReceiveInput](api/uassetapi.unrealtypes.engineenums.eautoreceiveinput.md)\r\n    - [EAxisOption](api/uassetapi.unrealtypes.engineenums.eaxisoption.md)\r\n    - [EBeam2Method](api/uassetapi.unrealtypes.engineenums.ebeam2method.md)\r\n    - [EBeamTaperMethod](api/uassetapi.unrealtypes.engineenums.ebeamtapermethod.md)\r\n    - [EBlendableLocation](api/uassetapi.unrealtypes.engineenums.eblendablelocation.md)\r\n    - [EBlendMode](api/uassetapi.unrealtypes.engineenums.eblendmode.md)\r\n    - [EBlendSpaceAxis](api/uassetapi.unrealtypes.engineenums.eblendspaceaxis.md)\r\n    - [EBloomMethod](api/uassetapi.unrealtypes.engineenums.ebloommethod.md)\r\n    - [EBlueprintCompileMode](api/uassetapi.unrealtypes.engineenums.eblueprintcompilemode.md)\r\n    - [EBlueprintNativizationFlag](api/uassetapi.unrealtypes.engineenums.eblueprintnativizationflag.md)\r\n    - [EBlueprintPinStyleType](api/uassetapi.unrealtypes.engineenums.eblueprintpinstyletype.md)\r\n    - [EBlueprintStatus](api/uassetapi.unrealtypes.engineenums.eblueprintstatus.md)\r\n    - [EBlueprintType](api/uassetapi.unrealtypes.engineenums.eblueprinttype.md)\r\n    - [EBodyCollisionResponse](api/uassetapi.unrealtypes.engineenums.ebodycollisionresponse.md)\r\n    - [EBoneAxis](api/uassetapi.unrealtypes.engineenums.eboneaxis.md)\r\n    - [EBoneControlSpace](api/uassetapi.unrealtypes.engineenums.ebonecontrolspace.md)\r\n    - [EBoneFilterActionOption](api/uassetapi.unrealtypes.engineenums.ebonefilteractionoption.md)\r\n    - [EBoneRotationSource](api/uassetapi.unrealtypes.engineenums.ebonerotationsource.md)\r\n    - [EBoneSpaces](api/uassetapi.unrealtypes.engineenums.ebonespaces.md)\r\n    - [EBoneTranslationRetargetingMode](api/uassetapi.unrealtypes.engineenums.ebonetranslationretargetingmode.md)\r\n    - [EBoneVisibilityStatus](api/uassetapi.unrealtypes.engineenums.ebonevisibilitystatus.md)\r\n    - [EBrushType](api/uassetapi.unrealtypes.engineenums.ebrushtype.md)\r\n    - [ECameraAlphaBlendMode](api/uassetapi.unrealtypes.engineenums.ecameraalphablendmode.md)\r\n    - [ECameraAnimPlaySpace](api/uassetapi.unrealtypes.engineenums.ecameraanimplayspace.md)\r\n    - [ECameraProjectionMode](api/uassetapi.unrealtypes.engineenums.ecameraprojectionmode.md)\r\n    - [ECameraShakeAttenuation](api/uassetapi.unrealtypes.engineenums.ecamerashakeattenuation.md)\r\n    - [ECanBeCharacterBase](api/uassetapi.unrealtypes.engineenums.ecanbecharacterbase.md)\r\n    - [ECanCreateConnectionResponse](api/uassetapi.unrealtypes.engineenums.ecancreateconnectionresponse.md)\r\n    - [EChannelMaskParameterColor](api/uassetapi.unrealtypes.engineenums.echannelmaskparametercolor.md)\r\n    - [EClampMode](api/uassetapi.unrealtypes.engineenums.eclampmode.md)\r\n    - [EClearSceneOptions](api/uassetapi.unrealtypes.engineenums.eclearsceneoptions.md)\r\n    - [EClothMassMode](api/uassetapi.unrealtypes.engineenums.eclothmassmode.md)\r\n    - [ECloudStorageDelegate](api/uassetapi.unrealtypes.engineenums.ecloudstoragedelegate.md)\r\n    - [ECollisionChannel](api/uassetapi.unrealtypes.engineenums.ecollisionchannel.md)\r\n    - [ECollisionEnabled](api/uassetapi.unrealtypes.engineenums.ecollisionenabled.md)\r\n    - [ECollisionResponse](api/uassetapi.unrealtypes.engineenums.ecollisionresponse.md)\r\n    - [ECollisionTraceFlag](api/uassetapi.unrealtypes.engineenums.ecollisiontraceflag.md)\r\n    - [EComponentCreationMethod](api/uassetapi.unrealtypes.engineenums.ecomponentcreationmethod.md)\r\n    - [EComponentMobility](api/uassetapi.unrealtypes.engineenums.ecomponentmobility.md)\r\n    - [EComponentSocketType](api/uassetapi.unrealtypes.engineenums.ecomponentsockettype.md)\r\n    - [EComponentType](api/uassetapi.unrealtypes.engineenums.ecomponenttype.md)\r\n    - [ECompositeTextureMode](api/uassetapi.unrealtypes.engineenums.ecompositetexturemode.md)\r\n    - [ECompositingSampleCount](api/uassetapi.unrealtypes.engineenums.ecompositingsamplecount.md)\r\n    - [EConstraintFrame](api/uassetapi.unrealtypes.engineenums.econstraintframe.md)\r\n    - [EConstraintTransform](api/uassetapi.unrealtypes.engineenums.econstrainttransform.md)\r\n    - [EControlConstraint](api/uassetapi.unrealtypes.engineenums.econtrolconstraint.md)\r\n    - [EControllerAnalogStick](api/uassetapi.unrealtypes.engineenums.econtrolleranalogstick.md)\r\n    - [ECopyType](api/uassetapi.unrealtypes.engineenums.ecopytype.md)\r\n    - [ECsgOper](api/uassetapi.unrealtypes.engineenums.ecsgoper.md)\r\n    - [ECurveBlendOption](api/uassetapi.unrealtypes.engineenums.ecurveblendoption.md)\r\n    - [ECurveTableMode](api/uassetapi.unrealtypes.engineenums.ecurvetablemode.md)\r\n    - [ECustomDepthStencil](api/uassetapi.unrealtypes.engineenums.ecustomdepthstencil.md)\r\n    - [ECustomMaterialOutputType](api/uassetapi.unrealtypes.engineenums.ecustommaterialoutputtype.md)\r\n    - [ECustomTimeStepSynchronizationState](api/uassetapi.unrealtypes.engineenums.ecustomtimestepsynchronizationstate.md)\r\n    - [EDecalBlendMode](api/uassetapi.unrealtypes.engineenums.edecalblendmode.md)\r\n    - [EDecompressionType](api/uassetapi.unrealtypes.engineenums.edecompressiontype.md)\r\n    - [EDefaultBackBufferPixelFormat](api/uassetapi.unrealtypes.engineenums.edefaultbackbufferpixelformat.md)\r\n    - [EDemoPlayFailure](api/uassetapi.unrealtypes.engineenums.edemoplayfailure.md)\r\n    - [EDepthOfFieldFunctionValue](api/uassetapi.unrealtypes.engineenums.edepthoffieldfunctionvalue.md)\r\n    - [EDepthOfFieldMethod](api/uassetapi.unrealtypes.engineenums.edepthoffieldmethod.md)\r\n    - [EDetachmentRule](api/uassetapi.unrealtypes.engineenums.edetachmentrule.md)\r\n    - [EDetailMode](api/uassetapi.unrealtypes.engineenums.edetailmode.md)\r\n    - [EDistributionVectorLockFlags](api/uassetapi.unrealtypes.engineenums.edistributionvectorlockflags.md)\r\n    - [EDistributionVectorMirrorFlags](api/uassetapi.unrealtypes.engineenums.edistributionvectormirrorflags.md)\r\n    - [EDOFMode](api/uassetapi.unrealtypes.engineenums.edofmode.md)\r\n    - [EDrawDebugItemType](api/uassetapi.unrealtypes.engineenums.edrawdebugitemtype.md)\r\n    - [EDrawDebugTrace](api/uassetapi.unrealtypes.engineenums.edrawdebugtrace.md)\r\n    - [EDynamicForceFeedbackAction](api/uassetapi.unrealtypes.engineenums.edynamicforcefeedbackaction.md)\r\n    - [EEarlyZPass](api/uassetapi.unrealtypes.engineenums.eearlyzpass.md)\r\n    - [EEasingFunc](api/uassetapi.unrealtypes.engineenums.eeasingfunc.md)\r\n    - [EEdGraphPinDirection](api/uassetapi.unrealtypes.engineenums.eedgraphpindirection.md)\r\n    - [EEmitterDynamicParameterValue](api/uassetapi.unrealtypes.engineenums.eemitterdynamicparametervalue.md)\r\n    - [EEmitterNormalsMode](api/uassetapi.unrealtypes.engineenums.eemitternormalsmode.md)\r\n    - [EEmitterRenderMode](api/uassetapi.unrealtypes.engineenums.eemitterrendermode.md)\r\n    - [EEndPlayReason](api/uassetapi.unrealtypes.engineenums.eendplayreason.md)\r\n    - [EEvaluateCurveTableResult](api/uassetapi.unrealtypes.engineenums.eevaluatecurvetableresult.md)\r\n    - [EEvaluatorDataSource](api/uassetapi.unrealtypes.engineenums.eevaluatordatasource.md)\r\n    - [EEvaluatorMode](api/uassetapi.unrealtypes.engineenums.eevaluatormode.md)\r\n    - [EFastArraySerializerDeltaFlags](api/uassetapi.unrealtypes.engineenums.efastarrayserializerdeltaflags.md)\r\n    - [EFilterInterpolationType](api/uassetapi.unrealtypes.engineenums.efilterinterpolationtype.md)\r\n    - [EFontCacheType](api/uassetapi.unrealtypes.engineenums.efontcachetype.md)\r\n    - [EFontImportCharacterSet](api/uassetapi.unrealtypes.engineenums.efontimportcharacterset.md)\r\n    - [EFormatArgumentType](api/uassetapi.unrealtypes.engineenums.eformatargumenttype.md)\r\n    - [EFrictionCombineMode](api/uassetapi.unrealtypes.engineenums.efrictioncombinemode.md)\r\n    - [EFullyLoadPackageType](api/uassetapi.unrealtypes.engineenums.efullyloadpackagetype.md)\r\n    - [EFunctionInputType](api/uassetapi.unrealtypes.engineenums.efunctioninputtype.md)\r\n    - [EGBufferFormat](api/uassetapi.unrealtypes.engineenums.egbufferformat.md)\r\n    - [EGrammaticalGender](api/uassetapi.unrealtypes.engineenums.egrammaticalgender.md)\r\n    - [EGrammaticalNumber](api/uassetapi.unrealtypes.engineenums.egrammaticalnumber.md)\r\n    - [EGraphAxisStyle](api/uassetapi.unrealtypes.engineenums.egraphaxisstyle.md)\r\n    - [EGraphDataStyle](api/uassetapi.unrealtypes.engineenums.egraphdatastyle.md)\r\n    - [EGraphType](api/uassetapi.unrealtypes.engineenums.egraphtype.md)\r\n    - [EHasCustomNavigableGeometry](api/uassetapi.unrealtypes.engineenums.ehascustomnavigablegeometry.md)\r\n    - [EHitProxyPriority](api/uassetapi.unrealtypes.engineenums.ehitproxypriority.md)\r\n    - [EHorizTextAligment](api/uassetapi.unrealtypes.engineenums.ehoriztextaligment.md)\r\n    - [EImportanceLevel](api/uassetapi.unrealtypes.engineenums.eimportancelevel.md)\r\n    - [EImportanceWeight](api/uassetapi.unrealtypes.engineenums.eimportanceweight.md)\r\n    - [EIndirectLightingCacheQuality](api/uassetapi.unrealtypes.engineenums.eindirectlightingcachequality.md)\r\n    - [EInertializationBoneState](api/uassetapi.unrealtypes.engineenums.einertializationbonestate.md)\r\n    - [EInertializationSpace](api/uassetapi.unrealtypes.engineenums.einertializationspace.md)\r\n    - [EInertializationState](api/uassetapi.unrealtypes.engineenums.einertializationstate.md)\r\n    - [EInitialOscillatorOffset](api/uassetapi.unrealtypes.engineenums.einitialoscillatoroffset.md)\r\n    - [EInputEvent](api/uassetapi.unrealtypes.engineenums.einputevent.md)\r\n    - [EInterpMoveAxis](api/uassetapi.unrealtypes.engineenums.einterpmoveaxis.md)\r\n    - [EInterpToBehaviourType](api/uassetapi.unrealtypes.engineenums.einterptobehaviourtype.md)\r\n    - [EInterpTrackMoveRotMode](api/uassetapi.unrealtypes.engineenums.einterptrackmoverotmode.md)\r\n    - [EKinematicBonesUpdateToPhysics](api/uassetapi.unrealtypes.engineenums.ekinematicbonesupdatetophysics.md)\r\n    - [ELandscapeCullingPrecision](api/uassetapi.unrealtypes.engineenums.elandscapecullingprecision.md)\r\n    - [ELegendPosition](api/uassetapi.unrealtypes.engineenums.elegendposition.md)\r\n    - [ELerpInterpolationMode](api/uassetapi.unrealtypes.engineenums.elerpinterpolationmode.md)\r\n    - [ELightingBuildQuality](api/uassetapi.unrealtypes.engineenums.elightingbuildquality.md)\r\n    - [ELightMapPaddingType](api/uassetapi.unrealtypes.engineenums.elightmappaddingtype.md)\r\n    - [ELightmapType](api/uassetapi.unrealtypes.engineenums.elightmaptype.md)\r\n    - [ELightUnits](api/uassetapi.unrealtypes.engineenums.elightunits.md)\r\n    - [ELinearConstraintMotion](api/uassetapi.unrealtypes.engineenums.elinearconstraintmotion.md)\r\n    - [ELocationBoneSocketSelectionMethod](api/uassetapi.unrealtypes.engineenums.elocationbonesocketselectionmethod.md)\r\n    - [ELocationBoneSocketSource](api/uassetapi.unrealtypes.engineenums.elocationbonesocketsource.md)\r\n    - [ELocationEmitterSelectionMethod](api/uassetapi.unrealtypes.engineenums.elocationemitterselectionmethod.md)\r\n    - [ELocationSkelVertSurfaceSource](api/uassetapi.unrealtypes.engineenums.elocationskelvertsurfacesource.md)\r\n    - [EMaterialAttributeBlend](api/uassetapi.unrealtypes.engineenums.ematerialattributeblend.md)\r\n    - [EMaterialDecalResponse](api/uassetapi.unrealtypes.engineenums.ematerialdecalresponse.md)\r\n    - [EMaterialDomain](api/uassetapi.unrealtypes.engineenums.ematerialdomain.md)\r\n    - [EMaterialExposedTextureProperty](api/uassetapi.unrealtypes.engineenums.ematerialexposedtextureproperty.md)\r\n    - [EMaterialExposedViewProperty](api/uassetapi.unrealtypes.engineenums.ematerialexposedviewproperty.md)\r\n    - [EMaterialFunctionUsage](api/uassetapi.unrealtypes.engineenums.ematerialfunctionusage.md)\r\n    - [EMaterialMergeType](api/uassetapi.unrealtypes.engineenums.ematerialmergetype.md)\r\n    - [EMaterialParameterAssociation](api/uassetapi.unrealtypes.engineenums.ematerialparameterassociation.md)\r\n    - [EMaterialPositionTransformSource](api/uassetapi.unrealtypes.engineenums.ematerialpositiontransformsource.md)\r\n    - [EMaterialProperty](api/uassetapi.unrealtypes.engineenums.ematerialproperty.md)\r\n    - [EMaterialSamplerType](api/uassetapi.unrealtypes.engineenums.ematerialsamplertype.md)\r\n    - [EMaterialSceneAttributeInputMode](api/uassetapi.unrealtypes.engineenums.ematerialsceneattributeinputmode.md)\r\n    - [EMaterialShadingModel](api/uassetapi.unrealtypes.engineenums.ematerialshadingmodel.md)\r\n    - [EMaterialStencilCompare](api/uassetapi.unrealtypes.engineenums.ematerialstencilcompare.md)\r\n    - [EMaterialTessellationMode](api/uassetapi.unrealtypes.engineenums.ematerialtessellationmode.md)\r\n    - [EMaterialUsage](api/uassetapi.unrealtypes.engineenums.ematerialusage.md)\r\n    - [EMaterialVectorCoordTransform](api/uassetapi.unrealtypes.engineenums.ematerialvectorcoordtransform.md)\r\n    - [EMaterialVectorCoordTransformSource](api/uassetapi.unrealtypes.engineenums.ematerialvectorcoordtransformsource.md)\r\n    - [EMatrixColumns](api/uassetapi.unrealtypes.engineenums.ematrixcolumns.md)\r\n    - [EMaxConcurrentResolutionRule](api/uassetapi.unrealtypes.engineenums.emaxconcurrentresolutionrule.md)\r\n    - [EMeshBufferAccess](api/uassetapi.unrealtypes.engineenums.emeshbufferaccess.md)\r\n    - [EMeshCameraFacingOptions](api/uassetapi.unrealtypes.engineenums.emeshcamerafacingoptions.md)\r\n    - [EMeshCameraFacingUpAxis](api/uassetapi.unrealtypes.engineenums.emeshcamerafacingupaxis.md)\r\n    - [EMeshFeatureImportance](api/uassetapi.unrealtypes.engineenums.emeshfeatureimportance.md)\r\n    - [EMeshInstancingReplacementMethod](api/uassetapi.unrealtypes.engineenums.emeshinstancingreplacementmethod.md)\r\n    - [EMeshLODSelectionType](api/uassetapi.unrealtypes.engineenums.emeshlodselectiontype.md)\r\n    - [EMeshMergeType](api/uassetapi.unrealtypes.engineenums.emeshmergetype.md)\r\n    - [EMeshScreenAlignment](api/uassetapi.unrealtypes.engineenums.emeshscreenalignment.md)\r\n    - [EMicroTransactionDelegate](api/uassetapi.unrealtypes.engineenums.emicrotransactiondelegate.md)\r\n    - [EMicroTransactionResult](api/uassetapi.unrealtypes.engineenums.emicrotransactionresult.md)\r\n    - [EMobileMSAASampleCount](api/uassetapi.unrealtypes.engineenums.emobilemsaasamplecount.md)\r\n    - [EModuleType](api/uassetapi.unrealtypes.engineenums.emoduletype.md)\r\n    - [EMonoChannelUpmixMethod](api/uassetapi.unrealtypes.engineenums.emonochannelupmixmethod.md)\r\n    - [EMontageNotifyTickType](api/uassetapi.unrealtypes.engineenums.emontagenotifyticktype.md)\r\n    - [EMontagePlayReturnType](api/uassetapi.unrealtypes.engineenums.emontageplayreturntype.md)\r\n    - [EMontageSubStepResult](api/uassetapi.unrealtypes.engineenums.emontagesubstepresult.md)\r\n    - [EMouseCaptureMode](api/uassetapi.unrealtypes.engineenums.emousecapturemode.md)\r\n    - [EMouseLockMode](api/uassetapi.unrealtypes.engineenums.emouselockmode.md)\r\n    - [EMoveComponentAction](api/uassetapi.unrealtypes.engineenums.emovecomponentaction.md)\r\n    - [EMovementMode](api/uassetapi.unrealtypes.engineenums.emovementmode.md)\r\n    - [ENaturalSoundFalloffMode](api/uassetapi.unrealtypes.engineenums.enaturalsoundfalloffmode.md)\r\n    - [ENavDataGatheringMode](api/uassetapi.unrealtypes.engineenums.enavdatagatheringmode.md)\r\n    - [ENavDataGatheringModeConfig](api/uassetapi.unrealtypes.engineenums.enavdatagatheringmodeconfig.md)\r\n    - [ENavigationOptionFlag](api/uassetapi.unrealtypes.engineenums.enavigationoptionflag.md)\r\n    - [ENavigationQueryResult](api/uassetapi.unrealtypes.engineenums.enavigationqueryresult.md)\r\n    - [ENavLinkDirection](api/uassetapi.unrealtypes.engineenums.enavlinkdirection.md)\r\n    - [ENavPathEvent](api/uassetapi.unrealtypes.engineenums.enavpathevent.md)\r\n    - [ENetDormancy](api/uassetapi.unrealtypes.engineenums.enetdormancy.md)\r\n    - [ENetRole](api/uassetapi.unrealtypes.engineenums.enetrole.md)\r\n    - [ENetworkFailure](api/uassetapi.unrealtypes.engineenums.enetworkfailure.md)\r\n    - [ENetworkLagState](api/uassetapi.unrealtypes.engineenums.enetworklagstate.md)\r\n    - [ENetworkSmoothingMode](api/uassetapi.unrealtypes.engineenums.enetworksmoothingmode.md)\r\n    - [ENodeAdvancedPins](api/uassetapi.unrealtypes.engineenums.enodeadvancedpins.md)\r\n    - [ENodeEnabledState](api/uassetapi.unrealtypes.engineenums.enodeenabledstate.md)\r\n    - [ENodeTitleType](api/uassetapi.unrealtypes.engineenums.enodetitletype.md)\r\n    - [ENoiseFunction](api/uassetapi.unrealtypes.engineenums.enoisefunction.md)\r\n    - [ENormalMode](api/uassetapi.unrealtypes.engineenums.enormalmode.md)\r\n    - [ENotifyFilterType](api/uassetapi.unrealtypes.engineenums.enotifyfiltertype.md)\r\n    - [ENotifyTriggerMode](api/uassetapi.unrealtypes.engineenums.enotifytriggermode.md)\r\n    - [EObjectTypeQuery](api/uassetapi.unrealtypes.engineenums.eobjecttypequery.md)\r\n    - [EOcclusionCombineMode](api/uassetapi.unrealtypes.engineenums.eocclusioncombinemode.md)\r\n    - [EOpacitySourceMode](api/uassetapi.unrealtypes.engineenums.eopacitysourcemode.md)\r\n    - [EOptimizationType](api/uassetapi.unrealtypes.engineenums.eoptimizationtype.md)\r\n    - [EOrbitChainMode](api/uassetapi.unrealtypes.engineenums.eorbitchainmode.md)\r\n    - [EOscillatorWaveform](api/uassetapi.unrealtypes.engineenums.eoscillatorwaveform.md)\r\n    - [EOverlapFilterOption](api/uassetapi.unrealtypes.engineenums.eoverlapfilteroption.md)\r\n    - [EPanningMethod](api/uassetapi.unrealtypes.engineenums.epanningmethod.md)\r\n    - [EParticleAxisLock](api/uassetapi.unrealtypes.engineenums.eparticleaxislock.md)\r\n    - [EParticleBurstMethod](api/uassetapi.unrealtypes.engineenums.eparticleburstmethod.md)\r\n    - [EParticleCameraOffsetUpdateMethod](api/uassetapi.unrealtypes.engineenums.eparticlecameraoffsetupdatemethod.md)\r\n    - [EParticleCollisionComplete](api/uassetapi.unrealtypes.engineenums.eparticlecollisioncomplete.md)\r\n    - [EParticleCollisionMode](api/uassetapi.unrealtypes.engineenums.eparticlecollisionmode.md)\r\n    - [EParticleCollisionResponse](api/uassetapi.unrealtypes.engineenums.eparticlecollisionresponse.md)\r\n    - [EParticleDetailMode](api/uassetapi.unrealtypes.engineenums.eparticledetailmode.md)\r\n    - [EParticleEventType](api/uassetapi.unrealtypes.engineenums.eparticleeventtype.md)\r\n    - [EParticleScreenAlignment](api/uassetapi.unrealtypes.engineenums.eparticlescreenalignment.md)\r\n    - [EParticleSignificanceLevel](api/uassetapi.unrealtypes.engineenums.eparticlesignificancelevel.md)\r\n    - [EParticleSortMode](api/uassetapi.unrealtypes.engineenums.eparticlesortmode.md)\r\n    - [EParticleSourceSelectionMethod](api/uassetapi.unrealtypes.engineenums.eparticlesourceselectionmethod.md)\r\n    - [EParticleSubUVInterpMethod](api/uassetapi.unrealtypes.engineenums.eparticlesubuvinterpmethod.md)\r\n    - [EParticleSysParamType](api/uassetapi.unrealtypes.engineenums.eparticlesysparamtype.md)\r\n    - [EParticleSystemInsignificanceReaction](api/uassetapi.unrealtypes.engineenums.eparticlesysteminsignificancereaction.md)\r\n    - [EParticleSystemOcclusionBoundsMethod](api/uassetapi.unrealtypes.engineenums.eparticlesystemocclusionboundsmethod.md)\r\n    - [EParticleSystemUpdateMode](api/uassetapi.unrealtypes.engineenums.eparticlesystemupdatemode.md)\r\n    - [EParticleUVFlipMode](api/uassetapi.unrealtypes.engineenums.eparticleuvflipmode.md)\r\n    - [EPhysBodyOp](api/uassetapi.unrealtypes.engineenums.ephysbodyop.md)\r\n    - [EPhysicalMaterialMaskColor](api/uassetapi.unrealtypes.engineenums.ephysicalmaterialmaskcolor.md)\r\n    - [EPhysicalSurface](api/uassetapi.unrealtypes.engineenums.ephysicalsurface.md)\r\n    - [EPhysicsTransformUpdateMode](api/uassetapi.unrealtypes.engineenums.ephysicstransformupdatemode.md)\r\n    - [EPhysicsType](api/uassetapi.unrealtypes.engineenums.ephysicstype.md)\r\n    - [EPinContainerType](api/uassetapi.unrealtypes.engineenums.epincontainertype.md)\r\n    - [EPinHidingMode](api/uassetapi.unrealtypes.engineenums.epinhidingmode.md)\r\n    - [EPlaneConstraintAxisSetting](api/uassetapi.unrealtypes.engineenums.eplaneconstraintaxissetting.md)\r\n    - [EPlatformInterfaceDataType](api/uassetapi.unrealtypes.engineenums.eplatforminterfacedatatype.md)\r\n    - [EPostCopyOperation](api/uassetapi.unrealtypes.engineenums.epostcopyoperation.md)\r\n    - [EPreviewAnimationBlueprintApplicationMethod](api/uassetapi.unrealtypes.engineenums.epreviewanimationblueprintapplicationmethod.md)\r\n    - [EPrimaryAssetCookRule](api/uassetapi.unrealtypes.engineenums.eprimaryassetcookrule.md)\r\n    - [EPriorityAttenuationMethod](api/uassetapi.unrealtypes.engineenums.epriorityattenuationmethod.md)\r\n    - [EProxyNormalComputationMethod](api/uassetapi.unrealtypes.engineenums.eproxynormalcomputationmethod.md)\r\n    - [EPSCPoolMethod](api/uassetapi.unrealtypes.engineenums.epscpoolmethod.md)\r\n    - [EQuitPreference](api/uassetapi.unrealtypes.engineenums.equitpreference.md)\r\n    - [ERadialImpulseFalloff](api/uassetapi.unrealtypes.engineenums.eradialimpulsefalloff.md)\r\n    - [ERawCurveTrackTypes](api/uassetapi.unrealtypes.engineenums.erawcurvetracktypes.md)\r\n    - [ERayTracingGlobalIlluminationType](api/uassetapi.unrealtypes.engineenums.eraytracingglobalilluminationtype.md)\r\n    - [EReflectedAndRefractedRayTracedShadows](api/uassetapi.unrealtypes.engineenums.ereflectedandrefractedraytracedshadows.md)\r\n    - [EReflectionSourceType](api/uassetapi.unrealtypes.engineenums.ereflectionsourcetype.md)\r\n    - [EReflectionsType](api/uassetapi.unrealtypes.engineenums.ereflectionstype.md)\r\n    - [ERefractionMode](api/uassetapi.unrealtypes.engineenums.erefractionmode.md)\r\n    - [ERelativeTransformSpace](api/uassetapi.unrealtypes.engineenums.erelativetransformspace.md)\r\n    - [ERendererStencilMask](api/uassetapi.unrealtypes.engineenums.erendererstencilmask.md)\r\n    - [ERenderFocusRule](api/uassetapi.unrealtypes.engineenums.erenderfocusrule.md)\r\n    - [EReporterLineStyle](api/uassetapi.unrealtypes.engineenums.ereporterlinestyle.md)\r\n    - [EReverbSendMethod](api/uassetapi.unrealtypes.engineenums.ereverbsendmethod.md)\r\n    - [ERichCurveCompressionFormat](api/uassetapi.unrealtypes.engineenums.erichcurvecompressionformat.md)\r\n    - [ERichCurveExtrapolation](api/uassetapi.unrealtypes.engineenums.erichcurveextrapolation.md)\r\n    - [ERichCurveInterpMode](api/uassetapi.unrealtypes.engineenums.erichcurveinterpmode.md)\r\n    - [ERichCurveKeyTimeCompressionFormat](api/uassetapi.unrealtypes.engineenums.erichcurvekeytimecompressionformat.md)\r\n    - [ERichCurveTangentMode](api/uassetapi.unrealtypes.engineenums.erichcurvetangentmode.md)\r\n    - [ERichCurveTangentWeightMode](api/uassetapi.unrealtypes.engineenums.erichcurvetangentweightmode.md)\r\n    - [ERootMotionAccumulateMode](api/uassetapi.unrealtypes.engineenums.erootmotionaccumulatemode.md)\r\n    - [ERootMotionFinishVelocityMode](api/uassetapi.unrealtypes.engineenums.erootmotionfinishvelocitymode.md)\r\n    - [ERootMotionMode](api/uassetapi.unrealtypes.engineenums.erootmotionmode.md)\r\n    - [ERootMotionRootLock](api/uassetapi.unrealtypes.engineenums.erootmotionrootlock.md)\r\n    - [ERootMotionSourceSettingsFlags](api/uassetapi.unrealtypes.engineenums.erootmotionsourcesettingsflags.md)\r\n    - [ERootMotionSourceStatusFlags](api/uassetapi.unrealtypes.engineenums.erootmotionsourcestatusflags.md)\r\n    - [ERotatorQuantization](api/uassetapi.unrealtypes.engineenums.erotatorquantization.md)\r\n    - [ERoundingMode](api/uassetapi.unrealtypes.engineenums.eroundingmode.md)\r\n    - [ERuntimeVirtualTextureMainPassType](api/uassetapi.unrealtypes.engineenums.eruntimevirtualtexturemainpasstype.md)\r\n    - [ERuntimeVirtualTextureMaterialType](api/uassetapi.unrealtypes.engineenums.eruntimevirtualtexturematerialtype.md)\r\n    - [ERuntimeVirtualTextureMipValueMode](api/uassetapi.unrealtypes.engineenums.eruntimevirtualtexturemipvaluemode.md)\r\n    - [ESamplerSourceMode](api/uassetapi.unrealtypes.engineenums.esamplersourcemode.md)\r\n    - [ESceneCaptureCompositeMode](api/uassetapi.unrealtypes.engineenums.escenecapturecompositemode.md)\r\n    - [ESceneCapturePrimitiveRenderMode](api/uassetapi.unrealtypes.engineenums.escenecaptureprimitiverendermode.md)\r\n    - [ESceneCaptureSource](api/uassetapi.unrealtypes.engineenums.escenecapturesource.md)\r\n    - [ESceneDepthPriorityGroup](api/uassetapi.unrealtypes.engineenums.escenedepthprioritygroup.md)\r\n    - [ESceneTextureId](api/uassetapi.unrealtypes.engineenums.escenetextureid.md)\r\n    - [EScreenOrientation](api/uassetapi.unrealtypes.engineenums.escreenorientation.md)\r\n    - [ESendLevelControlMethod](api/uassetapi.unrealtypes.engineenums.esendlevelcontrolmethod.md)\r\n    - [ESettingsDOF](api/uassetapi.unrealtypes.engineenums.esettingsdof.md)\r\n    - [ESettingsLockedAxis](api/uassetapi.unrealtypes.engineenums.esettingslockedaxis.md)\r\n    - [EShadowMapFlags](api/uassetapi.unrealtypes.engineenums.eshadowmapflags.md)\r\n    - [ESkeletalMeshGeoImportVersions](api/uassetapi.unrealtypes.engineenums.eskeletalmeshgeoimportversions.md)\r\n    - [ESkeletalMeshSkinningImportVersions](api/uassetapi.unrealtypes.engineenums.eskeletalmeshskinningimportversions.md)\r\n    - [ESkinCacheDefaultBehavior](api/uassetapi.unrealtypes.engineenums.eskincachedefaultbehavior.md)\r\n    - [ESkinCacheUsage](api/uassetapi.unrealtypes.engineenums.eskincacheusage.md)\r\n    - [ESkyAtmosphereTransformMode](api/uassetapi.unrealtypes.engineenums.eskyatmospheretransformmode.md)\r\n    - [ESkyLightSourceType](api/uassetapi.unrealtypes.engineenums.eskylightsourcetype.md)\r\n    - [ESlateGesture](api/uassetapi.unrealtypes.engineenums.eslategesture.md)\r\n    - [ESleepFamily](api/uassetapi.unrealtypes.engineenums.esleepfamily.md)\r\n    - [ESoundDistanceCalc](api/uassetapi.unrealtypes.engineenums.esounddistancecalc.md)\r\n    - [ESoundGroup](api/uassetapi.unrealtypes.engineenums.esoundgroup.md)\r\n    - [ESoundSpatializationAlgorithm](api/uassetapi.unrealtypes.engineenums.esoundspatializationalgorithm.md)\r\n    - [ESoundWaveFFTSize](api/uassetapi.unrealtypes.engineenums.esoundwavefftsize.md)\r\n    - [ESoundWaveLoadingBehavior](api/uassetapi.unrealtypes.engineenums.esoundwaveloadingbehavior.md)\r\n    - [ESourceBusChannels](api/uassetapi.unrealtypes.engineenums.esourcebuschannels.md)\r\n    - [ESourceBusSendLevelControlMethod](api/uassetapi.unrealtypes.engineenums.esourcebussendlevelcontrolmethod.md)\r\n    - [ESpawnActorCollisionHandlingMethod](api/uassetapi.unrealtypes.engineenums.espawnactorcollisionhandlingmethod.md)\r\n    - [ESpeedTreeGeometryType](api/uassetapi.unrealtypes.engineenums.espeedtreegeometrytype.md)\r\n    - [ESpeedTreeLODType](api/uassetapi.unrealtypes.engineenums.espeedtreelodtype.md)\r\n    - [ESpeedTreeWindType](api/uassetapi.unrealtypes.engineenums.espeedtreewindtype.md)\r\n    - [ESplineCoordinateSpace](api/uassetapi.unrealtypes.engineenums.esplinecoordinatespace.md)\r\n    - [ESplineMeshAxis](api/uassetapi.unrealtypes.engineenums.esplinemeshaxis.md)\r\n    - [ESplinePointType](api/uassetapi.unrealtypes.engineenums.esplinepointtype.md)\r\n    - [EStandbyType](api/uassetapi.unrealtypes.engineenums.estandbytype.md)\r\n    - [EStaticMeshReductionTerimationCriterion](api/uassetapi.unrealtypes.engineenums.estaticmeshreductionterimationcriterion.md)\r\n    - [EStereoLayerShape](api/uassetapi.unrealtypes.engineenums.estereolayershape.md)\r\n    - [EStereoLayerType](api/uassetapi.unrealtypes.engineenums.estereolayertype.md)\r\n    - [EStreamingVolumeUsage](api/uassetapi.unrealtypes.engineenums.estreamingvolumeusage.md)\r\n    - [ESubmixSendMethod](api/uassetapi.unrealtypes.engineenums.esubmixsendmethod.md)\r\n    - [ESubUVBoundingVertexCount](api/uassetapi.unrealtypes.engineenums.esubuvboundingvertexcount.md)\r\n    - [ESuggestProjVelocityTraceOption](api/uassetapi.unrealtypes.engineenums.esuggestprojvelocitytraceoption.md)\r\n    - [ETeleportType](api/uassetapi.unrealtypes.engineenums.eteleporttype.md)\r\n    - [ETemperatureSeverityType](api/uassetapi.unrealtypes.engineenums.etemperatureseveritytype.md)\r\n    - [ETextGender](api/uassetapi.unrealtypes.engineenums.etextgender.md)\r\n    - [ETextureColorChannel](api/uassetapi.unrealtypes.engineenums.etexturecolorchannel.md)\r\n    - [ETextureCompressionQuality](api/uassetapi.unrealtypes.engineenums.etexturecompressionquality.md)\r\n    - [ETextureLossyCompressionAmount](api/uassetapi.unrealtypes.engineenums.etexturelossycompressionamount.md)\r\n    - [ETextureMipCount](api/uassetapi.unrealtypes.engineenums.etexturemipcount.md)\r\n    - [ETextureMipLoadOptions](api/uassetapi.unrealtypes.engineenums.etexturemiploadoptions.md)\r\n    - [ETextureMipValueMode](api/uassetapi.unrealtypes.engineenums.etexturemipvaluemode.md)\r\n    - [ETexturePowerOfTwoSetting](api/uassetapi.unrealtypes.engineenums.etexturepoweroftwosetting.md)\r\n    - [ETextureRenderTargetFormat](api/uassetapi.unrealtypes.engineenums.etexturerendertargetformat.md)\r\n    - [ETextureSamplerFilter](api/uassetapi.unrealtypes.engineenums.etexturesamplerfilter.md)\r\n    - [ETextureSizingType](api/uassetapi.unrealtypes.engineenums.etexturesizingtype.md)\r\n    - [ETextureSourceArtType](api/uassetapi.unrealtypes.engineenums.etexturesourcearttype.md)\r\n    - [ETextureSourceFormat](api/uassetapi.unrealtypes.engineenums.etexturesourceformat.md)\r\n    - [ETickingGroup](api/uassetapi.unrealtypes.engineenums.etickinggroup.md)\r\n    - [ETimecodeProviderSynchronizationState](api/uassetapi.unrealtypes.engineenums.etimecodeprovidersynchronizationstate.md)\r\n    - [ETimelineDirection](api/uassetapi.unrealtypes.engineenums.etimelinedirection.md)\r\n    - [ETimelineLengthMode](api/uassetapi.unrealtypes.engineenums.etimelinelengthmode.md)\r\n    - [ETimelineSigType](api/uassetapi.unrealtypes.engineenums.etimelinesigtype.md)\r\n    - [ETimeStretchCurveMapping](api/uassetapi.unrealtypes.engineenums.etimestretchcurvemapping.md)\r\n    - [ETraceTypeQuery](api/uassetapi.unrealtypes.engineenums.etracetypequery.md)\r\n    - [ETrackActiveCondition](api/uassetapi.unrealtypes.engineenums.etrackactivecondition.md)\r\n    - [ETrackToggleAction](api/uassetapi.unrealtypes.engineenums.etracktoggleaction.md)\r\n    - [ETrail2SourceMethod](api/uassetapi.unrealtypes.engineenums.etrail2sourcemethod.md)\r\n    - [ETrailsRenderAxisOption](api/uassetapi.unrealtypes.engineenums.etrailsrenderaxisoption.md)\r\n    - [ETrailWidthMode](api/uassetapi.unrealtypes.engineenums.etrailwidthmode.md)\r\n    - [ETransitionBlendMode](api/uassetapi.unrealtypes.engineenums.etransitionblendmode.md)\r\n    - [ETransitionLogicType](api/uassetapi.unrealtypes.engineenums.etransitionlogictype.md)\r\n    - [ETransitionType](api/uassetapi.unrealtypes.engineenums.etransitiontype.md)\r\n    - [ETranslucencyLightingMode](api/uassetapi.unrealtypes.engineenums.etranslucencylightingmode.md)\r\n    - [ETranslucencyType](api/uassetapi.unrealtypes.engineenums.etranslucencytype.md)\r\n    - [ETranslucentSortPolicy](api/uassetapi.unrealtypes.engineenums.etranslucentsortpolicy.md)\r\n    - [ETravelFailure](api/uassetapi.unrealtypes.engineenums.etravelfailure.md)\r\n    - [ETravelType](api/uassetapi.unrealtypes.engineenums.etraveltype.md)\r\n    - [ETwitterIntegrationDelegate](api/uassetapi.unrealtypes.engineenums.etwitterintegrationdelegate.md)\r\n    - [ETwitterRequestMethod](api/uassetapi.unrealtypes.engineenums.etwitterrequestmethod.md)\r\n    - [ETypeAdvanceAnim](api/uassetapi.unrealtypes.engineenums.etypeadvanceanim.md)\r\n    - [EUIScalingRule](api/uassetapi.unrealtypes.engineenums.euiscalingrule.md)\r\n    - [EUpdateRateShiftBucket](api/uassetapi.unrealtypes.engineenums.eupdaterateshiftbucket.md)\r\n    - [EUserDefinedStructureStatus](api/uassetapi.unrealtypes.engineenums.euserdefinedstructurestatus.md)\r\n    - [EUVOutput](api/uassetapi.unrealtypes.engineenums.euvoutput.md)\r\n    - [EVectorFieldConstructionOp](api/uassetapi.unrealtypes.engineenums.evectorfieldconstructionop.md)\r\n    - [EVectorNoiseFunction](api/uassetapi.unrealtypes.engineenums.evectornoisefunction.md)\r\n    - [EVectorQuantization](api/uassetapi.unrealtypes.engineenums.evectorquantization.md)\r\n    - [EVertexPaintAxis](api/uassetapi.unrealtypes.engineenums.evertexpaintaxis.md)\r\n    - [EVerticalTextAligment](api/uassetapi.unrealtypes.engineenums.everticaltextaligment.md)\r\n    - [EViewModeIndex](api/uassetapi.unrealtypes.engineenums.eviewmodeindex.md)\r\n    - [EViewTargetBlendFunction](api/uassetapi.unrealtypes.engineenums.eviewtargetblendfunction.md)\r\n    - [EVirtualizationMode](api/uassetapi.unrealtypes.engineenums.evirtualizationmode.md)\r\n    - [EVisibilityAggressiveness](api/uassetapi.unrealtypes.engineenums.evisibilityaggressiveness.md)\r\n    - [EVisibilityBasedAnimTickOption](api/uassetapi.unrealtypes.engineenums.evisibilitybasedanimtickoption.md)\r\n    - [EVisibilityTrackAction](api/uassetapi.unrealtypes.engineenums.evisibilitytrackaction.md)\r\n    - [EVisibilityTrackCondition](api/uassetapi.unrealtypes.engineenums.evisibilitytrackcondition.md)\r\n    - [EVoiceSampleRate](api/uassetapi.unrealtypes.engineenums.evoicesamplerate.md)\r\n    - [EVolumeLightingMethod](api/uassetapi.unrealtypes.engineenums.evolumelightingmethod.md)\r\n    - [EWalkableSlopeBehavior](api/uassetapi.unrealtypes.engineenums.ewalkableslopebehavior.md)\r\n    - [EWindowMode](api/uassetapi.unrealtypes.engineenums.ewindowmode.md)\r\n    - [EWindowTitleBarMode](api/uassetapi.unrealtypes.engineenums.ewindowtitlebarmode.md)\r\n    - [EWindSourceType](api/uassetapi.unrealtypes.engineenums.ewindsourcetype.md)\r\n    - [EWorldPositionIncludedOffsets](api/uassetapi.unrealtypes.engineenums.eworldpositionincludedoffsets.md)\r\n    - [FNavigationSystemRunMode](api/uassetapi.unrealtypes.engineenums.fnavigationsystemrunmode.md)\r\n    - [ModulationParamMode](api/uassetapi.unrealtypes.engineenums.modulationparammode.md)\r\n    - [ParticleReplayState](api/uassetapi.unrealtypes.engineenums.particlereplaystate.md)\r\n    - [ParticleSystemLODMethod](api/uassetapi.unrealtypes.engineenums.particlesystemlodmethod.md)\r\n    - [ReverbPreset](api/uassetapi.unrealtypes.engineenums.reverbpreset.md)\r\n    - [SkeletalMeshOptimizationImportance](api/uassetapi.unrealtypes.engineenums.skeletalmeshoptimizationimportance.md)\r\n    - [SkeletalMeshOptimizationType](api/uassetapi.unrealtypes.engineenums.skeletalmeshoptimizationtype.md)\r\n    - [SkeletalMeshTerminationCriterion](api/uassetapi.unrealtypes.engineenums.skeletalmeshterminationcriterion.md)\r\n    - [TextureAddress](api/uassetapi.unrealtypes.engineenums.textureaddress.md)\r\n    - [TextureCompressionSettings](api/uassetapi.unrealtypes.engineenums.texturecompressionsettings.md)\r\n    - [TextureFilter](api/uassetapi.unrealtypes.engineenums.texturefilter.md)\r\n    - [TextureGroup](api/uassetapi.unrealtypes.engineenums.texturegroup.md)\r\n    - [TextureMipGenSettings](api/uassetapi.unrealtypes.engineenums.texturemipgensettings.md)\r\n  - [UAssetAPI.Unversioned]()\r\n    - [ECompressionMethod](api/uassetapi.unversioned.ecompressionmethod.md)\r\n    - [ECustomVersionSerializationFormat](api/uassetapi.unversioned.ecustomversionserializationformat.md)\r\n    - [EPropertyType](api/uassetapi.unversioned.epropertytype.md)\r\n    - [ESaveGameFileVersion](api/uassetapi.unversioned.esavegamefileversion.md)\r\n    - [FFragment](api/uassetapi.unversioned.ffragment.md)\r\n    - [FUnversionedHeader](api/uassetapi.unversioned.funversionedheader.md)\r\n    - [Oodle](api/uassetapi.unversioned.oodle.md)\r\n    - [SaveGame](api/uassetapi.unversioned.savegame.md)\r\n    - [Usmap](api/uassetapi.unversioned.usmap.md)\r\n    - [UsmapArrayData](api/uassetapi.unversioned.usmaparraydata.md)\r\n    - [UsmapEnum](api/uassetapi.unversioned.usmapenum.md)\r\n    - [UsmapEnumData](api/uassetapi.unversioned.usmapenumdata.md)\r\n    - [UsmapExtensionLayoutVersion](api/uassetapi.unversioned.usmapextensionlayoutversion.md)\r\n    - [UsmapMapData](api/uassetapi.unversioned.usmapmapdata.md)\r\n    - [UsmapProperty](api/uassetapi.unversioned.usmapproperty.md)\r\n    - [UsmapPropertyData](api/uassetapi.unversioned.usmappropertydata.md)\r\n    - [UsmapSchema](api/uassetapi.unversioned.usmapschema.md)\r\n    - [UsmapSchemaPropertiesJsonConverter](api/uassetapi.unversioned.usmapschemapropertiesjsonconverter.md)\r\n    - [UsmapStructData](api/uassetapi.unversioned.usmapstructdata.md)\r\n    - [UsmapStructKind](api/uassetapi.unversioned.usmapstructkind.md)\r\n    - [UsmapVersion](api/uassetapi.unversioned.usmapversion.md)\r\n"
  },
  {
    "path": "docs/src/SUMMARY_header.md",
    "content": "# Summary\r\n[Introduction](README.md)\r\n\r\n# User Guide\r\n- [Build Instructions](guide/build.md)\r\n- [Basic Usage](guide/basic.md)\r\n- [More Examples](guide/extras.md)\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.ac7decrypt.md",
    "content": "# AC7Decrypt\r\n\r\nNamespace: UAssetAPI\r\n\r\nDecryptor for Ace Combat 7 assets.\r\n\r\n```csharp\r\npublic class AC7Decrypt\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [AC7Decrypt](./uassetapi.ac7decrypt.md)\r\n\r\n## Constructors\r\n\r\n### **AC7Decrypt()**\r\n\r\n```csharp\r\npublic AC7Decrypt()\r\n```\r\n\r\n## Methods\r\n\r\n### **Decrypt(String, String)**\r\n\r\nDecrypts an Ace Combat 7 encrypted asset on disk.\r\n\r\n```csharp\r\npublic void Decrypt(string input, string output)\r\n```\r\n\r\n#### Parameters\r\n\r\n`input` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe path to an encrypted asset on disk.\r\n\r\n`output` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe path that the decrypted asset should be saved to.\r\n\r\n### **Encrypt(String, String)**\r\n\r\nEncrypts an Ace Combat 7 encrypted asset on disk.\r\n\r\n```csharp\r\npublic void Encrypt(string input, string output)\r\n```\r\n\r\n#### Parameters\r\n\r\n`input` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe path to a decrypted asset on disk.\r\n\r\n`output` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe path that the encrypted asset should be saved to.\r\n\r\n### **DecryptUAssetBytes(Byte[], AC7XorKey)**\r\n\r\n```csharp\r\npublic Byte[] DecryptUAssetBytes(Byte[] uasset, AC7XorKey xorkey)\r\n```\r\n\r\n#### Parameters\r\n\r\n`uasset` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n`xorkey` [AC7XorKey](./uassetapi.ac7xorkey.md)<br>\r\n\r\n#### Returns\r\n\r\n[Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **EncryptUAssetBytes(Byte[], AC7XorKey)**\r\n\r\n```csharp\r\npublic Byte[] EncryptUAssetBytes(Byte[] uasset, AC7XorKey xorkey)\r\n```\r\n\r\n#### Parameters\r\n\r\n`uasset` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n`xorkey` [AC7XorKey](./uassetapi.ac7xorkey.md)<br>\r\n\r\n#### Returns\r\n\r\n[Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **DecryptUexpBytes(Byte[], AC7XorKey)**\r\n\r\n```csharp\r\npublic Byte[] DecryptUexpBytes(Byte[] uexp, AC7XorKey xorkey)\r\n```\r\n\r\n#### Parameters\r\n\r\n`uexp` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n`xorkey` [AC7XorKey](./uassetapi.ac7xorkey.md)<br>\r\n\r\n#### Returns\r\n\r\n[Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **EncryptUexpBytes(Byte[], AC7XorKey)**\r\n\r\n```csharp\r\npublic Byte[] EncryptUexpBytes(Byte[] uexp, AC7XorKey xorkey)\r\n```\r\n\r\n#### Parameters\r\n\r\n`uexp` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n`xorkey` [AC7XorKey](./uassetapi.ac7xorkey.md)<br>\r\n\r\n#### Returns\r\n\r\n[Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.ac7xorkey.md",
    "content": "# AC7XorKey\r\n\r\nNamespace: UAssetAPI\r\n\r\nXOR key for decrypting a particular Ace Combat 7 asset.\r\n\r\n```csharp\r\npublic class AC7XorKey\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [AC7XorKey](./uassetapi.ac7xorkey.md)\r\n\r\n## Fields\r\n\r\n### **NameKey**\r\n\r\n```csharp\r\npublic int NameKey;\r\n```\r\n\r\n### **Offset**\r\n\r\n```csharp\r\npublic int Offset;\r\n```\r\n\r\n### **pk1**\r\n\r\n```csharp\r\npublic int pk1;\r\n```\r\n\r\n### **pk2**\r\n\r\n```csharp\r\npublic int pk2;\r\n```\r\n\r\n## Constructors\r\n\r\n### **AC7XorKey(String)**\r\n\r\nGenerates an encryption key for a particular asset on disk.\r\n\r\n```csharp\r\npublic AC7XorKey(string fname)\r\n```\r\n\r\n#### Parameters\r\n\r\n`fname` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe name of the asset being encrypted on disk without the extension.\r\n\r\n## Methods\r\n\r\n### **SkipCount(Int32)**\r\n\r\n```csharp\r\npublic void SkipCount(int count)\r\n```\r\n\r\n#### Parameters\r\n\r\n`count` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.assetbinaryreader.md",
    "content": "# AssetBinaryReader\r\n\r\nNamespace: UAssetAPI\r\n\r\nReads primitive data types from Unreal Engine assets.\r\n\r\n```csharp\r\npublic class AssetBinaryReader : UnrealBinaryReader, System.IDisposable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [BinaryReader](https://docs.microsoft.com/en-us/dotnet/api/system.io.binaryreader) → [UnrealBinaryReader](./uassetapi.unrealbinaryreader.md) → [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nImplements [IDisposable](https://docs.microsoft.com/en-us/dotnet/api/system.idisposable)\r\n\r\n## Fields\r\n\r\n### **Asset**\r\n\r\n```csharp\r\npublic UAsset Asset;\r\n```\r\n\r\n### **LoadUexp**\r\n\r\n```csharp\r\npublic bool LoadUexp;\r\n```\r\n\r\n## Properties\r\n\r\n### **BaseStream**\r\n\r\n```csharp\r\npublic Stream BaseStream { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n## Constructors\r\n\r\n### **AssetBinaryReader(Stream, UAsset)**\r\n\r\n```csharp\r\npublic AssetBinaryReader(Stream stream, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`stream` [Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **AssetBinaryReader(Stream, Boolean, UAsset)**\r\n\r\n```csharp\r\npublic AssetBinaryReader(Stream stream, bool inLoadUexp, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`stream` [Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n`inLoadUexp` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n## Methods\r\n\r\n### **ReadPropertyGuid()**\r\n\r\n```csharp\r\npublic Nullable<Guid> ReadPropertyGuid()\r\n```\r\n\r\n#### Returns\r\n\r\n[Nullable&lt;Guid&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.nullable-1)<br>\r\n\r\n### **ReadFName()**\r\n\r\n```csharp\r\npublic FName ReadFName()\r\n```\r\n\r\n#### Returns\r\n\r\n[FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **ReadArray&lt;T&gt;(Func&lt;T&gt;)**\r\n\r\n```csharp\r\npublic T[] ReadArray<T>(Func<T> readElement)\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\n#### Parameters\r\n\r\n`readElement` Func&lt;T&gt;<br>\r\n\r\n#### Returns\r\n\r\nT[]<br>\r\n\r\n### **ReadObjectThumbnail()**\r\n\r\n```csharp\r\npublic FObjectThumbnail ReadObjectThumbnail()\r\n```\r\n\r\n#### Returns\r\n\r\n[FObjectThumbnail](./uassetapi.unrealtypes.fobjectthumbnail.md)<br>\r\n\r\n### **ReadLocMetadataObject()**\r\n\r\n```csharp\r\npublic FLocMetadataObject ReadLocMetadataObject()\r\n```\r\n\r\n#### Returns\r\n\r\n[FLocMetadataObject](./uassetapi.unrealtypes.flocmetadataobject.md)<br>\r\n\r\n### **XFERSTRING()**\r\n\r\n```csharp\r\npublic string XFERSTRING()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **XFERUNICODESTRING()**\r\n\r\n```csharp\r\npublic string XFERUNICODESTRING()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **XFERTEXT()**\r\n\r\n```csharp\r\npublic void XFERTEXT()\r\n```\r\n\r\n### **XFERNAME()**\r\n\r\n```csharp\r\npublic FName XFERNAME()\r\n```\r\n\r\n#### Returns\r\n\r\n[FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **XFER_FUNC_NAME()**\r\n\r\n```csharp\r\npublic FName XFER_FUNC_NAME()\r\n```\r\n\r\n#### Returns\r\n\r\n[FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **XFERPTR()**\r\n\r\n```csharp\r\npublic FPackageIndex XFERPTR()\r\n```\r\n\r\n#### Returns\r\n\r\n[FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\n\r\n### **XFER_FUNC_POINTER()**\r\n\r\n```csharp\r\npublic FPackageIndex XFER_FUNC_POINTER()\r\n```\r\n\r\n#### Returns\r\n\r\n[FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\n\r\n### **XFER_PROP_POINTER()**\r\n\r\n```csharp\r\npublic KismetPropertyPointer XFER_PROP_POINTER()\r\n```\r\n\r\n#### Returns\r\n\r\n[KismetPropertyPointer](./uassetapi.kismet.bytecode.kismetpropertypointer.md)<br>\r\n\r\n### **XFER_OBJECT_POINTER()**\r\n\r\n```csharp\r\npublic FPackageIndex XFER_OBJECT_POINTER()\r\n```\r\n\r\n#### Returns\r\n\r\n[FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\n\r\n### **ReadExpressionArray(EExprToken)**\r\n\r\n```csharp\r\npublic KismetExpression[] ReadExpressionArray(EExprToken endToken)\r\n```\r\n\r\n#### Parameters\r\n\r\n`endToken` [EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n#### Returns\r\n\r\n[KismetExpression[]](./uassetapi.kismet.bytecode.kismetexpression.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.assetbinarywriter.md",
    "content": "# AssetBinaryWriter\r\n\r\nNamespace: UAssetAPI\r\n\r\nWrites primitive data types from Unreal Engine assets.\r\n\r\n```csharp\r\npublic class AssetBinaryWriter : UnrealBinaryWriter, System.IDisposable, System.IAsyncDisposable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [BinaryWriter](https://docs.microsoft.com/en-us/dotnet/api/system.io.binarywriter) → [UnrealBinaryWriter](./uassetapi.unrealbinarywriter.md) → [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nImplements [IDisposable](https://docs.microsoft.com/en-us/dotnet/api/system.idisposable), [IAsyncDisposable](https://docs.microsoft.com/en-us/dotnet/api/system.iasyncdisposable)\r\n\r\n## Fields\r\n\r\n### **Asset**\r\n\r\n```csharp\r\npublic UAsset Asset;\r\n```\r\n\r\n## Properties\r\n\r\n### **BaseStream**\r\n\r\n```csharp\r\npublic Stream BaseStream { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n## Constructors\r\n\r\n### **AssetBinaryWriter(UAsset)**\r\n\r\n```csharp\r\npublic AssetBinaryWriter(UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **AssetBinaryWriter(Stream, UAsset)**\r\n\r\n```csharp\r\npublic AssetBinaryWriter(Stream stream, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`stream` [Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **AssetBinaryWriter(Stream, Encoding, UAsset)**\r\n\r\n```csharp\r\npublic AssetBinaryWriter(Stream stream, Encoding encoding, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`stream` [Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n`encoding` [Encoding](https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **AssetBinaryWriter(Stream, Encoding, Boolean, UAsset)**\r\n\r\n```csharp\r\npublic AssetBinaryWriter(Stream stream, Encoding encoding, bool leaveOpen, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`stream` [Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n`encoding` [Encoding](https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding)<br>\r\n\r\n`leaveOpen` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(FName)**\r\n\r\n```csharp\r\npublic void Write(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **WritePropertyGuid(Nullable&lt;Guid&gt;)**\r\n\r\n```csharp\r\npublic void WritePropertyGuid(Nullable<Guid> guid)\r\n```\r\n\r\n#### Parameters\r\n\r\n`guid` [Nullable&lt;Guid&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.nullable-1)<br>\r\n\r\n### **Write(FObjectThumbnail)**\r\n\r\n```csharp\r\npublic void Write(FObjectThumbnail thumbnail)\r\n```\r\n\r\n#### Parameters\r\n\r\n`thumbnail` [FObjectThumbnail](./uassetapi.unrealtypes.fobjectthumbnail.md)<br>\r\n\r\n### **Write(FLocMetadataObject)**\r\n\r\n```csharp\r\npublic void Write(FLocMetadataObject metadataObject)\r\n```\r\n\r\n#### Parameters\r\n\r\n`metadataObject` [FLocMetadataObject](./uassetapi.unrealtypes.flocmetadataobject.md)<br>\r\n\r\n### **XFERSTRING(String)**\r\n\r\nThis method is intended only to be used in parsing Kismet bytecode; please do not use it for any other purpose!\r\n\r\n```csharp\r\npublic int XFERSTRING(string val)\r\n```\r\n\r\n#### Parameters\r\n\r\n`val` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **XFERUNICODESTRING(String)**\r\n\r\nThis method is intended only to be used in parsing Kismet bytecode; please do not use it for any other purpose!\r\n\r\n```csharp\r\npublic int XFERUNICODESTRING(string val)\r\n```\r\n\r\n#### Parameters\r\n\r\n`val` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **XFERNAME(FName)**\r\n\r\nThis method is intended only to be used in parsing Kismet bytecode; please do not use it for any other purpose!\r\n\r\n```csharp\r\npublic int XFERNAME(FName val)\r\n```\r\n\r\n#### Parameters\r\n\r\n`val` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **XFER_FUNC_NAME(FName)**\r\n\r\nThis method is intended only to be used in parsing Kismet bytecode; please do not use it for any other purpose!\r\n\r\n```csharp\r\npublic int XFER_FUNC_NAME(FName val)\r\n```\r\n\r\n#### Parameters\r\n\r\n`val` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **XFERPTR(FPackageIndex)**\r\n\r\nThis method is intended only to be used in parsing Kismet bytecode; please do not use it for any other purpose!\r\n\r\n```csharp\r\npublic int XFERPTR(FPackageIndex val)\r\n```\r\n\r\n#### Parameters\r\n\r\n`val` [FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **XFER_FUNC_POINTER(FPackageIndex)**\r\n\r\nThis method is intended only to be used in parsing Kismet bytecode; please do not use it for any other purpose!\r\n\r\n```csharp\r\npublic int XFER_FUNC_POINTER(FPackageIndex val)\r\n```\r\n\r\n#### Parameters\r\n\r\n`val` [FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **XFER_PROP_POINTER(KismetPropertyPointer)**\r\n\r\nThis method is intended only to be used in parsing Kismet bytecode; please do not use it for any other purpose!\r\n\r\n```csharp\r\npublic int XFER_PROP_POINTER(KismetPropertyPointer val)\r\n```\r\n\r\n#### Parameters\r\n\r\n`val` [KismetPropertyPointer](./uassetapi.kismet.bytecode.kismetpropertypointer.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **XFER_OBJECT_POINTER(FPackageIndex)**\r\n\r\nThis method is intended only to be used in parsing Kismet bytecode; please do not use it for any other purpose!\r\n\r\n```csharp\r\npublic int XFER_OBJECT_POINTER(FPackageIndex val)\r\n```\r\n\r\n#### Parameters\r\n\r\n`val` [FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.crcgenerator.md",
    "content": "# CRCGenerator\r\n\r\nNamespace: UAssetAPI\r\n\r\n```csharp\r\npublic static class CRCGenerator\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [CRCGenerator](./uassetapi.crcgenerator.md)\r\n\r\n## Fields\r\n\r\n### **CRCTable_DEPRECATED**\r\n\r\n```csharp\r\npublic static UInt32[] CRCTable_DEPRECATED;\r\n```\r\n\r\n### **CRCTablesSB8**\r\n\r\n```csharp\r\npublic static UInt32[,] CRCTablesSB8;\r\n```\r\n\r\n## Methods\r\n\r\n### **GenerateHash(FString, Boolean, Boolean)**\r\n\r\n```csharp\r\npublic static uint GenerateHash(FString text, bool disableCasePreservingHash, bool version420)\r\n```\r\n\r\n#### Parameters\r\n\r\n`text` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n`disableCasePreservingHash` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`version420` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n#### Returns\r\n\r\n[UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n### **GenerateHash(String, Boolean, Boolean)**\r\n\r\n```csharp\r\npublic static uint GenerateHash(string text, bool disableCasePreservingHash, bool version420)\r\n```\r\n\r\n#### Parameters\r\n\r\n`text` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`disableCasePreservingHash` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`version420` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n#### Returns\r\n\r\n[UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n### **GenerateHash(String, Encoding, Boolean, Boolean)**\r\n\r\n```csharp\r\npublic static uint GenerateHash(string text, Encoding encoding, bool disableCasePreservingHash, bool version420)\r\n```\r\n\r\n#### Parameters\r\n\r\n`text` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`encoding` [Encoding](https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding)<br>\r\n\r\n`disableCasePreservingHash` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`version420` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n#### Returns\r\n\r\n[UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n### **ToUpper(Char)**\r\n\r\n```csharp\r\npublic static char ToUpper(char input)\r\n```\r\n\r\n#### Parameters\r\n\r\n`input` [Char](https://docs.microsoft.com/en-us/dotnet/api/system.char)<br>\r\n\r\n#### Returns\r\n\r\n[Char](https://docs.microsoft.com/en-us/dotnet/api/system.char)<br>\r\n\r\n### **ToUpperVersion420(Char)**\r\n\r\n```csharp\r\npublic static char ToUpperVersion420(char input)\r\n```\r\n\r\n#### Parameters\r\n\r\n`input` [Char](https://docs.microsoft.com/en-us/dotnet/api/system.char)<br>\r\n\r\n#### Returns\r\n\r\n[Char](https://docs.microsoft.com/en-us/dotnet/api/system.char)<br>\r\n\r\n### **ToUpper(String)**\r\n\r\n```csharp\r\npublic static string ToUpper(string input)\r\n```\r\n\r\n#### Parameters\r\n\r\n`input` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **ToLower(Char)**\r\n\r\n```csharp\r\npublic static char ToLower(char input)\r\n```\r\n\r\n#### Parameters\r\n\r\n`input` [Char](https://docs.microsoft.com/en-us/dotnet/api/system.char)<br>\r\n\r\n#### Returns\r\n\r\n[Char](https://docs.microsoft.com/en-us/dotnet/api/system.char)<br>\r\n\r\n### **ToLower(String, Boolean)**\r\n\r\n```csharp\r\npublic static string ToLower(string input, bool coalesceToSlash)\r\n```\r\n\r\n#### Parameters\r\n\r\n`input` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`coalesceToSlash` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **ToLower(FString, Boolean)**\r\n\r\n```csharp\r\npublic static FString ToLower(FString input, bool coalesceToSlash)\r\n```\r\n\r\n#### Parameters\r\n\r\n`input` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n`coalesceToSlash` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n#### Returns\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Strihash_DEPRECATED(String, Encoding, Boolean)**\r\n\r\n```csharp\r\npublic static uint Strihash_DEPRECATED(string text, Encoding encoding, bool version420)\r\n```\r\n\r\n#### Parameters\r\n\r\n`text` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`encoding` [Encoding](https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding)<br>\r\n\r\n`version420` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n#### Returns\r\n\r\n[UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n### **StrCrc32(String, UInt32)**\r\n\r\n```csharp\r\npublic static uint StrCrc32(string text, uint CRC)\r\n```\r\n\r\n#### Parameters\r\n\r\n`text` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`CRC` [UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n#### Returns\r\n\r\n[UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.customserializationflags.md",
    "content": "# CustomSerializationFlags\r\n\r\nNamespace: UAssetAPI\r\n\r\n```csharp\r\npublic enum CustomSerializationFlags\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [CustomSerializationFlags](./uassetapi.customserializationflags.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| None | 0 | No flags. |\r\n| NoDummies | 1 | Serialize all dummy FNames to the name map. |\r\n| SkipParsingBytecode | 2 | Skip Kismet bytecode serialization. |\r\n| SkipPreloadDependencyLoading | 4 | Skip loading other assets referenced in preload dependencies. You may wish to set this flag when possible in multi-threading applications, since preload dependency loading could lead to file handle race conditions. |\r\n| SkipParsingExports | 8 | Skip parsing exports at read time. Entries in the export map will be read as raw exports. You can manually parse exports with the [UAsset.ParseExport(AssetBinaryReader, Int32, Boolean)](./uassetapi.uasset.md#parseexportassetbinaryreader-int32-boolean) method. |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.customversion.md",
    "content": "# CustomVersion\r\n\r\nNamespace: UAssetAPI\r\n\r\nA custom version. Controls more specific serialization than the main engine object version does.\r\n\r\n```csharp\r\npublic class CustomVersion : System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [CustomVersion](./uassetapi.customversion.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FString Name;\r\n```\r\n\r\n### **Key**\r\n\r\n```csharp\r\npublic Guid Key;\r\n```\r\n\r\n### **FriendlyName**\r\n\r\n```csharp\r\npublic string FriendlyName;\r\n```\r\n\r\n### **Version**\r\n\r\n```csharp\r\npublic int Version;\r\n```\r\n\r\n### **IsSerialized**\r\n\r\n```csharp\r\npublic bool IsSerialized;\r\n```\r\n\r\n### **GuidToCustomVersionStringMap**\r\n\r\nStatic map of custom version GUIDs to the object or enum that they represent in the Unreal Engine. This list is not necessarily exhaustive, so feel free to add to it if need be.\r\n\r\n```csharp\r\npublic static Dictionary<Guid, string> GuidToCustomVersionStringMap;\r\n```\r\n\r\n### **UnusedCustomVersionKey**\r\n\r\nA GUID that represents an unused custom version.\r\n\r\n```csharp\r\npublic static Guid UnusedCustomVersionKey;\r\n```\r\n\r\n## Constructors\r\n\r\n### **CustomVersion(String, Int32)**\r\n\r\nInitializes a new instance of the [CustomVersion](./uassetapi.customversion.md) class given an object or enum name and a version number.\r\n\r\n```csharp\r\npublic CustomVersion(string friendlyName, int version)\r\n```\r\n\r\n#### Parameters\r\n\r\n`friendlyName` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe friendly name to use when initializing this custom version.\r\n\r\n`version` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe version number to use when initializing this custom version.\r\n\r\n### **CustomVersion(Guid, Int32)**\r\n\r\nInitializes a new instance of the [CustomVersion](./uassetapi.customversion.md) class given a custom version GUID and a version number.\r\n\r\n```csharp\r\npublic CustomVersion(Guid key, int version)\r\n```\r\n\r\n#### Parameters\r\n\r\n`key` [Guid](https://docs.microsoft.com/en-us/dotnet/api/system.guid)<br>\r\nThe GUID to use when initializing this custom version.\r\n\r\n`version` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe version number to use when initializing this custom version.\r\n\r\n### **CustomVersion()**\r\n\r\nInitializes a new instance of the [CustomVersion](./uassetapi.customversion.md) class.\r\n\r\n```csharp\r\npublic CustomVersion()\r\n```\r\n\r\n## Methods\r\n\r\n### **GetCustomVersionFriendlyNameFromGuid(Guid)**\r\n\r\nReturns the name of the object or enum that a custom version GUID represents, as specified in [CustomVersion.GuidToCustomVersionStringMap](./uassetapi.customversion.md#guidtocustomversionstringmap).\r\n\r\n```csharp\r\npublic static string GetCustomVersionFriendlyNameFromGuid(Guid guid)\r\n```\r\n\r\n#### Parameters\r\n\r\n`guid` [Guid](https://docs.microsoft.com/en-us/dotnet/api/system.guid)<br>\r\nA GUID that represents a custom version.\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nA string that represents the friendly name of the corresponding custom version.\r\n\r\n### **GetCustomVersionGuidFromFriendlyName(String)**\r\n\r\nReturns the GUID of the custom version that the object or enum name provided represents.\r\n\r\n```csharp\r\npublic static Guid GetCustomVersionGuidFromFriendlyName(string friendlyName)\r\n```\r\n\r\n#### Parameters\r\n\r\n`friendlyName` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe name of a custom version object or enum.\r\n\r\n#### Returns\r\n\r\n[Guid](https://docs.microsoft.com/en-us/dotnet/api/system.guid)<br>\r\nA GUID that represents the custom version\r\n\r\n### **SetIsSerialized(Boolean)**\r\n\r\n```csharp\r\npublic CustomVersion SetIsSerialized(bool val)\r\n```\r\n\r\n#### Parameters\r\n\r\n`val` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n#### Returns\r\n\r\n[CustomVersion](./uassetapi.customversion.md)<br>\r\n\r\n### **Clone()**\r\n\r\n```csharp\r\npublic object Clone()\r\n```\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.customversions.fanimphysobjectversion.md",
    "content": "# FAnimPhysObjectVersion\r\n\r\nNamespace: UAssetAPI.CustomVersions\r\n\r\nCustom serialization version for changes made in Dev-AnimPhys stream\r\n\r\n```csharp\r\npublic enum FAnimPhysObjectVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [FAnimPhysObjectVersion](./uassetapi.customversions.fanimphysobjectversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| BeforeCustomVersionWasAdded | 0 | Before any version changes were made |\r\n| ConvertAnimNodeLookAtAxis | 1 | convert animnode look at to use just default axis instead of enum, which doesn't do much |\r\n| BoxSphylElemsUseRotators | 2 | Change FKSphylElem and FKBoxElem to use Rotators not Quats for easier editing |\r\n| ThumbnailSceneInfoAndAssetImportDataAreTransactional | 3 | Change thumbnail scene info and asset import data to be transactional |\r\n| AddedClothingMaskWorkflow | 4 | Enabled clothing masks rather than painting parameters directly |\r\n| RemoveUIDFromSmartNameSerialize | 5 | Remove UID from smart name serialize, it just breaks determinism |\r\n| CreateTargetReference | 6 | Convert FName Socket to FSocketReference and added TargetReference that support bone and socket |\r\n| TuneSoftLimitStiffnessAndDamping | 7 | Tune soft limit stiffness and damping coefficients |\r\n| FixInvalidClothParticleMasses | 8 | Fix possible inf/nans in clothing particle masses |\r\n| CacheClothMeshInfluences | 9 | Moved influence count to cached data |\r\n| SmartNameRefactorForDeterministicCooking | 10 | Remove GUID from Smart Names entirely + remove automatic name fixup |\r\n| RenameDisableAnimCurvesToAllowAnimCurveEvaluation | 11 | rename the variable and allow individual curves to be set |\r\n| AddLODToCurveMetaData | 12 | link curve to LOD, so curve metadata has to include LODIndex |\r\n| FixupBadBlendProfileReferences | 13 | Fixed blend profile references persisting after paste when they aren't compatible |\r\n| AllowMultipleAudioPluginSettings | 14 | Allowing multiple audio plugin settings |\r\n| ChangeRetargetSourceReferenceToSoftObjectPtr | 15 | Change RetargetSource reference to SoftObjectPtr |\r\n| SaveEditorOnlyFullPoseForPoseAsset | 16 | Save editor only full pose for pose asset |\r\n| GeometryCacheAssetDeprecation | 17 | Asset change and cleanup to facilitate new streaming system |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.customversions.fassetregistryversion.md",
    "content": "# FAssetRegistryVersion\r\n\r\nNamespace: UAssetAPI.CustomVersions\r\n\r\nVersion used for serializing asset registry caches, both runtime and editor\r\n\r\n```csharp\r\npublic enum FAssetRegistryVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [FAssetRegistryVersion](./uassetapi.customversions.fassetregistryversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| PreVersioning | 0 | From before file versioning was implemented |\r\n| HardSoftDependencies | 1 | The first version of the runtime asset registry to include file versioning. |\r\n| AddAssetRegistryState | 2 | Added FAssetRegistryState and support for piecemeal serialization |\r\n| ChangedAssetData | 3 | AssetData serialization format changed, versions before this are not readable |\r\n| RemovedMD5Hash | 4 | Removed MD5 hash from package data |\r\n| AddedHardManage | 5 | Added hard/soft manage references |\r\n| AddedCookedMD5Hash | 6 | Added MD5 hash of cooked package to package data |\r\n| AddedDependencyFlags | 7 | Added UE::AssetRegistry::EDependencyProperty to each dependency |\r\n| FixedTags | 8 | Major tag format change that replaces USE_COMPACT_ASSET_REGISTRY: |\r\n| WorkspaceDomain | 9 | Added Version information to AssetPackageData |\r\n| PackageImportedClasses | 10 | Added ImportedClasses to AssetPackageData |\r\n| PackageFileSummaryVersionChange | 11 | A new version number of UE5 was added to FPackageFileSummary |\r\n| ObjectResourceOptionalVersionChange | 12 | Change to linker export/import resource serializationn |\r\n| AddedChunkHashes | 13 | Added FIoHash for each FIoChunkId in the package to the AssetPackageData. |\r\n| ClassPaths | 14 | Classes are serialized as path names rather than short object names, e.g. /Script/Engine.StaticMesh |\r\n| RemoveAssetPathFNames | 15 | Asset bundles are serialized as FTopLevelAssetPath instead of FSoftObjectPath, deprecated FAssetData::ObjectPath |\r\n| AddedHeader | 16 | Added header with bFilterEditorOnlyData flag |\r\n| AssetPackageDataHasExtension | 17 | Added Extension to AssetPackageData. |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.customversions.fcoreobjectversion.md",
    "content": "# FCoreObjectVersion\r\n\r\nNamespace: UAssetAPI.CustomVersions\r\n\r\nCustom serialization version for changes made in Dev-Core stream.\r\n\r\n```csharp\r\npublic enum FCoreObjectVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [FCoreObjectVersion](./uassetapi.customversions.fcoreobjectversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| BeforeCustomVersionWasAdded | 0 | Before any version changes were made |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.customversions.feditorobjectversion.md",
    "content": "# FEditorObjectVersion\r\n\r\nNamespace: UAssetAPI.CustomVersions\r\n\r\nCustom serialization version for changes made in Dev-Editor stream.\r\n\r\n```csharp\r\npublic enum FEditorObjectVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [FEditorObjectVersion](./uassetapi.customversions.feditorobjectversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| BeforeCustomVersionWasAdded | 0 | Before any version changes were made |\r\n| GatheredTextProcessVersionFlagging | 1 | Localizable text gathered and stored in packages is now flagged with a localizable text gathering process version |\r\n| GatheredTextPackageCacheFixesV1 | 2 | Fixed several issues with the gathered text cache stored in package headers |\r\n| RootMetaDataSupport | 3 | Added support for \"root\" meta-data (meta-data not associated with a particular object in a package) |\r\n| GatheredTextPackageCacheFixesV2 | 4 | Fixed issues with how Blueprint bytecode was cached |\r\n| TextFormatArgumentDataIsVariant | 5 | Updated FFormatArgumentData to allow variant data to be marshaled from a BP into C++ |\r\n| SplineComponentCurvesInStruct | 6 | Changes to SplineComponent |\r\n| ComboBoxControllerSupportUpdate | 7 | Updated ComboBox to support toggling the menu open, better controller support |\r\n| RefactorMeshEditorMaterials | 8 | Refactor mesh editor materials |\r\n| AddedFontFaceAssets | 9 | Added UFontFace assets |\r\n| UPropertryForMeshSection | 10 | Add UPROPERTY for TMap of Mesh section, so the serialize will be done normally (and export to text will work correctly) |\r\n| WidgetGraphSchema | 11 | Update the schema of all widget blueprints to use the WidgetGraphSchema |\r\n| AddedBackgroundBlurContentSlot | 12 | Added a specialized content slot to the background blur widget |\r\n| StableUserDefinedEnumDisplayNames | 13 | Updated UserDefinedEnums to have stable keyed display names |\r\n| AddedInlineFontFaceAssets | 14 | Added \"Inline\" option to UFontFace assets |\r\n| UPropertryForMeshSectionSerialize | 15 | Fix a serialization issue with static mesh FMeshSectionInfoMap FProperty |\r\n| FastWidgetTemplates | 16 | Adding a version bump for the new fast widget construction in case of problems. |\r\n| MaterialThumbnailRenderingChanges | 17 | Update material thumbnails to be more intelligent on default primitive shape for certain material types |\r\n| NewSlateClippingSystem | 18 | Introducing a new clipping system for Slate/UMG |\r\n| MovieSceneMetaDataSerialization | 19 | MovieScene Meta Data added as native Serialization |\r\n| GatheredTextEditorOnlyPackageLocId | 20 | Text gathered from properties now adds two variants: a version without the package localization ID (for use at runtime), and a version with it (which is editor-only) |\r\n| AddedAlwaysSignNumberFormattingOption | 21 | Added AlwaysSign to FNumberFormattingOptions |\r\n| AddedMaterialSharedInputs | 22 | Added additional objects that must be serialized as part of this new material feature |\r\n| AddedMorphTargetSectionIndices | 23 | Added morph target section indices |\r\n| SerializeInstancedStaticMeshRenderData | 24 | Serialize the instanced static mesh render data, to avoid building it at runtime |\r\n| MeshDescriptionNewSerialization_MovedToRelease | 25 | Change to MeshDescription serialization (moved to release) |\r\n| MeshDescriptionNewAttributeFormat | 26 | New format for mesh description attributes |\r\n| ChangeSceneCaptureRootComponent | 27 | Switch root component of SceneCapture actors from MeshComponent to SceneComponent |\r\n| StaticMeshDeprecatedRawMesh | 28 | StaticMesh serializes MeshDescription instead of RawMesh |\r\n| MeshDescriptionBulkDataGuid | 29 | MeshDescriptionBulkData contains a Guid used as a DDC key |\r\n| MeshDescriptionRemovedHoles | 30 | Change to MeshDescription serialization (removed FMeshPolygon::HoleContours) |\r\n| ChangedWidgetComponentWindowVisibilityDefault | 31 | Change to the WidgetCompoent WindowVisibilty default value |\r\n| CultureInvariantTextSerializationKeyStability | 32 | Avoid keying culture invariant display strings during serialization to avoid non-deterministic cooking issues |\r\n| ScrollBarThicknessChange | 33 | Change to UScrollBar and UScrollBox thickness property (removed implicit padding of 2, so thickness value must be incremented by 4). |\r\n| RemoveLandscapeHoleMaterial | 34 | Deprecated LandscapeHoleMaterial |\r\n| MeshDescriptionTriangles | 35 | MeshDescription defined by triangles instead of arbitrary polygons |\r\n| ComputeWeightedNormals | 36 | Add weighted area and angle when computing the normals |\r\n| SkeletalMeshBuildRefactor | 37 | SkeletalMesh now can be rebuild in editor, no more need to re-import |\r\n| SkeletalMeshMoveEditorSourceDataToPrivateAsset | 38 | Move all SkeletalMesh source data into a private uasset in the same package has the skeletalmesh |\r\n| NumberParsingOptionsNumberLimitsAndClamping | 39 | Parse text only if the number is inside the limits of its type |\r\n| SkeletalMeshSourceDataSupport16bitOfMaterialNumber | 40 | Make sure we can have more then 255 material in the skeletal mesh source data |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.customversions.ffortnitemainbranchobjectversion.md",
    "content": "# FFortniteMainBranchObjectVersion\r\n\r\nNamespace: UAssetAPI.CustomVersions\r\n\r\nCustom serialization version for changes made in the //Fortnite/Main stream.\r\n\r\n```csharp\r\npublic enum FFortniteMainBranchObjectVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [FFortniteMainBranchObjectVersion](./uassetapi.customversions.ffortnitemainbranchobjectversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| BeforeCustomVersionWasAdded | 0 | Before any version changes were made |\r\n| WorldCompositionTile3DOffset | 1 | World composition tile offset changed from 2d to 3d |\r\n| MaterialInstanceSerializeOptimization_ShaderFName | 2 | Minor material serialization optimization |\r\n| CullDistanceRefactor_RemovedDefaultDistance | 3 | Refactored cull distances to account for HLOD, explicit override and globals in priority |\r\n| SaveGeneratedMorphTargetByEngine | 6 | Support to remove morphtarget generated by bRemapMorphtarget |\r\n| ConvertReductionSettingOptions | 7 | Convert reduction setting options |\r\n| StaticParameterTerrainLayerWeightBlendType | 8 | Serialize the type of blending used for landscape layer weight static params |\r\n| FixUpNoneNameAnimationCurves | 9 | Fix up None Named animation curve names, |\r\n| EnsureActiveBoneIndicesToContainParents | 10 | Ensure ActiveBoneIndices to have parents even not skinned for old assets |\r\n| SerializeInstancedStaticMeshRenderData | 11 | Serialize the instanced static mesh render data, to avoid building it at runtime |\r\n| CachedMaterialQualityNodeUsage | 12 | Cache material quality node usage |\r\n| FontOutlineDropShadowFixup | 13 | Font outlines no longer apply to drop shadows for new objects but we maintain the opposite way for backwards compat |\r\n| NewSkeletalMeshImporterWorkflow | 14 | New skeletal mesh import workflow (Geometry only or animation only re-import ) |\r\n| NewLandscapeMaterialPerLOD | 15 | Migrate data from previous data structure to new one to support materials per LOD on the Landscape |\r\n| RemoveUnnecessaryTracksFromPose | 16 | New Pose Asset data type |\r\n| FoliageLazyObjPtrToSoftObjPtr | 17 | Migrate Foliage TLazyObjectPtr to TSoftObjectPtr |\r\n| REVERTED_StoreTimelineNamesInTemplate | 18 | TimelineTemplates store their derived names instead of dynamically generating. This code tied to this version was reverted and redone at a later date |\r\n| AddBakePoseOverrideForSkeletalMeshReductionSetting | 19 | Added BakePoseOverride for LOD setting |\r\n| StoreTimelineNamesInTemplate | 20 | TimelineTemplates store their derived names instead of dynamically generating |\r\n| WidgetStopDuplicatingAnimations | 21 | New Pose Asset data type |\r\n| AllowSkeletalMeshToReduceTheBaseLOD | 22 | Allow reducing of the base LOD, we need to store some imported model data so we can reduce again from the same data. |\r\n| ShrinkCurveTableSize | 23 | Curve Table size reduction |\r\n| WidgetAnimationDefaultToSelfFail | 24 | Widgets upgraded with WidgetStopDuplicatingAnimations, may not correctly default-to-self for the widget parameter. |\r\n| FortHUDElementNowRequiresTag | 25 | HUDWidgets now require an element tag |\r\n| FortMappedCookedAnimation | 26 | Animation saved as bulk data when cooked |\r\n| SupportVirtualBoneInRetargeting | 27 | Support Virtual Bone in Retarget Manager |\r\n| FixUpWaterMetadata | 28 | Fixup bad defaults in water metadata |\r\n| MoveWaterMetadataToActor | 29 | Move the location of water metadata |\r\n| ReplaceLakeCollision | 30 | Replaced lake collision component |\r\n| AnimLayerGuidConformation | 31 | Anim layer node names are now conformed by Guid |\r\n| MakeOceanCollisionTransient | 32 | Ocean collision component has become dynamic |\r\n| FFieldPathOwnerSerialization | 33 | FFieldPath will serialize the owner struct reference and only a short path to its property |\r\n| FixUpUnderwaterPostProcessMaterial | 34 | Simplified WaterBody post process material handling |\r\n| SupportMultipleWaterBodiesPerExclusionVolume | 35 | A single water exclusion volume can now exclude N water bodies |\r\n| RigVMByteCodeDeterminism | 36 | Serialize rigvm operators one by one instead of the full byte code array to ensure determinism |\r\n| LandscapePhysicalMaterialRenderData | 37 | Serialize the physical materials generated by the render material |\r\n| FixupRuntimeVirtualTextureVolume | 38 | RuntimeVirtualTextureVolume fix transforms |\r\n| FixUpRiverCollisionComponents | 39 | Retrieve water body collision components that were lost in cooked builds |\r\n| FixDuplicateRiverSplineMeshCollisionComponents | 40 | Fix duplicate spline mesh components on rivers |\r\n| ContainsStableActorGUIDs | 41 | Indicates level has stable actor guids |\r\n| LevelsetSerializationSupportForBodySetup | 42 | Levelset Serialization support for BodySetup. |\r\n| ChaosSolverPropertiesMoved | 43 | Moving Chaos solver properties to allow them to exist in the project physics settings |\r\n| GameFeatureData_MovedComponentListAndCheats | 44 | Moving some UFortGameFeatureData properties and behaviors into the UGameFeatureAction pattern |\r\n| ChaosClothAddfictitiousforces | 45 | Add centrifugal forces for cloth |\r\n| ChaosConvexVariableStructureDataAndVerticesArray | 46 | Chaos Convex StructureData supports different index sizes based on num verts/planes. Chaos FConvex uses array of FVec3s for vertices instead of particles (Merged from //UE4/Main) |\r\n| RemoveLandscapeWaterInfo | 47 | Remove the WaterVelocityHeightTexture dependency on MPC_Landscape and LandscapeWaterIndo |\r\n| ChaosClothAddWeightedValue | 48 | Added the weighted value property type to store the cloths weight maps' low/high ranges |\r\n| ChaosClothAddTetherStiffnessWeightMap | 49 | Added the Long Range Attachment stiffness weight map |\r\n| ChaosClothFixLODTransitionMaps | 50 | Fix corrupted LOD transition maps |\r\n| ChaosClothAddTetherScaleAndDragLiftWeightMaps | 51 | Enable a few more weight maps to better art direct the cloth simulation |\r\n| ChaosClothAddMaterialWeightMaps | 52 | Enable material (edge, bending, and area stiffness) weight maps |\r\n| SerializeFloatChannelShowCurve | 53 | Added bShowCurve for movie scene float channel serialization |\r\n| LandscapeGrassSingleArray | 54 | Minimize slack waste by using a single array for grass data |\r\n| AddedSubSequenceEntryWarpCounter | 55 | Add loop counters to sequencer's compiled sub-sequence data |\r\n| WaterBodyComponentRefactor | 56 | Water plugin is now component-based rather than actor based |\r\n| BPGCCookedEditorTags | 57 | Cooked BPGC storing editor-only asset tags |\r\n| TTerrainLayerWeightsAreNotParameters | 58 | Terrain layer weights are no longer considered material parameters |\r\n| GravityOverrideDefinedInWorldSpace | 59 | Anim Dynamics Node Gravity Override vector is now defined in world space, not simulation space. Legacy behavior can be maintained with a flag, which is set false by default for new nodes, true for nodes predating this change. |\r\n| AnimDynamicsEditableChainParameters | 60 | Anim Dynamics Node Physics parameters for each body in a chain are now stored in an array and can be edited. |\r\n| WaterZonesRefactor | 61 | Decoupled the generation of the water texture from the Water Brush and the landscape |\r\n| ChaosClothFasterDamping | 62 | Add faster damping calculations to the cloth simulation and rename previous Damping parameter to LocalDamping. |\r\n| MigratedFunctionHandlersToDefaults | 63 | Migrated function handlers to the CDO/archetype data |\r\n| ChaosInertiaConvertedToVec3 | 64 | Storing inertia tensor as vec3 instead of matrix. |\r\n| MigratedEventDefinitionToDefaults | 65 | Migrated event definitions to the CDO/archetype data |\r\n| LevelInstanceActorGuidSerialize | 66 | Serialize LevelInstanceActorGuid on new ILevelInstanceInterface implementation |\r\n| SingleFrameAndKeyAnimModel | 67 | Single-frame/key AnimDataModel patch-up |\r\n| RemappedEvaluateWorldPositionOffsetInRayTracing | 68 | Remapped bEvaluateWorldPositionOffset to bEvaluateWorldPositionOffsetInRayTracing |\r\n| WaterBodyComponentCollisionSettingsRefactor | 69 | Water body collision settings are now those of the base UPrimitiveComponent, rather than duplicated in UWaterBodyComponent |\r\n| WidgetInheritedNamedSlots | 70 | Introducing widget inherited named slots. This wouldn't have required a version bump, except in the previous version, users could make NamedSlots and then Seed them with any random widgets, as a sorta 'default' setup. In order to preserve that, we're bumping the version so that we can set a new field on UNamedSlot to control if a widget exposes its named slot to everyone (even if it has content), which by default they wont any longer. |\r\n| WaterHLODSupportAdded | 71 | Added water HLOD material |\r\n| PoseWatchMigrateSkeletonDrawParametersToPoseElement | 72 | Moved parameters affecting Skeleton pose rendering from the PoseWatch class to the PoseWatchPoseElement class. |\r\n| WaterExclusionVolumeExcludeAllDefault | 73 | Reset default value for Water exclusion volumes to make them more intuitive and support the \"it just works\" philosophy. |\r\n| WaterNontessellatedLODSupportAdded | 74 | Added water non-tessellated LOD |\r\n| HierarchicalSimplificationMethodEnumAdded | 75 | Added FHierarchicalSimplification::SimplificationMethod |\r\n| WorldPartitionStreamingCellsNamingShortened | 76 | Changed how world partition streaming cells are named |\r\n| WorldPartitionActorDescSerializeContentBundleGuid | 77 | Serialize ContentBundleGuid in WorldPartitionActorDesc |\r\n| WorldPartitionActorDescSerializeActorIsRuntimeOnly | 78 | Serialize IsActorRuntimeOnly in WorldPartitionActorDesc |\r\n| NaniteMaterialOverride | 79 | Add Nanite Material Override option to materials and material instances. |\r\n| WorldPartitionHLODActorDescSerializeStats | 80 | Serialize HLOD stats in HLODActorDesc |\r\n| WorldPartitionStreamingSourceComponentTargetDeprecation | 81 | WorldPartitionStreamingSourceComponent property deprecation |\r\n| FixedLocalizationGatherForExternalActorPackage | 82 | Fixed localization gathering for external actor packages |\r\n| WorldPartitionHLODActorUseSourceCellGuid | 83 | Change HLODActors to RuntimeCells mapping to use a GUID instead of the cell name |\r\n| ChaosGeometryCollectionInternalFacesAttribute | 84 | Add an attribute to geometry collection to track internal faces, rather than relying on material ID numbering |\r\n| DynamicCastNodesUsePureStateEnum | 85 | Dynamic cast nodes use an enumerated pure node state to include a value for the default setting |\r\n| WorldPartitionActorFilter | 86 | Add FWorldPartitionActorFilter to FLevelInstanceActorDesc/FDataLayerInstanceDesc |\r\n| AudioAttenuationNonSpatializedRadiusBlend | 87 | Change the non-spatialized radius to blend to a pure 2D spatialized sound vs omnidirectional |\r\n| WorldPartitionActorClassDescSerialize | 88 | Serialize actor class descriptors |\r\n| WorldPartitionFActorContainerIDu64ToGuid | 89 | FActorContainerID is now an FGuid instead of a uint64 |\r\n| WorldPartitionPrivateDataLayers | 90 | FDataLayerInstanceDesc support for private data layers |\r\n| ChaosImplicitObjectUnionBVHRefactor | 91 | Reduce size and improve behaviour of Chaos::FImplicitObjectUnion |\r\n| LevelInstanceActorDescDeltaSerializeFilter | 92 | FLevelInstanceActorDesc DeltaSerialize Filter |\r\n| FixNaniteLandscapeMeshDDCKey | 93 | Fix the Nanite landscape mesh non-deterministic DDC keys |\r\n| ChaosGeometryCollectionConnectionEdgeGroup | 94 | Change how connection graphs are stored on Geometry Collections to an edge-array representation |\r\n| WaterBodyStaticMeshComponents | 95 | Moved the water info mesh data and static water body meshes into new static mesh components for water bodies. |\r\n| WorldPartitionActorDescSerializeInvalidBounds | 96 | Serialize invalid bounds in world partition actor descriptors |\r\n| NavigationLinkID32To64 | 97 | Upgrade Navigation Links to use 64 bits for the ID |\r\n| WorldPartitionActorDescSerializeEditorOnlyReferences | 98 | Serialize editor only references in world partition actor descriptors |\r\n| WorldPartitionActorDescSerializeSoftObjectPathSupport | 99 | Add support for soft object paths in actor descriptors |\r\n| WorldPartitionClasDescGuidTransient | 100 | Don't serialize class descriptor GUIDs |\r\n| WorldPartitionActorDescIsMainWorldOnly | 101 | Serialize ActorDesc bIsMainWorldOnly |\r\n| WorldPartitionActorFilterStringAssetPath | 102 | FWorldPartitionActorFilter go back to FString serialize of AssetPaths to avoid FArchiveReplaceOrClearExternalReferences clearing CDO references on BP Compile |\r\n| PackedLevelActorDesc | 103 | Add FPackedLevelActorDesc for APackedLevelActor and support for APackedLevelActor Filters |\r\n| WorldPartitionRuntimeSpatialHashCVarOverrides | 104 | Add customizable values for several UWorldPartitionRuntimeSpatialHash cvars |\r\n| WorldPartitionHLODSourceActorsRefactor | 105 | WorldPartition HLOD now contains a source actors object |\r\n| GeometryCollectionConvertVertexColorToSRGB | 107 | Geometry Collection now by-default converts vertex colors to sRGB when creating render data |\r\n| WaterOwningZonePointerFixup | 108 | Water bodies before this version need to update their water zone on load since they won't have been serialized yet. |\r\n| WaterBodyStaticMeshDuplicateTransient | 109 | Set flags on water static meshes to duplicate transient to avoid underlying static mesh duplication issue |\r\n| MVVMConvertPropertyPathToSkeletalClass | 110 | Update paths to use the SkeletalClass |\r\n| WaterBodyStaticMeshFixup | 111 | Fixup all flags/outering on static meshes on water bodies by rebuilding them completely |\r\n| AnimGraphNodeBindingExtensions | 112 | Binding extensions for anim graph nodes |\r\n| RigVMSaveDebugMapInGraphFunctionData | 113 | Function data stores a map from work to debug operands |\r\n| FixMissingAnimGraphNodeBindingExtensions | 114 | Fix missing binding extensions for some anim graph nodes |\r\n| ISMComponentEditableWhenInheritedSkipSerialization | 115 | EditableWhenInherited: Skip custom serialization on non Archetypes |\r\n| LandscapeSupportPerComponentGrassTypes | 116 | GrassTypes are now per-component, rather than per-landscape proxy : |\r\n| WorldPartitionDataLayersLogicOperatorAdded | 117 | World partition actor data layers activation logic operator support defaults for old maps |\r\n| MovieSceneSortedBindings | 118 | Started sorting Possessables, Spawnables, and MovieSceneBindings for better search performance. |\r\n| RemoveAnimCurveCompressionCodecInstanceGuid | 119 | Remove the UAnimCurveCompressionCodec::InstanceGuid which causes cook determinism issues |\r\n| WorldPartitionHLODActorDescSerializeSourceHLODLayer | 120 | Serialize the source HLOD Layer for HLOD actor descriptors. |\r\n| WorldPartitionHLODActorDescSerializeEditorBounds | 121 | Serialize custom editor bounds for HLOD actor descriptors. |\r\n| LocalExposureDefaultChangeFrom1_Reverted | 122 | Changed default Local Exposure Contrast from 1.0 to 0.8 (reverted) |\r\n| AddDataLayerInstanceExternalPackage | 123 | Added support of external packaging of Data Layer Instances |\r\n| MVVMPropertyPathSelf | 124 | Update paths to keep a flag if they are the widget BP |\r\n| AddDataflowObjectSerialization | 125 | Enabled ObjectPtr property serialization for Dataflow nodes |\r\n| AnimNotifyAddRateScale | 126 | Add anim notify rate scaling, defaults to on for new content, off for old content |\r\n| FixedTangentTransformForNonuniformBuildScale | 127 | Fix tangents for non-uniform build scales, and add a flag to optionally match the previous (incorrect) tangents |\r\n| AnimNodeRootDefaultGroupChange | 128 | AnimNode Layers will now start in a Shared Group, instead of being each one on a different group at runtime |\r\n| AnimNextMoveGraphsToEntries | 129 | Move AnimNext graphs to sub-entries of assets |\r\n| AnimationSequenceCompressedDataRemoveDebugData | 130 | Removed debug information containing compressed data author, time etc. from animation DDC data as it introduces indeterminism |\r\n| OrthographicCameraDefaultSettings | 131 | Changes to Orthographic Camera default settings |\r\n| LandscapeAddedHLODSettings | 132 | Added settings to Landscape HLODs |\r\n| MeshDescriptionForSkeletalMesh | 133 | Skeletal Mesh uses Mesh Description to store mesh bulk data. |\r\n| SkeletalHalfEdgeData | 134 | Skeletal Mesh optionally cooks half edge data per lod |\r\n| AnimNextCombineGraphContexts | 135 | Combine graph contexts for AnimNext graphs |\r\n| AnimNextCombineParameterBlocksAndGraphs | 136 | Combine parameter blocks and graphs |\r\n| AnimNextMoveWorkspaces | 137 | Move workspaces to a seperate plugin |\r\n| LevelInstancePropertyOverrides | 138 | Level Instance Property overrides |\r\n| VolumetricLightMapGridDescSupport | 139 | Added FVolumetricLightMapGridDesc in MapBuildData |\r\n| IntroduceLandscapeEditLayerClass | 140 | Introduce new structure for customizing the landscape edit layer behavior |\r\n| AnimNextWorkspaceEntryConversion | 141 | Change workspaces to store asset references as external objects |\r\n| DataflowAnyTypeSupport | 142 | Add support for anytype in dataflow |\r\n| PhysicsAssetUseManifoldFlags | 143 | Adding a new flag in RBAN Solver Setting to be able to use manifolds |\r\n| SimAndQueryDataSupportInChaosVisualDebugger | 144 | Added support for to record sim and query data of Shape Instance data in CVD |\r\n| ChaosClothAssetUSDImportNodeAddAssetDependencies | 145 | Add the imported asset dependencies to the Cloth Asset USD Import node |\r\n| LumenRayLightingModeOverrideEnum | 146 | Changed HitLighting to HitLightingForReflections, and HitLighting now means hit lighting for entire Lumen |\r\n| PCGPartitionActorDesc | 147 | PCGPartitionActorDesc |\r\n| LandscapeTargetLayersInLandscapeActor | 148 | Target layers are now defined in the Landscape actor and not continuously synced from the assigned material. |\r\n| DataflowTemplatedTypeFix | 149 | Fix to get full name of templated type ( Tarray &gt; TArray{Float} for example ) |\r\n| LevelInstanceStaticLightingSupport | 150 | Changes for LevelInstance support in StaticLighting |\r\n| PCGGridDescriptor | 151 | PCGGridDescriptor |\r\n| AnimNextGraphAccessSpecifiers | 152 | AnimNext graphs now have public/private state |\r\n| MaterialPixelDepthOffsetMode | 153 | Added a more stable pixel depth offset mode. |\r\n| DataflowHideablePins | 154 | Added hideable pins to dataflow |\r\n| ClothAssetSkeletalMeshMultiSectionImport | 155 | Added multiple section import to the cloth asset skeletal mesh import node |\r\n| WorldPartitionActorDescSerializeEditorBounds | 156 | Serialize EditorBounds in WorldPartitionActorDesc |\r\n| FixupLandscapeTargetLayersInLandscapeActor | 157 | Fixup for the data that has been damaged by LandscapeTargetLayersInLandscapeActor (loss of landscape layer info object assignments) |\r\n| ChaosClothAllowZeroBucklingStiffness | 159 | Fix chaos cloth buckling stiffness parameter bug |\r\n| LevelSequenceUpgradeDynamicBindings_NoOp | 160 | LevelSequenceUpgradeDynamicBindings was removed but was intended for this position. Putting this here to make sure versioning of subsequent assets remains the same |\r\n| GameFeatureDataActionAddToFrontendDefaultToUnload | 161 | AddToFrontend GFA now defaults to unload plugin on exit frontend |\r\n| LevelSequenceUpgradeDynamicBindings | 162 | Upgraded movie scene 'dynamic bindings' to use the new Custom Bindings system |\r\n| ChaosStoreKinematicTargetRotationAsSinglePrecision | 163 | Changed the precision for the stored rotation on kinematic targets to match the precision used in particles |\r\n| PCGApplyOnActorNodeMoveTargetActorEdgeToInput | 164 | PCG changes around the ApplyOnActor node, where we collapsed the TargetActor to the input pin. |\r\n| TimelinePlayingStateTrackerDeprecation | 165 | Deprecation of the bPlaying flag on FTimeline struct types in favor of a better PlayingStateTracker type to improve replication reliability |\r\n| MeshPaintTextureUsesEditorOnly | 166 | Enable SkipOnlyEditorOnly style cooking of UStaticMeshComponent::MeshPaintTexture |\r\n| LandscapeBodyInstanceAsSharedProperty | 167 | Fixup and synchronize some landscape properties that have moved to the property sharing/overriding system : |\r\n| AnimNextModuleRefactor | 168 | Multiple changes to AnimNext modules, variables etc. |\r\n| SubsurfaceProfileGuid | 169 | Subsurface profile now has a guid to be able to select one of many in a Substrate material. |\r\n| SolverIterationsDataSupportInChaosVisualDebugger | 170 | Added support for to record the new solver iteration settings in CVD |\r\n| MaterialInputUsesLinearColor | 171 | Updated FColorMaterialInput to use FLinearColor instead of FColor |\r\n| FunctionalTestCanRunInEditorWorld | 172 | Updated editor only AFunctionalTest running logic to run tests editor world if the actors don't support PIE |\r\n| VisualLoggerSupportDisplayName | 173 | Added support for display name in the Visual Logger |\r\n| GyroscopicTorquesSupportInChaosVisualDebugger | 174 | Added support for the GyroscopicTorque flag in CVD |\r\n| AddManagedArrayCollectionPropertySerialization | 175 | Added managed array property serialization |\r\n| LandscapeTexturePatchUsesTextureAssetResolution | 176 | Landscape texture patches in Texture Asset source mode now use proper resolution when calculating transform |\r\n| WorldPartitionActorDescSerializeRelativeTransform | 177 | Added support for relative transform in WorldPartitionActorDesc |\r\n| SceneGraphEntitiesPrivateByDefault | 178 | Make sure scene graph entities are not public by default |\r\n| DebugColorForPhysicalMaterials | 179 | Added debug color for physical materials |\r\n| AddedPreprocessedFontGeometry | 180 | Added PreprocessedFontGeometry to FFontFaceData |\r\n| DynamicMeshSerializeSculptLayers | 181 | Added Dynamic Mesh Sculpt Layer serialization |\r\n| SpatialHashRuntimeGridInfoSpriteFixup | 182 | Fix reachable garbage object warnings from some legacy ASpatialHashRuntimeGridInfo actors |\r\n| AnimSequenceRawDataOnlyFlagRemoval | 183 | Removed UAnimSequence::bUseRawDataOnly flag alongside compression refactor |\r\n| ResetLevelInstanceHLODRelevancy | 184 | HLOD relevancy of Level Instances was previously ignored, now taken into account. Reset to the default behavior. |\r\n| SceneCaptureDefaultSettings | 185 | Updated default scene capture post-processing settings to reflect the underlying implementation overrides |\r\n| AddClothAssetBase | 186 | Add Cloth Asset Base class serialization |\r\n| PCGInlineConstantDefaultValues | 187 | Add inline constant default values to the PCG graph nodes. |\r\n| AddMaterialSubstrateSubsurfaceType | 188 | Add MaterialSubstrateSubsurfaceType type to UMaterialExpressionSubstrateSlabBSDF for replacing bUseSSSDifffusion |\r\n| AddedRuntimeVirtualTextureUseStreamingMipsInEditorMode | 189 | Added option to visualize runtime virtual textures' streamed mips only in PIE |\r\n| MediaPlateHoldoutComponentRemoval | 190 | Media plate holdout composite components have been replaced by a checkbox |\r\n| PCGLandscapeCacheDefaultSerializationChanged | 191 | Changed PCG landscape cache default from \"serialize at cook\" to \"never serialize\" |\r\n| SoftObjectPathUtf8SubPaths | 192 | FSoftObjectPath::SubPathString changed to FUtf8String |\r\n| SoftObjectPathTrailingNULsMaintained | 193 | FSoftObjectPath::SubPathString could be saved with trailing NULs and need truncating |\r\n| WaterBodyPhysicalMaterialPropertyRemoval | 194 | Water body components no longer need to maintain their own PhysicalMaterial property since they are primitive components. After this version, leverage that one instead. |\r\n| PCGAttributeSetToPointAlwaysConverts | 195 | PCG fixed attribute set -&gt; point conversion passing through empty point data as-is and violating output pin type. |\r\n| ConvertGlintDensity | 197 | Convert Sustrate glint density properly |\r\n| ClothAssetSkinweightsValidation | 198 | Introduced skinweight validation to avoid render crashes and disappearing simulation meshes |\r\n| VerseRightToLeftHandedness | 199 | Switching verse from right handed to left handed |\r\n| AdditionalGameThreadDataSupportInChaosVisualDebugger | 200 | Added additional data required to record and represent particle data from the game thread (Kinematic targets, and SQ rejection reasons) |\r\n| UpgradeWidgetBlueprintLegacySequencePlayer | 201 | Upgrade UMG widget blueprints using legacy animation API |\r\n| PCGSplineDirectionClockwiseFix | 202 | Changed clockwise detection algorithm for PCGSplineDirection node with the correct one, but add a version to not break previous nodes. |\r\n| RectLightFixedEVUnitConversion | 203 | Rect Lights set in EV units had the wrong intensity (older files need a flag set to keep the old look) |\r\n| ParticleInflatedBoundsInChaosVisualDebugger | 204 | Add particle bounds to data exported to CVD |\r\n| MigrateLandscapeEditLayerProperties | 205 | Migrate properties from FLandscapeLayer to ULandscapeEditLayer |\r\n| ThreadContextDataInChaosVisualDebuggerDebugDrawData | 206 | Added more context data to CVD's traced shapes so we can play it back at the solver stage level (not just game thread frames) |\r\n| PCGChangedSurfaceSamplerDefaultGridCreationMode | 207 | Changed default grid mode in surface sampler to a version that's more intuitive and less error-prone |\r\n| MediaPlateOverlayTechniqueRemoval | 208 | Media plate overlay composite technique replacement with holdout composite |\r\n| PerParticleFlagToAllowPartialIslandSleepInConnectedIsland | 209 | Added particle flag to allow/disallow partial island sleeping in the island the particle is in |\r\n| MaterialFunctionBlendTopBottomInputEnum | 210 | Material Function Blend Deserialize Top/Bottom input nodes with clearer enum marker. |\r\n| MorphTargetCookedCPUDataCompressed | 211 | Cooked CPU-side morph target points are now stored internally in the same compressed format as the GPU morph data. |\r\n| AnimNextVariableReferences | 212 | AnimNext variables converted to references |\r\n| LensComponentDefaultToDistortionSVE | 213 | The default distortion rendering mode used by the Lens Component is now the Lens Distortion Scene View Extension |\r\n| ChangeDefaultAlphaBlendType | 214 | Animation default blend option changed from Linear to HermiteCubic (aka SmoothStep, ease in / ease out) |\r\n| PerParticleIterationCountMovedToDynamicMisc | 215 | Moved Position/Velocity/Projection Iteration Counts from FChaosVDFRigidParticleControlFlags to FChaosVDParticleDynamicMisc |\r\n| AddedMissingSerializationForPropertiesInDynamicMisc | 216 | Added missing custom serialization for some properties in the ParticleDynamicMisc structure used by the Chaos Visual Debugger |\r\n| PCGDeprecateWorldPartitionGenerationSources | 217 | Change default value for deprecated bEnableWorldPartitionGenerationSources |\r\n| CompositeActorSceneCaptureRefactor | 218 | Refactored the composite (plugin) actor scene capture management. |\r\n| HLODLayerEditorOnlyObject | 219 | Moved HLOD Layer properties to an editor only optional object |\r\n| DeduplicatedDebugNameSerializationInCVD | 220 | Deduplicated particle debug names serialization in the Chaos Visual Debugger |\r\n| SpecializeBloomIntensity | 221 | Add BloomGaussianIntensity and BloomConvolutionIntensity |\r\n| WorldPartitionActorComponentDesc | 222 | Add support for world partition actor component descriptors |\r\n| MigrateLandscapeNonEditLayerToEditLayer | 223 | Migrate Non-Edit layer landscapes to use the edit layer (ULandscapeEditLayer) system |\r\n| DynamicMeshAttributesMorphTargets | 224 | FDynamicMeshAttributeSet has Morph Targets. |\r\n| LandscapeAdvancedWeightBlending | 225 | Introduce landscape advanced weight blending |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.customversions.ffortnitereleasebranchcustomobjectversion.md",
    "content": "# FFortniteReleaseBranchCustomObjectVersion\r\n\r\nNamespace: UAssetAPI.CustomVersions\r\n\r\n```csharp\r\npublic enum FFortniteReleaseBranchCustomObjectVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [FFortniteReleaseBranchCustomObjectVersion](./uassetapi.customversions.ffortnitereleasebranchcustomobjectversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| BeforeCustomVersionWasAdded | 0 | Before any version changes were made |\r\n| DisableLevelset_v14_10 | 1 | Custom 14.10 File Object Version |\r\n| ChaosClothAddTethersToCachedData | 2 | Add the long range attachment tethers to the cloth asset to avoid a large hitch during the cloth's initialization. |\r\n| ChaosKinematicTargetRemoveScale | 3 | Chaos::TKinematicTarget no longer stores a full transform, only position/rotation. |\r\n| ActorComponentUCSModifiedPropertiesSparseStorage | 4 | Move UCSModifiedProperties out of ActorComponent and in to sparse storage |\r\n| FixupNaniteLandscapeMeshes | 5 | Fixup Nanite meshes which were using the wrong material and didn't have proper UVs : |\r\n| RemoveUselessLandscapeMeshesCookedCollisionData | 6 | Remove any cooked collision data from nanite landscape / editor spline meshes since collisions are not needed there : |\r\n| SerializeAnimCurveCompressionCodecGuidOnCook | 7 | Serialize out UAnimCurveCompressionCodec::InstanceGUID to maintain deterministic DDC key generation in cooked-editor |\r\n| FixNaniteLandscapeMeshNames | 8 | Fix the Nanite landscape mesh being reused because of a bad name |\r\n| LandscapeSharedPropertiesEnforcement | 9 | Fixup and synchronize shared properties modified before the synchronicity enforcement |\r\n| WorldPartitionRuntimeCellGuidWithCellSize | 10 | Include the cell size when computing the cell guid |\r\n| NaniteMaterialOverrideUsesEditorOnly | 11 | Enable SkipOnlyEditorOnly style cooking of NaniteOverrideMaterial |\r\n| SinglePrecisonParticleData | 12 | Store game thread particles data in single precision |\r\n| PCGPointStructuredSerializer | 13 | UPCGPoint custom serialization |\r\n| NavMovementComponentMovingPropertiesToStruct | 14 | Deprecation of Nav Movement Properties and moving them to a new struct |\r\n| DynamicMeshAttributesSerializeBones | 15 | Add bone serialization for dynamic mesh attributes |\r\n| VersionPlusOne | 16 | -----new versions can be added above this line------------------------------------------------- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.customversions.fframeworkobjectversion.md",
    "content": "# FFrameworkObjectVersion\r\n\r\nNamespace: UAssetAPI.CustomVersions\r\n\r\nCustom serialization version for changes made in Dev-Framework stream.\r\n\r\n```csharp\r\npublic enum FFrameworkObjectVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [FFrameworkObjectVersion](./uassetapi.customversions.fframeworkobjectversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| BeforeCustomVersionWasAdded | 0 | Before any version changes were made |\r\n| UseBodySetupCollisionProfile | 1 | BodySetup's default instance collision profile is used by default when creating a new instance. |\r\n| AnimBlueprintSubgraphFix | 2 | Regenerate subgraph arrays correctly in animation blueprints to remove duplicates and add missing graphs that appear read only when edited |\r\n| MeshSocketScaleUtilization | 3 | Static and skeletal mesh sockets now use the specified scale |\r\n| ExplicitAttachmentRules | 4 | Attachment rules are now explicit in how they affect location, rotation and scale |\r\n| MoveCompressedAnimDataToTheDDC | 5 | Moved compressed anim data from uasset to the DDC |\r\n| FixNonTransactionalPins | 6 | Some graph pins created using legacy code seem to have lost the RF_Transactional flag, which causes issues with undo. Restore the flag at this version |\r\n| SmartNameRefactor | 7 | Create new struct for SmartName, and use that for CurveName |\r\n| AddSourceReferenceSkeletonToRig | 8 | Add Reference Skeleton to Rig |\r\n| ConstraintInstanceBehaviorParameters | 9 | Refactor ConstraintInstance so that we have an easy way to swap behavior paramters |\r\n| PoseAssetSupportPerBoneMask | 10 | Pose Asset support mask per bone |\r\n| PhysAssetUseSkeletalBodySetup | 11 | Physics Assets now use SkeletalBodySetup instead of BodySetup |\r\n| RemoveSoundWaveCompressionName | 12 | Remove SoundWave CompressionName |\r\n| AddInternalClothingGraphicalSkinning | 13 | Switched render data for clothing over to unreal data, reskinned to the simulation mesh |\r\n| WheelOffsetIsFromWheel | 14 | Wheel force offset is now applied at the wheel instead of vehicle COM |\r\n| MoveCurveTypesToSkeleton | 15 | Move curve metadata to be saved in skeleton. Individual asset still saves some flag - i.e. disabled curve and editable or not, but major flag - i.e. material types - moves to skeleton and handle in one place |\r\n| CacheDestructibleOverlaps | 16 | Cache destructible overlaps on save |\r\n| GeometryCacheMissingMaterials | 17 | Added serialization of materials applied to geometry cache objects |\r\n| LODsUseResolutionIndependentScreenSize | 18 | Switch static and skeletal meshes to calculate LODs based on resolution-independent screen size |\r\n| BlendSpacePostLoadSnapToGrid | 19 | Blend space post load verification |\r\n| SupportBlendSpaceRateScale | 20 | Addition of rate scales to blend space samples |\r\n| LODHysteresisUseResolutionIndependentScreenSize | 21 | LOD hysteresis also needs conversion from the LODsUseResolutionIndependentScreenSize version |\r\n| ChangeAudioComponentOverrideSubtitlePriorityDefault | 22 | AudioComponent override subtitle priority default change |\r\n| HardSoundReferences | 23 | Serialize hard references to sound files when possible |\r\n| EnforceConstInAnimBlueprintFunctionGraphs | 24 | Enforce const correctness in Animation Blueprint function graphs |\r\n| InputKeySelectorTextStyle | 25 | Upgrade the InputKeySelector to use a text style |\r\n| EdGraphPinContainerType | 26 | Represent a pins container type as an enum not 3 independent booleans |\r\n| ChangeAssetPinsToString | 27 | Switch asset pins to store as string instead of hard object reference |\r\n| LocalVariablesBlueprintVisible | 28 | Fix Local Variables so that the properties are correctly flagged as blueprint visible |\r\n| RemoveUField_Next | 29 | Stopped serializing UField_Next so that UFunctions could be serialized in dependently of a UClass in order to allow us to do all UFunction loading in a single pass (after classes and CDOs are created) |\r\n| UserDefinedStructsBlueprintVisible | 30 | Fix User Defined structs so that all members are correct flagged blueprint visible |\r\n| PinsStoreFName | 31 | FMaterialInput and FEdGraphPin store their name as FName instead of FString |\r\n| UserDefinedStructsStoreDefaultInstance | 32 | User defined structs store their default instance, which is used for initializing instances |\r\n| FunctionTerminatorNodesUseMemberReference | 33 | Function terminator nodes serialize an FMemberReference rather than a name/class pair |\r\n| EditableEventsUseConstRefParameters | 34 | Custom event and non-native interface event implementations add 'const' to reference parameters |\r\n| BlueprintGeneratedClassIsAlwaysAuthoritative | 35 | No longer serialize the legacy flag that indicates this state, as it is now implied since we don't serialize the skeleton CDO |\r\n| EnforceBlueprintFunctionVisibility | 36 | Enforce visibility of blueprint functions - e.g. raise an error if calling a private function from another blueprint: |\r\n| StoringUCSSerializationIndex | 37 | ActorComponents now store their serialization index |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.customversions.fniagaracustomversion.md",
    "content": "# FNiagaraCustomVersion\r\n\r\nNamespace: UAssetAPI.CustomVersions\r\n\r\n```csharp\r\npublic enum FNiagaraCustomVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [FNiagaraCustomVersion](./uassetapi.customversions.fniagaracustomversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| BeforeCustomVersionWasAdded | 0 | Before any version changes were made in niagara |\r\n| VMExternalFunctionBindingRework | 1 | Reworked vm external function binding to be more robust. |\r\n| PostLoadCompilationEnabled | 2 | Making all Niagara files reference the version number, allowing post loading recompilation if necessary. |\r\n| VMExternalFunctionBindingReworkPartDeux | 3 | Moved some runtime cost from external functions into the binding step and used variadic templates to neaten that code greatly. |\r\n| DataInterfacePerInstanceRework | 4 | Moved per instance data needed for certain data interfaces out to it's own struct. |\r\n| NiagaraShaderMaps | 5 | Added shader maps and corresponding infrastructure |\r\n| UpdateSpawnEventGraphCombination | 6 | Combined Spawn, Update, and Event scripts into one graph. |\r\n| DataSetLayoutRework | 7 | Reworked data layout to store float and int data separately. |\r\n| AddedEmitterAndSystemScripts | 8 | Reworked scripts to support emitter and system scripts |\r\n| ScriptExecutionContextRework | 9 | Rework of script execution contexts to allow better reuse and reduce overhead of parameter handling. |\r\n| RemovalOfNiagaraVariableIDs | 10 | Removed the Niagara variable ID's making hookup impossible until next compile |\r\n| SystemEmitterScriptSimulations | 11 | System and emitter script simulations. |\r\n| IntegerRandom | 12 | Adding integer random to VM. TODO: The vm really needs its own versioning system that will force a recompile when changes. |\r\n| AddedEmitterSpawnAttributes | 13 | Added emitter spawn attributes |\r\n| NiagaraShaderMapCooking | 14 | cooking of shader maps and corresponding infrastructure |\r\n| NiagaraShaderMapCooking2 | 15 | don't serialize shader maps for system scripts |\r\n| AddedScriptRapidIterationVariables | 16 | Added script rapid iteration variables, usually top-level module parameters... |\r\n| AddedTypeToDataInterfaceInfos | 17 | Added type to data interface infos |\r\n| EnabledAutogeneratedDefaultValuesForFunctionCallNodes | 18 | Hooked up autogenerated default values for function call nodes. |\r\n| CurveLUTNowOnByDefault | 19 | Now curve data interfaces have look-up tables on by default. |\r\n| ScriptsNowUseAGuidForIdentificationInsteadOfAnIndex | 20 | Scripts now use a guid for identification instead of an index when there are more than one with the same usage. |\r\n| NiagaraCombinedGPUSpawnUpdate | 21 | don't serialize shader maps for update scripts |\r\n| DontCompileGPUWhenNotNeeded | 22 | don't serialize shader maps for emitters that don't run on gpu. |\r\n| NowSerializingReadWriteDataSets | 24 | We weren't serializing event data sets previously. |\r\n| TranslatorClearOutBetweenEmitters | 25 | Forcing the internal parameter map vars to be reset between emitter calls. |\r\n| AddSamplerDataInterfaceParams | 26 | added sampler shader params based on DI buffer descriptors |\r\n| GPUShadersForceRecompileNeeded | 27 | Need to force the GPU shaders to recompile |\r\n| PlaybackRangeStoredOnSystem | 28 | The playback range for the timeline is now stored in the system editor data. |\r\n| MovedToDerivedDataCache | 29 | All cached values will auto-recompile. |\r\n| DataInterfacesNotAllocated | 30 | Data interfaces are preallocated |\r\n| EmittersHaveGenericUniqueNames | 31 | emitter scripts are built using \"Emitter.\" instead of the full name. |\r\n| MovingTranslatorVersionToGuid | 32 | no longer have compiler version enum value in this list, instead moved to a guid, which works better for the DDC |\r\n| AddingParamMapToDataSetBaseNode | 33 | adding a parameter map in/out to the data set base node |\r\n| DataInterfaceComputeShaderParamRefactor | 34 | refactor of CS parameters allowing regular params as well as buffers. |\r\n| CurveLUTRegen | 35 | bumping version and forcing curves to regen their LUT on version change. |\r\n| AssignmentNodeUsesBeginDefaults | 36 | Changing the graph generation for assignment nodes so that it uses a \"Begin Defaults\" node where appropriate. |\r\n| AssignmentNodeHasCorrectUsageBitmask | 37 | Updating the usage flage bitmask for assignment nodes to match the part of the stack it's used in. |\r\n| EmitterLocalSpaceLiteralConstant | 38 | Emitter local space is compiled into the hlsl as a literal constant to expose it to emitter scripts and allow for some better optimization of particle transforms. |\r\n| TextureDataInterfaceUsesCustomSerialize | 39 | The cpu cache of the texture is now directly serialized instead of using array property serialization. |\r\n| TextureDataInterfaceSizeSerialize | 40 | The texture data interface now streams size info |\r\n| SkelMeshInterfaceAPIImprovements | 41 | API to skeletal mesh interface was improved but requires a recompile and some graph fixup. |\r\n| ImproveLoadTimeFixupOfOpAddPins | 42 | Only do op add pin fixup on existing nodes which are before this version |\r\n| MoveCommonInputMetadataToProperties | 43 | Moved commonly used input metadata out of the strin/string property metadata map to actual properties on the metadata struct. |\r\n| UseHashesToIdentifyCompileStateOfTopLevelScripts | 44 | Move to using the traversed graph hash and the base script id for the FNiagaraVMExecutableDataId instead of the change id guid to prevent invalidating the DDC. |\r\n| MetaDataAndParametersUpdate | 45 | Reworked how the metadata is stored in NiagaraGraph from storing a Map of FNiagaraVariableMetaData to storing a map of UNiagaraScriptVariable* to be used with the Details panel. |\r\n| MoveInheritanceDataFromTheEmitterHandleToTheEmitter | 46 | Moved the emitter inheritance data from the emitter handle to the emitter to allow for chained emitter inheritance. |\r\n| AddLibraryAssetProperty | 47 | Add property to all Niagara scripts indicating whether or not they belong to the library |\r\n| AddAdditionalDefinesProperty | 48 | Addding additional defines to the GPU script |\r\n| RemoveGraphUsageCompileIds | 49 | Remove the random compile id guids from the cached script usage and from the compile and script ids since the hashes serve the same purpose and are deterministic. |\r\n| AddRIAndDetailLevel | 50 | Adding UseRapidIterationParams and DetailLevelMask to the GPU script |\r\n| ChangeEmitterCompiledDataToSharedRefs | 51 | Changing the system and emitter compiled data to shared pointers to deal with lifetime issues in the editor. They now are handled directly in system serialize. |\r\n| DisableSortingByDefault | 52 | Sorting on Renderers is disabled by default, we add a version to maintain existing systems that expected sorting to be enabled |\r\n| MemorySaving | 53 | Convert TMap into TArray to save memory, TMap contains an inline allocator which pushes the size to 80 bytes |\r\n| AddSimulationStageUsageEnum | 54 | Added a new value to the script usage enum, and we need a custom version to fix the existing bitfields. |\r\n| AddGeneratedFunctionsToGPUParamInfo | 55 | Save the functions generated by a GPU data interface inside FNiagaraDataInterfaceGPUParamInfo |\r\n| PlatformScalingRefactor | 56 | Removed DetailLevel in favor of FNiagaraPlatfomSet based selection of per platform settings. |\r\n| PrecompileNamespaceFixup | 57 | Promote parameters used across script executions to the Dataset, and Demote unused parameters. |\r\n| FixNullScriptVariables | 58 | Postload fixup in UNiagaraGraph to fixup VariableToScriptVariable map entries being null. |\r\n| PrecompileNamespaceFixup2 | 59 | Move FNiagaraVariableMetaData from storing scope enum to storing registered scope name. |\r\n| SimulationStageInUsageBitmask | 60 | Enable the simulation stage flag by default in the usage bitmask of modules and functions |\r\n| StandardizeParameterNames | 61 | Fix graph parameter map parameters on post load so that they all have a consisten parsable format and update the UI to show and filter based on these formats. |\r\n| ComponentsOnlyHaveUserVariables | 62 | Make sure that UNiagaraComponents only have override maps for User variables. |\r\n| RibbonRendererUVRefactor | 63 | Refactor the options for UV settings on the ribbon renderer. |\r\n| VariablesUseTypeDefRegistry | 64 | Replace the TypeDefinition in VariableBase with an index into the type registry |\r\n| AddLibraryVisibilityProperty | 65 | Expand the visibility options of the scripts to be able to hide a script completely from the user |\r\n| ModuleVersioning | 67 | Added support for multiple versions of script data |\r\n| ChangeSystemDeterministicDefault | 69 | Changed the default mode from deterministic to non-deterministic which matches emitters |\r\n| StaticSwitchFunctionPinsUsePersistentGuids | 70 | Update static switch pins to use the PersistentId from their script variable so that when they're renamed their values aren't lost when reallocating pins. |\r\n| VisibilityCullingImprovements | 71 | Extended visibility culling options and moved properties into their own struct. |\r\n| PopulateFunctionCallNodePinNameBindings | 73 | Function call node refresh from external changes has been refactored so that they don't need to populate their name bindings every load. |\r\n| ComponentRendererSpawnProperty | 74 | Changed the default value for the component renderer's OnlyCreateComponentsOnParticleSpawn property |\r\n| RepopulateFunctionCallNodePinNameBindings | 75 | Previous repopulate didn't handle module attributes like Particles.Module.Name so they need to be repopulated for renaming to work correctly. |\r\n| EventSpawnsUpdateInitialAttributeValues | 76 | Event spawns now optionally update Initial. attribute values. New default is true but old data is kept false to maintain existing behavior. |\r\n| AddVariadicParametersToGPUFunctionInfo | 77 | Adds list of variadic parameters to the information about GPU functions. |\r\n| DynamicPinNodeFixup | 78 | Some data fixup for NiagaraNodeWithDynamicPins. |\r\n| RibbonRendererLinkOrderDefaultIsUniqueID | 79 | Ribbon renderer will default to unique ID rather than normalized age to make more things 'just work' |\r\n| SubImageBlendEnabledByDefault | 80 | Renderer SubImage Blends are enabled by default |\r\n| RibbonPlaneUseGeometryNormals | 81 | Ribbon renderer will use geometry normals by default rather than screen / facing aligned normals |\r\n| InitialOwnerVelocityFromActor | 82 | Actors velocity is used for the initial velocity before the component has any tracking, old assets use the old zero velocity |\r\n| ParameterBindingWithValueRenameFixup | 83 | FNiagaraParameterBindingWithValue wouldn't necessarily have the appropriate ResolvedParameter namespace when it comes to emitter merging |\r\n| SimCache_BulkDataVersion1 | 84 | Sim Cache moved to bulk data by default |\r\n| InheritanceUxRefactor | 85 | Decoupling of 'Template' and 'Inheritance' |\r\n| NDCSpawnGroupOverrideDisabledByDefault | 86 | NDC Read DIs will not override spawn group by default when spawning particles. Old content will remain unchanged. |\r\n| CustomSortingBindingToAge | 87 | Before it was normalized age which can introduce flickering with sorting and random lifetimes |\r\n| StatelessInitialMeshOrientationV1 | 88 | Update Initial Mesh Orientation Module |\r\n| HierarchyEditorScriptSupport | 89 | Hierarchy Editor was implemented |\r\n| EmitterStateAddLoopDelayEnabled | 90 | Added loop delay enabled to emitter state |\r\n| SerializeUsageBitMaskToGPUFunctionInfo | 91 | Make sure that we serialize the UsageBitMask with the GPUFunctionInfo |\r\n| AddedNewInterpolatedSpawnMode | 92 | Changed the interpolated spawn property into an enum |\r\n| UserAssetTagStorageInMetaData | 93 | Adding user asset tag storage in UMetaData for all UPackages |\r\n| VersionPlusOne | 94 | DO NOT ADD A NEW VERSION UNLESS YOU HAVE TALKED TO THE NIAGARA LEAD. Mismanagement of these versions can lead to data loss if it is adjusted in multiple streams simultaneously. -----new versions can be added above this line------------------------------------------------- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.customversions.fniagaraobjectversion.md",
    "content": "# FNiagaraObjectVersion\r\n\r\nNamespace: UAssetAPI.CustomVersions\r\n\r\n```csharp\r\npublic enum FNiagaraObjectVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [FNiagaraObjectVersion](./uassetapi.customversions.fniagaraobjectversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| BeforeCustomVersionWasAdded | 0 | Before any version changes were made |\r\n| VersionPlusOne | 2 | -----new versions can be added above this line------------------------------------------------- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.customversions.freleaseobjectversion.md",
    "content": "# FReleaseObjectVersion\r\n\r\nNamespace: UAssetAPI.CustomVersions\r\n\r\nCustom serialization version for changes made in Release streams.\r\n\r\n```csharp\r\npublic enum FReleaseObjectVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [FReleaseObjectVersion](./uassetapi.customversions.freleaseobjectversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| BeforeCustomVersionWasAdded | 0 | Before any version changes were made |\r\n| StaticMeshExtendedBoundsFix | 1 | Static Mesh extended bounds radius fix |\r\n| NoSyncAsyncPhysAsset | 2 | Physics asset bodies are either in the sync scene or the async scene, but not both |\r\n| LevelTransArrayConvertedToTArray | 3 | ULevel was using TTransArray incorrectly (serializing the entire array in addition to individual mutations). converted to a TArray |\r\n| AddComponentNodeTemplateUniqueNames | 4 | Add Component node templates now use their own unique naming scheme to ensure more reliable archetype lookups. |\r\n| UPropertryForMeshSectionSerialize | 5 | Fix a serialization issue with static mesh FMeshSectionInfoMap FProperty |\r\n| ConvertHLODScreenSize | 6 | Existing HLOD settings screen size to screen area conversion |\r\n| SpeedTreeBillboardSectionInfoFixup | 7 | Adding mesh section info data for existing billboard LOD models |\r\n| EventSectionParameterStringAssetRef | 8 | Change FMovieSceneEventParameters::StructType to be a string asset reference from a TWeakObjectPtr UScriptStruct |\r\n| SkyLightRemoveMobileIrradianceMap | 9 | Remove serialized irradiance map data from skylight. |\r\n| RenameNoTwistToAllowTwistInTwoBoneIK | 10 | rename bNoTwist to bAllowTwist |\r\n| MaterialLayersParameterSerializationRefactor | 11 | Material layers serialization refactor |\r\n| AddSkeletalMeshSectionDisable | 12 | Added disable flag to skeletal mesh data |\r\n| RemovedMaterialSharedInputCollection | 13 | Removed objects that were serialized as part of this material feature |\r\n| HISMCClusterTreeMigration | 14 | HISMC Cluster Tree migration to add new data |\r\n| PinDefaultValuesVerified | 15 | Default values on pins in blueprints could be saved incoherently |\r\n| FixBrokenStateMachineReferencesInTransitionGetters | 16 | During copy and paste transition getters could end up with broken state machine references |\r\n| MeshDescriptionNewSerialization | 17 | Change to MeshDescription serialization |\r\n| UnclampRGBColorCurves | 18 | Change to not clamp RGB values &gt; 1 on linear color curves |\r\n| LinkTimeAnimBlueprintRootDiscoveryBugFix | 19 | BugFix for FAnimObjectVersion::LinkTimeAnimBlueprintRootDiscovery. |\r\n| TrailNodeBlendVariableNameChange | 20 | Change trail anim node variable deprecation |\r\n| PropertiesSerializeRepCondition | 21 | Make sure the Blueprint Replicated Property Conditions are actually serialized properly. |\r\n| FocalDistanceDisablesDOF | 22 | DepthOfFieldFocalDistance at 0 now disables DOF instead of DepthOfFieldFstop at 0. |\r\n| Unused_SoundClass2DReverbSend | 23 | Removed versioning, but version entry must still exist to keep assets saved with this version loadable |\r\n| GroomAssetVersion1 | 24 | Groom asset version |\r\n| GroomAssetVersion2 | 25 | Groom asset version |\r\n| SerializeAnimModifierState | 26 | Store applied version of Animation Modifier to use when reverting |\r\n| GroomAssetVersion3 | 27 | Groom asset version |\r\n| DeprecateFilmbackSettings | 28 | Upgrade filmback |\r\n| CustomImplicitCollisionType | 29 | custom collision type |\r\n| FFieldPathOwnerSerialization | 30 | FFieldPath will serialize the owner struct reference and only a short path to its property |\r\n| ReleaseUE4VersionFixup | 31 | Dummy version to allow us to Fix up the fact that ReleaseObjectVersion was changed elsewhere |\r\n| PinTypeIncludesUObjectWrapperFlag | 32 | Pin types include a flag that propagates the 'CPF_UObjectWrapper' flag to generated properties |\r\n| WeightFMeshToMeshVertData | 33 | Added Weight member to FMeshToMeshVertData |\r\n| AnimationGraphNodeBindingsDisplayedAsPins | 34 | Animation graph node bindings displayed as pins |\r\n| SerializeRigVMOffsetSegmentPaths | 35 | Serialized rigvm offset segment paths |\r\n| AbcVelocitiesSupport | 36 | Upgrade AbcGeomCacheImportSettings for velocities |\r\n| MarginAddedToConvexAndBox | 37 | Add margin support to Chaos Convex |\r\n| StructureDataAddedToConvex | 38 | Add structure data to Chaos Convex |\r\n| AddedFrontRightUpAxesToLiveLinkPreProcessor | 39 | Changed axis UI for LiveLink AxisSwitch Pre Processor |\r\n| FixupCopiedEventSections | 40 | Some sequencer event sections that were copy-pasted left broken links to the director BP |\r\n| RemoteControlSerializeFunctionArgumentsSize | 41 | Serialize the number of bytes written when serializing function arguments |\r\n| AddedSubSequenceEntryWarpCounter | 42 | Add loop counters to sequencer's compiled sub-sequence data |\r\n| LonglatTextureCubeDefaultMaxResolution | 43 | Remove default resolution limit of 512 pixels for cubemaps generated from long-lat sources |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.customversions.fsequencerobjectversion.md",
    "content": "# FSequencerObjectVersion\r\n\r\nNamespace: UAssetAPI.CustomVersions\r\n\r\n```csharp\r\npublic enum FSequencerObjectVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [FSequencerObjectVersion](./uassetapi.customversions.fsequencerobjectversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| BeforeCustomVersionWasAdded | 0 | Before any version changes were made |\r\n| RenameMediaSourcePlatformPlayers | 1 | Per-platform overrides player overrides for media sources changed name and type. |\r\n| ConvertEnableRootMotionToForceRootLock | 2 | Enable root motion isn't the right flag to use, but force root lock |\r\n| ConvertMultipleRowsToTracks | 3 | Convert multiple rows to tracks |\r\n| WhenFinishedDefaultsToRestoreState | 4 | When finished now defaults to restore state |\r\n| EvaluationTree | 5 | EvaluationTree added |\r\n| WhenFinishedDefaultsToProjectDefault | 6 | When finished now defaults to project default |\r\n| FloatToIntConversion | 7 | Use int range rather than float range in FMovieSceneSegment |\r\n| PurgeSpawnableBlueprints | 8 | Purged old spawnable blueprint classes from level sequence assets |\r\n| FinishUMGEvaluation | 9 | Finish UMG evaluation on end |\r\n| SerializeFloatChannel | 10 | Manual serialization of float channel |\r\n| ModifyLinearKeysForOldInterp | 11 | Change the linear keys so they act the old way and interpolate always. |\r\n| SerializeFloatChannelCompletely | 12 | Full Manual serialization of float channel |\r\n| SpawnableImprovements | 13 | Set ContinuouslyRespawn to false by default, added FMovieSceneSpawnable::bNetAddressableName |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.customversions.fue5releasestreamobjectversion.md",
    "content": "# FUE5ReleaseStreamObjectVersion\r\n\r\nNamespace: UAssetAPI.CustomVersions\r\n\r\n```csharp\r\npublic enum FUE5ReleaseStreamObjectVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [FUE5ReleaseStreamObjectVersion](./uassetapi.customversions.fue5releasestreamobjectversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| BeforeCustomVersionWasAdded | 0 | Before any version changes were made |\r\n| ReflectionMethodEnum | 1 | Added Lumen reflections to new reflection enum, changed defaults |\r\n| WorldPartitionActorDescSerializeHLODInfo | 2 | Serialize HLOD info in WorldPartitionActorDesc |\r\n| RemovingTessellation | 3 | Removing Tessellation from materials and meshes. |\r\n| LevelInstanceSerializeRuntimeBehavior | 4 | LevelInstance serialize runtime behavior |\r\n| PoseAssetRuntimeRefactor | 5 | Refactoring Pose Asset runtime data structures |\r\n| WorldPartitionActorDescSerializeActorFolderPath | 6 | Serialize the folder path of actor descs |\r\n| HairStrandsVertexFormatChange | 7 | Change hair strands vertex format |\r\n| AddChaosMaxLinearAngularSpeed | 8 | Added max linear and angular speed to Chaos bodies |\r\n| PackedLevelInstanceVersion | 9 | PackedLevelInstance version |\r\n| PackedLevelInstanceBoundsFix | 10 | PackedLevelInstance bounds fix |\r\n| CustomPropertyAnimGraphNodesUseOptionalPinManager | 11 | Custom property anim graph nodes (linked anim graphs, control rig etc.) now use optional pin manager |\r\n| TextFormatArgumentData64bitSupport | 12 | Add native double and int64 support to FFormatArgumentData |\r\n| MaterialLayerStacksAreNotParameters | 13 | Material layer stacks are no longer considered 'static parameters' |\r\n| MaterialInterfaceSavedCachedData | 14 | CachedExpressionData is moved from UMaterial to UMaterialInterface |\r\n| AddClothMappingLODBias | 15 | Add support for multiple cloth deformer LODs to be able to raytrace cloth with a different LOD than the one it is rendered with |\r\n| AddLevelActorPackagingScheme | 16 | Add support for different external actor packaging schemes |\r\n| WorldPartitionActorDescSerializeAttachParent | 17 | Add support for linking to the attached parent actor in WorldPartitionActorDesc |\r\n| ConvertedActorGridPlacementToSpatiallyLoadedFlag | 18 | Converted AActor GridPlacement to bIsSpatiallyLoaded flag |\r\n| ActorGridPlacementDeprecateDefaultValueFixup | 19 | Fixup for bad default value for GridPlacement_DEPRECATED |\r\n| PackedLevelActorUseWorldPartitionActorDesc | 20 | PackedLevelActor started using FWorldPartitionActorDesc (not currently checked against but added as a security) |\r\n| AddLevelActorFolders | 21 | Add support for actor folder objects |\r\n| RemoveSkeletalMeshLODModelBulkDatas | 22 | Remove FSkeletalMeshLODModel bulk datas |\r\n| ExcludeBrightnessFromEncodedHDRCubemap | 23 | Exclude brightness from the EncodedHDRCubemap, |\r\n| VolumetricCloudSampleCountUnification | 24 | Unified volumetric cloud component quality sample count slider between main and reflection views for consistency |\r\n| PoseAssetRawDataGUID | 25 | Pose asset GUID generated from source AnimationSequence |\r\n| ConvolutionBloomIntensity | 26 | Convolution bloom now take into account FPostProcessSettings::BloomIntensity for scatter dispersion. |\r\n| WorldPartitionHLODActorDescSerializeHLODSubActors | 27 | Serialize FHLODSubActors instead of FGuids in WorldPartition HLODActorDesc |\r\n| LargeWorldCoordinates | 28 | Large Worlds - serialize double types as doubles |\r\n| BlueprintPinsUseRealNumbers | 29 | Deserialize old BP float and double types as real numbers for pins |\r\n| UpdatedDirectionalLightShadowDefaults | 30 | Changed shadow defaults for directional light components, version needed to not affect old things |\r\n| GeometryCollectionConvexDefaults | 31 | Refresh geometry collections that had not already generated convex bodies. |\r\n| ChaosClothFasterDamping | 32 | Add faster damping calculations to the cloth simulation and rename previous Damping parameter to LocalDamping. |\r\n| WorldPartitionLandscapeActorDescSerializeLandscapeActorGuid | 33 | Serialize LandscapeActorGuid in FLandscapeActorDesc sub class. |\r\n| AddedInertiaTensorAndRotationOfMassAddedToConvex | 34 | add inertia tensor and rotation of mass to convex |\r\n| ChaosInertiaConvertedToVec3 | 35 | Storing inertia tensor as vec3 instead of matrix. |\r\n| SerializeFloatPinDefaultValuesAsSinglePrecision | 36 | For Blueprint real numbers, ensure that legacy float data is serialized as single-precision |\r\n| AnimLayeredBoneBlendMasks | 37 | Upgrade the BlendMasks array in existing LayeredBoneBlend nodes |\r\n| StoreReflectionCaptureEncodedHDRDataInRG11B10Format | 38 | Uses RG11B10 format to store the encoded reflection capture data on mobile |\r\n| RawAnimSequenceTrackSerializer | 39 | Add WithSerializer type trait and implementation for FRawAnimSequenceTrack |\r\n| RemoveDuplicatedStyleInfo | 40 | Removed font from FEditableTextBoxStyle, and added FTextBlockStyle instead. |\r\n| LinkedAnimGraphMemberReference | 41 | Added member reference to linked anim graphs |\r\n| DynamicMeshComponentsDefaultUseExternalTangents | 42 | Changed default tangent behavior for new dynamic mesh components |\r\n| MediaCaptureNewResizeMethods | 43 | Added resize methods to media capture |\r\n| RigVMSaveDebugMapInGraphFunctionData | 44 | Function data stores a map from work to debug operands |\r\n| LocalExposureDefaultChangeFrom1 | 45 | Changed default Local Exposure Contrast Scale from 1.0 to 0.8 |\r\n| WorldPartitionActorDescSerializeActorIsListedInSceneOutliner | 46 | Serialize bActorIsListedInSceneOutliner in WorldPartitionActorDesc |\r\n| OpenColorIODisabledDisplayConfigurationDefault | 47 | Disabled opencolorio display configuration by default |\r\n| WorldPartitionExternalDataLayers | 48 | Serialize ExternalDataLayerAsset in WorldPartitionActorDesc |\r\n| ChaosClothFictitiousAngularVelocitySubframeFix | 49 | Fix Chaos Cloth fictitious angular scale bug that requires existing parameter rescaling. |\r\n| SinglePrecisonParticleDataPT | 50 | Store physics thread particles data in single precision |\r\n| OrthographicAutoNearFarPlane | 51 | Orthographic Near and Far Plane Auto-resolve enabled by default |\r\n| VersionPlusOne | 52 | -----new versions can be added above this line------------------------------------------------- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.customversions.introducedattribute.md",
    "content": "# IntroducedAttribute\r\n\r\nNamespace: UAssetAPI.CustomVersions\r\n\r\nRepresents the engine version at the time that a custom version was implemented.\r\n\r\n```csharp\r\npublic class IntroducedAttribute : System.Attribute\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Attribute](https://docs.microsoft.com/en-us/dotnet/api/system.attribute) → [IntroducedAttribute](./uassetapi.customversions.introducedattribute.md)\r\n\r\n## Fields\r\n\r\n### **IntroducedVersion**\r\n\r\n```csharp\r\npublic EngineVersion IntroducedVersion;\r\n```\r\n\r\n## Properties\r\n\r\n### **TypeId**\r\n\r\n```csharp\r\npublic object TypeId { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **IntroducedAttribute(EngineVersion)**\r\n\r\n```csharp\r\npublic IntroducedAttribute(EngineVersion introducedVersion)\r\n```\r\n\r\n#### Parameters\r\n\r\n`introducedVersion` [EngineVersion](./uassetapi.unrealtypes.engineversion.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.classexport.md",
    "content": "# ClassExport\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\nRepresents an object class.\r\n\r\n```csharp\r\npublic class ClassExport : StructExport, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Export](./uassetapi.exporttypes.export.md) → [NormalExport](./uassetapi.exporttypes.normalexport.md) → [FieldExport](./uassetapi.exporttypes.fieldexport.md) → [StructExport](./uassetapi.exporttypes.structexport.md) → [ClassExport](./uassetapi.exporttypes.classexport.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **FuncMap**\r\n\r\nMap of all functions by name contained in this class\r\n\r\n```csharp\r\npublic TMap<FName, FPackageIndex> FuncMap;\r\n```\r\n\r\n### **ClassFlags**\r\n\r\nClass flags; See [EClassFlags](./uassetapi.unrealtypes.eclassflags.md) for more information\r\n\r\n```csharp\r\npublic EClassFlags ClassFlags;\r\n```\r\n\r\n### **ClassWithin**\r\n\r\nThe required type for the outer of instances of this class\r\n\r\n```csharp\r\npublic FPackageIndex ClassWithin;\r\n```\r\n\r\n### **ClassConfigName**\r\n\r\nWhich Name.ini file to load Config variables out of\r\n\r\n```csharp\r\npublic FName ClassConfigName;\r\n```\r\n\r\n### **Interfaces**\r\n\r\nThe list of interfaces which this class implements, along with the pointer property that is located at the offset of the interface's vtable.\r\n If the interface class isn't native, the property will be empty.\r\n\r\n```csharp\r\npublic SerializedInterfaceReference[] Interfaces;\r\n```\r\n\r\n### **ClassGeneratedBy**\r\n\r\nThis is the blueprint that caused the generation of this class, or null if it is a native compiled-in class\r\n\r\n```csharp\r\npublic FPackageIndex ClassGeneratedBy;\r\n```\r\n\r\n### **bDeprecatedForceScriptOrder**\r\n\r\nDoes this class use deprecated script order?\r\n\r\n```csharp\r\npublic bool bDeprecatedForceScriptOrder;\r\n```\r\n\r\n### **bCooked**\r\n\r\nUsed to check if the class was cooked or not\r\n\r\n```csharp\r\npublic bool bCooked;\r\n```\r\n\r\n### **ClassDefaultObject**\r\n\r\nThe class default object; used for delta serialization and object initialization\r\n\r\n```csharp\r\npublic FPackageIndex ClassDefaultObject;\r\n```\r\n\r\n### **SuperStruct**\r\n\r\nStruct this inherits from, may be null\r\n\r\n```csharp\r\npublic FPackageIndex SuperStruct;\r\n```\r\n\r\n### **Children**\r\n\r\nList of child fields\r\n\r\n```csharp\r\npublic FPackageIndex[] Children;\r\n```\r\n\r\n### **LoadedProperties**\r\n\r\nProperties serialized with this struct definition\r\n\r\n```csharp\r\npublic FProperty[] LoadedProperties;\r\n```\r\n\r\n### **ScriptBytecode**\r\n\r\nThe bytecode instructions contained within this struct.\r\n\r\n```csharp\r\npublic KismetExpression[] ScriptBytecode;\r\n```\r\n\r\n### **ScriptBytecodeSize**\r\n\r\nBytecode size in total in deserialized memory. Filled out in lieu of [StructExport.ScriptBytecode](./uassetapi.exporttypes.structexport.md#scriptbytecode) if an error occurs during bytecode parsing.\r\n\r\n```csharp\r\npublic int ScriptBytecodeSize;\r\n```\r\n\r\n### **ScriptBytecodeRaw**\r\n\r\nRaw binary bytecode data. Filled out in lieu of [StructExport.ScriptBytecode](./uassetapi.exporttypes.structexport.md#scriptbytecode) if an error occurs during bytecode parsing.\r\n\r\n```csharp\r\npublic Byte[] ScriptBytecodeRaw;\r\n```\r\n\r\n### **Field**\r\n\r\n```csharp\r\npublic UField Field;\r\n```\r\n\r\n### **Data**\r\n\r\n```csharp\r\npublic List<PropertyData> Data;\r\n```\r\n\r\n### **ObjectGuid**\r\n\r\n```csharp\r\npublic Nullable<Guid> ObjectGuid;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **HasLeadingFourNullBytes**\r\n\r\n```csharp\r\npublic bool HasLeadingFourNullBytes;\r\n```\r\n\r\n### **ObjectName**\r\n\r\nThe name of the UObject represented by this resource.\r\n\r\n```csharp\r\npublic FName ObjectName;\r\n```\r\n\r\n### **OuterIndex**\r\n\r\nLocation of the resource for this resource's Outer (import/other export). 0 = this resource is a top-level UPackage\r\n\r\n```csharp\r\npublic FPackageIndex OuterIndex;\r\n```\r\n\r\n### **ClassIndex**\r\n\r\nLocation of this export's class (import/other export). 0 = this export is a UClass\r\n\r\n```csharp\r\npublic FPackageIndex ClassIndex;\r\n```\r\n\r\n### **SuperIndex**\r\n\r\nLocation of this export's parent class (import/other export). 0 = this export is not derived from UStruct\r\n\r\n```csharp\r\npublic FPackageIndex SuperIndex;\r\n```\r\n\r\n### **TemplateIndex**\r\n\r\nLocation of this export's template (import/other export). 0 = there is some problem\r\n\r\n```csharp\r\npublic FPackageIndex TemplateIndex;\r\n```\r\n\r\n### **ObjectFlags**\r\n\r\nThe object flags for the UObject represented by this resource. Only flags that match the RF_Load combination mask will be loaded from disk and applied to the UObject.\r\n\r\n```csharp\r\npublic EObjectFlags ObjectFlags;\r\n```\r\n\r\n### **SerialSize**\r\n\r\nThe number of bytes to serialize when saving/loading this export's UObject.\r\n\r\n```csharp\r\npublic long SerialSize;\r\n```\r\n\r\n### **SerialOffset**\r\n\r\nThe location (into the FLinker's underlying file reader archive) of the beginning of the data for this export's UObject. Used for verification only.\r\n\r\n```csharp\r\npublic long SerialOffset;\r\n```\r\n\r\n### **ScriptSerializationStartOffset**\r\n\r\nThe location (relative to SerialOffset) of the beginning of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4).\r\n\r\n```csharp\r\npublic long ScriptSerializationStartOffset;\r\n```\r\n\r\n### **ScriptSerializationEndOffset**\r\n\r\nThe location (relative to SerialOffset) of the end of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4)\r\n\r\n```csharp\r\npublic long ScriptSerializationEndOffset;\r\n```\r\n\r\n### **bForcedExport**\r\n\r\nWas this export forced into the export table via OBJECTMARK_ForceTagExp?\r\n\r\n```csharp\r\npublic bool bForcedExport;\r\n```\r\n\r\n### **bNotForClient**\r\n\r\nShould this export not be loaded on clients?\r\n\r\n```csharp\r\npublic bool bNotForClient;\r\n```\r\n\r\n### **bNotForServer**\r\n\r\nShould this export not be loaded on servers?\r\n\r\n```csharp\r\npublic bool bNotForServer;\r\n```\r\n\r\n### **PackageGuid**\r\n\r\nIf this object is a top level package (which must have been forced into the export table via OBJECTMARK_ForceTagExp), this is the GUID for the original package file. Deprecated\r\n\r\n```csharp\r\npublic Guid PackageGuid;\r\n```\r\n\r\n### **IsInheritedInstance**\r\n\r\n\r\n\r\n```csharp\r\npublic bool IsInheritedInstance;\r\n```\r\n\r\n### **PackageFlags**\r\n\r\nIf this export is a top-level package, this is the flags for the original package\r\n\r\n```csharp\r\npublic EPackageFlags PackageFlags;\r\n```\r\n\r\n### **bNotAlwaysLoadedForEditorGame**\r\n\r\nShould this export be always loaded in editor game?\r\n\r\n```csharp\r\npublic bool bNotAlwaysLoadedForEditorGame;\r\n```\r\n\r\n### **bIsAsset**\r\n\r\nIs this export an asset?\r\n\r\n```csharp\r\npublic bool bIsAsset;\r\n```\r\n\r\n### **GeneratePublicHash**\r\n\r\n\r\n\r\n```csharp\r\npublic bool GeneratePublicHash;\r\n```\r\n\r\n### **SerializationBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeSerializationDependencies;\r\n```\r\n\r\n### **CreateBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeSerializationDependencies;\r\n```\r\n\r\n### **SerializationBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeCreateDependencies;\r\n```\r\n\r\n### **CreateBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeCreateDependencies;\r\n```\r\n\r\n### **Extras**\r\n\r\nMiscellaneous, unparsed export data, stored as a byte array.\r\n\r\n```csharp\r\npublic Byte[] Extras;\r\n```\r\n\r\n### **Asset**\r\n\r\nThe asset that this export is parsed with.\r\n\r\n```csharp\r\npublic UAsset Asset;\r\n```\r\n\r\n## Properties\r\n\r\n## Constructors\r\n\r\n### **ClassExport(Export)**\r\n\r\n```csharp\r\npublic ClassExport(Export super)\r\n```\r\n\r\n#### Parameters\r\n\r\n`super` [Export](./uassetapi.exporttypes.export.md)<br>\r\n\r\n### **ClassExport(UAsset, Byte[])**\r\n\r\n```csharp\r\npublic ClassExport(UAsset asset, Byte[] extras)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`extras` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **ClassExport()**\r\n\r\n```csharp\r\npublic ClassExport()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Int32)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, int nextStarting)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`nextStarting` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.datatableexport.md",
    "content": "# DataTableExport\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\nExport for an imported spreadsheet table. See [UDataTable](./uassetapi.exporttypes.udatatable.md).\r\n\r\n```csharp\r\npublic class DataTableExport : NormalExport, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Export](./uassetapi.exporttypes.export.md) → [NormalExport](./uassetapi.exporttypes.normalexport.md) → [DataTableExport](./uassetapi.exporttypes.datatableexport.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Table**\r\n\r\n```csharp\r\npublic UDataTable Table;\r\n```\r\n\r\n### **Data**\r\n\r\n```csharp\r\npublic List<PropertyData> Data;\r\n```\r\n\r\n### **ObjectGuid**\r\n\r\n```csharp\r\npublic Nullable<Guid> ObjectGuid;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **HasLeadingFourNullBytes**\r\n\r\n```csharp\r\npublic bool HasLeadingFourNullBytes;\r\n```\r\n\r\n### **ObjectName**\r\n\r\nThe name of the UObject represented by this resource.\r\n\r\n```csharp\r\npublic FName ObjectName;\r\n```\r\n\r\n### **OuterIndex**\r\n\r\nLocation of the resource for this resource's Outer (import/other export). 0 = this resource is a top-level UPackage\r\n\r\n```csharp\r\npublic FPackageIndex OuterIndex;\r\n```\r\n\r\n### **ClassIndex**\r\n\r\nLocation of this export's class (import/other export). 0 = this export is a UClass\r\n\r\n```csharp\r\npublic FPackageIndex ClassIndex;\r\n```\r\n\r\n### **SuperIndex**\r\n\r\nLocation of this export's parent class (import/other export). 0 = this export is not derived from UStruct\r\n\r\n```csharp\r\npublic FPackageIndex SuperIndex;\r\n```\r\n\r\n### **TemplateIndex**\r\n\r\nLocation of this export's template (import/other export). 0 = there is some problem\r\n\r\n```csharp\r\npublic FPackageIndex TemplateIndex;\r\n```\r\n\r\n### **ObjectFlags**\r\n\r\nThe object flags for the UObject represented by this resource. Only flags that match the RF_Load combination mask will be loaded from disk and applied to the UObject.\r\n\r\n```csharp\r\npublic EObjectFlags ObjectFlags;\r\n```\r\n\r\n### **SerialSize**\r\n\r\nThe number of bytes to serialize when saving/loading this export's UObject.\r\n\r\n```csharp\r\npublic long SerialSize;\r\n```\r\n\r\n### **SerialOffset**\r\n\r\nThe location (into the FLinker's underlying file reader archive) of the beginning of the data for this export's UObject. Used for verification only.\r\n\r\n```csharp\r\npublic long SerialOffset;\r\n```\r\n\r\n### **ScriptSerializationStartOffset**\r\n\r\nThe location (relative to SerialOffset) of the beginning of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4).\r\n\r\n```csharp\r\npublic long ScriptSerializationStartOffset;\r\n```\r\n\r\n### **ScriptSerializationEndOffset**\r\n\r\nThe location (relative to SerialOffset) of the end of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4)\r\n\r\n```csharp\r\npublic long ScriptSerializationEndOffset;\r\n```\r\n\r\n### **bForcedExport**\r\n\r\nWas this export forced into the export table via OBJECTMARK_ForceTagExp?\r\n\r\n```csharp\r\npublic bool bForcedExport;\r\n```\r\n\r\n### **bNotForClient**\r\n\r\nShould this export not be loaded on clients?\r\n\r\n```csharp\r\npublic bool bNotForClient;\r\n```\r\n\r\n### **bNotForServer**\r\n\r\nShould this export not be loaded on servers?\r\n\r\n```csharp\r\npublic bool bNotForServer;\r\n```\r\n\r\n### **PackageGuid**\r\n\r\nIf this object is a top level package (which must have been forced into the export table via OBJECTMARK_ForceTagExp), this is the GUID for the original package file. Deprecated\r\n\r\n```csharp\r\npublic Guid PackageGuid;\r\n```\r\n\r\n### **IsInheritedInstance**\r\n\r\n\r\n\r\n```csharp\r\npublic bool IsInheritedInstance;\r\n```\r\n\r\n### **PackageFlags**\r\n\r\nIf this export is a top-level package, this is the flags for the original package\r\n\r\n```csharp\r\npublic EPackageFlags PackageFlags;\r\n```\r\n\r\n### **bNotAlwaysLoadedForEditorGame**\r\n\r\nShould this export be always loaded in editor game?\r\n\r\n```csharp\r\npublic bool bNotAlwaysLoadedForEditorGame;\r\n```\r\n\r\n### **bIsAsset**\r\n\r\nIs this export an asset?\r\n\r\n```csharp\r\npublic bool bIsAsset;\r\n```\r\n\r\n### **GeneratePublicHash**\r\n\r\n\r\n\r\n```csharp\r\npublic bool GeneratePublicHash;\r\n```\r\n\r\n### **SerializationBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeSerializationDependencies;\r\n```\r\n\r\n### **CreateBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeSerializationDependencies;\r\n```\r\n\r\n### **SerializationBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeCreateDependencies;\r\n```\r\n\r\n### **CreateBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeCreateDependencies;\r\n```\r\n\r\n### **Extras**\r\n\r\nMiscellaneous, unparsed export data, stored as a byte array.\r\n\r\n```csharp\r\npublic Byte[] Extras;\r\n```\r\n\r\n### **Asset**\r\n\r\nThe asset that this export is parsed with.\r\n\r\n```csharp\r\npublic UAsset Asset;\r\n```\r\n\r\n## Properties\r\n\r\n## Constructors\r\n\r\n### **DataTableExport(Export)**\r\n\r\n```csharp\r\npublic DataTableExport(Export super)\r\n```\r\n\r\n#### Parameters\r\n\r\n`super` [Export](./uassetapi.exporttypes.export.md)<br>\r\n\r\n### **DataTableExport(UDataTable, UAsset, Byte[])**\r\n\r\n```csharp\r\npublic DataTableExport(UDataTable data, UAsset asset, Byte[] extras)\r\n```\r\n\r\n#### Parameters\r\n\r\n`data` [UDataTable](./uassetapi.exporttypes.udatatable.md)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`extras` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **DataTableExport()**\r\n\r\n```csharp\r\npublic DataTableExport()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Int32)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, int nextStarting)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`nextStarting` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ResolveAncestries(UAsset, AncestryInfo)**\r\n\r\n```csharp\r\npublic void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`ancestrySoFar` [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.eclassserializationcontrolextension.md",
    "content": "# EClassSerializationControlExtension\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\nEnum flags that indicate that additional data may be serialized prior to actual tagged property serialization\r\n Those extensions are used to store additional function to control how TPS will resolved. e.g. use overridable serialization\r\n\r\n```csharp\r\npublic enum EClassSerializationControlExtension\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EClassSerializationControlExtension](./uassetapi.exporttypes.eclassserializationcontrolextension.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.ecppform.md",
    "content": "# ECppForm\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\nHow this enum is declared in C++. Affects the internal naming of enum values.\r\n\r\n```csharp\r\npublic enum ECppForm\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECppForm](./uassetapi.exporttypes.ecppform.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.eexportfilterflags.md",
    "content": "# EExportFilterFlags\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\nEnum used to determine whether an export should be loaded or not on the client/server. Not actually a bitflag.\r\n\r\n```csharp\r\npublic enum EExportFilterFlags\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EExportFilterFlags](./uassetapi.exporttypes.eexportfilterflags.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.enumexport.md",
    "content": "# EnumExport\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\nExport data for an enumeration. See [UEnum](./uassetapi.exporttypes.uenum.md).\r\n\r\n```csharp\r\npublic class EnumExport : NormalExport, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Export](./uassetapi.exporttypes.export.md) → [NormalExport](./uassetapi.exporttypes.normalexport.md) → [EnumExport](./uassetapi.exporttypes.enumexport.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Enum**\r\n\r\nThe enum that is stored in this export.\r\n\r\n```csharp\r\npublic UEnum Enum;\r\n```\r\n\r\n### **Data**\r\n\r\n```csharp\r\npublic List<PropertyData> Data;\r\n```\r\n\r\n### **ObjectGuid**\r\n\r\n```csharp\r\npublic Nullable<Guid> ObjectGuid;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **HasLeadingFourNullBytes**\r\n\r\n```csharp\r\npublic bool HasLeadingFourNullBytes;\r\n```\r\n\r\n### **ObjectName**\r\n\r\nThe name of the UObject represented by this resource.\r\n\r\n```csharp\r\npublic FName ObjectName;\r\n```\r\n\r\n### **OuterIndex**\r\n\r\nLocation of the resource for this resource's Outer (import/other export). 0 = this resource is a top-level UPackage\r\n\r\n```csharp\r\npublic FPackageIndex OuterIndex;\r\n```\r\n\r\n### **ClassIndex**\r\n\r\nLocation of this export's class (import/other export). 0 = this export is a UClass\r\n\r\n```csharp\r\npublic FPackageIndex ClassIndex;\r\n```\r\n\r\n### **SuperIndex**\r\n\r\nLocation of this export's parent class (import/other export). 0 = this export is not derived from UStruct\r\n\r\n```csharp\r\npublic FPackageIndex SuperIndex;\r\n```\r\n\r\n### **TemplateIndex**\r\n\r\nLocation of this export's template (import/other export). 0 = there is some problem\r\n\r\n```csharp\r\npublic FPackageIndex TemplateIndex;\r\n```\r\n\r\n### **ObjectFlags**\r\n\r\nThe object flags for the UObject represented by this resource. Only flags that match the RF_Load combination mask will be loaded from disk and applied to the UObject.\r\n\r\n```csharp\r\npublic EObjectFlags ObjectFlags;\r\n```\r\n\r\n### **SerialSize**\r\n\r\nThe number of bytes to serialize when saving/loading this export's UObject.\r\n\r\n```csharp\r\npublic long SerialSize;\r\n```\r\n\r\n### **SerialOffset**\r\n\r\nThe location (into the FLinker's underlying file reader archive) of the beginning of the data for this export's UObject. Used for verification only.\r\n\r\n```csharp\r\npublic long SerialOffset;\r\n```\r\n\r\n### **ScriptSerializationStartOffset**\r\n\r\nThe location (relative to SerialOffset) of the beginning of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4).\r\n\r\n```csharp\r\npublic long ScriptSerializationStartOffset;\r\n```\r\n\r\n### **ScriptSerializationEndOffset**\r\n\r\nThe location (relative to SerialOffset) of the end of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4)\r\n\r\n```csharp\r\npublic long ScriptSerializationEndOffset;\r\n```\r\n\r\n### **bForcedExport**\r\n\r\nWas this export forced into the export table via OBJECTMARK_ForceTagExp?\r\n\r\n```csharp\r\npublic bool bForcedExport;\r\n```\r\n\r\n### **bNotForClient**\r\n\r\nShould this export not be loaded on clients?\r\n\r\n```csharp\r\npublic bool bNotForClient;\r\n```\r\n\r\n### **bNotForServer**\r\n\r\nShould this export not be loaded on servers?\r\n\r\n```csharp\r\npublic bool bNotForServer;\r\n```\r\n\r\n### **PackageGuid**\r\n\r\nIf this object is a top level package (which must have been forced into the export table via OBJECTMARK_ForceTagExp), this is the GUID for the original package file. Deprecated\r\n\r\n```csharp\r\npublic Guid PackageGuid;\r\n```\r\n\r\n### **IsInheritedInstance**\r\n\r\n\r\n\r\n```csharp\r\npublic bool IsInheritedInstance;\r\n```\r\n\r\n### **PackageFlags**\r\n\r\nIf this export is a top-level package, this is the flags for the original package\r\n\r\n```csharp\r\npublic EPackageFlags PackageFlags;\r\n```\r\n\r\n### **bNotAlwaysLoadedForEditorGame**\r\n\r\nShould this export be always loaded in editor game?\r\n\r\n```csharp\r\npublic bool bNotAlwaysLoadedForEditorGame;\r\n```\r\n\r\n### **bIsAsset**\r\n\r\nIs this export an asset?\r\n\r\n```csharp\r\npublic bool bIsAsset;\r\n```\r\n\r\n### **GeneratePublicHash**\r\n\r\n\r\n\r\n```csharp\r\npublic bool GeneratePublicHash;\r\n```\r\n\r\n### **SerializationBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeSerializationDependencies;\r\n```\r\n\r\n### **CreateBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeSerializationDependencies;\r\n```\r\n\r\n### **SerializationBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeCreateDependencies;\r\n```\r\n\r\n### **CreateBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeCreateDependencies;\r\n```\r\n\r\n### **Extras**\r\n\r\nMiscellaneous, unparsed export data, stored as a byte array.\r\n\r\n```csharp\r\npublic Byte[] Extras;\r\n```\r\n\r\n### **Asset**\r\n\r\nThe asset that this export is parsed with.\r\n\r\n```csharp\r\npublic UAsset Asset;\r\n```\r\n\r\n## Properties\r\n\r\n## Constructors\r\n\r\n### **EnumExport(Export)**\r\n\r\n```csharp\r\npublic EnumExport(Export super)\r\n```\r\n\r\n#### Parameters\r\n\r\n`super` [Export](./uassetapi.exporttypes.export.md)<br>\r\n\r\n### **EnumExport(UAsset, Byte[])**\r\n\r\n```csharp\r\npublic EnumExport(UAsset asset, Byte[] extras)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`extras` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **EnumExport()**\r\n\r\n```csharp\r\npublic EnumExport()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Int32)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, int nextStarting)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`nextStarting` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.export.md",
    "content": "# Export\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\nUObject resource type for objects that are contained within this package and can be referenced by other packages.\r\n\r\n```csharp\r\npublic class Export : System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Export](./uassetapi.exporttypes.export.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **ObjectName**\r\n\r\nThe name of the UObject represented by this resource.\r\n\r\n```csharp\r\npublic FName ObjectName;\r\n```\r\n\r\n### **OuterIndex**\r\n\r\nLocation of the resource for this resource's Outer (import/other export). 0 = this resource is a top-level UPackage\r\n\r\n```csharp\r\npublic FPackageIndex OuterIndex;\r\n```\r\n\r\n### **ClassIndex**\r\n\r\nLocation of this export's class (import/other export). 0 = this export is a UClass\r\n\r\n```csharp\r\npublic FPackageIndex ClassIndex;\r\n```\r\n\r\n### **SuperIndex**\r\n\r\nLocation of this export's parent class (import/other export). 0 = this export is not derived from UStruct\r\n\r\n```csharp\r\npublic FPackageIndex SuperIndex;\r\n```\r\n\r\n### **TemplateIndex**\r\n\r\nLocation of this export's template (import/other export). 0 = there is some problem\r\n\r\n```csharp\r\npublic FPackageIndex TemplateIndex;\r\n```\r\n\r\n### **ObjectFlags**\r\n\r\nThe object flags for the UObject represented by this resource. Only flags that match the RF_Load combination mask will be loaded from disk and applied to the UObject.\r\n\r\n```csharp\r\npublic EObjectFlags ObjectFlags;\r\n```\r\n\r\n### **SerialSize**\r\n\r\nThe number of bytes to serialize when saving/loading this export's UObject.\r\n\r\n```csharp\r\npublic long SerialSize;\r\n```\r\n\r\n### **SerialOffset**\r\n\r\nThe location (into the FLinker's underlying file reader archive) of the beginning of the data for this export's UObject. Used for verification only.\r\n\r\n```csharp\r\npublic long SerialOffset;\r\n```\r\n\r\n### **ScriptSerializationStartOffset**\r\n\r\nThe location (relative to SerialOffset) of the beginning of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4).\r\n\r\n```csharp\r\npublic long ScriptSerializationStartOffset;\r\n```\r\n\r\n### **ScriptSerializationEndOffset**\r\n\r\nThe location (relative to SerialOffset) of the end of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4)\r\n\r\n```csharp\r\npublic long ScriptSerializationEndOffset;\r\n```\r\n\r\n### **bForcedExport**\r\n\r\nWas this export forced into the export table via OBJECTMARK_ForceTagExp?\r\n\r\n```csharp\r\npublic bool bForcedExport;\r\n```\r\n\r\n### **bNotForClient**\r\n\r\nShould this export not be loaded on clients?\r\n\r\n```csharp\r\npublic bool bNotForClient;\r\n```\r\n\r\n### **bNotForServer**\r\n\r\nShould this export not be loaded on servers?\r\n\r\n```csharp\r\npublic bool bNotForServer;\r\n```\r\n\r\n### **PackageGuid**\r\n\r\nIf this object is a top level package (which must have been forced into the export table via OBJECTMARK_ForceTagExp), this is the GUID for the original package file. Deprecated\r\n\r\n```csharp\r\npublic Guid PackageGuid;\r\n```\r\n\r\n### **IsInheritedInstance**\r\n\r\n\r\n\r\n```csharp\r\npublic bool IsInheritedInstance;\r\n```\r\n\r\n### **PackageFlags**\r\n\r\nIf this export is a top-level package, this is the flags for the original package\r\n\r\n```csharp\r\npublic EPackageFlags PackageFlags;\r\n```\r\n\r\n### **bNotAlwaysLoadedForEditorGame**\r\n\r\nShould this export be always loaded in editor game?\r\n\r\n```csharp\r\npublic bool bNotAlwaysLoadedForEditorGame;\r\n```\r\n\r\n### **bIsAsset**\r\n\r\nIs this export an asset?\r\n\r\n```csharp\r\npublic bool bIsAsset;\r\n```\r\n\r\n### **GeneratePublicHash**\r\n\r\n\r\n\r\n```csharp\r\npublic bool GeneratePublicHash;\r\n```\r\n\r\n### **SerializationBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeSerializationDependencies;\r\n```\r\n\r\n### **CreateBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeSerializationDependencies;\r\n```\r\n\r\n### **SerializationBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeCreateDependencies;\r\n```\r\n\r\n### **CreateBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeCreateDependencies;\r\n```\r\n\r\n### **Extras**\r\n\r\nMiscellaneous, unparsed export data, stored as a byte array.\r\n\r\n```csharp\r\npublic Byte[] Extras;\r\n```\r\n\r\n### **Asset**\r\n\r\nThe asset that this export is parsed with.\r\n\r\n```csharp\r\npublic UAsset Asset;\r\n```\r\n\r\n## Constructors\r\n\r\n### **Export(UAsset, Byte[])**\r\n\r\n```csharp\r\npublic Export(UAsset asset, Byte[] extras)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`extras` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **Export()**\r\n\r\n```csharp\r\npublic Export()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Int32)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, int nextStarting)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`nextStarting` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ResolveAncestries(UAsset, AncestryInfo)**\r\n\r\nResolves the ancestry of all child properties of this export.\r\n\r\n```csharp\r\npublic void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`ancestrySoFar` [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n### **ReadExportMapEntry(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void ReadExportMapEntry(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **GetExportMapEntrySize(UAsset)**\r\n\r\n```csharp\r\npublic static long GetExportMapEntrySize(UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n### **WriteExportMapEntry(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void WriteExportMapEntry(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n### **GetAllObjectExportFields(UAsset)**\r\n\r\n```csharp\r\npublic static MemberInfo[] GetAllObjectExportFields(UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[MemberInfo[]](https://docs.microsoft.com/en-us/dotnet/api/system.reflection.memberinfo)<br>\r\n\r\n### **GetAllFieldNames(UAsset)**\r\n\r\n```csharp\r\npublic static String[] GetAllFieldNames(UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **GetExportClassType()**\r\n\r\n```csharp\r\npublic FName GetExportClassType()\r\n```\r\n\r\n#### Returns\r\n\r\n[FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **GetClassTypeForAncestry(UAsset, FName&)**\r\n\r\n```csharp\r\npublic FName GetClassTypeForAncestry(UAsset asset, FName& modulePath)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`modulePath` [FName&](./uassetapi.unrealtypes.fname&.md)<br>\r\n\r\n#### Returns\r\n\r\n[FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **GetClassTypeForAncestry(FPackageIndex, UAsset, FName&)**\r\n\r\n```csharp\r\npublic static FName GetClassTypeForAncestry(FPackageIndex classIndex, UAsset asset, FName& modulePath)\r\n```\r\n\r\n#### Parameters\r\n\r\n`classIndex` [FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`modulePath` [FName&](./uassetapi.unrealtypes.fname&.md)<br>\r\n\r\n#### Returns\r\n\r\n[FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **Clone()**\r\n\r\n```csharp\r\npublic object Clone()\r\n```\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ConvertToChildExport&lt;T&gt;()**\r\n\r\nCreates a child export instance with the same export details as the current export.\r\n\r\n```csharp\r\npublic T ConvertToChildExport<T>()\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\nThe type of child export to create.\r\n\r\n#### Returns\r\n\r\nT<br>\r\nAn instance of the child export type provided with the export details copied over.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.fieldexport.md",
    "content": "# FieldExport\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\nExport data for a [UField](./uassetapi.fieldtypes.ufield.md).\r\n\r\n```csharp\r\npublic class FieldExport : NormalExport, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Export](./uassetapi.exporttypes.export.md) → [NormalExport](./uassetapi.exporttypes.normalexport.md) → [FieldExport](./uassetapi.exporttypes.fieldexport.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Field**\r\n\r\n```csharp\r\npublic UField Field;\r\n```\r\n\r\n### **Data**\r\n\r\n```csharp\r\npublic List<PropertyData> Data;\r\n```\r\n\r\n### **ObjectGuid**\r\n\r\n```csharp\r\npublic Nullable<Guid> ObjectGuid;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **HasLeadingFourNullBytes**\r\n\r\n```csharp\r\npublic bool HasLeadingFourNullBytes;\r\n```\r\n\r\n### **ObjectName**\r\n\r\nThe name of the UObject represented by this resource.\r\n\r\n```csharp\r\npublic FName ObjectName;\r\n```\r\n\r\n### **OuterIndex**\r\n\r\nLocation of the resource for this resource's Outer (import/other export). 0 = this resource is a top-level UPackage\r\n\r\n```csharp\r\npublic FPackageIndex OuterIndex;\r\n```\r\n\r\n### **ClassIndex**\r\n\r\nLocation of this export's class (import/other export). 0 = this export is a UClass\r\n\r\n```csharp\r\npublic FPackageIndex ClassIndex;\r\n```\r\n\r\n### **SuperIndex**\r\n\r\nLocation of this export's parent class (import/other export). 0 = this export is not derived from UStruct\r\n\r\n```csharp\r\npublic FPackageIndex SuperIndex;\r\n```\r\n\r\n### **TemplateIndex**\r\n\r\nLocation of this export's template (import/other export). 0 = there is some problem\r\n\r\n```csharp\r\npublic FPackageIndex TemplateIndex;\r\n```\r\n\r\n### **ObjectFlags**\r\n\r\nThe object flags for the UObject represented by this resource. Only flags that match the RF_Load combination mask will be loaded from disk and applied to the UObject.\r\n\r\n```csharp\r\npublic EObjectFlags ObjectFlags;\r\n```\r\n\r\n### **SerialSize**\r\n\r\nThe number of bytes to serialize when saving/loading this export's UObject.\r\n\r\n```csharp\r\npublic long SerialSize;\r\n```\r\n\r\n### **SerialOffset**\r\n\r\nThe location (into the FLinker's underlying file reader archive) of the beginning of the data for this export's UObject. Used for verification only.\r\n\r\n```csharp\r\npublic long SerialOffset;\r\n```\r\n\r\n### **ScriptSerializationStartOffset**\r\n\r\nThe location (relative to SerialOffset) of the beginning of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4).\r\n\r\n```csharp\r\npublic long ScriptSerializationStartOffset;\r\n```\r\n\r\n### **ScriptSerializationEndOffset**\r\n\r\nThe location (relative to SerialOffset) of the end of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4)\r\n\r\n```csharp\r\npublic long ScriptSerializationEndOffset;\r\n```\r\n\r\n### **bForcedExport**\r\n\r\nWas this export forced into the export table via OBJECTMARK_ForceTagExp?\r\n\r\n```csharp\r\npublic bool bForcedExport;\r\n```\r\n\r\n### **bNotForClient**\r\n\r\nShould this export not be loaded on clients?\r\n\r\n```csharp\r\npublic bool bNotForClient;\r\n```\r\n\r\n### **bNotForServer**\r\n\r\nShould this export not be loaded on servers?\r\n\r\n```csharp\r\npublic bool bNotForServer;\r\n```\r\n\r\n### **PackageGuid**\r\n\r\nIf this object is a top level package (which must have been forced into the export table via OBJECTMARK_ForceTagExp), this is the GUID for the original package file. Deprecated\r\n\r\n```csharp\r\npublic Guid PackageGuid;\r\n```\r\n\r\n### **IsInheritedInstance**\r\n\r\n\r\n\r\n```csharp\r\npublic bool IsInheritedInstance;\r\n```\r\n\r\n### **PackageFlags**\r\n\r\nIf this export is a top-level package, this is the flags for the original package\r\n\r\n```csharp\r\npublic EPackageFlags PackageFlags;\r\n```\r\n\r\n### **bNotAlwaysLoadedForEditorGame**\r\n\r\nShould this export be always loaded in editor game?\r\n\r\n```csharp\r\npublic bool bNotAlwaysLoadedForEditorGame;\r\n```\r\n\r\n### **bIsAsset**\r\n\r\nIs this export an asset?\r\n\r\n```csharp\r\npublic bool bIsAsset;\r\n```\r\n\r\n### **GeneratePublicHash**\r\n\r\n\r\n\r\n```csharp\r\npublic bool GeneratePublicHash;\r\n```\r\n\r\n### **SerializationBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeSerializationDependencies;\r\n```\r\n\r\n### **CreateBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeSerializationDependencies;\r\n```\r\n\r\n### **SerializationBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeCreateDependencies;\r\n```\r\n\r\n### **CreateBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeCreateDependencies;\r\n```\r\n\r\n### **Extras**\r\n\r\nMiscellaneous, unparsed export data, stored as a byte array.\r\n\r\n```csharp\r\npublic Byte[] Extras;\r\n```\r\n\r\n### **Asset**\r\n\r\nThe asset that this export is parsed with.\r\n\r\n```csharp\r\npublic UAsset Asset;\r\n```\r\n\r\n## Properties\r\n\r\n## Constructors\r\n\r\n### **FieldExport(Export)**\r\n\r\n```csharp\r\npublic FieldExport(Export super)\r\n```\r\n\r\n#### Parameters\r\n\r\n`super` [Export](./uassetapi.exporttypes.export.md)<br>\r\n\r\n### **FieldExport(UAsset, Byte[])**\r\n\r\n```csharp\r\npublic FieldExport(UAsset asset, Byte[] extras)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`extras` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **FieldExport()**\r\n\r\n```csharp\r\npublic FieldExport()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Int32)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, int nextStarting)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`nextStarting` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.fstringtable.md",
    "content": "# FStringTable\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\nA string table. Holds Key-&gt;SourceString pairs of text.\r\n\r\n```csharp\r\npublic class FStringTable : UAssetAPI.UnrealTypes.TMap`2[[UAssetAPI.UnrealTypes.FString],[UAssetAPI.UnrealTypes.FString]], UAssetAPI.UnrealTypes.IOrderedDictionary`2[[UAssetAPI.UnrealTypes.FString],[UAssetAPI.UnrealTypes.FString]], System.Collections.Generic.IDictionary`2[[UAssetAPI.UnrealTypes.FString],[UAssetAPI.UnrealTypes.FString]], System.Collections.Generic.ICollection`1[[System.Collections.Generic.KeyValuePair`2[[UAssetAPI.UnrealTypes.FString],[UAssetAPI.UnrealTypes.FString]]]], System.Collections.Generic.IEnumerable`1[[System.Collections.Generic.KeyValuePair`2[[UAssetAPI.UnrealTypes.FString],[UAssetAPI.UnrealTypes.FString]]]], System.Collections.IEnumerable, System.Collections.Specialized.IOrderedDictionary, System.Collections.IDictionary, System.Collections.ICollection\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [TMap&lt;FString, FString&gt;](./uassetapi.unrealtypes.tmap-2.md) → [FStringTable](./uassetapi.exporttypes.fstringtable.md)<br>\r\nImplements [IOrderedDictionary&lt;FString, FString&gt;](./uassetapi.unrealtypes.iordereddictionary-2.md), [IDictionary&lt;FString, FString&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.idictionary-2), [ICollection&lt;KeyValuePair&lt;FString, FString&gt;&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.icollection-1), [IEnumerable&lt;KeyValuePair&lt;FString, FString&gt;&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1), [IEnumerable](https://docs.microsoft.com/en-us/dotnet/api/system.collections.ienumerable), IOrderedDictionary, [IDictionary](https://docs.microsoft.com/en-us/dotnet/api/system.collections.idictionary), [ICollection](https://docs.microsoft.com/en-us/dotnet/api/system.collections.icollection)\r\n\r\n## Fields\r\n\r\n### **TableNamespace**\r\n\r\n```csharp\r\npublic FString TableNamespace;\r\n```\r\n\r\n## Properties\r\n\r\n### **Item**\r\n\r\n```csharp\r\npublic FString Item { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Item**\r\n\r\n```csharp\r\npublic FString Item { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Count**\r\n\r\nGets the number of items in the dictionary\r\n\r\n```csharp\r\npublic int Count { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Keys**\r\n\r\nGets all the keys in the ordered dictionary in their proper order.\r\n\r\n```csharp\r\npublic ICollection<FString> Keys { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[ICollection&lt;FString&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.icollection-1)<br>\r\n\r\n### **Values**\r\n\r\nGets all the values in the ordered dictionary in their proper order.\r\n\r\n```csharp\r\npublic ICollection<FString> Values { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[ICollection&lt;FString&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.icollection-1)<br>\r\n\r\n### **Comparer**\r\n\r\nGets the key comparer for this dictionary\r\n\r\n```csharp\r\npublic IEqualityComparer<FString> Comparer { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[IEqualityComparer&lt;FString&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.iequalitycomparer-1)<br>\r\n\r\n## Constructors\r\n\r\n### **FStringTable(FString)**\r\n\r\n```csharp\r\npublic FStringTable(FString tableNamespace)\r\n```\r\n\r\n#### Parameters\r\n\r\n`tableNamespace` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **FStringTable()**\r\n\r\n```csharp\r\npublic FStringTable()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.functionexport.md",
    "content": "# FunctionExport\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\nExport data for a blueprint function.\r\n\r\n```csharp\r\npublic class FunctionExport : StructExport, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Export](./uassetapi.exporttypes.export.md) → [NormalExport](./uassetapi.exporttypes.normalexport.md) → [FieldExport](./uassetapi.exporttypes.fieldexport.md) → [StructExport](./uassetapi.exporttypes.structexport.md) → [FunctionExport](./uassetapi.exporttypes.functionexport.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **FunctionFlags**\r\n\r\n```csharp\r\npublic EFunctionFlags FunctionFlags;\r\n```\r\n\r\n### **SuperStruct**\r\n\r\nStruct this inherits from, may be null\r\n\r\n```csharp\r\npublic FPackageIndex SuperStruct;\r\n```\r\n\r\n### **Children**\r\n\r\nList of child fields\r\n\r\n```csharp\r\npublic FPackageIndex[] Children;\r\n```\r\n\r\n### **LoadedProperties**\r\n\r\nProperties serialized with this struct definition\r\n\r\n```csharp\r\npublic FProperty[] LoadedProperties;\r\n```\r\n\r\n### **ScriptBytecode**\r\n\r\nThe bytecode instructions contained within this struct.\r\n\r\n```csharp\r\npublic KismetExpression[] ScriptBytecode;\r\n```\r\n\r\n### **ScriptBytecodeSize**\r\n\r\nBytecode size in total in deserialized memory. Filled out in lieu of [StructExport.ScriptBytecode](./uassetapi.exporttypes.structexport.md#scriptbytecode) if an error occurs during bytecode parsing.\r\n\r\n```csharp\r\npublic int ScriptBytecodeSize;\r\n```\r\n\r\n### **ScriptBytecodeRaw**\r\n\r\nRaw binary bytecode data. Filled out in lieu of [StructExport.ScriptBytecode](./uassetapi.exporttypes.structexport.md#scriptbytecode) if an error occurs during bytecode parsing.\r\n\r\n```csharp\r\npublic Byte[] ScriptBytecodeRaw;\r\n```\r\n\r\n### **Field**\r\n\r\n```csharp\r\npublic UField Field;\r\n```\r\n\r\n### **Data**\r\n\r\n```csharp\r\npublic List<PropertyData> Data;\r\n```\r\n\r\n### **ObjectGuid**\r\n\r\n```csharp\r\npublic Nullable<Guid> ObjectGuid;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **HasLeadingFourNullBytes**\r\n\r\n```csharp\r\npublic bool HasLeadingFourNullBytes;\r\n```\r\n\r\n### **ObjectName**\r\n\r\nThe name of the UObject represented by this resource.\r\n\r\n```csharp\r\npublic FName ObjectName;\r\n```\r\n\r\n### **OuterIndex**\r\n\r\nLocation of the resource for this resource's Outer (import/other export). 0 = this resource is a top-level UPackage\r\n\r\n```csharp\r\npublic FPackageIndex OuterIndex;\r\n```\r\n\r\n### **ClassIndex**\r\n\r\nLocation of this export's class (import/other export). 0 = this export is a UClass\r\n\r\n```csharp\r\npublic FPackageIndex ClassIndex;\r\n```\r\n\r\n### **SuperIndex**\r\n\r\nLocation of this export's parent class (import/other export). 0 = this export is not derived from UStruct\r\n\r\n```csharp\r\npublic FPackageIndex SuperIndex;\r\n```\r\n\r\n### **TemplateIndex**\r\n\r\nLocation of this export's template (import/other export). 0 = there is some problem\r\n\r\n```csharp\r\npublic FPackageIndex TemplateIndex;\r\n```\r\n\r\n### **ObjectFlags**\r\n\r\nThe object flags for the UObject represented by this resource. Only flags that match the RF_Load combination mask will be loaded from disk and applied to the UObject.\r\n\r\n```csharp\r\npublic EObjectFlags ObjectFlags;\r\n```\r\n\r\n### **SerialSize**\r\n\r\nThe number of bytes to serialize when saving/loading this export's UObject.\r\n\r\n```csharp\r\npublic long SerialSize;\r\n```\r\n\r\n### **SerialOffset**\r\n\r\nThe location (into the FLinker's underlying file reader archive) of the beginning of the data for this export's UObject. Used for verification only.\r\n\r\n```csharp\r\npublic long SerialOffset;\r\n```\r\n\r\n### **ScriptSerializationStartOffset**\r\n\r\nThe location (relative to SerialOffset) of the beginning of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4).\r\n\r\n```csharp\r\npublic long ScriptSerializationStartOffset;\r\n```\r\n\r\n### **ScriptSerializationEndOffset**\r\n\r\nThe location (relative to SerialOffset) of the end of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4)\r\n\r\n```csharp\r\npublic long ScriptSerializationEndOffset;\r\n```\r\n\r\n### **bForcedExport**\r\n\r\nWas this export forced into the export table via OBJECTMARK_ForceTagExp?\r\n\r\n```csharp\r\npublic bool bForcedExport;\r\n```\r\n\r\n### **bNotForClient**\r\n\r\nShould this export not be loaded on clients?\r\n\r\n```csharp\r\npublic bool bNotForClient;\r\n```\r\n\r\n### **bNotForServer**\r\n\r\nShould this export not be loaded on servers?\r\n\r\n```csharp\r\npublic bool bNotForServer;\r\n```\r\n\r\n### **PackageGuid**\r\n\r\nIf this object is a top level package (which must have been forced into the export table via OBJECTMARK_ForceTagExp), this is the GUID for the original package file. Deprecated\r\n\r\n```csharp\r\npublic Guid PackageGuid;\r\n```\r\n\r\n### **IsInheritedInstance**\r\n\r\n\r\n\r\n```csharp\r\npublic bool IsInheritedInstance;\r\n```\r\n\r\n### **PackageFlags**\r\n\r\nIf this export is a top-level package, this is the flags for the original package\r\n\r\n```csharp\r\npublic EPackageFlags PackageFlags;\r\n```\r\n\r\n### **bNotAlwaysLoadedForEditorGame**\r\n\r\nShould this export be always loaded in editor game?\r\n\r\n```csharp\r\npublic bool bNotAlwaysLoadedForEditorGame;\r\n```\r\n\r\n### **bIsAsset**\r\n\r\nIs this export an asset?\r\n\r\n```csharp\r\npublic bool bIsAsset;\r\n```\r\n\r\n### **GeneratePublicHash**\r\n\r\n\r\n\r\n```csharp\r\npublic bool GeneratePublicHash;\r\n```\r\n\r\n### **SerializationBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeSerializationDependencies;\r\n```\r\n\r\n### **CreateBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeSerializationDependencies;\r\n```\r\n\r\n### **SerializationBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeCreateDependencies;\r\n```\r\n\r\n### **CreateBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeCreateDependencies;\r\n```\r\n\r\n### **Extras**\r\n\r\nMiscellaneous, unparsed export data, stored as a byte array.\r\n\r\n```csharp\r\npublic Byte[] Extras;\r\n```\r\n\r\n### **Asset**\r\n\r\nThe asset that this export is parsed with.\r\n\r\n```csharp\r\npublic UAsset Asset;\r\n```\r\n\r\n## Properties\r\n\r\n## Constructors\r\n\r\n### **FunctionExport(Export)**\r\n\r\n```csharp\r\npublic FunctionExport(Export super)\r\n```\r\n\r\n#### Parameters\r\n\r\n`super` [Export](./uassetapi.exporttypes.export.md)<br>\r\n\r\n### **FunctionExport(UAsset, Byte[])**\r\n\r\n```csharp\r\npublic FunctionExport(UAsset asset, Byte[] extras)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`extras` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **FunctionExport()**\r\n\r\n```csharp\r\npublic FunctionExport()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Int32)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, int nextStarting)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`nextStarting` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.furl.md",
    "content": "# FURL\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\nURL structure.\r\n\r\n```csharp\r\npublic struct FURL\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FURL](./uassetapi.exporttypes.furl.md)\r\n\r\n## Fields\r\n\r\n### **Protocol**\r\n\r\n```csharp\r\npublic FString Protocol;\r\n```\r\n\r\n### **Host**\r\n\r\n```csharp\r\npublic FString Host;\r\n```\r\n\r\n### **Port**\r\n\r\n```csharp\r\npublic int Port;\r\n```\r\n\r\n### **Valid**\r\n\r\n```csharp\r\npublic int Valid;\r\n```\r\n\r\n### **Map**\r\n\r\n```csharp\r\npublic FString Map;\r\n```\r\n\r\n### **Op**\r\n\r\n```csharp\r\npublic List<FString> Op;\r\n```\r\n\r\n### **Portal**\r\n\r\n```csharp\r\npublic FString Portal;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FURL(AssetBinaryReader)**\r\n\r\n```csharp\r\nFURL(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.levelexport.md",
    "content": "# LevelExport\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\n```csharp\r\npublic class LevelExport : NormalExport, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Export](./uassetapi.exporttypes.export.md) → [NormalExport](./uassetapi.exporttypes.normalexport.md) → [LevelExport](./uassetapi.exporttypes.levelexport.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Owner**\r\n\r\n```csharp\r\npublic FPackageIndex Owner;\r\n```\r\n\r\n### **Actors**\r\n\r\n```csharp\r\npublic List<FPackageIndex> Actors;\r\n```\r\n\r\n### **URL**\r\n\r\n```csharp\r\npublic FURL URL;\r\n```\r\n\r\n### **Model**\r\n\r\n```csharp\r\npublic FPackageIndex Model;\r\n```\r\n\r\n### **ModelComponents**\r\n\r\n```csharp\r\npublic List<FPackageIndex> ModelComponents;\r\n```\r\n\r\n### **LevelScriptActor**\r\n\r\n```csharp\r\npublic FPackageIndex LevelScriptActor;\r\n```\r\n\r\n### **NavListStart**\r\n\r\n```csharp\r\npublic FPackageIndex NavListStart;\r\n```\r\n\r\n### **NavListEnd**\r\n\r\n```csharp\r\npublic FPackageIndex NavListEnd;\r\n```\r\n\r\n### **Data**\r\n\r\n```csharp\r\npublic List<PropertyData> Data;\r\n```\r\n\r\n### **ObjectGuid**\r\n\r\n```csharp\r\npublic Nullable<Guid> ObjectGuid;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **HasLeadingFourNullBytes**\r\n\r\n```csharp\r\npublic bool HasLeadingFourNullBytes;\r\n```\r\n\r\n### **ObjectName**\r\n\r\nThe name of the UObject represented by this resource.\r\n\r\n```csharp\r\npublic FName ObjectName;\r\n```\r\n\r\n### **OuterIndex**\r\n\r\nLocation of the resource for this resource's Outer (import/other export). 0 = this resource is a top-level UPackage\r\n\r\n```csharp\r\npublic FPackageIndex OuterIndex;\r\n```\r\n\r\n### **ClassIndex**\r\n\r\nLocation of this export's class (import/other export). 0 = this export is a UClass\r\n\r\n```csharp\r\npublic FPackageIndex ClassIndex;\r\n```\r\n\r\n### **SuperIndex**\r\n\r\nLocation of this export's parent class (import/other export). 0 = this export is not derived from UStruct\r\n\r\n```csharp\r\npublic FPackageIndex SuperIndex;\r\n```\r\n\r\n### **TemplateIndex**\r\n\r\nLocation of this export's template (import/other export). 0 = there is some problem\r\n\r\n```csharp\r\npublic FPackageIndex TemplateIndex;\r\n```\r\n\r\n### **ObjectFlags**\r\n\r\nThe object flags for the UObject represented by this resource. Only flags that match the RF_Load combination mask will be loaded from disk and applied to the UObject.\r\n\r\n```csharp\r\npublic EObjectFlags ObjectFlags;\r\n```\r\n\r\n### **SerialSize**\r\n\r\nThe number of bytes to serialize when saving/loading this export's UObject.\r\n\r\n```csharp\r\npublic long SerialSize;\r\n```\r\n\r\n### **SerialOffset**\r\n\r\nThe location (into the FLinker's underlying file reader archive) of the beginning of the data for this export's UObject. Used for verification only.\r\n\r\n```csharp\r\npublic long SerialOffset;\r\n```\r\n\r\n### **ScriptSerializationStartOffset**\r\n\r\nThe location (relative to SerialOffset) of the beginning of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4).\r\n\r\n```csharp\r\npublic long ScriptSerializationStartOffset;\r\n```\r\n\r\n### **ScriptSerializationEndOffset**\r\n\r\nThe location (relative to SerialOffset) of the end of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4)\r\n\r\n```csharp\r\npublic long ScriptSerializationEndOffset;\r\n```\r\n\r\n### **bForcedExport**\r\n\r\nWas this export forced into the export table via OBJECTMARK_ForceTagExp?\r\n\r\n```csharp\r\npublic bool bForcedExport;\r\n```\r\n\r\n### **bNotForClient**\r\n\r\nShould this export not be loaded on clients?\r\n\r\n```csharp\r\npublic bool bNotForClient;\r\n```\r\n\r\n### **bNotForServer**\r\n\r\nShould this export not be loaded on servers?\r\n\r\n```csharp\r\npublic bool bNotForServer;\r\n```\r\n\r\n### **PackageGuid**\r\n\r\nIf this object is a top level package (which must have been forced into the export table via OBJECTMARK_ForceTagExp), this is the GUID for the original package file. Deprecated\r\n\r\n```csharp\r\npublic Guid PackageGuid;\r\n```\r\n\r\n### **IsInheritedInstance**\r\n\r\n\r\n\r\n```csharp\r\npublic bool IsInheritedInstance;\r\n```\r\n\r\n### **PackageFlags**\r\n\r\nIf this export is a top-level package, this is the flags for the original package\r\n\r\n```csharp\r\npublic EPackageFlags PackageFlags;\r\n```\r\n\r\n### **bNotAlwaysLoadedForEditorGame**\r\n\r\nShould this export be always loaded in editor game?\r\n\r\n```csharp\r\npublic bool bNotAlwaysLoadedForEditorGame;\r\n```\r\n\r\n### **bIsAsset**\r\n\r\nIs this export an asset?\r\n\r\n```csharp\r\npublic bool bIsAsset;\r\n```\r\n\r\n### **GeneratePublicHash**\r\n\r\n\r\n\r\n```csharp\r\npublic bool GeneratePublicHash;\r\n```\r\n\r\n### **SerializationBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeSerializationDependencies;\r\n```\r\n\r\n### **CreateBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeSerializationDependencies;\r\n```\r\n\r\n### **SerializationBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeCreateDependencies;\r\n```\r\n\r\n### **CreateBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeCreateDependencies;\r\n```\r\n\r\n### **Extras**\r\n\r\nMiscellaneous, unparsed export data, stored as a byte array.\r\n\r\n```csharp\r\npublic Byte[] Extras;\r\n```\r\n\r\n### **Asset**\r\n\r\nThe asset that this export is parsed with.\r\n\r\n```csharp\r\npublic UAsset Asset;\r\n```\r\n\r\n## Properties\r\n\r\n## Constructors\r\n\r\n### **LevelExport(Export)**\r\n\r\n```csharp\r\npublic LevelExport(Export super)\r\n```\r\n\r\n#### Parameters\r\n\r\n`super` [Export](./uassetapi.exporttypes.export.md)<br>\r\n\r\n### **LevelExport(UAsset, Byte[])**\r\n\r\n```csharp\r\npublic LevelExport(UAsset asset, Byte[] extras)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`extras` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **LevelExport()**\r\n\r\n```csharp\r\npublic LevelExport()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Int32)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, int nextStarting)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`nextStarting` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.metadataexport.md",
    "content": "# MetaDataExport\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\n```csharp\r\npublic class MetaDataExport : NormalExport, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Export](./uassetapi.exporttypes.export.md) → [NormalExport](./uassetapi.exporttypes.normalexport.md) → [MetaDataExport](./uassetapi.exporttypes.metadataexport.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **ObjectMetaData**\r\n\r\n```csharp\r\npublic List<ObjectMetaDataEntry> ObjectMetaData;\r\n```\r\n\r\n### **RootMetaData**\r\n\r\n```csharp\r\npublic TMap<FName, FString> RootMetaData;\r\n```\r\n\r\n### **Data**\r\n\r\n```csharp\r\npublic List<PropertyData> Data;\r\n```\r\n\r\n### **ObjectGuid**\r\n\r\n```csharp\r\npublic Nullable<Guid> ObjectGuid;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **HasLeadingFourNullBytes**\r\n\r\n```csharp\r\npublic bool HasLeadingFourNullBytes;\r\n```\r\n\r\n### **ObjectName**\r\n\r\nThe name of the UObject represented by this resource.\r\n\r\n```csharp\r\npublic FName ObjectName;\r\n```\r\n\r\n### **OuterIndex**\r\n\r\nLocation of the resource for this resource's Outer (import/other export). 0 = this resource is a top-level UPackage\r\n\r\n```csharp\r\npublic FPackageIndex OuterIndex;\r\n```\r\n\r\n### **ClassIndex**\r\n\r\nLocation of this export's class (import/other export). 0 = this export is a UClass\r\n\r\n```csharp\r\npublic FPackageIndex ClassIndex;\r\n```\r\n\r\n### **SuperIndex**\r\n\r\nLocation of this export's parent class (import/other export). 0 = this export is not derived from UStruct\r\n\r\n```csharp\r\npublic FPackageIndex SuperIndex;\r\n```\r\n\r\n### **TemplateIndex**\r\n\r\nLocation of this export's template (import/other export). 0 = there is some problem\r\n\r\n```csharp\r\npublic FPackageIndex TemplateIndex;\r\n```\r\n\r\n### **ObjectFlags**\r\n\r\nThe object flags for the UObject represented by this resource. Only flags that match the RF_Load combination mask will be loaded from disk and applied to the UObject.\r\n\r\n```csharp\r\npublic EObjectFlags ObjectFlags;\r\n```\r\n\r\n### **SerialSize**\r\n\r\nThe number of bytes to serialize when saving/loading this export's UObject.\r\n\r\n```csharp\r\npublic long SerialSize;\r\n```\r\n\r\n### **SerialOffset**\r\n\r\nThe location (into the FLinker's underlying file reader archive) of the beginning of the data for this export's UObject. Used for verification only.\r\n\r\n```csharp\r\npublic long SerialOffset;\r\n```\r\n\r\n### **ScriptSerializationStartOffset**\r\n\r\nThe location (relative to SerialOffset) of the beginning of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4).\r\n\r\n```csharp\r\npublic long ScriptSerializationStartOffset;\r\n```\r\n\r\n### **ScriptSerializationEndOffset**\r\n\r\nThe location (relative to SerialOffset) of the end of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4)\r\n\r\n```csharp\r\npublic long ScriptSerializationEndOffset;\r\n```\r\n\r\n### **bForcedExport**\r\n\r\nWas this export forced into the export table via OBJECTMARK_ForceTagExp?\r\n\r\n```csharp\r\npublic bool bForcedExport;\r\n```\r\n\r\n### **bNotForClient**\r\n\r\nShould this export not be loaded on clients?\r\n\r\n```csharp\r\npublic bool bNotForClient;\r\n```\r\n\r\n### **bNotForServer**\r\n\r\nShould this export not be loaded on servers?\r\n\r\n```csharp\r\npublic bool bNotForServer;\r\n```\r\n\r\n### **PackageGuid**\r\n\r\nIf this object is a top level package (which must have been forced into the export table via OBJECTMARK_ForceTagExp), this is the GUID for the original package file. Deprecated\r\n\r\n```csharp\r\npublic Guid PackageGuid;\r\n```\r\n\r\n### **IsInheritedInstance**\r\n\r\n\r\n\r\n```csharp\r\npublic bool IsInheritedInstance;\r\n```\r\n\r\n### **PackageFlags**\r\n\r\nIf this export is a top-level package, this is the flags for the original package\r\n\r\n```csharp\r\npublic EPackageFlags PackageFlags;\r\n```\r\n\r\n### **bNotAlwaysLoadedForEditorGame**\r\n\r\nShould this export be always loaded in editor game?\r\n\r\n```csharp\r\npublic bool bNotAlwaysLoadedForEditorGame;\r\n```\r\n\r\n### **bIsAsset**\r\n\r\nIs this export an asset?\r\n\r\n```csharp\r\npublic bool bIsAsset;\r\n```\r\n\r\n### **GeneratePublicHash**\r\n\r\n\r\n\r\n```csharp\r\npublic bool GeneratePublicHash;\r\n```\r\n\r\n### **SerializationBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeSerializationDependencies;\r\n```\r\n\r\n### **CreateBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeSerializationDependencies;\r\n```\r\n\r\n### **SerializationBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeCreateDependencies;\r\n```\r\n\r\n### **CreateBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeCreateDependencies;\r\n```\r\n\r\n### **Extras**\r\n\r\nMiscellaneous, unparsed export data, stored as a byte array.\r\n\r\n```csharp\r\npublic Byte[] Extras;\r\n```\r\n\r\n### **Asset**\r\n\r\nThe asset that this export is parsed with.\r\n\r\n```csharp\r\npublic UAsset Asset;\r\n```\r\n\r\n## Properties\r\n\r\n## Constructors\r\n\r\n### **MetaDataExport(Export)**\r\n\r\n```csharp\r\npublic MetaDataExport(Export super)\r\n```\r\n\r\n#### Parameters\r\n\r\n`super` [Export](./uassetapi.exporttypes.export.md)<br>\r\n\r\n### **MetaDataExport(UAsset, Byte[])**\r\n\r\n```csharp\r\npublic MetaDataExport(UAsset asset, Byte[] extras)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`extras` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **MetaDataExport()**\r\n\r\n```csharp\r\npublic MetaDataExport()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Int32)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, int nextStarting)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`nextStarting` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.normalexport.md",
    "content": "# NormalExport\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\nA regular export representing a UObject, with no special serialization.\r\n\r\n```csharp\r\npublic class NormalExport : Export, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Export](./uassetapi.exporttypes.export.md) → [NormalExport](./uassetapi.exporttypes.normalexport.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Data**\r\n\r\n```csharp\r\npublic List<PropertyData> Data;\r\n```\r\n\r\n### **ObjectGuid**\r\n\r\n```csharp\r\npublic Nullable<Guid> ObjectGuid;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **HasLeadingFourNullBytes**\r\n\r\n```csharp\r\npublic bool HasLeadingFourNullBytes;\r\n```\r\n\r\n### **ObjectName**\r\n\r\nThe name of the UObject represented by this resource.\r\n\r\n```csharp\r\npublic FName ObjectName;\r\n```\r\n\r\n### **OuterIndex**\r\n\r\nLocation of the resource for this resource's Outer (import/other export). 0 = this resource is a top-level UPackage\r\n\r\n```csharp\r\npublic FPackageIndex OuterIndex;\r\n```\r\n\r\n### **ClassIndex**\r\n\r\nLocation of this export's class (import/other export). 0 = this export is a UClass\r\n\r\n```csharp\r\npublic FPackageIndex ClassIndex;\r\n```\r\n\r\n### **SuperIndex**\r\n\r\nLocation of this export's parent class (import/other export). 0 = this export is not derived from UStruct\r\n\r\n```csharp\r\npublic FPackageIndex SuperIndex;\r\n```\r\n\r\n### **TemplateIndex**\r\n\r\nLocation of this export's template (import/other export). 0 = there is some problem\r\n\r\n```csharp\r\npublic FPackageIndex TemplateIndex;\r\n```\r\n\r\n### **ObjectFlags**\r\n\r\nThe object flags for the UObject represented by this resource. Only flags that match the RF_Load combination mask will be loaded from disk and applied to the UObject.\r\n\r\n```csharp\r\npublic EObjectFlags ObjectFlags;\r\n```\r\n\r\n### **SerialSize**\r\n\r\nThe number of bytes to serialize when saving/loading this export's UObject.\r\n\r\n```csharp\r\npublic long SerialSize;\r\n```\r\n\r\n### **SerialOffset**\r\n\r\nThe location (into the FLinker's underlying file reader archive) of the beginning of the data for this export's UObject. Used for verification only.\r\n\r\n```csharp\r\npublic long SerialOffset;\r\n```\r\n\r\n### **ScriptSerializationStartOffset**\r\n\r\nThe location (relative to SerialOffset) of the beginning of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4).\r\n\r\n```csharp\r\npublic long ScriptSerializationStartOffset;\r\n```\r\n\r\n### **ScriptSerializationEndOffset**\r\n\r\nThe location (relative to SerialOffset) of the end of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4)\r\n\r\n```csharp\r\npublic long ScriptSerializationEndOffset;\r\n```\r\n\r\n### **bForcedExport**\r\n\r\nWas this export forced into the export table via OBJECTMARK_ForceTagExp?\r\n\r\n```csharp\r\npublic bool bForcedExport;\r\n```\r\n\r\n### **bNotForClient**\r\n\r\nShould this export not be loaded on clients?\r\n\r\n```csharp\r\npublic bool bNotForClient;\r\n```\r\n\r\n### **bNotForServer**\r\n\r\nShould this export not be loaded on servers?\r\n\r\n```csharp\r\npublic bool bNotForServer;\r\n```\r\n\r\n### **PackageGuid**\r\n\r\nIf this object is a top level package (which must have been forced into the export table via OBJECTMARK_ForceTagExp), this is the GUID for the original package file. Deprecated\r\n\r\n```csharp\r\npublic Guid PackageGuid;\r\n```\r\n\r\n### **IsInheritedInstance**\r\n\r\n\r\n\r\n```csharp\r\npublic bool IsInheritedInstance;\r\n```\r\n\r\n### **PackageFlags**\r\n\r\nIf this export is a top-level package, this is the flags for the original package\r\n\r\n```csharp\r\npublic EPackageFlags PackageFlags;\r\n```\r\n\r\n### **bNotAlwaysLoadedForEditorGame**\r\n\r\nShould this export be always loaded in editor game?\r\n\r\n```csharp\r\npublic bool bNotAlwaysLoadedForEditorGame;\r\n```\r\n\r\n### **bIsAsset**\r\n\r\nIs this export an asset?\r\n\r\n```csharp\r\npublic bool bIsAsset;\r\n```\r\n\r\n### **GeneratePublicHash**\r\n\r\n\r\n\r\n```csharp\r\npublic bool GeneratePublicHash;\r\n```\r\n\r\n### **SerializationBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeSerializationDependencies;\r\n```\r\n\r\n### **CreateBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeSerializationDependencies;\r\n```\r\n\r\n### **SerializationBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeCreateDependencies;\r\n```\r\n\r\n### **CreateBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeCreateDependencies;\r\n```\r\n\r\n### **Extras**\r\n\r\nMiscellaneous, unparsed export data, stored as a byte array.\r\n\r\n```csharp\r\npublic Byte[] Extras;\r\n```\r\n\r\n### **Asset**\r\n\r\nThe asset that this export is parsed with.\r\n\r\n```csharp\r\npublic UAsset Asset;\r\n```\r\n\r\n## Properties\r\n\r\n## Constructors\r\n\r\n### **NormalExport(Export)**\r\n\r\n```csharp\r\npublic NormalExport(Export super)\r\n```\r\n\r\n#### Parameters\r\n\r\n`super` [Export](./uassetapi.exporttypes.export.md)<br>\r\n\r\n### **NormalExport(UAsset, Byte[])**\r\n\r\n```csharp\r\npublic NormalExport(UAsset asset, Byte[] extras)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`extras` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **NormalExport(List&lt;PropertyData&gt;, UAsset, Byte[])**\r\n\r\n```csharp\r\npublic NormalExport(List<PropertyData> data, UAsset asset, Byte[] extras)\r\n```\r\n\r\n#### Parameters\r\n\r\n`data` [List&lt;PropertyData&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`extras` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **NormalExport()**\r\n\r\n```csharp\r\npublic NormalExport()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Int32)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, int nextStarting)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`nextStarting` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ResolveAncestries(UAsset, AncestryInfo)**\r\n\r\n```csharp\r\npublic void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`ancestrySoFar` [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.objectmetadataentry.md",
    "content": "# ObjectMetaDataEntry\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\n```csharp\r\npublic struct ObjectMetaDataEntry\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [ObjectMetaDataEntry](./uassetapi.exporttypes.objectmetadataentry.md)\r\n\r\n## Fields\r\n\r\n### **Import**\r\n\r\n```csharp\r\npublic int Import;\r\n```\r\n\r\n### **MetaData**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaData;\r\n```\r\n\r\n## Constructors\r\n\r\n### **ObjectMetaDataEntry(Int32, TMap&lt;FName, FString&gt;)**\r\n\r\n```csharp\r\nObjectMetaDataEntry(int import, TMap<FName, FString> metaData)\r\n```\r\n\r\n#### Parameters\r\n\r\n`import` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`metaData` [TMap&lt;FName, FString&gt;](./uassetapi.unrealtypes.tmap-2.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.propertyexport.md",
    "content": "# PropertyExport\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\nExport data for a [UProperty](./uassetapi.fieldtypes.uproperty.md).\r\n\r\n```csharp\r\npublic class PropertyExport : NormalExport, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Export](./uassetapi.exporttypes.export.md) → [NormalExport](./uassetapi.exporttypes.normalexport.md) → [PropertyExport](./uassetapi.exporttypes.propertyexport.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Property**\r\n\r\n```csharp\r\npublic UProperty Property;\r\n```\r\n\r\n### **Data**\r\n\r\n```csharp\r\npublic List<PropertyData> Data;\r\n```\r\n\r\n### **ObjectGuid**\r\n\r\n```csharp\r\npublic Nullable<Guid> ObjectGuid;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **HasLeadingFourNullBytes**\r\n\r\n```csharp\r\npublic bool HasLeadingFourNullBytes;\r\n```\r\n\r\n### **ObjectName**\r\n\r\nThe name of the UObject represented by this resource.\r\n\r\n```csharp\r\npublic FName ObjectName;\r\n```\r\n\r\n### **OuterIndex**\r\n\r\nLocation of the resource for this resource's Outer (import/other export). 0 = this resource is a top-level UPackage\r\n\r\n```csharp\r\npublic FPackageIndex OuterIndex;\r\n```\r\n\r\n### **ClassIndex**\r\n\r\nLocation of this export's class (import/other export). 0 = this export is a UClass\r\n\r\n```csharp\r\npublic FPackageIndex ClassIndex;\r\n```\r\n\r\n### **SuperIndex**\r\n\r\nLocation of this export's parent class (import/other export). 0 = this export is not derived from UStruct\r\n\r\n```csharp\r\npublic FPackageIndex SuperIndex;\r\n```\r\n\r\n### **TemplateIndex**\r\n\r\nLocation of this export's template (import/other export). 0 = there is some problem\r\n\r\n```csharp\r\npublic FPackageIndex TemplateIndex;\r\n```\r\n\r\n### **ObjectFlags**\r\n\r\nThe object flags for the UObject represented by this resource. Only flags that match the RF_Load combination mask will be loaded from disk and applied to the UObject.\r\n\r\n```csharp\r\npublic EObjectFlags ObjectFlags;\r\n```\r\n\r\n### **SerialSize**\r\n\r\nThe number of bytes to serialize when saving/loading this export's UObject.\r\n\r\n```csharp\r\npublic long SerialSize;\r\n```\r\n\r\n### **SerialOffset**\r\n\r\nThe location (into the FLinker's underlying file reader archive) of the beginning of the data for this export's UObject. Used for verification only.\r\n\r\n```csharp\r\npublic long SerialOffset;\r\n```\r\n\r\n### **ScriptSerializationStartOffset**\r\n\r\nThe location (relative to SerialOffset) of the beginning of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4).\r\n\r\n```csharp\r\npublic long ScriptSerializationStartOffset;\r\n```\r\n\r\n### **ScriptSerializationEndOffset**\r\n\r\nThe location (relative to SerialOffset) of the end of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4)\r\n\r\n```csharp\r\npublic long ScriptSerializationEndOffset;\r\n```\r\n\r\n### **bForcedExport**\r\n\r\nWas this export forced into the export table via OBJECTMARK_ForceTagExp?\r\n\r\n```csharp\r\npublic bool bForcedExport;\r\n```\r\n\r\n### **bNotForClient**\r\n\r\nShould this export not be loaded on clients?\r\n\r\n```csharp\r\npublic bool bNotForClient;\r\n```\r\n\r\n### **bNotForServer**\r\n\r\nShould this export not be loaded on servers?\r\n\r\n```csharp\r\npublic bool bNotForServer;\r\n```\r\n\r\n### **PackageGuid**\r\n\r\nIf this object is a top level package (which must have been forced into the export table via OBJECTMARK_ForceTagExp), this is the GUID for the original package file. Deprecated\r\n\r\n```csharp\r\npublic Guid PackageGuid;\r\n```\r\n\r\n### **IsInheritedInstance**\r\n\r\n\r\n\r\n```csharp\r\npublic bool IsInheritedInstance;\r\n```\r\n\r\n### **PackageFlags**\r\n\r\nIf this export is a top-level package, this is the flags for the original package\r\n\r\n```csharp\r\npublic EPackageFlags PackageFlags;\r\n```\r\n\r\n### **bNotAlwaysLoadedForEditorGame**\r\n\r\nShould this export be always loaded in editor game?\r\n\r\n```csharp\r\npublic bool bNotAlwaysLoadedForEditorGame;\r\n```\r\n\r\n### **bIsAsset**\r\n\r\nIs this export an asset?\r\n\r\n```csharp\r\npublic bool bIsAsset;\r\n```\r\n\r\n### **GeneratePublicHash**\r\n\r\n\r\n\r\n```csharp\r\npublic bool GeneratePublicHash;\r\n```\r\n\r\n### **SerializationBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeSerializationDependencies;\r\n```\r\n\r\n### **CreateBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeSerializationDependencies;\r\n```\r\n\r\n### **SerializationBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeCreateDependencies;\r\n```\r\n\r\n### **CreateBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeCreateDependencies;\r\n```\r\n\r\n### **Extras**\r\n\r\nMiscellaneous, unparsed export data, stored as a byte array.\r\n\r\n```csharp\r\npublic Byte[] Extras;\r\n```\r\n\r\n### **Asset**\r\n\r\nThe asset that this export is parsed with.\r\n\r\n```csharp\r\npublic UAsset Asset;\r\n```\r\n\r\n## Properties\r\n\r\n## Constructors\r\n\r\n### **PropertyExport(Export)**\r\n\r\n```csharp\r\npublic PropertyExport(Export super)\r\n```\r\n\r\n#### Parameters\r\n\r\n`super` [Export](./uassetapi.exporttypes.export.md)<br>\r\n\r\n### **PropertyExport(UAsset, Byte[])**\r\n\r\n```csharp\r\npublic PropertyExport(UAsset asset, Byte[] extras)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`extras` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **PropertyExport()**\r\n\r\n```csharp\r\npublic PropertyExport()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Int32)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, int nextStarting)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`nextStarting` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.rawexport.md",
    "content": "# RawExport\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\nAn export that could not be properly parsed by UAssetAPI, and is instead represented as an array of bytes as a fallback.\r\n\r\n```csharp\r\npublic class RawExport : Export, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Export](./uassetapi.exporttypes.export.md) → [RawExport](./uassetapi.exporttypes.rawexport.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Data**\r\n\r\n```csharp\r\npublic Byte[] Data;\r\n```\r\n\r\n### **ObjectName**\r\n\r\nThe name of the UObject represented by this resource.\r\n\r\n```csharp\r\npublic FName ObjectName;\r\n```\r\n\r\n### **OuterIndex**\r\n\r\nLocation of the resource for this resource's Outer (import/other export). 0 = this resource is a top-level UPackage\r\n\r\n```csharp\r\npublic FPackageIndex OuterIndex;\r\n```\r\n\r\n### **ClassIndex**\r\n\r\nLocation of this export's class (import/other export). 0 = this export is a UClass\r\n\r\n```csharp\r\npublic FPackageIndex ClassIndex;\r\n```\r\n\r\n### **SuperIndex**\r\n\r\nLocation of this export's parent class (import/other export). 0 = this export is not derived from UStruct\r\n\r\n```csharp\r\npublic FPackageIndex SuperIndex;\r\n```\r\n\r\n### **TemplateIndex**\r\n\r\nLocation of this export's template (import/other export). 0 = there is some problem\r\n\r\n```csharp\r\npublic FPackageIndex TemplateIndex;\r\n```\r\n\r\n### **ObjectFlags**\r\n\r\nThe object flags for the UObject represented by this resource. Only flags that match the RF_Load combination mask will be loaded from disk and applied to the UObject.\r\n\r\n```csharp\r\npublic EObjectFlags ObjectFlags;\r\n```\r\n\r\n### **SerialSize**\r\n\r\nThe number of bytes to serialize when saving/loading this export's UObject.\r\n\r\n```csharp\r\npublic long SerialSize;\r\n```\r\n\r\n### **SerialOffset**\r\n\r\nThe location (into the FLinker's underlying file reader archive) of the beginning of the data for this export's UObject. Used for verification only.\r\n\r\n```csharp\r\npublic long SerialOffset;\r\n```\r\n\r\n### **ScriptSerializationStartOffset**\r\n\r\nThe location (relative to SerialOffset) of the beginning of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4).\r\n\r\n```csharp\r\npublic long ScriptSerializationStartOffset;\r\n```\r\n\r\n### **ScriptSerializationEndOffset**\r\n\r\nThe location (relative to SerialOffset) of the end of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4)\r\n\r\n```csharp\r\npublic long ScriptSerializationEndOffset;\r\n```\r\n\r\n### **bForcedExport**\r\n\r\nWas this export forced into the export table via OBJECTMARK_ForceTagExp?\r\n\r\n```csharp\r\npublic bool bForcedExport;\r\n```\r\n\r\n### **bNotForClient**\r\n\r\nShould this export not be loaded on clients?\r\n\r\n```csharp\r\npublic bool bNotForClient;\r\n```\r\n\r\n### **bNotForServer**\r\n\r\nShould this export not be loaded on servers?\r\n\r\n```csharp\r\npublic bool bNotForServer;\r\n```\r\n\r\n### **PackageGuid**\r\n\r\nIf this object is a top level package (which must have been forced into the export table via OBJECTMARK_ForceTagExp), this is the GUID for the original package file. Deprecated\r\n\r\n```csharp\r\npublic Guid PackageGuid;\r\n```\r\n\r\n### **IsInheritedInstance**\r\n\r\n\r\n\r\n```csharp\r\npublic bool IsInheritedInstance;\r\n```\r\n\r\n### **PackageFlags**\r\n\r\nIf this export is a top-level package, this is the flags for the original package\r\n\r\n```csharp\r\npublic EPackageFlags PackageFlags;\r\n```\r\n\r\n### **bNotAlwaysLoadedForEditorGame**\r\n\r\nShould this export be always loaded in editor game?\r\n\r\n```csharp\r\npublic bool bNotAlwaysLoadedForEditorGame;\r\n```\r\n\r\n### **bIsAsset**\r\n\r\nIs this export an asset?\r\n\r\n```csharp\r\npublic bool bIsAsset;\r\n```\r\n\r\n### **GeneratePublicHash**\r\n\r\n\r\n\r\n```csharp\r\npublic bool GeneratePublicHash;\r\n```\r\n\r\n### **SerializationBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeSerializationDependencies;\r\n```\r\n\r\n### **CreateBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeSerializationDependencies;\r\n```\r\n\r\n### **SerializationBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeCreateDependencies;\r\n```\r\n\r\n### **CreateBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeCreateDependencies;\r\n```\r\n\r\n### **Extras**\r\n\r\nMiscellaneous, unparsed export data, stored as a byte array.\r\n\r\n```csharp\r\npublic Byte[] Extras;\r\n```\r\n\r\n### **Asset**\r\n\r\nThe asset that this export is parsed with.\r\n\r\n```csharp\r\npublic UAsset Asset;\r\n```\r\n\r\n## Constructors\r\n\r\n### **RawExport(Export)**\r\n\r\n```csharp\r\npublic RawExport(Export super)\r\n```\r\n\r\n#### Parameters\r\n\r\n`super` [Export](./uassetapi.exporttypes.export.md)<br>\r\n\r\n### **RawExport(Byte[], UAsset, Byte[])**\r\n\r\n```csharp\r\npublic RawExport(Byte[] data, UAsset asset, Byte[] extras)\r\n```\r\n\r\n#### Parameters\r\n\r\n`data` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`extras` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **RawExport()**\r\n\r\n```csharp\r\npublic RawExport()\r\n```\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.serializedinterfacereference.md",
    "content": "# SerializedInterfaceReference\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\nRepresents an interface that a UClass ([ClassExport](./uassetapi.exporttypes.classexport.md)) implements.\r\n\r\n```csharp\r\npublic struct SerializedInterfaceReference\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [SerializedInterfaceReference](./uassetapi.exporttypes.serializedinterfacereference.md)\r\n\r\n## Fields\r\n\r\n### **Class**\r\n\r\n```csharp\r\npublic int Class;\r\n```\r\n\r\n### **PointerOffset**\r\n\r\n```csharp\r\npublic int PointerOffset;\r\n```\r\n\r\n### **bImplementedByK2**\r\n\r\n```csharp\r\npublic bool bImplementedByK2;\r\n```\r\n\r\n## Constructors\r\n\r\n### **SerializedInterfaceReference(Int32, Int32, Boolean)**\r\n\r\n```csharp\r\nSerializedInterfaceReference(int class, int pointerOffset, bool bImplementedByK2)\r\n```\r\n\r\n#### Parameters\r\n\r\n`class` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`pointerOffset` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`bImplementedByK2` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.stringtableexport.md",
    "content": "# StringTableExport\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\nExport data for a string table. See [FStringTable](./uassetapi.exporttypes.fstringtable.md).\r\n\r\n```csharp\r\npublic class StringTableExport : NormalExport, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Export](./uassetapi.exporttypes.export.md) → [NormalExport](./uassetapi.exporttypes.normalexport.md) → [StringTableExport](./uassetapi.exporttypes.stringtableexport.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Table**\r\n\r\n```csharp\r\npublic FStringTable Table;\r\n```\r\n\r\n### **Data**\r\n\r\n```csharp\r\npublic List<PropertyData> Data;\r\n```\r\n\r\n### **ObjectGuid**\r\n\r\n```csharp\r\npublic Nullable<Guid> ObjectGuid;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **HasLeadingFourNullBytes**\r\n\r\n```csharp\r\npublic bool HasLeadingFourNullBytes;\r\n```\r\n\r\n### **ObjectName**\r\n\r\nThe name of the UObject represented by this resource.\r\n\r\n```csharp\r\npublic FName ObjectName;\r\n```\r\n\r\n### **OuterIndex**\r\n\r\nLocation of the resource for this resource's Outer (import/other export). 0 = this resource is a top-level UPackage\r\n\r\n```csharp\r\npublic FPackageIndex OuterIndex;\r\n```\r\n\r\n### **ClassIndex**\r\n\r\nLocation of this export's class (import/other export). 0 = this export is a UClass\r\n\r\n```csharp\r\npublic FPackageIndex ClassIndex;\r\n```\r\n\r\n### **SuperIndex**\r\n\r\nLocation of this export's parent class (import/other export). 0 = this export is not derived from UStruct\r\n\r\n```csharp\r\npublic FPackageIndex SuperIndex;\r\n```\r\n\r\n### **TemplateIndex**\r\n\r\nLocation of this export's template (import/other export). 0 = there is some problem\r\n\r\n```csharp\r\npublic FPackageIndex TemplateIndex;\r\n```\r\n\r\n### **ObjectFlags**\r\n\r\nThe object flags for the UObject represented by this resource. Only flags that match the RF_Load combination mask will be loaded from disk and applied to the UObject.\r\n\r\n```csharp\r\npublic EObjectFlags ObjectFlags;\r\n```\r\n\r\n### **SerialSize**\r\n\r\nThe number of bytes to serialize when saving/loading this export's UObject.\r\n\r\n```csharp\r\npublic long SerialSize;\r\n```\r\n\r\n### **SerialOffset**\r\n\r\nThe location (into the FLinker's underlying file reader archive) of the beginning of the data for this export's UObject. Used for verification only.\r\n\r\n```csharp\r\npublic long SerialOffset;\r\n```\r\n\r\n### **ScriptSerializationStartOffset**\r\n\r\nThe location (relative to SerialOffset) of the beginning of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4).\r\n\r\n```csharp\r\npublic long ScriptSerializationStartOffset;\r\n```\r\n\r\n### **ScriptSerializationEndOffset**\r\n\r\nThe location (relative to SerialOffset) of the end of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4)\r\n\r\n```csharp\r\npublic long ScriptSerializationEndOffset;\r\n```\r\n\r\n### **bForcedExport**\r\n\r\nWas this export forced into the export table via OBJECTMARK_ForceTagExp?\r\n\r\n```csharp\r\npublic bool bForcedExport;\r\n```\r\n\r\n### **bNotForClient**\r\n\r\nShould this export not be loaded on clients?\r\n\r\n```csharp\r\npublic bool bNotForClient;\r\n```\r\n\r\n### **bNotForServer**\r\n\r\nShould this export not be loaded on servers?\r\n\r\n```csharp\r\npublic bool bNotForServer;\r\n```\r\n\r\n### **PackageGuid**\r\n\r\nIf this object is a top level package (which must have been forced into the export table via OBJECTMARK_ForceTagExp), this is the GUID for the original package file. Deprecated\r\n\r\n```csharp\r\npublic Guid PackageGuid;\r\n```\r\n\r\n### **IsInheritedInstance**\r\n\r\n\r\n\r\n```csharp\r\npublic bool IsInheritedInstance;\r\n```\r\n\r\n### **PackageFlags**\r\n\r\nIf this export is a top-level package, this is the flags for the original package\r\n\r\n```csharp\r\npublic EPackageFlags PackageFlags;\r\n```\r\n\r\n### **bNotAlwaysLoadedForEditorGame**\r\n\r\nShould this export be always loaded in editor game?\r\n\r\n```csharp\r\npublic bool bNotAlwaysLoadedForEditorGame;\r\n```\r\n\r\n### **bIsAsset**\r\n\r\nIs this export an asset?\r\n\r\n```csharp\r\npublic bool bIsAsset;\r\n```\r\n\r\n### **GeneratePublicHash**\r\n\r\n\r\n\r\n```csharp\r\npublic bool GeneratePublicHash;\r\n```\r\n\r\n### **SerializationBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeSerializationDependencies;\r\n```\r\n\r\n### **CreateBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeSerializationDependencies;\r\n```\r\n\r\n### **SerializationBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeCreateDependencies;\r\n```\r\n\r\n### **CreateBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeCreateDependencies;\r\n```\r\n\r\n### **Extras**\r\n\r\nMiscellaneous, unparsed export data, stored as a byte array.\r\n\r\n```csharp\r\npublic Byte[] Extras;\r\n```\r\n\r\n### **Asset**\r\n\r\nThe asset that this export is parsed with.\r\n\r\n```csharp\r\npublic UAsset Asset;\r\n```\r\n\r\n## Properties\r\n\r\n## Constructors\r\n\r\n### **StringTableExport(Export)**\r\n\r\n```csharp\r\npublic StringTableExport(Export super)\r\n```\r\n\r\n#### Parameters\r\n\r\n`super` [Export](./uassetapi.exporttypes.export.md)<br>\r\n\r\n### **StringTableExport(FStringTable, UAsset, Byte[])**\r\n\r\n```csharp\r\npublic StringTableExport(FStringTable data, UAsset asset, Byte[] extras)\r\n```\r\n\r\n#### Parameters\r\n\r\n`data` [FStringTable](./uassetapi.exporttypes.fstringtable.md)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`extras` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **StringTableExport()**\r\n\r\n```csharp\r\npublic StringTableExport()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Int32)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, int nextStarting)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`nextStarting` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.structexport.md",
    "content": "# StructExport\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\nBase export for all UObject types that contain fields.\r\n\r\n```csharp\r\npublic class StructExport : FieldExport, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Export](./uassetapi.exporttypes.export.md) → [NormalExport](./uassetapi.exporttypes.normalexport.md) → [FieldExport](./uassetapi.exporttypes.fieldexport.md) → [StructExport](./uassetapi.exporttypes.structexport.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **SuperStruct**\r\n\r\nStruct this inherits from, may be null\r\n\r\n```csharp\r\npublic FPackageIndex SuperStruct;\r\n```\r\n\r\n### **Children**\r\n\r\nList of child fields\r\n\r\n```csharp\r\npublic FPackageIndex[] Children;\r\n```\r\n\r\n### **LoadedProperties**\r\n\r\nProperties serialized with this struct definition\r\n\r\n```csharp\r\npublic FProperty[] LoadedProperties;\r\n```\r\n\r\n### **ScriptBytecode**\r\n\r\nThe bytecode instructions contained within this struct.\r\n\r\n```csharp\r\npublic KismetExpression[] ScriptBytecode;\r\n```\r\n\r\n### **ScriptBytecodeSize**\r\n\r\nBytecode size in total in deserialized memory. Filled out in lieu of [StructExport.ScriptBytecode](./uassetapi.exporttypes.structexport.md#scriptbytecode) if an error occurs during bytecode parsing.\r\n\r\n```csharp\r\npublic int ScriptBytecodeSize;\r\n```\r\n\r\n### **ScriptBytecodeRaw**\r\n\r\nRaw binary bytecode data. Filled out in lieu of [StructExport.ScriptBytecode](./uassetapi.exporttypes.structexport.md#scriptbytecode) if an error occurs during bytecode parsing.\r\n\r\n```csharp\r\npublic Byte[] ScriptBytecodeRaw;\r\n```\r\n\r\n### **Field**\r\n\r\n```csharp\r\npublic UField Field;\r\n```\r\n\r\n### **Data**\r\n\r\n```csharp\r\npublic List<PropertyData> Data;\r\n```\r\n\r\n### **ObjectGuid**\r\n\r\n```csharp\r\npublic Nullable<Guid> ObjectGuid;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **HasLeadingFourNullBytes**\r\n\r\n```csharp\r\npublic bool HasLeadingFourNullBytes;\r\n```\r\n\r\n### **ObjectName**\r\n\r\nThe name of the UObject represented by this resource.\r\n\r\n```csharp\r\npublic FName ObjectName;\r\n```\r\n\r\n### **OuterIndex**\r\n\r\nLocation of the resource for this resource's Outer (import/other export). 0 = this resource is a top-level UPackage\r\n\r\n```csharp\r\npublic FPackageIndex OuterIndex;\r\n```\r\n\r\n### **ClassIndex**\r\n\r\nLocation of this export's class (import/other export). 0 = this export is a UClass\r\n\r\n```csharp\r\npublic FPackageIndex ClassIndex;\r\n```\r\n\r\n### **SuperIndex**\r\n\r\nLocation of this export's parent class (import/other export). 0 = this export is not derived from UStruct\r\n\r\n```csharp\r\npublic FPackageIndex SuperIndex;\r\n```\r\n\r\n### **TemplateIndex**\r\n\r\nLocation of this export's template (import/other export). 0 = there is some problem\r\n\r\n```csharp\r\npublic FPackageIndex TemplateIndex;\r\n```\r\n\r\n### **ObjectFlags**\r\n\r\nThe object flags for the UObject represented by this resource. Only flags that match the RF_Load combination mask will be loaded from disk and applied to the UObject.\r\n\r\n```csharp\r\npublic EObjectFlags ObjectFlags;\r\n```\r\n\r\n### **SerialSize**\r\n\r\nThe number of bytes to serialize when saving/loading this export's UObject.\r\n\r\n```csharp\r\npublic long SerialSize;\r\n```\r\n\r\n### **SerialOffset**\r\n\r\nThe location (into the FLinker's underlying file reader archive) of the beginning of the data for this export's UObject. Used for verification only.\r\n\r\n```csharp\r\npublic long SerialOffset;\r\n```\r\n\r\n### **ScriptSerializationStartOffset**\r\n\r\nThe location (relative to SerialOffset) of the beginning of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4).\r\n\r\n```csharp\r\npublic long ScriptSerializationStartOffset;\r\n```\r\n\r\n### **ScriptSerializationEndOffset**\r\n\r\nThe location (relative to SerialOffset) of the end of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4)\r\n\r\n```csharp\r\npublic long ScriptSerializationEndOffset;\r\n```\r\n\r\n### **bForcedExport**\r\n\r\nWas this export forced into the export table via OBJECTMARK_ForceTagExp?\r\n\r\n```csharp\r\npublic bool bForcedExport;\r\n```\r\n\r\n### **bNotForClient**\r\n\r\nShould this export not be loaded on clients?\r\n\r\n```csharp\r\npublic bool bNotForClient;\r\n```\r\n\r\n### **bNotForServer**\r\n\r\nShould this export not be loaded on servers?\r\n\r\n```csharp\r\npublic bool bNotForServer;\r\n```\r\n\r\n### **PackageGuid**\r\n\r\nIf this object is a top level package (which must have been forced into the export table via OBJECTMARK_ForceTagExp), this is the GUID for the original package file. Deprecated\r\n\r\n```csharp\r\npublic Guid PackageGuid;\r\n```\r\n\r\n### **IsInheritedInstance**\r\n\r\n\r\n\r\n```csharp\r\npublic bool IsInheritedInstance;\r\n```\r\n\r\n### **PackageFlags**\r\n\r\nIf this export is a top-level package, this is the flags for the original package\r\n\r\n```csharp\r\npublic EPackageFlags PackageFlags;\r\n```\r\n\r\n### **bNotAlwaysLoadedForEditorGame**\r\n\r\nShould this export be always loaded in editor game?\r\n\r\n```csharp\r\npublic bool bNotAlwaysLoadedForEditorGame;\r\n```\r\n\r\n### **bIsAsset**\r\n\r\nIs this export an asset?\r\n\r\n```csharp\r\npublic bool bIsAsset;\r\n```\r\n\r\n### **GeneratePublicHash**\r\n\r\n\r\n\r\n```csharp\r\npublic bool GeneratePublicHash;\r\n```\r\n\r\n### **SerializationBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeSerializationDependencies;\r\n```\r\n\r\n### **CreateBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeSerializationDependencies;\r\n```\r\n\r\n### **SerializationBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeCreateDependencies;\r\n```\r\n\r\n### **CreateBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeCreateDependencies;\r\n```\r\n\r\n### **Extras**\r\n\r\nMiscellaneous, unparsed export data, stored as a byte array.\r\n\r\n```csharp\r\npublic Byte[] Extras;\r\n```\r\n\r\n### **Asset**\r\n\r\nThe asset that this export is parsed with.\r\n\r\n```csharp\r\npublic UAsset Asset;\r\n```\r\n\r\n## Properties\r\n\r\n## Constructors\r\n\r\n### **StructExport(Export)**\r\n\r\n```csharp\r\npublic StructExport(Export super)\r\n```\r\n\r\n#### Parameters\r\n\r\n`super` [Export](./uassetapi.exporttypes.export.md)<br>\r\n\r\n### **StructExport(UAsset, Byte[])**\r\n\r\n```csharp\r\npublic StructExport(UAsset asset, Byte[] extras)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`extras` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **StructExport()**\r\n\r\n```csharp\r\npublic StructExport()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Int32)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, int nextStarting)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`nextStarting` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.udatatable.md",
    "content": "# UDataTable\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\nImported spreadsheet table.\r\n\r\n```csharp\r\npublic class UDataTable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UDataTable](./uassetapi.exporttypes.udatatable.md)\r\n\r\n## Fields\r\n\r\n### **Data**\r\n\r\n```csharp\r\npublic List<StructPropertyData> Data;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UDataTable()**\r\n\r\n```csharp\r\npublic UDataTable()\r\n```\r\n\r\n### **UDataTable(List&lt;StructPropertyData&gt;)**\r\n\r\n```csharp\r\npublic UDataTable(List<StructPropertyData> data)\r\n```\r\n\r\n#### Parameters\r\n\r\n`data` [List&lt;StructPropertyData&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.uenum.md",
    "content": "# UEnum\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\nReflection data for an enumeration.\r\n\r\n```csharp\r\npublic class UEnum\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UEnum](./uassetapi.exporttypes.uenum.md)\r\n\r\n## Fields\r\n\r\n### **Names**\r\n\r\nList of pairs of all enum names and values.\r\n\r\n```csharp\r\npublic List<Tuple<FName, long>> Names;\r\n```\r\n\r\n### **CppForm**\r\n\r\nHow the enum was originally defined.\r\n\r\n```csharp\r\npublic ECppForm CppForm;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UEnum()**\r\n\r\n```csharp\r\npublic UEnum()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, UAsset)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, UAsset)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.exporttypes.userdefinedstructexport.md",
    "content": "# UserDefinedStructExport\r\n\r\nNamespace: UAssetAPI.ExportTypes\r\n\r\n```csharp\r\npublic class UserDefinedStructExport : StructExport, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Export](./uassetapi.exporttypes.export.md) → [NormalExport](./uassetapi.exporttypes.normalexport.md) → [FieldExport](./uassetapi.exporttypes.fieldexport.md) → [StructExport](./uassetapi.exporttypes.structexport.md) → [UserDefinedStructExport](./uassetapi.exporttypes.userdefinedstructexport.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **StructFlags**\r\n\r\n```csharp\r\npublic uint StructFlags;\r\n```\r\n\r\n### **StructData**\r\n\r\n```csharp\r\npublic List<PropertyData> StructData;\r\n```\r\n\r\n### **SerializationControl2**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl2;\r\n```\r\n\r\n### **Operation2**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation2;\r\n```\r\n\r\n### **SuperStruct**\r\n\r\nStruct this inherits from, may be null\r\n\r\n```csharp\r\npublic FPackageIndex SuperStruct;\r\n```\r\n\r\n### **Children**\r\n\r\nList of child fields\r\n\r\n```csharp\r\npublic FPackageIndex[] Children;\r\n```\r\n\r\n### **LoadedProperties**\r\n\r\nProperties serialized with this struct definition\r\n\r\n```csharp\r\npublic FProperty[] LoadedProperties;\r\n```\r\n\r\n### **ScriptBytecode**\r\n\r\nThe bytecode instructions contained within this struct.\r\n\r\n```csharp\r\npublic KismetExpression[] ScriptBytecode;\r\n```\r\n\r\n### **ScriptBytecodeSize**\r\n\r\nBytecode size in total in deserialized memory. Filled out in lieu of [StructExport.ScriptBytecode](./uassetapi.exporttypes.structexport.md#scriptbytecode) if an error occurs during bytecode parsing.\r\n\r\n```csharp\r\npublic int ScriptBytecodeSize;\r\n```\r\n\r\n### **ScriptBytecodeRaw**\r\n\r\nRaw binary bytecode data. Filled out in lieu of [StructExport.ScriptBytecode](./uassetapi.exporttypes.structexport.md#scriptbytecode) if an error occurs during bytecode parsing.\r\n\r\n```csharp\r\npublic Byte[] ScriptBytecodeRaw;\r\n```\r\n\r\n### **Field**\r\n\r\n```csharp\r\npublic UField Field;\r\n```\r\n\r\n### **Data**\r\n\r\n```csharp\r\npublic List<PropertyData> Data;\r\n```\r\n\r\n### **ObjectGuid**\r\n\r\n```csharp\r\npublic Nullable<Guid> ObjectGuid;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **HasLeadingFourNullBytes**\r\n\r\n```csharp\r\npublic bool HasLeadingFourNullBytes;\r\n```\r\n\r\n### **ObjectName**\r\n\r\nThe name of the UObject represented by this resource.\r\n\r\n```csharp\r\npublic FName ObjectName;\r\n```\r\n\r\n### **OuterIndex**\r\n\r\nLocation of the resource for this resource's Outer (import/other export). 0 = this resource is a top-level UPackage\r\n\r\n```csharp\r\npublic FPackageIndex OuterIndex;\r\n```\r\n\r\n### **ClassIndex**\r\n\r\nLocation of this export's class (import/other export). 0 = this export is a UClass\r\n\r\n```csharp\r\npublic FPackageIndex ClassIndex;\r\n```\r\n\r\n### **SuperIndex**\r\n\r\nLocation of this export's parent class (import/other export). 0 = this export is not derived from UStruct\r\n\r\n```csharp\r\npublic FPackageIndex SuperIndex;\r\n```\r\n\r\n### **TemplateIndex**\r\n\r\nLocation of this export's template (import/other export). 0 = there is some problem\r\n\r\n```csharp\r\npublic FPackageIndex TemplateIndex;\r\n```\r\n\r\n### **ObjectFlags**\r\n\r\nThe object flags for the UObject represented by this resource. Only flags that match the RF_Load combination mask will be loaded from disk and applied to the UObject.\r\n\r\n```csharp\r\npublic EObjectFlags ObjectFlags;\r\n```\r\n\r\n### **SerialSize**\r\n\r\nThe number of bytes to serialize when saving/loading this export's UObject.\r\n\r\n```csharp\r\npublic long SerialSize;\r\n```\r\n\r\n### **SerialOffset**\r\n\r\nThe location (into the FLinker's underlying file reader archive) of the beginning of the data for this export's UObject. Used for verification only.\r\n\r\n```csharp\r\npublic long SerialOffset;\r\n```\r\n\r\n### **ScriptSerializationStartOffset**\r\n\r\nThe location (relative to SerialOffset) of the beginning of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4).\r\n\r\n```csharp\r\npublic long ScriptSerializationStartOffset;\r\n```\r\n\r\n### **ScriptSerializationEndOffset**\r\n\r\nThe location (relative to SerialOffset) of the end of the portion of this export's data that is serialized using tagged property serialization.\r\n Serialized into packages using tagged property serialization as of [ObjectVersionUE5.SCRIPT_SERIALIZATION_OFFSET](./uassetapi.unrealtypes.objectversionue5.md#script_serialization_offset) (5.4)\r\n\r\n```csharp\r\npublic long ScriptSerializationEndOffset;\r\n```\r\n\r\n### **bForcedExport**\r\n\r\nWas this export forced into the export table via OBJECTMARK_ForceTagExp?\r\n\r\n```csharp\r\npublic bool bForcedExport;\r\n```\r\n\r\n### **bNotForClient**\r\n\r\nShould this export not be loaded on clients?\r\n\r\n```csharp\r\npublic bool bNotForClient;\r\n```\r\n\r\n### **bNotForServer**\r\n\r\nShould this export not be loaded on servers?\r\n\r\n```csharp\r\npublic bool bNotForServer;\r\n```\r\n\r\n### **PackageGuid**\r\n\r\nIf this object is a top level package (which must have been forced into the export table via OBJECTMARK_ForceTagExp), this is the GUID for the original package file. Deprecated\r\n\r\n```csharp\r\npublic Guid PackageGuid;\r\n```\r\n\r\n### **IsInheritedInstance**\r\n\r\n\r\n\r\n```csharp\r\npublic bool IsInheritedInstance;\r\n```\r\n\r\n### **PackageFlags**\r\n\r\nIf this export is a top-level package, this is the flags for the original package\r\n\r\n```csharp\r\npublic EPackageFlags PackageFlags;\r\n```\r\n\r\n### **bNotAlwaysLoadedForEditorGame**\r\n\r\nShould this export be always loaded in editor game?\r\n\r\n```csharp\r\npublic bool bNotAlwaysLoadedForEditorGame;\r\n```\r\n\r\n### **bIsAsset**\r\n\r\nIs this export an asset?\r\n\r\n```csharp\r\npublic bool bIsAsset;\r\n```\r\n\r\n### **GeneratePublicHash**\r\n\r\n\r\n\r\n```csharp\r\npublic bool GeneratePublicHash;\r\n```\r\n\r\n### **SerializationBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeSerializationDependencies;\r\n```\r\n\r\n### **CreateBeforeSerializationDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeSerializationDependencies;\r\n```\r\n\r\n### **SerializationBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> SerializationBeforeCreateDependencies;\r\n```\r\n\r\n### **CreateBeforeCreateDependencies**\r\n\r\n```csharp\r\npublic List<FPackageIndex> CreateBeforeCreateDependencies;\r\n```\r\n\r\n### **Extras**\r\n\r\nMiscellaneous, unparsed export data, stored as a byte array.\r\n\r\n```csharp\r\npublic Byte[] Extras;\r\n```\r\n\r\n### **Asset**\r\n\r\nThe asset that this export is parsed with.\r\n\r\n```csharp\r\npublic UAsset Asset;\r\n```\r\n\r\n## Properties\r\n\r\n## Constructors\r\n\r\n### **UserDefinedStructExport(Export)**\r\n\r\n```csharp\r\npublic UserDefinedStructExport(Export super)\r\n```\r\n\r\n#### Parameters\r\n\r\n`super` [Export](./uassetapi.exporttypes.export.md)<br>\r\n\r\n### **UserDefinedStructExport(UAsset, Byte[])**\r\n\r\n```csharp\r\npublic UserDefinedStructExport(UAsset asset, Byte[] extras)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`extras` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **UserDefinedStructExport()**\r\n\r\n```csharp\r\npublic UserDefinedStructExport()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Int32)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, int nextStarting)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`nextStarting` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ResolveAncestries(UAsset, AncestryInfo)**\r\n\r\n```csharp\r\npublic void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`ancestrySoFar` [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fengineversion.md",
    "content": "# FEngineVersion\r\n\r\nNamespace: UAssetAPI\r\n\r\nHolds basic Unreal version numbers.\r\n\r\n```csharp\r\npublic struct FEngineVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FEngineVersion](./uassetapi.fengineversion.md)\r\n\r\n## Fields\r\n\r\n### **Major**\r\n\r\nMajor version number.\r\n\r\n```csharp\r\npublic ushort Major;\r\n```\r\n\r\n### **Minor**\r\n\r\nMinor version number.\r\n\r\n```csharp\r\npublic ushort Minor;\r\n```\r\n\r\n### **Patch**\r\n\r\nPatch version number.\r\n\r\n```csharp\r\npublic ushort Patch;\r\n```\r\n\r\n### **Changelist**\r\n\r\nChangelist number. This is used by the engine to arbitrate when Major/Minor/Patch version numbers match.\r\n\r\n```csharp\r\npublic uint Changelist;\r\n```\r\n\r\n### **Branch**\r\n\r\nBranch name.\r\n\r\n```csharp\r\npublic FString Branch;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FEngineVersion(UnrealBinaryReader)**\r\n\r\n```csharp\r\nFEngineVersion(UnrealBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [UnrealBinaryReader](./uassetapi.unrealbinaryreader.md)<br>\r\n\r\n### **FEngineVersion(UInt16, UInt16, UInt16, UInt32, FString)**\r\n\r\n```csharp\r\nFEngineVersion(ushort major, ushort minor, ushort patch, uint changelist, FString branch)\r\n```\r\n\r\n#### Parameters\r\n\r\n`major` [UInt16](https://docs.microsoft.com/en-us/dotnet/api/system.uint16)<br>\r\n\r\n`minor` [UInt16](https://docs.microsoft.com/en-us/dotnet/api/system.uint16)<br>\r\n\r\n`patch` [UInt16](https://docs.microsoft.com/en-us/dotnet/api/system.uint16)<br>\r\n\r\n`changelist` [UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n`branch` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(UnrealBinaryWriter)**\r\n\r\n```csharp\r\nvoid Write(UnrealBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [UnrealBinaryWriter](./uassetapi.unrealbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fgenerationinfo.md",
    "content": "# FGenerationInfo\r\n\r\nNamespace: UAssetAPI\r\n\r\nRevision data for an Unreal package file.\r\n\r\n```csharp\r\npublic class FGenerationInfo\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FGenerationInfo](./uassetapi.fgenerationinfo.md)\r\n\r\n## Fields\r\n\r\n### **ExportCount**\r\n\r\nNumber of exports in the export map for this generation.\r\n\r\n```csharp\r\npublic int ExportCount;\r\n```\r\n\r\n### **NameCount**\r\n\r\nNumber of names in the name map for this generation.\r\n\r\n```csharp\r\npublic int NameCount;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FGenerationInfo(Int32, Int32)**\r\n\r\n```csharp\r\npublic FGenerationInfo(int exportCount, int nameCount)\r\n```\r\n\r\n#### Parameters\r\n\r\n`exportCount` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`nameCount` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.earraydim.md",
    "content": "# EArrayDim\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\nThe type of array that this property represents. This is represented an integer in the engine.\r\n\r\n```csharp\r\npublic enum EArrayDim\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EArrayDim](./uassetapi.fieldtypes.earraydim.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.elifetimecondition.md",
    "content": "# ELifetimeCondition\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\nSecondary condition to check before considering the replication of a lifetime property.\r\n\r\n```csharp\r\npublic enum ELifetimeCondition\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ELifetimeCondition](./uassetapi.fieldtypes.elifetimecondition.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| COND_None | 0 | This property has no condition, and will send anytime it changes |\r\n| COND_InitialOnly | 1 | This property will only attempt to send on the initial bunch |\r\n| COND_OwnerOnly | 2 | This property will only send to the actor's owner |\r\n| COND_SkipOwner | 3 | This property send to every connection EXCEPT the owner |\r\n| COND_SimulatedOnly | 4 | This property will only send to simulated actors |\r\n| COND_AutonomousOnly | 5 | This property will only send to autonomous actors |\r\n| COND_SimulatedOrPhysics | 6 | This property will send to simulated OR bRepPhysics actors |\r\n| COND_InitialOrOwner | 7 | This property will send on the initial packet, or to the actors owner |\r\n| COND_Custom | 8 | This property has no particular condition, but wants the ability to toggle on/off via SetCustomIsActiveOverride |\r\n| COND_ReplayOrOwner | 9 | This property will only send to the replay connection, or to the actors owner |\r\n| COND_ReplayOnly | 10 | This property will only send to the replay connection |\r\n| COND_SimulatedOnlyNoReplay | 11 | This property will send to actors only, but not to replay connections |\r\n| COND_SimulatedOrPhysicsNoReplay | 12 | This property will send to simulated Or bRepPhysics actors, but not to replay connections |\r\n| COND_SkipReplay | 13 | This property will not send to the replay connection |\r\n| COND_Never | 15 | This property will never be replicated |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.farrayproperty.md",
    "content": "# FArrayProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class FArrayProperty : FProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md) → [FArrayProperty](./uassetapi.fieldtypes.farrayproperty.md)\r\n\r\n## Fields\r\n\r\n### **Inner**\r\n\r\n```csharp\r\npublic FProperty Inner;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FArrayProperty()**\r\n\r\n```csharp\r\npublic FArrayProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.fboolproperty.md",
    "content": "# FBoolProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class FBoolProperty : FProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md) → [FBoolProperty](./uassetapi.fieldtypes.fboolproperty.md)\r\n\r\n## Fields\r\n\r\n### **FieldSize**\r\n\r\nSize of the bitfield/bool property. Equal to ElementSize but used to check if the property has been properly initialized (0-8, where 0 means uninitialized).\r\n\r\n```csharp\r\npublic byte FieldSize;\r\n```\r\n\r\n### **ByteOffset**\r\n\r\nOffset from the memeber variable to the byte of the property (0-7).\r\n\r\n```csharp\r\npublic byte ByteOffset;\r\n```\r\n\r\n### **ByteMask**\r\n\r\nMask of the byte with the property value.\r\n\r\n```csharp\r\npublic byte ByteMask;\r\n```\r\n\r\n### **FieldMask**\r\n\r\nMask of the field with the property value. Either equal to ByteMask or 255 in case of 'bool' type.\r\n\r\n```csharp\r\npublic byte FieldMask;\r\n```\r\n\r\n### **NativeBool**\r\n\r\n```csharp\r\npublic bool NativeBool;\r\n```\r\n\r\n### **Value**\r\n\r\n```csharp\r\npublic bool Value;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FBoolProperty()**\r\n\r\n```csharp\r\npublic FBoolProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.fbyteproperty.md",
    "content": "# FByteProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class FByteProperty : FProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md) → [FByteProperty](./uassetapi.fieldtypes.fbyteproperty.md)\r\n\r\n## Fields\r\n\r\n### **Enum**\r\n\r\nA pointer to the UEnum represented by this property\r\n\r\n```csharp\r\npublic FPackageIndex Enum;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FByteProperty()**\r\n\r\n```csharp\r\npublic FByteProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.fclassproperty.md",
    "content": "# FClassProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class FClassProperty : FObjectProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md) → [FObjectProperty](./uassetapi.fieldtypes.fobjectproperty.md) → [FClassProperty](./uassetapi.fieldtypes.fclassproperty.md)\r\n\r\n## Fields\r\n\r\n### **MetaClass**\r\n\r\n```csharp\r\npublic FPackageIndex MetaClass;\r\n```\r\n\r\n### **PropertyClass**\r\n\r\n```csharp\r\npublic FPackageIndex PropertyClass;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FClassProperty()**\r\n\r\n```csharp\r\npublic FClassProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.fdelegateproperty.md",
    "content": "# FDelegateProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class FDelegateProperty : FProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md) → [FDelegateProperty](./uassetapi.fieldtypes.fdelegateproperty.md)\r\n\r\n## Fields\r\n\r\n### **SignatureFunction**\r\n\r\n```csharp\r\npublic FPackageIndex SignatureFunction;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FDelegateProperty()**\r\n\r\n```csharp\r\npublic FDelegateProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.fenumproperty.md",
    "content": "# FEnumProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class FEnumProperty : FProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md) → [FEnumProperty](./uassetapi.fieldtypes.fenumproperty.md)\r\n\r\n## Fields\r\n\r\n### **Enum**\r\n\r\nA pointer to the UEnum represented by this property\r\n\r\n```csharp\r\npublic FPackageIndex Enum;\r\n```\r\n\r\n### **UnderlyingProp**\r\n\r\nThe FNumericProperty which represents the underlying type of the enum\r\n\r\n```csharp\r\npublic FProperty UnderlyingProp;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FEnumProperty()**\r\n\r\n```csharp\r\npublic FEnumProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.ffield.md",
    "content": "# FField\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\nBase class of reflection data objects.\r\n\r\n```csharp\r\npublic class FField\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md)\r\n\r\n## Fields\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FField()**\r\n\r\n```csharp\r\npublic FField()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.fgenericproperty.md",
    "content": "# FGenericProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\nThis is a UAssetAPI-specific property that represents anything that we don't have special serialization for\r\n\r\n```csharp\r\npublic class FGenericProperty : FProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md) → [FGenericProperty](./uassetapi.fieldtypes.fgenericproperty.md)\r\n\r\n## Fields\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FGenericProperty()**\r\n\r\n```csharp\r\npublic FGenericProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.finterfaceproperty.md",
    "content": "# FInterfaceProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class FInterfaceProperty : FProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md) → [FInterfaceProperty](./uassetapi.fieldtypes.finterfaceproperty.md)\r\n\r\n## Fields\r\n\r\n### **InterfaceClass**\r\n\r\n```csharp\r\npublic FPackageIndex InterfaceClass;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FInterfaceProperty()**\r\n\r\n```csharp\r\npublic FInterfaceProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.fmapproperty.md",
    "content": "# FMapProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class FMapProperty : FProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md) → [FMapProperty](./uassetapi.fieldtypes.fmapproperty.md)\r\n\r\n## Fields\r\n\r\n### **KeyProp**\r\n\r\n```csharp\r\npublic FProperty KeyProp;\r\n```\r\n\r\n### **ValueProp**\r\n\r\n```csharp\r\npublic FProperty ValueProp;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMapProperty()**\r\n\r\n```csharp\r\npublic FMapProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.fmulticastdelegateproperty.md",
    "content": "# FMulticastDelegateProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class FMulticastDelegateProperty : FDelegateProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md) → [FDelegateProperty](./uassetapi.fieldtypes.fdelegateproperty.md) → [FMulticastDelegateProperty](./uassetapi.fieldtypes.fmulticastdelegateproperty.md)\r\n\r\n## Fields\r\n\r\n### **SignatureFunction**\r\n\r\n```csharp\r\npublic FPackageIndex SignatureFunction;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMulticastDelegateProperty()**\r\n\r\n```csharp\r\npublic FMulticastDelegateProperty()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.fmulticastinlinedelegateproperty.md",
    "content": "# FMulticastInlineDelegateProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class FMulticastInlineDelegateProperty : FMulticastDelegateProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md) → [FDelegateProperty](./uassetapi.fieldtypes.fdelegateproperty.md) → [FMulticastDelegateProperty](./uassetapi.fieldtypes.fmulticastdelegateproperty.md) → [FMulticastInlineDelegateProperty](./uassetapi.fieldtypes.fmulticastinlinedelegateproperty.md)\r\n\r\n## Fields\r\n\r\n### **SignatureFunction**\r\n\r\n```csharp\r\npublic FPackageIndex SignatureFunction;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMulticastInlineDelegateProperty()**\r\n\r\n```csharp\r\npublic FMulticastInlineDelegateProperty()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.fnumericproperty.md",
    "content": "# FNumericProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class FNumericProperty : FProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md) → [FNumericProperty](./uassetapi.fieldtypes.fnumericproperty.md)\r\n\r\n## Fields\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FNumericProperty()**\r\n\r\n```csharp\r\npublic FNumericProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.fobjectproperty.md",
    "content": "# FObjectProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class FObjectProperty : FProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md) → [FObjectProperty](./uassetapi.fieldtypes.fobjectproperty.md)\r\n\r\n## Fields\r\n\r\n### **PropertyClass**\r\n\r\n```csharp\r\npublic FPackageIndex PropertyClass;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FObjectProperty()**\r\n\r\n```csharp\r\npublic FObjectProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.foptionalproperty.md",
    "content": "# FOptionalProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class FOptionalProperty : FProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md) → [FOptionalProperty](./uassetapi.fieldtypes.foptionalproperty.md)\r\n\r\n## Fields\r\n\r\n### **ValueProperty**\r\n\r\n```csharp\r\npublic FProperty ValueProperty;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FOptionalProperty()**\r\n\r\n```csharp\r\npublic FOptionalProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.fproperty.md",
    "content": "# FProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\nAn UnrealScript variable.\r\n\r\n```csharp\r\npublic abstract class FProperty : FField\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md)\r\n\r\n## Fields\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FProperty()**\r\n\r\n```csharp\r\npublic FProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **SetObject(Object)**\r\n\r\n```csharp\r\npublic void SetObject(object value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **GetObject&lt;T&gt;()**\r\n\r\n```csharp\r\npublic T GetObject<T>()\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\n#### Returns\r\n\r\nT<br>\r\n\r\n### **GetUsmapPropertyType()**\r\n\r\n```csharp\r\npublic EPropertyType GetUsmapPropertyType()\r\n```\r\n\r\n#### Returns\r\n\r\n[EPropertyType](./uassetapi.unversioned.epropertytype.md)<br>\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.fsetproperty.md",
    "content": "# FSetProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class FSetProperty : FProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md) → [FSetProperty](./uassetapi.fieldtypes.fsetproperty.md)\r\n\r\n## Fields\r\n\r\n### **ElementProp**\r\n\r\n```csharp\r\npublic FProperty ElementProp;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FSetProperty()**\r\n\r\n```csharp\r\npublic FSetProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.fsoftclassproperty.md",
    "content": "# FSoftClassProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class FSoftClassProperty : FObjectProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md) → [FObjectProperty](./uassetapi.fieldtypes.fobjectproperty.md) → [FSoftClassProperty](./uassetapi.fieldtypes.fsoftclassproperty.md)\r\n\r\n## Fields\r\n\r\n### **MetaClass**\r\n\r\n```csharp\r\npublic FPackageIndex MetaClass;\r\n```\r\n\r\n### **PropertyClass**\r\n\r\n```csharp\r\npublic FPackageIndex PropertyClass;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FSoftClassProperty()**\r\n\r\n```csharp\r\npublic FSoftClassProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.fsoftobjectproperty.md",
    "content": "# FSoftObjectProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class FSoftObjectProperty : FObjectProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md) → [FObjectProperty](./uassetapi.fieldtypes.fobjectproperty.md) → [FSoftObjectProperty](./uassetapi.fieldtypes.fsoftobjectproperty.md)\r\n\r\n## Fields\r\n\r\n### **PropertyClass**\r\n\r\n```csharp\r\npublic FPackageIndex PropertyClass;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FSoftObjectProperty()**\r\n\r\n```csharp\r\npublic FSoftObjectProperty()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.fstructproperty.md",
    "content": "# FStructProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class FStructProperty : FProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md) → [FStructProperty](./uassetapi.fieldtypes.fstructproperty.md)\r\n\r\n## Fields\r\n\r\n### **Struct**\r\n\r\n```csharp\r\npublic FPackageIndex Struct;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FStructProperty()**\r\n\r\n```csharp\r\npublic FStructProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.fweakobjectproperty.md",
    "content": "# FWeakObjectProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class FWeakObjectProperty : FObjectProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FField](./uassetapi.fieldtypes.ffield.md) → [FProperty](./uassetapi.fieldtypes.fproperty.md) → [FObjectProperty](./uassetapi.fieldtypes.fobjectproperty.md) → [FWeakObjectProperty](./uassetapi.fieldtypes.fweakobjectproperty.md)\r\n\r\n## Fields\r\n\r\n### **PropertyClass**\r\n\r\n```csharp\r\npublic FPackageIndex PropertyClass;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepIndex**\r\n\r\n```csharp\r\npublic ushort RepIndex;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **UsmapPropertyTypeOverrides**\r\n\r\n```csharp\r\npublic IDictionary<string, EPropertyType> UsmapPropertyTypeOverrides;\r\n```\r\n\r\n### **SerializedType**\r\n\r\n```csharp\r\npublic FName SerializedType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectFlags Flags;\r\n```\r\n\r\n### **MetaDataMap**\r\n\r\n```csharp\r\npublic TMap<FName, FString> MetaDataMap;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FWeakObjectProperty()**\r\n\r\n```csharp\r\npublic FWeakObjectProperty()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.uarrayproperty.md",
    "content": "# UArrayProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UArrayProperty : UProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UArrayProperty](./uassetapi.fieldtypes.uarrayproperty.md)\r\n\r\n## Fields\r\n\r\n### **Inner**\r\n\r\n```csharp\r\npublic FPackageIndex Inner;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UArrayProperty()**\r\n\r\n```csharp\r\npublic UArrayProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.uassetclassproperty.md",
    "content": "# UAssetClassProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UAssetClassProperty : UObjectProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UObjectProperty](./uassetapi.fieldtypes.uobjectproperty.md) → [UAssetClassProperty](./uassetapi.fieldtypes.uassetclassproperty.md)\r\n\r\n## Fields\r\n\r\n### **MetaClass**\r\n\r\n```csharp\r\npublic FPackageIndex MetaClass;\r\n```\r\n\r\n### **PropertyClass**\r\n\r\n```csharp\r\npublic FPackageIndex PropertyClass;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UAssetClassProperty()**\r\n\r\n```csharp\r\npublic UAssetClassProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.uassetobjectproperty.md",
    "content": "# UAssetObjectProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UAssetObjectProperty : UObjectProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UObjectProperty](./uassetapi.fieldtypes.uobjectproperty.md) → [UAssetObjectProperty](./uassetapi.fieldtypes.uassetobjectproperty.md)\r\n\r\n## Fields\r\n\r\n### **PropertyClass**\r\n\r\n```csharp\r\npublic FPackageIndex PropertyClass;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UAssetObjectProperty()**\r\n\r\n```csharp\r\npublic UAssetObjectProperty()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.uboolproperty.md",
    "content": "# UBoolProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UBoolProperty : UProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UBoolProperty](./uassetapi.fieldtypes.uboolproperty.md)\r\n\r\n## Fields\r\n\r\n### **NativeBool**\r\n\r\n```csharp\r\npublic bool NativeBool;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UBoolProperty()**\r\n\r\n```csharp\r\npublic UBoolProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.ubyteproperty.md",
    "content": "# UByteProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UByteProperty : UProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UByteProperty](./uassetapi.fieldtypes.ubyteproperty.md)\r\n\r\n## Fields\r\n\r\n### **Enum**\r\n\r\nA pointer to the UEnum represented by this property\r\n\r\n```csharp\r\npublic FPackageIndex Enum;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UByteProperty()**\r\n\r\n```csharp\r\npublic UByteProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.uclassproperty.md",
    "content": "# UClassProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UClassProperty : UObjectProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UObjectProperty](./uassetapi.fieldtypes.uobjectproperty.md) → [UClassProperty](./uassetapi.fieldtypes.uclassproperty.md)\r\n\r\n## Fields\r\n\r\n### **MetaClass**\r\n\r\n```csharp\r\npublic FPackageIndex MetaClass;\r\n```\r\n\r\n### **PropertyClass**\r\n\r\n```csharp\r\npublic FPackageIndex PropertyClass;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UClassProperty()**\r\n\r\n```csharp\r\npublic UClassProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.udelegateproperty.md",
    "content": "# UDelegateProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UDelegateProperty : UProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UDelegateProperty](./uassetapi.fieldtypes.udelegateproperty.md)\r\n\r\n## Fields\r\n\r\n### **SignatureFunction**\r\n\r\n```csharp\r\npublic FPackageIndex SignatureFunction;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UDelegateProperty()**\r\n\r\n```csharp\r\npublic UDelegateProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.udoubleproperty.md",
    "content": "# UDoubleProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UDoubleProperty : UNumericProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UNumericProperty](./uassetapi.fieldtypes.unumericproperty.md) → [UDoubleProperty](./uassetapi.fieldtypes.udoubleproperty.md)\r\n\r\n## Fields\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UDoubleProperty()**\r\n\r\n```csharp\r\npublic UDoubleProperty()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.uenumproperty.md",
    "content": "# UEnumProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UEnumProperty : UProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UEnumProperty](./uassetapi.fieldtypes.uenumproperty.md)\r\n\r\n## Fields\r\n\r\n### **Enum**\r\n\r\nA pointer to the UEnum represented by this property\r\n\r\n```csharp\r\npublic FPackageIndex Enum;\r\n```\r\n\r\n### **UnderlyingProp**\r\n\r\nThe FNumericProperty which represents the underlying type of the enum\r\n\r\n```csharp\r\npublic FPackageIndex UnderlyingProp;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UEnumProperty()**\r\n\r\n```csharp\r\npublic UEnumProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.ufield.md",
    "content": "# UField\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\nBase class of reflection data objects.\r\n\r\n```csharp\r\npublic class UField\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md)\r\n\r\n## Fields\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UField()**\r\n\r\n```csharp\r\npublic UField()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.ufloatproperty.md",
    "content": "# UFloatProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UFloatProperty : UNumericProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UNumericProperty](./uassetapi.fieldtypes.unumericproperty.md) → [UFloatProperty](./uassetapi.fieldtypes.ufloatproperty.md)\r\n\r\n## Fields\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UFloatProperty()**\r\n\r\n```csharp\r\npublic UFloatProperty()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.ugenericproperty.md",
    "content": "# UGenericProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\nThis is a UAssetAPI-specific property that represents anything that we don't have special serialization for\r\n\r\n```csharp\r\npublic class UGenericProperty : UProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UGenericProperty](./uassetapi.fieldtypes.ugenericproperty.md)\r\n\r\n## Fields\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UGenericProperty()**\r\n\r\n```csharp\r\npublic UGenericProperty()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.uint16property.md",
    "content": "# UInt16Property\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UInt16Property : UNumericProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UNumericProperty](./uassetapi.fieldtypes.unumericproperty.md) → [UInt16Property](./uassetapi.fieldtypes.uint16property.md)\r\n\r\n## Fields\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UInt16Property()**\r\n\r\n```csharp\r\npublic UInt16Property()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.uint64property.md",
    "content": "# UInt64Property\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UInt64Property : UNumericProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UNumericProperty](./uassetapi.fieldtypes.unumericproperty.md) → [UInt64Property](./uassetapi.fieldtypes.uint64property.md)\r\n\r\n## Fields\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UInt64Property()**\r\n\r\n```csharp\r\npublic UInt64Property()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.uint8property.md",
    "content": "# UInt8Property\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UInt8Property : UNumericProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UNumericProperty](./uassetapi.fieldtypes.unumericproperty.md) → [UInt8Property](./uassetapi.fieldtypes.uint8property.md)\r\n\r\n## Fields\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UInt8Property()**\r\n\r\n```csharp\r\npublic UInt8Property()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.uinterfaceproperty.md",
    "content": "# UInterfaceProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UInterfaceProperty : UProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UInterfaceProperty](./uassetapi.fieldtypes.uinterfaceproperty.md)\r\n\r\n## Fields\r\n\r\n### **InterfaceClass**\r\n\r\n```csharp\r\npublic FPackageIndex InterfaceClass;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UInterfaceProperty()**\r\n\r\n```csharp\r\npublic UInterfaceProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.uintproperty.md",
    "content": "# UIntProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UIntProperty : UNumericProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UNumericProperty](./uassetapi.fieldtypes.unumericproperty.md) → [UIntProperty](./uassetapi.fieldtypes.uintproperty.md)\r\n\r\n## Fields\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UIntProperty()**\r\n\r\n```csharp\r\npublic UIntProperty()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.ulazyobjectproperty.md",
    "content": "# ULazyObjectProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class ULazyObjectProperty : UObjectProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UObjectProperty](./uassetapi.fieldtypes.uobjectproperty.md) → [ULazyObjectProperty](./uassetapi.fieldtypes.ulazyobjectproperty.md)\r\n\r\n## Fields\r\n\r\n### **PropertyClass**\r\n\r\n```csharp\r\npublic FPackageIndex PropertyClass;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **ULazyObjectProperty()**\r\n\r\n```csharp\r\npublic ULazyObjectProperty()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.umapproperty.md",
    "content": "# UMapProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UMapProperty : UProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UMapProperty](./uassetapi.fieldtypes.umapproperty.md)\r\n\r\n## Fields\r\n\r\n### **KeyProp**\r\n\r\n```csharp\r\npublic FPackageIndex KeyProp;\r\n```\r\n\r\n### **ValueProp**\r\n\r\n```csharp\r\npublic FPackageIndex ValueProp;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UMapProperty()**\r\n\r\n```csharp\r\npublic UMapProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.umulticastdelegateproperty.md",
    "content": "# UMulticastDelegateProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UMulticastDelegateProperty : UDelegateProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UDelegateProperty](./uassetapi.fieldtypes.udelegateproperty.md) → [UMulticastDelegateProperty](./uassetapi.fieldtypes.umulticastdelegateproperty.md)\r\n\r\n## Fields\r\n\r\n### **SignatureFunction**\r\n\r\n```csharp\r\npublic FPackageIndex SignatureFunction;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UMulticastDelegateProperty()**\r\n\r\n```csharp\r\npublic UMulticastDelegateProperty()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.umulticastinlinedelegateproperty.md",
    "content": "# UMulticastInlineDelegateProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UMulticastInlineDelegateProperty : UMulticastDelegateProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UDelegateProperty](./uassetapi.fieldtypes.udelegateproperty.md) → [UMulticastDelegateProperty](./uassetapi.fieldtypes.umulticastdelegateproperty.md) → [UMulticastInlineDelegateProperty](./uassetapi.fieldtypes.umulticastinlinedelegateproperty.md)\r\n\r\n## Fields\r\n\r\n### **SignatureFunction**\r\n\r\n```csharp\r\npublic FPackageIndex SignatureFunction;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UMulticastInlineDelegateProperty()**\r\n\r\n```csharp\r\npublic UMulticastInlineDelegateProperty()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.umulticastsparsedelegateproperty.md",
    "content": "# UMulticastSparseDelegateProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UMulticastSparseDelegateProperty : UMulticastDelegateProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UDelegateProperty](./uassetapi.fieldtypes.udelegateproperty.md) → [UMulticastDelegateProperty](./uassetapi.fieldtypes.umulticastdelegateproperty.md) → [UMulticastSparseDelegateProperty](./uassetapi.fieldtypes.umulticastsparsedelegateproperty.md)\r\n\r\n## Fields\r\n\r\n### **SignatureFunction**\r\n\r\n```csharp\r\npublic FPackageIndex SignatureFunction;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UMulticastSparseDelegateProperty()**\r\n\r\n```csharp\r\npublic UMulticastSparseDelegateProperty()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.unameproperty.md",
    "content": "# UNameProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UNameProperty : UProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UNameProperty](./uassetapi.fieldtypes.unameproperty.md)\r\n\r\n## Fields\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UNameProperty()**\r\n\r\n```csharp\r\npublic UNameProperty()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.unumericproperty.md",
    "content": "# UNumericProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UNumericProperty : UProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UNumericProperty](./uassetapi.fieldtypes.unumericproperty.md)\r\n\r\n## Fields\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UNumericProperty()**\r\n\r\n```csharp\r\npublic UNumericProperty()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.uobjectproperty.md",
    "content": "# UObjectProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UObjectProperty : UProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UObjectProperty](./uassetapi.fieldtypes.uobjectproperty.md)\r\n\r\n## Fields\r\n\r\n### **PropertyClass**\r\n\r\n```csharp\r\npublic FPackageIndex PropertyClass;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UObjectProperty()**\r\n\r\n```csharp\r\npublic UObjectProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.uproperty.md",
    "content": "# UProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\nAn UnrealScript variable.\r\n\r\n```csharp\r\npublic abstract class UProperty : UField\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md)\r\n\r\n## Fields\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UProperty()**\r\n\r\n```csharp\r\npublic UProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **SetObject(Object)**\r\n\r\n```csharp\r\npublic void SetObject(object value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **GetObject&lt;T&gt;()**\r\n\r\n```csharp\r\npublic T GetObject<T>()\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\n#### Returns\r\n\r\nT<br>\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n### **GetUsmapPropertyType()**\r\n\r\n```csharp\r\npublic EPropertyType GetUsmapPropertyType()\r\n```\r\n\r\n#### Returns\r\n\r\n[EPropertyType](./uassetapi.unversioned.epropertytype.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.usetproperty.md",
    "content": "# USetProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class USetProperty : UProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [USetProperty](./uassetapi.fieldtypes.usetproperty.md)\r\n\r\n## Fields\r\n\r\n### **ElementProp**\r\n\r\n```csharp\r\npublic FPackageIndex ElementProp;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **USetProperty()**\r\n\r\n```csharp\r\npublic USetProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.usoftclassproperty.md",
    "content": "# USoftClassProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class USoftClassProperty : UObjectProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UObjectProperty](./uassetapi.fieldtypes.uobjectproperty.md) → [USoftClassProperty](./uassetapi.fieldtypes.usoftclassproperty.md)\r\n\r\n## Fields\r\n\r\n### **MetaClass**\r\n\r\n```csharp\r\npublic FPackageIndex MetaClass;\r\n```\r\n\r\n### **PropertyClass**\r\n\r\n```csharp\r\npublic FPackageIndex PropertyClass;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **USoftClassProperty()**\r\n\r\n```csharp\r\npublic USoftClassProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.usoftobjectproperty.md",
    "content": "# USoftObjectProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class USoftObjectProperty : UObjectProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UObjectProperty](./uassetapi.fieldtypes.uobjectproperty.md) → [USoftObjectProperty](./uassetapi.fieldtypes.usoftobjectproperty.md)\r\n\r\n## Fields\r\n\r\n### **PropertyClass**\r\n\r\n```csharp\r\npublic FPackageIndex PropertyClass;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **USoftObjectProperty()**\r\n\r\n```csharp\r\npublic USoftObjectProperty()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.ustrproperty.md",
    "content": "# UStrProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UStrProperty : UProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UStrProperty](./uassetapi.fieldtypes.ustrproperty.md)\r\n\r\n## Fields\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UStrProperty()**\r\n\r\n```csharp\r\npublic UStrProperty()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.ustructproperty.md",
    "content": "# UStructProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UStructProperty : UProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UStructProperty](./uassetapi.fieldtypes.ustructproperty.md)\r\n\r\n## Fields\r\n\r\n### **Struct**\r\n\r\n```csharp\r\npublic FPackageIndex Struct;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UStructProperty()**\r\n\r\n```csharp\r\npublic UStructProperty()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.utextproperty.md",
    "content": "# UTextProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UTextProperty : UProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UTextProperty](./uassetapi.fieldtypes.utextproperty.md)\r\n\r\n## Fields\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UTextProperty()**\r\n\r\n```csharp\r\npublic UTextProperty()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.uuint16property.md",
    "content": "# UUInt16Property\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UUInt16Property : UNumericProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UNumericProperty](./uassetapi.fieldtypes.unumericproperty.md) → [UUInt16Property](./uassetapi.fieldtypes.uuint16property.md)\r\n\r\n## Fields\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UUInt16Property()**\r\n\r\n```csharp\r\npublic UUInt16Property()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.uuint32property.md",
    "content": "# UUInt32Property\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UUInt32Property : UNumericProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UNumericProperty](./uassetapi.fieldtypes.unumericproperty.md) → [UUInt32Property](./uassetapi.fieldtypes.uuint32property.md)\r\n\r\n## Fields\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UUInt32Property()**\r\n\r\n```csharp\r\npublic UUInt32Property()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.uuint64property.md",
    "content": "# UUInt64Property\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UUInt64Property : UNumericProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UNumericProperty](./uassetapi.fieldtypes.unumericproperty.md) → [UUInt64Property](./uassetapi.fieldtypes.uuint64property.md)\r\n\r\n## Fields\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UUInt64Property()**\r\n\r\n```csharp\r\npublic UUInt64Property()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.fieldtypes.uweakobjectproperty.md",
    "content": "# UWeakObjectProperty\r\n\r\nNamespace: UAssetAPI.FieldTypes\r\n\r\n```csharp\r\npublic class UWeakObjectProperty : UObjectProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UField](./uassetapi.fieldtypes.ufield.md) → [UProperty](./uassetapi.fieldtypes.uproperty.md) → [UObjectProperty](./uassetapi.fieldtypes.uobjectproperty.md) → [UWeakObjectProperty](./uassetapi.fieldtypes.uweakobjectproperty.md)\r\n\r\n## Fields\r\n\r\n### **PropertyClass**\r\n\r\n```csharp\r\npublic FPackageIndex PropertyClass;\r\n```\r\n\r\n### **ArrayDim**\r\n\r\n```csharp\r\npublic EArrayDim ArrayDim;\r\n```\r\n\r\n### **ElementSize**\r\n\r\n```csharp\r\npublic int ElementSize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **RepNotifyFunc**\r\n\r\n```csharp\r\npublic FName RepNotifyFunc;\r\n```\r\n\r\n### **BlueprintReplicationCondition**\r\n\r\n```csharp\r\npublic ELifetimeCondition BlueprintReplicationCondition;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n### **Next**\r\n\r\nNext Field in the linked list. Removed entirely in the custom version FFrameworkObjectVersion::RemoveUField_Next in favor of a regular array\r\n\r\n```csharp\r\npublic FPackageIndex Next;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UWeakObjectProperty()**\r\n\r\n```csharp\r\npublic UWeakObjectProperty()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.import.md",
    "content": "# Import\r\n\r\nNamespace: UAssetAPI\r\n\r\nUObject resource type for objects that are referenced by this package, but contained within another package.\r\n\r\n```csharp\r\npublic class Import\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Import](./uassetapi.import.md)\r\n\r\n## Fields\r\n\r\n### **ObjectName**\r\n\r\nThe name of the UObject represented by this resource.\r\n\r\n```csharp\r\npublic FName ObjectName;\r\n```\r\n\r\n### **OuterIndex**\r\n\r\nLocation of the resource for this resource's Outer (import/other export). 0 = this resource is a top-level UPackage\r\n\r\n```csharp\r\npublic FPackageIndex OuterIndex;\r\n```\r\n\r\n### **ClassPackage**\r\n\r\n```csharp\r\npublic FName ClassPackage;\r\n```\r\n\r\n### **ClassName**\r\n\r\n```csharp\r\npublic FName ClassName;\r\n```\r\n\r\n### **PackageName**\r\n\r\nPackage Name this import belongs to. Can be none, in that case follow the outer chain\r\n until a set PackageName is found or until OuterIndex is null\r\n\r\n```csharp\r\npublic FName PackageName;\r\n```\r\n\r\n### **bImportOptional**\r\n\r\n```csharp\r\npublic bool bImportOptional;\r\n```\r\n\r\n## Constructors\r\n\r\n### **Import(String, String, FPackageIndex, String, Boolean, UAsset)**\r\n\r\n```csharp\r\npublic Import(string classPackage, string className, FPackageIndex outerIndex, string objectName, bool importOptional, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`classPackage` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`className` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`outerIndex` [FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\n\r\n`objectName` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`importOptional` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **Import(FName, FName, FPackageIndex, FName, Boolean)**\r\n\r\n```csharp\r\npublic Import(FName classPackage, FName className, FPackageIndex outerIndex, FName objectName, bool importOptional)\r\n```\r\n\r\n#### Parameters\r\n\r\n`classPackage` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`className` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`outerIndex` [FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\n\r\n`objectName` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`importOptional` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Import(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic Import(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Import()**\r\n\r\n```csharp\r\npublic Import()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.inamemap.md",
    "content": "# INameMap\r\n\r\nNamespace: UAssetAPI\r\n\r\n```csharp\r\npublic interface INameMap\r\n```\r\n\r\n## Methods\r\n\r\n### **GetNameMapIndexList()**\r\n\r\n```csharp\r\nIReadOnlyList<FString> GetNameMapIndexList()\r\n```\r\n\r\n#### Returns\r\n\r\n[IReadOnlyList&lt;FString&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlylist-1)<br>\r\n\r\n### **ClearNameIndexList()**\r\n\r\n```csharp\r\nvoid ClearNameIndexList()\r\n```\r\n\r\n### **SetNameReference(Int32, FString)**\r\n\r\n```csharp\r\nvoid SetNameReference(int index, FString value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`value` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **GetNameReference(Int32)**\r\n\r\n```csharp\r\nFString GetNameReference(int index)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n#### Returns\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **ContainsNameReference(FString)**\r\n\r\n```csharp\r\nbool ContainsNameReference(FString search)\r\n```\r\n\r\n#### Parameters\r\n\r\n`search` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **SearchNameReference(FString)**\r\n\r\n```csharp\r\nint SearchNameReference(FString search)\r\n```\r\n\r\n#### Parameters\r\n\r\n`search` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **AddNameReference(FString, Boolean, Boolean)**\r\n\r\n```csharp\r\nint AddNameReference(FString name, bool forceAddDuplicates, bool skipFixes)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n`forceAddDuplicates` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`skipFixes` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **CanCreateDummies()**\r\n\r\n```csharp\r\nbool CanCreateDummies()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.invalidmappingsexception.md",
    "content": "# InvalidMappingsException\r\n\r\nNamespace: UAssetAPI\r\n\r\n```csharp\r\npublic class InvalidMappingsException : System.InvalidOperationException, System.Runtime.Serialization.ISerializable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Exception](https://docs.microsoft.com/en-us/dotnet/api/system.exception) → [SystemException](https://docs.microsoft.com/en-us/dotnet/api/system.systemexception) → [InvalidOperationException](https://docs.microsoft.com/en-us/dotnet/api/system.invalidoperationexception) → [InvalidMappingsException](./uassetapi.invalidmappingsexception.md)<br>\r\nImplements [ISerializable](https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.iserializable)\r\n\r\n## Properties\r\n\r\n### **TargetSite**\r\n\r\n```csharp\r\npublic MethodBase TargetSite { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[MethodBase](https://docs.microsoft.com/en-us/dotnet/api/system.reflection.methodbase)<br>\r\n\r\n### **Message**\r\n\r\n```csharp\r\npublic string Message { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **Data**\r\n\r\n```csharp\r\npublic IDictionary Data { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[IDictionary](https://docs.microsoft.com/en-us/dotnet/api/system.collections.idictionary)<br>\r\n\r\n### **InnerException**\r\n\r\n```csharp\r\npublic Exception InnerException { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Exception](https://docs.microsoft.com/en-us/dotnet/api/system.exception)<br>\r\n\r\n### **HelpLink**\r\n\r\n```csharp\r\npublic string HelpLink { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **Source**\r\n\r\n```csharp\r\npublic string Source { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **HResult**\r\n\r\n```csharp\r\npublic int HResult { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **StackTrace**\r\n\r\n```csharp\r\npublic string StackTrace { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **InvalidMappingsException(String)**\r\n\r\n```csharp\r\npublic InvalidMappingsException(string message)\r\n```\r\n\r\n#### Parameters\r\n\r\n`message` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.json.bytearrayjsonconverter.md",
    "content": "# ByteArrayJsonConverter\r\n\r\nNamespace: UAssetAPI.JSON\r\n\r\n```csharp\r\npublic class ByteArrayJsonConverter : Newtonsoft.Json.JsonConverter\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → JsonConverter → [ByteArrayJsonConverter](./uassetapi.json.bytearrayjsonconverter.md)\r\n\r\n## Properties\r\n\r\n### **CanRead**\r\n\r\n```csharp\r\npublic bool CanRead { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **CanWrite**\r\n\r\n```csharp\r\npublic bool CanWrite { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **ByteArrayJsonConverter()**\r\n\r\n```csharp\r\npublic ByteArrayJsonConverter()\r\n```\r\n\r\n## Methods\r\n\r\n### **CanConvert(Type)**\r\n\r\n```csharp\r\npublic bool CanConvert(Type objectType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`objectType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **WriteJson(JsonWriter, Object, JsonSerializer)**\r\n\r\n```csharp\r\npublic void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` JsonWriter<br>\r\n\r\n`value` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n\r\n### **ReadJson(JsonReader, Type, Object, JsonSerializer)**\r\n\r\n```csharp\r\npublic object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` JsonReader<br>\r\n\r\n`objectType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n`existingValue` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.json.fnamejsonconverter.md",
    "content": "# FNameJsonConverter\r\n\r\nNamespace: UAssetAPI.JSON\r\n\r\n```csharp\r\npublic class FNameJsonConverter : Newtonsoft.Json.JsonConverter\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → JsonConverter → [FNameJsonConverter](./uassetapi.json.fnamejsonconverter.md)\r\n\r\n## Fields\r\n\r\n### **ToBeFilled**\r\n\r\n```csharp\r\npublic Dictionary<FName, string> ToBeFilled;\r\n```\r\n\r\n### **currentI**\r\n\r\n```csharp\r\npublic int currentI;\r\n```\r\n\r\n## Properties\r\n\r\n### **CanRead**\r\n\r\n```csharp\r\npublic bool CanRead { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **CanWrite**\r\n\r\n```csharp\r\npublic bool CanWrite { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **FNameJsonConverter(Dictionary&lt;FName, String&gt;)**\r\n\r\n```csharp\r\npublic FNameJsonConverter(Dictionary<FName, string> dict)\r\n```\r\n\r\n#### Parameters\r\n\r\n`dict` [Dictionary&lt;FName, String&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2)<br>\r\n\r\n## Methods\r\n\r\n### **CanConvert(Type)**\r\n\r\n```csharp\r\npublic bool CanConvert(Type objectType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`objectType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **WriteJson(JsonWriter, Object, JsonSerializer)**\r\n\r\n```csharp\r\npublic void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` JsonWriter<br>\r\n\r\n`value` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n\r\n### **ReadJson(JsonReader, Type, Object, JsonSerializer)**\r\n\r\n```csharp\r\npublic object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` JsonReader<br>\r\n\r\n`objectType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n`existingValue` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.json.fpackageindexjsonconverter.md",
    "content": "# FPackageIndexJsonConverter\r\n\r\nNamespace: UAssetAPI.JSON\r\n\r\n```csharp\r\npublic class FPackageIndexJsonConverter : Newtonsoft.Json.JsonConverter\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → JsonConverter → [FPackageIndexJsonConverter](./uassetapi.json.fpackageindexjsonconverter.md)\r\n\r\n## Properties\r\n\r\n### **CanRead**\r\n\r\n```csharp\r\npublic bool CanRead { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **CanWrite**\r\n\r\n```csharp\r\npublic bool CanWrite { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **FPackageIndexJsonConverter()**\r\n\r\n```csharp\r\npublic FPackageIndexJsonConverter()\r\n```\r\n\r\n## Methods\r\n\r\n### **CanConvert(Type)**\r\n\r\n```csharp\r\npublic bool CanConvert(Type objectType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`objectType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **WriteJson(JsonWriter, Object, JsonSerializer)**\r\n\r\n```csharp\r\npublic void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` JsonWriter<br>\r\n\r\n`value` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n\r\n### **ReadJson(JsonReader, Type, Object, JsonSerializer)**\r\n\r\n```csharp\r\npublic object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` JsonReader<br>\r\n\r\n`objectType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n`existingValue` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.json.fsignedzerojsonconverter.md",
    "content": "# FSignedZeroJsonConverter\r\n\r\nNamespace: UAssetAPI.JSON\r\n\r\n```csharp\r\npublic class FSignedZeroJsonConverter : Newtonsoft.Json.JsonConverter\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → JsonConverter → [FSignedZeroJsonConverter](./uassetapi.json.fsignedzerojsonconverter.md)\r\n\r\n## Properties\r\n\r\n### **CanRead**\r\n\r\n```csharp\r\npublic bool CanRead { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **CanWrite**\r\n\r\n```csharp\r\npublic bool CanWrite { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **FSignedZeroJsonConverter()**\r\n\r\n```csharp\r\npublic FSignedZeroJsonConverter()\r\n```\r\n\r\n## Methods\r\n\r\n### **CanConvert(Type)**\r\n\r\n```csharp\r\npublic bool CanConvert(Type objectType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`objectType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **WriteJson(JsonWriter, Object, JsonSerializer)**\r\n\r\n```csharp\r\npublic void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` JsonWriter<br>\r\n\r\n`value` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n\r\n### **ReadJson(JsonReader, Type, Object, JsonSerializer)**\r\n\r\n```csharp\r\npublic object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` JsonReader<br>\r\n\r\n`objectType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n`existingValue` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.json.fstringjsonconverter.md",
    "content": "# FStringJsonConverter\r\n\r\nNamespace: UAssetAPI.JSON\r\n\r\n```csharp\r\npublic class FStringJsonConverter : Newtonsoft.Json.JsonConverter\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → JsonConverter → [FStringJsonConverter](./uassetapi.json.fstringjsonconverter.md)\r\n\r\n## Properties\r\n\r\n### **CanRead**\r\n\r\n```csharp\r\npublic bool CanRead { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **CanWrite**\r\n\r\n```csharp\r\npublic bool CanWrite { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **FStringJsonConverter()**\r\n\r\n```csharp\r\npublic FStringJsonConverter()\r\n```\r\n\r\n## Methods\r\n\r\n### **CanConvert(Type)**\r\n\r\n```csharp\r\npublic bool CanConvert(Type objectType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`objectType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **WriteJson(JsonWriter, Object, JsonSerializer)**\r\n\r\n```csharp\r\npublic void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` JsonWriter<br>\r\n\r\n`value` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n\r\n### **ReadJson(JsonReader, Type, Object, JsonSerializer)**\r\n\r\n```csharp\r\npublic object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` JsonReader<br>\r\n\r\n`objectType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n`existingValue` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.json.fstringtablejsonconverter.md",
    "content": "# FStringTableJsonConverter\r\n\r\nNamespace: UAssetAPI.JSON\r\n\r\n```csharp\r\npublic class FStringTableJsonConverter : Newtonsoft.Json.JsonConverter\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → JsonConverter → [FStringTableJsonConverter](./uassetapi.json.fstringtablejsonconverter.md)\r\n\r\n## Properties\r\n\r\n### **CanRead**\r\n\r\n```csharp\r\npublic bool CanRead { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **CanWrite**\r\n\r\n```csharp\r\npublic bool CanWrite { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **FStringTableJsonConverter()**\r\n\r\n```csharp\r\npublic FStringTableJsonConverter()\r\n```\r\n\r\n## Methods\r\n\r\n### **CanConvert(Type)**\r\n\r\n```csharp\r\npublic bool CanConvert(Type objectType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`objectType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **WriteJson(JsonWriter, Object, JsonSerializer)**\r\n\r\n```csharp\r\npublic void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` JsonWriter<br>\r\n\r\n`value` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n\r\n### **ReadJson(JsonReader, Type, Object, JsonSerializer)**\r\n\r\n```csharp\r\npublic object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` JsonReader<br>\r\n\r\n`objectType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n`existingValue` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.json.guidjsonconverter.md",
    "content": "# GuidJsonConverter\r\n\r\nNamespace: UAssetAPI.JSON\r\n\r\n```csharp\r\npublic class GuidJsonConverter : Newtonsoft.Json.JsonConverter\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → JsonConverter → [GuidJsonConverter](./uassetapi.json.guidjsonconverter.md)\r\n\r\n## Properties\r\n\r\n### **CanRead**\r\n\r\n```csharp\r\npublic bool CanRead { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **CanWrite**\r\n\r\n```csharp\r\npublic bool CanWrite { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **GuidJsonConverter()**\r\n\r\n```csharp\r\npublic GuidJsonConverter()\r\n```\r\n\r\n## Methods\r\n\r\n### **CanConvert(Type)**\r\n\r\n```csharp\r\npublic bool CanConvert(Type objectType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`objectType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **WriteJson(JsonWriter, Object, JsonSerializer)**\r\n\r\n```csharp\r\npublic void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` JsonWriter<br>\r\n\r\n`value` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n\r\n### **ReadJson(JsonReader, Type, Object, JsonSerializer)**\r\n\r\n```csharp\r\npublic object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` JsonReader<br>\r\n\r\n`objectType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n`existingValue` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.json.tmapjsonconverter-2.md",
    "content": "# TMapJsonConverter&lt;TKey, TValue&gt;\r\n\r\nNamespace: UAssetAPI.JSON\r\n\r\n```csharp\r\npublic class TMapJsonConverter<TKey, TValue> : Newtonsoft.Json.JsonConverter\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`TKey`<br>\r\n\r\n`TValue`<br>\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → JsonConverter → [TMapJsonConverter&lt;TKey, TValue&gt;](./uassetapi.json.tmapjsonconverter-2.md)\r\n\r\n## Properties\r\n\r\n### **CanRead**\r\n\r\n```csharp\r\npublic bool CanRead { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **CanWrite**\r\n\r\n```csharp\r\npublic bool CanWrite { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **TMapJsonConverter()**\r\n\r\n```csharp\r\npublic TMapJsonConverter()\r\n```\r\n\r\n## Methods\r\n\r\n### **CanConvert(Type)**\r\n\r\n```csharp\r\npublic bool CanConvert(Type objectType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`objectType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **WriteJson(JsonWriter, Object, JsonSerializer)**\r\n\r\n```csharp\r\npublic void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` JsonWriter<br>\r\n\r\n`value` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n\r\n### **ReadJson(JsonReader, Type, Object, JsonSerializer)**\r\n\r\n```csharp\r\npublic object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` JsonReader<br>\r\n\r\n`objectType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n`existingValue` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.json.uassetcontractresolver.md",
    "content": "# UAssetContractResolver\r\n\r\nNamespace: UAssetAPI.JSON\r\n\r\n```csharp\r\npublic class UAssetContractResolver : Newtonsoft.Json.Serialization.DefaultContractResolver, Newtonsoft.Json.Serialization.IContractResolver\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → DefaultContractResolver → [UAssetContractResolver](./uassetapi.json.uassetcontractresolver.md)<br>\r\nImplements IContractResolver\r\n\r\n## Fields\r\n\r\n### **ToBeFilled**\r\n\r\n```csharp\r\npublic Dictionary<FName, string> ToBeFilled;\r\n```\r\n\r\n## Properties\r\n\r\n### **DynamicCodeGeneration**\r\n\r\n```csharp\r\npublic bool DynamicCodeGeneration { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultMembersSearchFlags**\r\n\r\n#### Caution\r\n\r\nDefaultMembersSearchFlags is obsolete. To modify the members serialized inherit from DefaultContractResolver and override the GetSerializableMembers method instead.\r\n\r\n---\r\n\r\n```csharp\r\npublic BindingFlags DefaultMembersSearchFlags { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[BindingFlags](https://docs.microsoft.com/en-us/dotnet/api/system.reflection.bindingflags)<br>\r\n\r\n### **SerializeCompilerGeneratedMembers**\r\n\r\n```csharp\r\npublic bool SerializeCompilerGeneratedMembers { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **IgnoreSerializableInterface**\r\n\r\n```csharp\r\npublic bool IgnoreSerializableInterface { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **IgnoreSerializableAttribute**\r\n\r\n```csharp\r\npublic bool IgnoreSerializableAttribute { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **IgnoreIsSpecifiedMembers**\r\n\r\n```csharp\r\npublic bool IgnoreIsSpecifiedMembers { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **IgnoreShouldSerializeMembers**\r\n\r\n```csharp\r\npublic bool IgnoreShouldSerializeMembers { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **NamingStrategy**\r\n\r\n```csharp\r\npublic NamingStrategy NamingStrategy { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\nNamingStrategy<br>\r\n\r\n## Constructors\r\n\r\n### **UAssetContractResolver(Dictionary&lt;FName, String&gt;)**\r\n\r\n```csharp\r\npublic UAssetContractResolver(Dictionary<FName, string> toBeFilled)\r\n```\r\n\r\n#### Parameters\r\n\r\n`toBeFilled` [Dictionary&lt;FName, String&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2)<br>\r\n\r\n## Methods\r\n\r\n### **ResolveContractConverter(Type)**\r\n\r\n```csharp\r\nprotected JsonConverter ResolveContractConverter(Type objectType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`objectType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n#### Returns\r\n\r\nJsonConverter<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.eblueprinttextliteraltype.md",
    "content": "# EBlueprintTextLiteralType\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode\r\n\r\nKinds of text literals\r\n\r\n```csharp\r\npublic enum EBlueprintTextLiteralType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBlueprintTextLiteralType](./uassetapi.kismet.bytecode.eblueprinttextliteraltype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| Empty | 0 | Text is an empty string. The bytecode contains no strings, and you should use FText::GetEmpty() to initialize the FText instance. |\r\n| LocalizedText | 1 | Text is localized. The bytecode will contain three strings - source, key, and namespace - and should be loaded via FInternationalization |\r\n| InvariantText | 2 | Text is culture invariant. The bytecode will contain one string, and you should use FText::AsCultureInvariant to initialize the FText instance. |\r\n| LiteralString | 3 | Text is a literal FString. The bytecode will contain one string, and you should use FText::FromString to initialize the FText instance. |\r\n| StringTableEntry | 4 | Text is from a string table. The bytecode will contain an object pointer (not used) and two strings - the table ID, and key - and should be found via FText::FromStringTable |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.ecasttoken.md",
    "content": "# ECastToken\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode\r\n\r\n```csharp\r\npublic enum ECastToken\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECastToken](./uassetapi.kismet.bytecode.ecasttoken.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.eexprtoken.md",
    "content": "# EExprToken\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode\r\n\r\nEvaluatable expression item types.\r\n\r\n```csharp\r\npublic enum EExprToken\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| EX_LocalVariable | 0 | A local variable. |\r\n| EX_InstanceVariable | 1 | An object variable. |\r\n| EX_DefaultVariable | 2 | Default variable for a class context. |\r\n| EX_Return | 4 | Return from function. |\r\n| EX_Jump | 6 | Goto a local address in code. |\r\n| EX_JumpIfNot | 7 | Goto if not expression. |\r\n| EX_Assert | 9 | Assertion. |\r\n| EX_Nothing | 11 | No operation. |\r\n| EX_NothingInt32 | 12 | No operation with an int32 argument (useful for debugging script disassembly). |\r\n| EX_Let | 15 | Assign an arbitrary size value to a variable. |\r\n| EX_BitFieldConst | 17 | Assign to a single bit, defined by an FProperty. |\r\n| EX_ClassContext | 18 | Class default object context. |\r\n| EX_MetaCast | 19 | Metaclass cast. |\r\n| EX_LetBool | 20 | Let boolean variable. |\r\n| EX_EndParmValue | 21 | end of default value for optional function parameter |\r\n| EX_EndFunctionParms | 22 | End of function call parameters. |\r\n| EX_Self | 23 | Self object. |\r\n| EX_Skip | 24 | Skippable expression. |\r\n| EX_Context | 25 | Call a function through an object context. |\r\n| EX_Context_FailSilent | 26 | Call a function through an object context (can fail silently if the context is NULL; only generated for functions that don't have output or return values). |\r\n| EX_VirtualFunction | 27 | A function call with parameters. |\r\n| EX_FinalFunction | 28 | A prebound function call with parameters. |\r\n| EX_IntConst | 29 | Int constant. |\r\n| EX_FloatConst | 30 | Floating point constant. |\r\n| EX_StringConst | 31 | String constant. |\r\n| EX_ObjectConst | 32 | An object constant. |\r\n| EX_NameConst | 33 | A name constant. |\r\n| EX_RotationConst | 34 | A rotation constant. |\r\n| EX_VectorConst | 35 | A vector constant. |\r\n| EX_ByteConst | 36 | A byte constant. |\r\n| EX_IntZero | 37 | Zero. |\r\n| EX_IntOne | 38 | One. |\r\n| EX_True | 39 | Bool True. |\r\n| EX_False | 40 | Bool False. |\r\n| EX_TextConst | 41 | FText constant |\r\n| EX_NoObject | 42 | NoObject. |\r\n| EX_TransformConst | 43 | A transform constant |\r\n| EX_IntConstByte | 44 | Int constant that requires 1 byte. |\r\n| EX_NoInterface | 45 | A null interface (similar to EX_NoObject, but for interfaces) |\r\n| EX_DynamicCast | 46 | Safe dynamic class casting. |\r\n| EX_StructConst | 47 | An arbitrary UStruct constant |\r\n| EX_EndStructConst | 48 | End of UStruct constant |\r\n| EX_SetArray | 49 | Set the value of arbitrary array |\r\n| EX_PropertyConst | 51 | FProperty constant. |\r\n| EX_UnicodeStringConst | 52 | Unicode string constant. |\r\n| EX_Int64Const | 53 | 64-bit integer constant. |\r\n| EX_UInt64Const | 54 | 64-bit unsigned integer constant. |\r\n| EX_DoubleConst | 55 | Double-precision floating point constant. |\r\n| EX_PrimitiveCast | 56 | A casting operator for primitives which reads the type as the subsequent byte |\r\n| EX_Vector3fConst | 65 | A float vector constant. |\r\n| EX_StructMemberContext | 66 | Context expression to address a property within a struct |\r\n| EX_LetMulticastDelegate | 67 | Assignment to a multi-cast delegate |\r\n| EX_LetDelegate | 68 | Assignment to a delegate |\r\n| EX_LocalVirtualFunction | 69 | Special instructions to quickly call a virtual function that we know is going to run only locally |\r\n| EX_LocalFinalFunction | 70 | Special instructions to quickly call a final function that we know is going to run only locally |\r\n| EX_LocalOutVariable | 72 | local out (pass by reference) function parameter |\r\n| EX_InstanceDelegate | 75 | const reference to a delegate or normal function object |\r\n| EX_PushExecutionFlow | 76 | push an address on to the execution flow stack for future execution when a EX_PopExecutionFlow is executed. Execution continues on normally and doesn't change to the pushed address. |\r\n| EX_PopExecutionFlow | 77 | continue execution at the last address previously pushed onto the execution flow stack. |\r\n| EX_ComputedJump | 78 | Goto a local address in code, specified by an integer value. |\r\n| EX_PopExecutionFlowIfNot | 79 | continue execution at the last address previously pushed onto the execution flow stack, if the condition is not true. |\r\n| EX_Breakpoint | 80 | Breakpoint. Only observed in the editor, otherwise it behaves like EX_Nothing. |\r\n| EX_InterfaceContext | 81 | Call a function through a native interface variable |\r\n| EX_ObjToInterfaceCast | 82 | Converting an object reference to native interface variable |\r\n| EX_EndOfScript | 83 | Last byte in script code |\r\n| EX_CrossInterfaceCast | 84 | Converting an interface variable reference to native interface variable |\r\n| EX_InterfaceToObjCast | 85 | Converting an interface variable reference to an object |\r\n| EX_WireTracepoint | 90 | Trace point. Only observed in the editor, otherwise it behaves like EX_Nothing. |\r\n| EX_SkipOffsetConst | 91 | A CodeSizeSkipOffset constant |\r\n| EX_AddMulticastDelegate | 92 | Adds a delegate to a multicast delegate's targets |\r\n| EX_ClearMulticastDelegate | 93 | Clears all delegates in a multicast target |\r\n| EX_Tracepoint | 94 | Trace point. Only observed in the editor, otherwise it behaves like EX_Nothing. |\r\n| EX_LetObj | 95 | assign to any object ref pointer |\r\n| EX_LetWeakObjPtr | 96 | assign to a weak object pointer |\r\n| EX_BindDelegate | 97 | bind object and name to delegate |\r\n| EX_RemoveMulticastDelegate | 98 | Remove a delegate from a multicast delegate's targets |\r\n| EX_CallMulticastDelegate | 99 | Call multicast delegate |\r\n| EX_CallMath | 104 | static pure function from on local call space |\r\n| EX_InstrumentationEvent | 106 | Instrumentation event |\r\n| EX_ClassSparseDataVariable | 108 | Sparse data variable |\r\n| EX_AutoRtfmTransact | 112 | AutoRTFM: run following code in a transaction |\r\n| EX_AutoRtfmStopTransact | 113 | AutoRTFM: if in a transaction, abort or break, otherwise no operation |\r\n| EX_AutoRtfmAbortIfNot | 114 | AutoRTFM: evaluate bool condition, abort transaction on false |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.escriptinstrumentationtype.md",
    "content": "# EScriptInstrumentationType\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode\r\n\r\n```csharp\r\npublic enum EScriptInstrumentationType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EScriptInstrumentationType](./uassetapi.kismet.bytecode.escriptinstrumentationtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_addmulticastdelegate.md",
    "content": "# EX_AddMulticastDelegate\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_AddMulticastDelegate](./uassetapi.kismet.bytecode.eexprtoken.md#ex_addmulticastdelegate) instruction.\r\n\r\n```csharp\r\npublic class EX_AddMulticastDelegate : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_AddMulticastDelegate](./uassetapi.kismet.bytecode.expressions.ex_addmulticastdelegate.md)\r\n\r\n## Fields\r\n\r\n### **Delegate**\r\n\r\nDelegate property to assign to.\r\n\r\n```csharp\r\npublic KismetExpression Delegate;\r\n```\r\n\r\n### **DelegateToAdd**\r\n\r\nDelegate to add to the MC delegate for broadcast.\r\n\r\n```csharp\r\npublic KismetExpression DelegateToAdd;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_AddMulticastDelegate()**\r\n\r\n```csharp\r\npublic EX_AddMulticastDelegate()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_arrayconst.md",
    "content": "# EX_ArrayConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_ArrayConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_arrayconst) instruction.\r\n\r\n```csharp\r\npublic class EX_ArrayConst : UAssetAPI.Kismet.Bytecode.KismetExpression`1[[UAssetAPI.Kismet.Bytecode.KismetExpression[]]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [KismetExpression&lt;KismetExpression[]&gt;](./uassetapi.kismet.bytecode.kismetexpression-1.md) → [EX_ArrayConst](./uassetapi.kismet.bytecode.expressions.ex_arrayconst.md)\r\n\r\n## Fields\r\n\r\n### **InnerProperty**\r\n\r\nPointer to this constant's inner property (FProperty*).\r\n\r\n```csharp\r\npublic KismetPropertyPointer InnerProperty;\r\n```\r\n\r\n### **Elements**\r\n\r\nArray constant entries.\r\n\r\n```csharp\r\npublic KismetExpression[] Elements;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Value**\r\n\r\nThe value of this expression if it is a constant.\r\n\r\n```csharp\r\npublic KismetExpression[] Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[KismetExpression[]](./uassetapi.kismet.bytecode.kismetexpression.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_ArrayConst()**\r\n\r\n```csharp\r\npublic EX_ArrayConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_arraygetbyref.md",
    "content": "# EX_ArrayGetByRef\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_ArrayGetByRef](./uassetapi.kismet.bytecode.eexprtoken.md#ex_arraygetbyref) instruction.\r\n\r\n```csharp\r\npublic class EX_ArrayGetByRef : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_ArrayGetByRef](./uassetapi.kismet.bytecode.expressions.ex_arraygetbyref.md)\r\n\r\n## Fields\r\n\r\n### **ArrayVariable**\r\n\r\nThe array variable.\r\n\r\n```csharp\r\npublic KismetExpression ArrayVariable;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe index to access in the array.\r\n\r\n```csharp\r\npublic KismetExpression ArrayIndex;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_ArrayGetByRef()**\r\n\r\n```csharp\r\npublic EX_ArrayGetByRef()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_assert.md",
    "content": "# EX_Assert\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_Assert](./uassetapi.kismet.bytecode.eexprtoken.md#ex_assert) instruction.\r\n\r\n```csharp\r\npublic class EX_Assert : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_Assert](./uassetapi.kismet.bytecode.expressions.ex_assert.md)\r\n\r\n## Fields\r\n\r\n### **LineNumber**\r\n\r\nLine number.\r\n\r\n```csharp\r\npublic ushort LineNumber;\r\n```\r\n\r\n### **DebugMode**\r\n\r\nWhether or not this assertion is in debug mode.\r\n\r\n```csharp\r\npublic bool DebugMode;\r\n```\r\n\r\n### **AssertExpression**\r\n\r\nExpression to assert.\r\n\r\n```csharp\r\npublic KismetExpression AssertExpression;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_Assert()**\r\n\r\n```csharp\r\npublic EX_Assert()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_binddelegate.md",
    "content": "# EX_BindDelegate\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_BindDelegate](./uassetapi.kismet.bytecode.eexprtoken.md#ex_binddelegate) instruction.\r\n\r\n```csharp\r\npublic class EX_BindDelegate : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_BindDelegate](./uassetapi.kismet.bytecode.expressions.ex_binddelegate.md)\r\n\r\n## Fields\r\n\r\n### **FunctionName**\r\n\r\nThe name of the function assigned to the delegate.\r\n\r\n```csharp\r\npublic FName FunctionName;\r\n```\r\n\r\n### **Delegate**\r\n\r\nDelegate property to assign to.\r\n\r\n```csharp\r\npublic KismetExpression Delegate;\r\n```\r\n\r\n### **ObjectTerm**\r\n\r\nObject to bind.\r\n\r\n```csharp\r\npublic KismetExpression ObjectTerm;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_BindDelegate()**\r\n\r\n```csharp\r\npublic EX_BindDelegate()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_bitfieldconst.md",
    "content": "# EX_BitFieldConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_BitFieldConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_bitfieldconst) instruction.\r\n Assigns to a single bit, defined by an FProperty.\r\n\r\n```csharp\r\npublic class EX_BitFieldConst : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_BitFieldConst](./uassetapi.kismet.bytecode.expressions.ex_bitfieldconst.md)\r\n\r\n## Fields\r\n\r\n### **Property**\r\n\r\nA pointer to the bit property.\r\n\r\n```csharp\r\npublic KismetPropertyPointer Property;\r\n```\r\n\r\n### **Value**\r\n\r\nThe bit value.\r\n\r\n```csharp\r\npublic byte Value;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_BitFieldConst()**\r\n\r\n```csharp\r\npublic EX_BitFieldConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_breakpoint.md",
    "content": "# EX_Breakpoint\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_Breakpoint](./uassetapi.kismet.bytecode.eexprtoken.md#ex_breakpoint) instruction.\r\n\r\n```csharp\r\npublic class EX_Breakpoint : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_Breakpoint](./uassetapi.kismet.bytecode.expressions.ex_breakpoint.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_Breakpoint()**\r\n\r\n```csharp\r\npublic EX_Breakpoint()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_byteconst.md",
    "content": "# EX_ByteConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_ByteConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_byteconst) instruction.\r\n\r\n```csharp\r\npublic class EX_ByteConst : UAssetAPI.Kismet.Bytecode.KismetExpression`1[[System.Byte]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [KismetExpression&lt;Byte&gt;](./uassetapi.kismet.bytecode.kismetexpression-1.md) → [EX_ByteConst](./uassetapi.kismet.bytecode.expressions.ex_byteconst.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Value**\r\n\r\nThe value of this expression if it is a constant.\r\n\r\n```csharp\r\npublic byte Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Byte](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_ByteConst()**\r\n\r\n```csharp\r\npublic EX_ByteConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_callmath.md",
    "content": "# EX_CallMath\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_CallMath](./uassetapi.kismet.bytecode.eexprtoken.md#ex_callmath) instruction.\r\n\r\n```csharp\r\npublic class EX_CallMath : EX_FinalFunction\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_FinalFunction](./uassetapi.kismet.bytecode.expressions.ex_finalfunction.md) → [EX_CallMath](./uassetapi.kismet.bytecode.expressions.ex_callmath.md)\r\n\r\n## Fields\r\n\r\n### **StackNode**\r\n\r\nStack node.\r\n\r\n```csharp\r\npublic FPackageIndex StackNode;\r\n```\r\n\r\n### **Parameters**\r\n\r\nList of parameters for this function.\r\n\r\n```csharp\r\npublic KismetExpression[] Parameters;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_CallMath()**\r\n\r\n```csharp\r\npublic EX_CallMath()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_callmulticastdelegate.md",
    "content": "# EX_CallMulticastDelegate\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_CallMulticastDelegate](./uassetapi.kismet.bytecode.eexprtoken.md#ex_callmulticastdelegate) instruction.\r\n\r\n```csharp\r\npublic class EX_CallMulticastDelegate : EX_FinalFunction\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_FinalFunction](./uassetapi.kismet.bytecode.expressions.ex_finalfunction.md) → [EX_CallMulticastDelegate](./uassetapi.kismet.bytecode.expressions.ex_callmulticastdelegate.md)\r\n\r\n## Fields\r\n\r\n### **Delegate**\r\n\r\nDelegate property.\r\n\r\n```csharp\r\npublic KismetExpression Delegate;\r\n```\r\n\r\n### **StackNode**\r\n\r\nStack node.\r\n\r\n```csharp\r\npublic FPackageIndex StackNode;\r\n```\r\n\r\n### **Parameters**\r\n\r\nList of parameters for this function.\r\n\r\n```csharp\r\npublic KismetExpression[] Parameters;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_CallMulticastDelegate()**\r\n\r\n```csharp\r\npublic EX_CallMulticastDelegate()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_castbase.md",
    "content": "# EX_CastBase\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nBase class for several type cast expressions\r\n\r\n```csharp\r\npublic abstract class EX_CastBase : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_CastBase](./uassetapi.kismet.bytecode.expressions.ex_castbase.md)\r\n\r\n## Fields\r\n\r\n### **ClassPtr**\r\n\r\nThe interface class to convert to.\r\n\r\n```csharp\r\npublic FPackageIndex ClassPtr;\r\n```\r\n\r\n### **Target**\r\n\r\nThe target of this expression.\r\n\r\n```csharp\r\npublic KismetExpression Target;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_classcontext.md",
    "content": "# EX_ClassContext\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_ClassContext](./uassetapi.kismet.bytecode.eexprtoken.md#ex_classcontext) instruction.\r\n\r\n```csharp\r\npublic class EX_ClassContext : EX_Context\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_Context](./uassetapi.kismet.bytecode.expressions.ex_context.md) → [EX_ClassContext](./uassetapi.kismet.bytecode.expressions.ex_classcontext.md)\r\n\r\n## Fields\r\n\r\n### **ObjectExpression**\r\n\r\nObject expression.\r\n\r\n```csharp\r\npublic KismetExpression ObjectExpression;\r\n```\r\n\r\n### **Offset**\r\n\r\nCode offset for NULL expressions.\r\n\r\n```csharp\r\npublic uint Offset;\r\n```\r\n\r\n### **PropertyType**\r\n\r\nOld property type.\r\n\r\n```csharp\r\npublic byte PropertyType;\r\n```\r\n\r\n### **RValuePointer**\r\n\r\nProperty corresponding to the r-value data, in case the l-value needs to be mem-zero'd. FField*\r\n\r\n```csharp\r\npublic KismetPropertyPointer RValuePointer;\r\n```\r\n\r\n### **ContextExpression**\r\n\r\nContext expression.\r\n\r\n```csharp\r\npublic KismetExpression ContextExpression;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_ClassContext()**\r\n\r\n```csharp\r\npublic EX_ClassContext()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_classsparsedatavariable.md",
    "content": "# EX_ClassSparseDataVariable\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_ClassSparseDataVariable](./uassetapi.kismet.bytecode.eexprtoken.md#ex_classsparsedatavariable) instruction.\r\n\r\n```csharp\r\npublic class EX_ClassSparseDataVariable : EX_VariableBase\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_VariableBase](./uassetapi.kismet.bytecode.expressions.ex_variablebase.md) → [EX_ClassSparseDataVariable](./uassetapi.kismet.bytecode.expressions.ex_classsparsedatavariable.md)\r\n\r\n## Fields\r\n\r\n### **Variable**\r\n\r\nA pointer to the variable in question.\r\n\r\n```csharp\r\npublic KismetPropertyPointer Variable;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_ClassSparseDataVariable()**\r\n\r\n```csharp\r\npublic EX_ClassSparseDataVariable()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_clearmulticastdelegate.md",
    "content": "# EX_ClearMulticastDelegate\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_ClearMulticastDelegate](./uassetapi.kismet.bytecode.eexprtoken.md#ex_clearmulticastdelegate) instruction.\r\n\r\n```csharp\r\npublic class EX_ClearMulticastDelegate : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_ClearMulticastDelegate](./uassetapi.kismet.bytecode.expressions.ex_clearmulticastdelegate.md)\r\n\r\n## Fields\r\n\r\n### **DelegateToClear**\r\n\r\nDelegate property to clear.\r\n\r\n```csharp\r\npublic KismetExpression DelegateToClear;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_ClearMulticastDelegate()**\r\n\r\n```csharp\r\npublic EX_ClearMulticastDelegate()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_computedjump.md",
    "content": "# EX_ComputedJump\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_ComputedJump](./uassetapi.kismet.bytecode.eexprtoken.md#ex_computedjump) instruction.\r\n\r\n```csharp\r\npublic class EX_ComputedJump : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_ComputedJump](./uassetapi.kismet.bytecode.expressions.ex_computedjump.md)\r\n\r\n## Fields\r\n\r\n### **CodeOffsetExpression**\r\n\r\nAn integer expression corresponding to the offset to jump to.\r\n\r\n```csharp\r\npublic KismetExpression CodeOffsetExpression;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_ComputedJump()**\r\n\r\n```csharp\r\npublic EX_ComputedJump()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_context.md",
    "content": "# EX_Context\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_Context](./uassetapi.kismet.bytecode.eexprtoken.md#ex_context) instruction.\r\n\r\n```csharp\r\npublic class EX_Context : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_Context](./uassetapi.kismet.bytecode.expressions.ex_context.md)\r\n\r\n## Fields\r\n\r\n### **ObjectExpression**\r\n\r\nObject expression.\r\n\r\n```csharp\r\npublic KismetExpression ObjectExpression;\r\n```\r\n\r\n### **Offset**\r\n\r\nCode offset for NULL expressions.\r\n\r\n```csharp\r\npublic uint Offset;\r\n```\r\n\r\n### **PropertyType**\r\n\r\nOld property type.\r\n\r\n```csharp\r\npublic byte PropertyType;\r\n```\r\n\r\n### **RValuePointer**\r\n\r\nProperty corresponding to the r-value data, in case the l-value needs to be mem-zero'd. FField*\r\n\r\n```csharp\r\npublic KismetPropertyPointer RValuePointer;\r\n```\r\n\r\n### **ContextExpression**\r\n\r\nContext expression.\r\n\r\n```csharp\r\npublic KismetExpression ContextExpression;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_Context()**\r\n\r\n```csharp\r\npublic EX_Context()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_context_failsilent.md",
    "content": "# EX_Context_FailSilent\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_Context_FailSilent](./uassetapi.kismet.bytecode.eexprtoken.md#ex_context_failsilent) instruction.\r\n\r\n```csharp\r\npublic class EX_Context_FailSilent : EX_Context\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_Context](./uassetapi.kismet.bytecode.expressions.ex_context.md) → [EX_Context_FailSilent](./uassetapi.kismet.bytecode.expressions.ex_context_failsilent.md)\r\n\r\n## Fields\r\n\r\n### **ObjectExpression**\r\n\r\nObject expression.\r\n\r\n```csharp\r\npublic KismetExpression ObjectExpression;\r\n```\r\n\r\n### **Offset**\r\n\r\nCode offset for NULL expressions.\r\n\r\n```csharp\r\npublic uint Offset;\r\n```\r\n\r\n### **PropertyType**\r\n\r\nOld property type.\r\n\r\n```csharp\r\npublic byte PropertyType;\r\n```\r\n\r\n### **RValuePointer**\r\n\r\nProperty corresponding to the r-value data, in case the l-value needs to be mem-zero'd. FField*\r\n\r\n```csharp\r\npublic KismetPropertyPointer RValuePointer;\r\n```\r\n\r\n### **ContextExpression**\r\n\r\nContext expression.\r\n\r\n```csharp\r\npublic KismetExpression ContextExpression;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_Context_FailSilent()**\r\n\r\n```csharp\r\npublic EX_Context_FailSilent()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_crossinterfacecast.md",
    "content": "# EX_CrossInterfaceCast\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_CrossInterfaceCast](./uassetapi.kismet.bytecode.eexprtoken.md#ex_crossinterfacecast) instruction.\r\n\r\n```csharp\r\npublic class EX_CrossInterfaceCast : EX_CastBase\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_CastBase](./uassetapi.kismet.bytecode.expressions.ex_castbase.md) → [EX_CrossInterfaceCast](./uassetapi.kismet.bytecode.expressions.ex_crossinterfacecast.md)\r\n\r\n## Fields\r\n\r\n### **ClassPtr**\r\n\r\nThe interface class to convert to.\r\n\r\n```csharp\r\npublic FPackageIndex ClassPtr;\r\n```\r\n\r\n### **Target**\r\n\r\nThe target of this expression.\r\n\r\n```csharp\r\npublic KismetExpression Target;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_CrossInterfaceCast()**\r\n\r\n```csharp\r\npublic EX_CrossInterfaceCast()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_defaultvariable.md",
    "content": "# EX_DefaultVariable\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_DefaultVariable](./uassetapi.kismet.bytecode.eexprtoken.md#ex_defaultvariable) instruction.\r\n\r\n```csharp\r\npublic class EX_DefaultVariable : EX_VariableBase\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_VariableBase](./uassetapi.kismet.bytecode.expressions.ex_variablebase.md) → [EX_DefaultVariable](./uassetapi.kismet.bytecode.expressions.ex_defaultvariable.md)\r\n\r\n## Fields\r\n\r\n### **Variable**\r\n\r\nA pointer to the variable in question.\r\n\r\n```csharp\r\npublic KismetPropertyPointer Variable;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_DefaultVariable()**\r\n\r\n```csharp\r\npublic EX_DefaultVariable()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_deprecatedop4a.md",
    "content": "# EX_DeprecatedOp4A\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_DeprecatedOp4A](./uassetapi.kismet.bytecode.eexprtoken.md#ex_deprecatedop4a) instruction.\r\n\r\n```csharp\r\npublic class EX_DeprecatedOp4A : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_DeprecatedOp4A](./uassetapi.kismet.bytecode.expressions.ex_deprecatedop4a.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_DeprecatedOp4A()**\r\n\r\n```csharp\r\npublic EX_DeprecatedOp4A()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_doubleconst.md",
    "content": "# EX_DoubleConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_DoubleConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_doubleconst) instruction.\r\n\r\n```csharp\r\npublic class EX_DoubleConst : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_DoubleConst](./uassetapi.kismet.bytecode.expressions.ex_doubleconst.md)\r\n\r\n## Fields\r\n\r\n### **Value**\r\n\r\nThe value of this double constant expression.\r\n\r\n```csharp\r\npublic double Value;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_DoubleConst()**\r\n\r\n```csharp\r\npublic EX_DoubleConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_dynamiccast.md",
    "content": "# EX_DynamicCast\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_DynamicCast](./uassetapi.kismet.bytecode.eexprtoken.md#ex_dynamiccast) instruction.\r\n\r\n```csharp\r\npublic class EX_DynamicCast : EX_CastBase\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_CastBase](./uassetapi.kismet.bytecode.expressions.ex_castbase.md) → [EX_DynamicCast](./uassetapi.kismet.bytecode.expressions.ex_dynamiccast.md)\r\n\r\n## Fields\r\n\r\n### **ClassPtr**\r\n\r\nThe interface class to convert to.\r\n\r\n```csharp\r\npublic FPackageIndex ClassPtr;\r\n```\r\n\r\n### **Target**\r\n\r\nThe target of this expression.\r\n\r\n```csharp\r\npublic KismetExpression Target;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_DynamicCast()**\r\n\r\n```csharp\r\npublic EX_DynamicCast()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_endarray.md",
    "content": "# EX_EndArray\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_EndArray](./uassetapi.kismet.bytecode.eexprtoken.md#ex_endarray) instruction.\r\n\r\n```csharp\r\npublic class EX_EndArray : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_EndArray](./uassetapi.kismet.bytecode.expressions.ex_endarray.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_EndArray()**\r\n\r\n```csharp\r\npublic EX_EndArray()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_endarrayconst.md",
    "content": "# EX_EndArrayConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_EndArrayConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_endarrayconst) instruction.\r\n\r\n```csharp\r\npublic class EX_EndArrayConst : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_EndArrayConst](./uassetapi.kismet.bytecode.expressions.ex_endarrayconst.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_EndArrayConst()**\r\n\r\n```csharp\r\npublic EX_EndArrayConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_endfunctionparms.md",
    "content": "# EX_EndFunctionParms\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_EndFunctionParms](./uassetapi.kismet.bytecode.eexprtoken.md#ex_endfunctionparms) instruction.\r\n\r\n```csharp\r\npublic class EX_EndFunctionParms : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_EndFunctionParms](./uassetapi.kismet.bytecode.expressions.ex_endfunctionparms.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_EndFunctionParms()**\r\n\r\n```csharp\r\npublic EX_EndFunctionParms()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_endmap.md",
    "content": "# EX_EndMap\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_EndMap](./uassetapi.kismet.bytecode.eexprtoken.md#ex_endmap) instruction.\r\n\r\n```csharp\r\npublic class EX_EndMap : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_EndMap](./uassetapi.kismet.bytecode.expressions.ex_endmap.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_EndMap()**\r\n\r\n```csharp\r\npublic EX_EndMap()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_endmapconst.md",
    "content": "# EX_EndMapConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_EndMapConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_endmapconst) instruction.\r\n\r\n```csharp\r\npublic class EX_EndMapConst : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_EndMapConst](./uassetapi.kismet.bytecode.expressions.ex_endmapconst.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_EndMapConst()**\r\n\r\n```csharp\r\npublic EX_EndMapConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_endofscript.md",
    "content": "# EX_EndOfScript\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_EndOfScript](./uassetapi.kismet.bytecode.eexprtoken.md#ex_endofscript) instruction.\r\n\r\n```csharp\r\npublic class EX_EndOfScript : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_EndOfScript](./uassetapi.kismet.bytecode.expressions.ex_endofscript.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_EndOfScript()**\r\n\r\n```csharp\r\npublic EX_EndOfScript()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_endparmvalue.md",
    "content": "# EX_EndParmValue\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_EndParmValue](./uassetapi.kismet.bytecode.eexprtoken.md#ex_endparmvalue) instruction.\r\n\r\n```csharp\r\npublic class EX_EndParmValue : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_EndParmValue](./uassetapi.kismet.bytecode.expressions.ex_endparmvalue.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_EndParmValue()**\r\n\r\n```csharp\r\npublic EX_EndParmValue()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_endset.md",
    "content": "# EX_EndSet\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_EndSet](./uassetapi.kismet.bytecode.eexprtoken.md#ex_endset) instruction.\r\n\r\n```csharp\r\npublic class EX_EndSet : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_EndSet](./uassetapi.kismet.bytecode.expressions.ex_endset.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_EndSet()**\r\n\r\n```csharp\r\npublic EX_EndSet()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_endsetconst.md",
    "content": "# EX_EndSetConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_EndSetConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_endsetconst) instruction.\r\n\r\n```csharp\r\npublic class EX_EndSetConst : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_EndSetConst](./uassetapi.kismet.bytecode.expressions.ex_endsetconst.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_EndSetConst()**\r\n\r\n```csharp\r\npublic EX_EndSetConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_endstructconst.md",
    "content": "# EX_EndStructConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_EndStructConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_endstructconst) instruction.\r\n\r\n```csharp\r\npublic class EX_EndStructConst : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_EndStructConst](./uassetapi.kismet.bytecode.expressions.ex_endstructconst.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_EndStructConst()**\r\n\r\n```csharp\r\npublic EX_EndStructConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_false.md",
    "content": "# EX_False\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_False](./uassetapi.kismet.bytecode.eexprtoken.md#ex_false) instruction.\r\n\r\n```csharp\r\npublic class EX_False : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_False](./uassetapi.kismet.bytecode.expressions.ex_false.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_False()**\r\n\r\n```csharp\r\npublic EX_False()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_fieldpathconst.md",
    "content": "# EX_FieldPathConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_FieldPathConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_fieldpathconst) instruction.\r\n\r\n```csharp\r\npublic class EX_FieldPathConst : UAssetAPI.Kismet.Bytecode.KismetExpression`1[[UAssetAPI.Kismet.Bytecode.KismetExpression]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [KismetExpression&lt;KismetExpression&gt;](./uassetapi.kismet.bytecode.kismetexpression-1.md) → [EX_FieldPathConst](./uassetapi.kismet.bytecode.expressions.ex_fieldpathconst.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Value**\r\n\r\nThe value of this expression if it is a constant.\r\n\r\n```csharp\r\npublic KismetExpression Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_FieldPathConst()**\r\n\r\n```csharp\r\npublic EX_FieldPathConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_finalfunction.md",
    "content": "# EX_FinalFunction\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_FinalFunction](./uassetapi.kismet.bytecode.eexprtoken.md#ex_finalfunction) instruction.\r\n\r\n```csharp\r\npublic class EX_FinalFunction : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_FinalFunction](./uassetapi.kismet.bytecode.expressions.ex_finalfunction.md)\r\n\r\n## Fields\r\n\r\n### **StackNode**\r\n\r\nStack node.\r\n\r\n```csharp\r\npublic FPackageIndex StackNode;\r\n```\r\n\r\n### **Parameters**\r\n\r\nList of parameters for this function.\r\n\r\n```csharp\r\npublic KismetExpression[] Parameters;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_FinalFunction()**\r\n\r\n```csharp\r\npublic EX_FinalFunction()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_floatconst.md",
    "content": "# EX_FloatConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_FloatConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_floatconst) instruction.\r\n\r\n```csharp\r\npublic class EX_FloatConst : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_FloatConst](./uassetapi.kismet.bytecode.expressions.ex_floatconst.md)\r\n\r\n## Fields\r\n\r\n### **Value**\r\n\r\nThe value of this float constant expression.\r\n\r\n```csharp\r\npublic float Value;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_FloatConst()**\r\n\r\n```csharp\r\npublic EX_FloatConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_instancedelegate.md",
    "content": "# EX_InstanceDelegate\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_InstanceDelegate](./uassetapi.kismet.bytecode.eexprtoken.md#ex_instancedelegate) instruction.\r\n\r\n```csharp\r\npublic class EX_InstanceDelegate : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_InstanceDelegate](./uassetapi.kismet.bytecode.expressions.ex_instancedelegate.md)\r\n\r\n## Fields\r\n\r\n### **FunctionName**\r\n\r\nThe name of the function assigned to the delegate.\r\n\r\n```csharp\r\npublic FName FunctionName;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_InstanceDelegate()**\r\n\r\n```csharp\r\npublic EX_InstanceDelegate()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_instancevariable.md",
    "content": "# EX_InstanceVariable\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_InstanceVariable](./uassetapi.kismet.bytecode.eexprtoken.md#ex_instancevariable) instruction.\r\n\r\n```csharp\r\npublic class EX_InstanceVariable : EX_VariableBase\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_VariableBase](./uassetapi.kismet.bytecode.expressions.ex_variablebase.md) → [EX_InstanceVariable](./uassetapi.kismet.bytecode.expressions.ex_instancevariable.md)\r\n\r\n## Fields\r\n\r\n### **Variable**\r\n\r\nA pointer to the variable in question.\r\n\r\n```csharp\r\npublic KismetPropertyPointer Variable;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_InstanceVariable()**\r\n\r\n```csharp\r\npublic EX_InstanceVariable()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_instrumentationevent.md",
    "content": "# EX_InstrumentationEvent\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_InstrumentationEvent](./uassetapi.kismet.bytecode.eexprtoken.md#ex_instrumentationevent) instruction.\r\n\r\n```csharp\r\npublic class EX_InstrumentationEvent : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_InstrumentationEvent](./uassetapi.kismet.bytecode.expressions.ex_instrumentationevent.md)\r\n\r\n## Fields\r\n\r\n### **EventType**\r\n\r\n```csharp\r\npublic EScriptInstrumentationType EventType;\r\n```\r\n\r\n### **EventName**\r\n\r\n```csharp\r\npublic FName EventName;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_InstrumentationEvent()**\r\n\r\n```csharp\r\npublic EX_InstrumentationEvent()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_int64const.md",
    "content": "# EX_Int64Const\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_Int64Const](./uassetapi.kismet.bytecode.eexprtoken.md#ex_int64const) instruction.\r\n\r\n```csharp\r\npublic class EX_Int64Const : UAssetAPI.Kismet.Bytecode.KismetExpression`1[[System.Int64]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [KismetExpression&lt;Int64&gt;](./uassetapi.kismet.bytecode.kismetexpression-1.md) → [EX_Int64Const](./uassetapi.kismet.bytecode.expressions.ex_int64const.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Value**\r\n\r\nThe value of this expression if it is a constant.\r\n\r\n```csharp\r\npublic long Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_Int64Const()**\r\n\r\n```csharp\r\npublic EX_Int64Const()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_intconst.md",
    "content": "# EX_IntConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_IntConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_intconst) instruction.\r\n\r\n```csharp\r\npublic class EX_IntConst : UAssetAPI.Kismet.Bytecode.KismetExpression`1[[System.Int32]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [KismetExpression&lt;Int32&gt;](./uassetapi.kismet.bytecode.kismetexpression-1.md) → [EX_IntConst](./uassetapi.kismet.bytecode.expressions.ex_intconst.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Value**\r\n\r\nThe value of this expression if it is a constant.\r\n\r\n```csharp\r\npublic int Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_IntConst()**\r\n\r\n```csharp\r\npublic EX_IntConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_intconstbyte.md",
    "content": "# EX_IntConstByte\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_IntConstByte](./uassetapi.kismet.bytecode.eexprtoken.md#ex_intconstbyte) instruction.\r\n\r\n```csharp\r\npublic class EX_IntConstByte : UAssetAPI.Kismet.Bytecode.KismetExpression`1[[System.Byte]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [KismetExpression&lt;Byte&gt;](./uassetapi.kismet.bytecode.kismetexpression-1.md) → [EX_IntConstByte](./uassetapi.kismet.bytecode.expressions.ex_intconstbyte.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Value**\r\n\r\nThe value of this expression if it is a constant.\r\n\r\n```csharp\r\npublic byte Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Byte](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_IntConstByte()**\r\n\r\n```csharp\r\npublic EX_IntConstByte()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_interfacecontext.md",
    "content": "# EX_InterfaceContext\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_InterfaceContext](./uassetapi.kismet.bytecode.eexprtoken.md#ex_interfacecontext) instruction.\r\n\r\n```csharp\r\npublic class EX_InterfaceContext : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_InterfaceContext](./uassetapi.kismet.bytecode.expressions.ex_interfacecontext.md)\r\n\r\n## Fields\r\n\r\n### **InterfaceValue**\r\n\r\nInterface value.\r\n\r\n```csharp\r\npublic KismetExpression InterfaceValue;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_InterfaceContext()**\r\n\r\n```csharp\r\npublic EX_InterfaceContext()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_interfacetoobjcast.md",
    "content": "# EX_InterfaceToObjCast\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_InterfaceToObjCast](./uassetapi.kismet.bytecode.eexprtoken.md#ex_interfacetoobjcast) instruction.\r\n\r\n```csharp\r\npublic class EX_InterfaceToObjCast : EX_CastBase\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_CastBase](./uassetapi.kismet.bytecode.expressions.ex_castbase.md) → [EX_InterfaceToObjCast](./uassetapi.kismet.bytecode.expressions.ex_interfacetoobjcast.md)\r\n\r\n## Fields\r\n\r\n### **ClassPtr**\r\n\r\nThe interface class to convert to.\r\n\r\n```csharp\r\npublic FPackageIndex ClassPtr;\r\n```\r\n\r\n### **Target**\r\n\r\nThe target of this expression.\r\n\r\n```csharp\r\npublic KismetExpression Target;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_InterfaceToObjCast()**\r\n\r\n```csharp\r\npublic EX_InterfaceToObjCast()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_intone.md",
    "content": "# EX_IntOne\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_IntOne](./uassetapi.kismet.bytecode.eexprtoken.md#ex_intone) instruction.\r\n\r\n```csharp\r\npublic class EX_IntOne : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_IntOne](./uassetapi.kismet.bytecode.expressions.ex_intone.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_IntOne()**\r\n\r\n```csharp\r\npublic EX_IntOne()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_intzero.md",
    "content": "# EX_IntZero\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_IntZero](./uassetapi.kismet.bytecode.eexprtoken.md#ex_intzero) instruction.\r\n\r\n```csharp\r\npublic class EX_IntZero : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_IntZero](./uassetapi.kismet.bytecode.expressions.ex_intzero.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_IntZero()**\r\n\r\n```csharp\r\npublic EX_IntZero()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_jump.md",
    "content": "# EX_Jump\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_Jump](./uassetapi.kismet.bytecode.eexprtoken.md#ex_jump) instruction.\r\n\r\n```csharp\r\npublic class EX_Jump : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_Jump](./uassetapi.kismet.bytecode.expressions.ex_jump.md)\r\n\r\n## Fields\r\n\r\n### **CodeOffset**\r\n\r\nThe offset to jump to.\r\n\r\n```csharp\r\npublic uint CodeOffset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_Jump()**\r\n\r\n```csharp\r\npublic EX_Jump()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_jumpifnot.md",
    "content": "# EX_JumpIfNot\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_JumpIfNot](./uassetapi.kismet.bytecode.eexprtoken.md#ex_jumpifnot) instruction.\r\n Conditional equivalent of the [EExprToken.EX_Jump](./uassetapi.kismet.bytecode.eexprtoken.md#ex_jump) expression.\r\n\r\n```csharp\r\npublic class EX_JumpIfNot : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_JumpIfNot](./uassetapi.kismet.bytecode.expressions.ex_jumpifnot.md)\r\n\r\n## Fields\r\n\r\n### **CodeOffset**\r\n\r\nThe offset to jump to if the provided expression evaluates to false.\r\n\r\n```csharp\r\npublic uint CodeOffset;\r\n```\r\n\r\n### **BooleanExpression**\r\n\r\nExpression to evaluate to determine whether or not a jump should be performed.\r\n\r\n```csharp\r\npublic KismetExpression BooleanExpression;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_JumpIfNot()**\r\n\r\n```csharp\r\npublic EX_JumpIfNot()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_let.md",
    "content": "# EX_Let\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_Let](./uassetapi.kismet.bytecode.eexprtoken.md#ex_let) instruction.\r\n\r\n```csharp\r\npublic class EX_Let : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_Let](./uassetapi.kismet.bytecode.expressions.ex_let.md)\r\n\r\n## Fields\r\n\r\n### **Value**\r\n\r\nA pointer to the variable.\r\n\r\n```csharp\r\npublic KismetPropertyPointer Value;\r\n```\r\n\r\n### **Variable**\r\n\r\n```csharp\r\npublic KismetExpression Variable;\r\n```\r\n\r\n### **Expression**\r\n\r\n```csharp\r\npublic KismetExpression Expression;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_Let()**\r\n\r\n```csharp\r\npublic EX_Let()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_letbase.md",
    "content": "# EX_LetBase\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nBase class for several Let (assignment) expressions\r\n\r\n```csharp\r\npublic abstract class EX_LetBase : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_LetBase](./uassetapi.kismet.bytecode.expressions.ex_letbase.md)\r\n\r\n## Fields\r\n\r\n### **VariableExpression**\r\n\r\nVariable expression.\r\n\r\n```csharp\r\npublic KismetExpression VariableExpression;\r\n```\r\n\r\n### **AssignmentExpression**\r\n\r\nAssignment expression.\r\n\r\n```csharp\r\npublic KismetExpression AssignmentExpression;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_letbool.md",
    "content": "# EX_LetBool\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_LetBool](./uassetapi.kismet.bytecode.eexprtoken.md#ex_letbool) instruction.\r\n\r\n```csharp\r\npublic class EX_LetBool : EX_LetBase\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_LetBase](./uassetapi.kismet.bytecode.expressions.ex_letbase.md) → [EX_LetBool](./uassetapi.kismet.bytecode.expressions.ex_letbool.md)\r\n\r\n## Fields\r\n\r\n### **VariableExpression**\r\n\r\nVariable expression.\r\n\r\n```csharp\r\npublic KismetExpression VariableExpression;\r\n```\r\n\r\n### **AssignmentExpression**\r\n\r\nAssignment expression.\r\n\r\n```csharp\r\npublic KismetExpression AssignmentExpression;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_LetBool()**\r\n\r\n```csharp\r\npublic EX_LetBool()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_letdelegate.md",
    "content": "# EX_LetDelegate\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_LetDelegate](./uassetapi.kismet.bytecode.eexprtoken.md#ex_letdelegate) instruction.\r\n\r\n```csharp\r\npublic class EX_LetDelegate : EX_LetBase\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_LetBase](./uassetapi.kismet.bytecode.expressions.ex_letbase.md) → [EX_LetDelegate](./uassetapi.kismet.bytecode.expressions.ex_letdelegate.md)\r\n\r\n## Fields\r\n\r\n### **VariableExpression**\r\n\r\nVariable expression.\r\n\r\n```csharp\r\npublic KismetExpression VariableExpression;\r\n```\r\n\r\n### **AssignmentExpression**\r\n\r\nAssignment expression.\r\n\r\n```csharp\r\npublic KismetExpression AssignmentExpression;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_LetDelegate()**\r\n\r\n```csharp\r\npublic EX_LetDelegate()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_letmulticastdelegate.md",
    "content": "# EX_LetMulticastDelegate\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_LetMulticastDelegate](./uassetapi.kismet.bytecode.eexprtoken.md#ex_letmulticastdelegate) instruction.\r\n\r\n```csharp\r\npublic class EX_LetMulticastDelegate : EX_LetBase\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_LetBase](./uassetapi.kismet.bytecode.expressions.ex_letbase.md) → [EX_LetMulticastDelegate](./uassetapi.kismet.bytecode.expressions.ex_letmulticastdelegate.md)\r\n\r\n## Fields\r\n\r\n### **VariableExpression**\r\n\r\nVariable expression.\r\n\r\n```csharp\r\npublic KismetExpression VariableExpression;\r\n```\r\n\r\n### **AssignmentExpression**\r\n\r\nAssignment expression.\r\n\r\n```csharp\r\npublic KismetExpression AssignmentExpression;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_LetMulticastDelegate()**\r\n\r\n```csharp\r\npublic EX_LetMulticastDelegate()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_letobj.md",
    "content": "# EX_LetObj\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_LetObj](./uassetapi.kismet.bytecode.eexprtoken.md#ex_letobj) instruction.\r\n\r\n```csharp\r\npublic class EX_LetObj : EX_LetBase\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_LetBase](./uassetapi.kismet.bytecode.expressions.ex_letbase.md) → [EX_LetObj](./uassetapi.kismet.bytecode.expressions.ex_letobj.md)\r\n\r\n## Fields\r\n\r\n### **VariableExpression**\r\n\r\nVariable expression.\r\n\r\n```csharp\r\npublic KismetExpression VariableExpression;\r\n```\r\n\r\n### **AssignmentExpression**\r\n\r\nAssignment expression.\r\n\r\n```csharp\r\npublic KismetExpression AssignmentExpression;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_LetObj()**\r\n\r\n```csharp\r\npublic EX_LetObj()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_letvalueonpersistentframe.md",
    "content": "# EX_LetValueOnPersistentFrame\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_LetValueOnPersistentFrame](./uassetapi.kismet.bytecode.eexprtoken.md#ex_letvalueonpersistentframe) instruction.\r\n\r\n```csharp\r\npublic class EX_LetValueOnPersistentFrame : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_LetValueOnPersistentFrame](./uassetapi.kismet.bytecode.expressions.ex_letvalueonpersistentframe.md)\r\n\r\n## Fields\r\n\r\n### **DestinationProperty**\r\n\r\nDestination property pointer.\r\n\r\n```csharp\r\npublic KismetPropertyPointer DestinationProperty;\r\n```\r\n\r\n### **AssignmentExpression**\r\n\r\nAssignment expression.\r\n\r\n```csharp\r\npublic KismetExpression AssignmentExpression;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_LetValueOnPersistentFrame()**\r\n\r\n```csharp\r\npublic EX_LetValueOnPersistentFrame()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_letweakobjptr.md",
    "content": "# EX_LetWeakObjPtr\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_LetWeakObjPtr](./uassetapi.kismet.bytecode.eexprtoken.md#ex_letweakobjptr) instruction.\r\n\r\n```csharp\r\npublic class EX_LetWeakObjPtr : EX_LetBase\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_LetBase](./uassetapi.kismet.bytecode.expressions.ex_letbase.md) → [EX_LetWeakObjPtr](./uassetapi.kismet.bytecode.expressions.ex_letweakobjptr.md)\r\n\r\n## Fields\r\n\r\n### **VariableExpression**\r\n\r\nVariable expression.\r\n\r\n```csharp\r\npublic KismetExpression VariableExpression;\r\n```\r\n\r\n### **AssignmentExpression**\r\n\r\nAssignment expression.\r\n\r\n```csharp\r\npublic KismetExpression AssignmentExpression;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_LetWeakObjPtr()**\r\n\r\n```csharp\r\npublic EX_LetWeakObjPtr()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_localfinalfunction.md",
    "content": "# EX_LocalFinalFunction\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_LocalFinalFunction](./uassetapi.kismet.bytecode.eexprtoken.md#ex_localfinalfunction) instruction.\r\n\r\n```csharp\r\npublic class EX_LocalFinalFunction : EX_FinalFunction\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_FinalFunction](./uassetapi.kismet.bytecode.expressions.ex_finalfunction.md) → [EX_LocalFinalFunction](./uassetapi.kismet.bytecode.expressions.ex_localfinalfunction.md)\r\n\r\n## Fields\r\n\r\n### **StackNode**\r\n\r\nStack node.\r\n\r\n```csharp\r\npublic FPackageIndex StackNode;\r\n```\r\n\r\n### **Parameters**\r\n\r\nList of parameters for this function.\r\n\r\n```csharp\r\npublic KismetExpression[] Parameters;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_LocalFinalFunction()**\r\n\r\n```csharp\r\npublic EX_LocalFinalFunction()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_localoutvariable.md",
    "content": "# EX_LocalOutVariable\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_LocalOutVariable](./uassetapi.kismet.bytecode.eexprtoken.md#ex_localoutvariable) instruction.\r\n\r\n```csharp\r\npublic class EX_LocalOutVariable : EX_VariableBase\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_VariableBase](./uassetapi.kismet.bytecode.expressions.ex_variablebase.md) → [EX_LocalOutVariable](./uassetapi.kismet.bytecode.expressions.ex_localoutvariable.md)\r\n\r\n## Fields\r\n\r\n### **Variable**\r\n\r\nA pointer to the variable in question.\r\n\r\n```csharp\r\npublic KismetPropertyPointer Variable;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_LocalOutVariable()**\r\n\r\n```csharp\r\npublic EX_LocalOutVariable()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_localvariable.md",
    "content": "# EX_LocalVariable\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_LocalVariable](./uassetapi.kismet.bytecode.eexprtoken.md#ex_localvariable) instruction.\r\n\r\n```csharp\r\npublic class EX_LocalVariable : EX_VariableBase\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_VariableBase](./uassetapi.kismet.bytecode.expressions.ex_variablebase.md) → [EX_LocalVariable](./uassetapi.kismet.bytecode.expressions.ex_localvariable.md)\r\n\r\n## Fields\r\n\r\n### **Variable**\r\n\r\nA pointer to the variable in question.\r\n\r\n```csharp\r\npublic KismetPropertyPointer Variable;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_LocalVariable()**\r\n\r\n```csharp\r\npublic EX_LocalVariable()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_localvirtualfunction.md",
    "content": "# EX_LocalVirtualFunction\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_LocalVirtualFunction](./uassetapi.kismet.bytecode.eexprtoken.md#ex_localvirtualfunction) instruction.\r\n\r\n```csharp\r\npublic class EX_LocalVirtualFunction : EX_VirtualFunction\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_VirtualFunction](./uassetapi.kismet.bytecode.expressions.ex_virtualfunction.md) → [EX_LocalVirtualFunction](./uassetapi.kismet.bytecode.expressions.ex_localvirtualfunction.md)\r\n\r\n## Fields\r\n\r\n### **VirtualFunctionName**\r\n\r\nVirtual function name.\r\n\r\n```csharp\r\npublic FName VirtualFunctionName;\r\n```\r\n\r\n### **Parameters**\r\n\r\nList of parameters for this function.\r\n\r\n```csharp\r\npublic KismetExpression[] Parameters;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_LocalVirtualFunction()**\r\n\r\n```csharp\r\npublic EX_LocalVirtualFunction()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_mapconst.md",
    "content": "# EX_MapConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_MapConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_mapconst) instruction.\r\n\r\n```csharp\r\npublic class EX_MapConst : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_MapConst](./uassetapi.kismet.bytecode.expressions.ex_mapconst.md)\r\n\r\n## Fields\r\n\r\n### **KeyProperty**\r\n\r\nPointer to this constant's key property (FProperty*).\r\n\r\n```csharp\r\npublic KismetPropertyPointer KeyProperty;\r\n```\r\n\r\n### **ValueProperty**\r\n\r\nPointer to this constant's value property (FProperty*).\r\n\r\n```csharp\r\npublic KismetPropertyPointer ValueProperty;\r\n```\r\n\r\n### **Elements**\r\n\r\nSet constant entries.\r\n\r\n```csharp\r\npublic KismetExpression[] Elements;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_MapConst()**\r\n\r\n```csharp\r\npublic EX_MapConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_metacast.md",
    "content": "# EX_MetaCast\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_MetaCast](./uassetapi.kismet.bytecode.eexprtoken.md#ex_metacast) instruction.\r\n\r\n```csharp\r\npublic class EX_MetaCast : EX_CastBase\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_CastBase](./uassetapi.kismet.bytecode.expressions.ex_castbase.md) → [EX_MetaCast](./uassetapi.kismet.bytecode.expressions.ex_metacast.md)\r\n\r\n## Fields\r\n\r\n### **ClassPtr**\r\n\r\nThe interface class to convert to.\r\n\r\n```csharp\r\npublic FPackageIndex ClassPtr;\r\n```\r\n\r\n### **Target**\r\n\r\nThe target of this expression.\r\n\r\n```csharp\r\npublic KismetExpression Target;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_MetaCast()**\r\n\r\n```csharp\r\npublic EX_MetaCast()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_nameconst.md",
    "content": "# EX_NameConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_NameConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_nameconst) instruction.\r\n\r\n```csharp\r\npublic class EX_NameConst : UAssetAPI.Kismet.Bytecode.KismetExpression`1[[UAssetAPI.UnrealTypes.FName]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [KismetExpression&lt;FName&gt;](./uassetapi.kismet.bytecode.kismetexpression-1.md) → [EX_NameConst](./uassetapi.kismet.bytecode.expressions.ex_nameconst.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Value**\r\n\r\nThe value of this expression if it is a constant.\r\n\r\n```csharp\r\npublic FName Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_NameConst()**\r\n\r\n```csharp\r\npublic EX_NameConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_nointerface.md",
    "content": "# EX_NoInterface\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_NoInterface](./uassetapi.kismet.bytecode.eexprtoken.md#ex_nointerface) instruction.\r\n\r\n```csharp\r\npublic class EX_NoInterface : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_NoInterface](./uassetapi.kismet.bytecode.expressions.ex_nointerface.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_NoInterface()**\r\n\r\n```csharp\r\npublic EX_NoInterface()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_noobject.md",
    "content": "# EX_NoObject\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_NoObject](./uassetapi.kismet.bytecode.eexprtoken.md#ex_noobject) instruction.\r\n\r\n```csharp\r\npublic class EX_NoObject : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_NoObject](./uassetapi.kismet.bytecode.expressions.ex_noobject.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_NoObject()**\r\n\r\n```csharp\r\npublic EX_NoObject()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_nothing.md",
    "content": "# EX_Nothing\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_Nothing](./uassetapi.kismet.bytecode.eexprtoken.md#ex_nothing) instruction.\r\n Represents a no-op.\r\n\r\n```csharp\r\npublic class EX_Nothing : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_Nothing](./uassetapi.kismet.bytecode.expressions.ex_nothing.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_Nothing()**\r\n\r\n```csharp\r\npublic EX_Nothing()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_nothingint32.md",
    "content": "# EX_NothingInt32\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_NothingInt32](./uassetapi.kismet.bytecode.eexprtoken.md#ex_nothingint32) instruction.\r\n No operation with an int32 argument (useful for debugging script disassembly).\r\n\r\n```csharp\r\npublic class EX_NothingInt32 : UAssetAPI.Kismet.Bytecode.KismetExpression`1[[System.Int32]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [KismetExpression&lt;Int32&gt;](./uassetapi.kismet.bytecode.kismetexpression-1.md) → [EX_NothingInt32](./uassetapi.kismet.bytecode.expressions.ex_nothingint32.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Value**\r\n\r\nThe value of this expression if it is a constant.\r\n\r\n```csharp\r\npublic int Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_NothingInt32()**\r\n\r\n```csharp\r\npublic EX_NothingInt32()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_objectconst.md",
    "content": "# EX_ObjectConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_ObjectConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_objectconst) instruction.\r\n\r\n```csharp\r\npublic class EX_ObjectConst : UAssetAPI.Kismet.Bytecode.KismetExpression`1[[UAssetAPI.UnrealTypes.FPackageIndex]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [KismetExpression&lt;FPackageIndex&gt;](./uassetapi.kismet.bytecode.kismetexpression-1.md) → [EX_ObjectConst](./uassetapi.kismet.bytecode.expressions.ex_objectconst.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Value**\r\n\r\nThe value of this expression if it is a constant.\r\n\r\n```csharp\r\npublic FPackageIndex Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_ObjectConst()**\r\n\r\n```csharp\r\npublic EX_ObjectConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_objtointerfacecast.md",
    "content": "# EX_ObjToInterfaceCast\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_ObjToInterfaceCast](./uassetapi.kismet.bytecode.eexprtoken.md#ex_objtointerfacecast) instruction.\r\n A conversion from an object or interface variable to a native interface variable.\r\n\r\n```csharp\r\npublic class EX_ObjToInterfaceCast : EX_CastBase\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_CastBase](./uassetapi.kismet.bytecode.expressions.ex_castbase.md) → [EX_ObjToInterfaceCast](./uassetapi.kismet.bytecode.expressions.ex_objtointerfacecast.md)\r\n\r\n## Fields\r\n\r\n### **ClassPtr**\r\n\r\nThe interface class to convert to.\r\n\r\n```csharp\r\npublic FPackageIndex ClassPtr;\r\n```\r\n\r\n### **Target**\r\n\r\nThe target of this expression.\r\n\r\n```csharp\r\npublic KismetExpression Target;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_ObjToInterfaceCast()**\r\n\r\n```csharp\r\npublic EX_ObjToInterfaceCast()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_popexecutionflow.md",
    "content": "# EX_PopExecutionFlow\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_PopExecutionFlow](./uassetapi.kismet.bytecode.eexprtoken.md#ex_popexecutionflow) instruction.\r\n\r\n```csharp\r\npublic class EX_PopExecutionFlow : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_PopExecutionFlow](./uassetapi.kismet.bytecode.expressions.ex_popexecutionflow.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_PopExecutionFlow()**\r\n\r\n```csharp\r\npublic EX_PopExecutionFlow()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_popexecutionflowifnot.md",
    "content": "# EX_PopExecutionFlowIfNot\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_PopExecutionFlowIfNot](./uassetapi.kismet.bytecode.eexprtoken.md#ex_popexecutionflowifnot) instruction.\r\n Conditional equivalent of the [EExprToken.EX_PopExecutionFlow](./uassetapi.kismet.bytecode.eexprtoken.md#ex_popexecutionflow) expression.\r\n\r\n```csharp\r\npublic class EX_PopExecutionFlowIfNot : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_PopExecutionFlowIfNot](./uassetapi.kismet.bytecode.expressions.ex_popexecutionflowifnot.md)\r\n\r\n## Fields\r\n\r\n### **BooleanExpression**\r\n\r\nExpression to evaluate to determine whether or not a pop should be performed.\r\n\r\n```csharp\r\npublic KismetExpression BooleanExpression;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_PopExecutionFlowIfNot()**\r\n\r\n```csharp\r\npublic EX_PopExecutionFlowIfNot()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_primitivecast.md",
    "content": "# EX_PrimitiveCast\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_PrimitiveCast](./uassetapi.kismet.bytecode.eexprtoken.md#ex_primitivecast) instruction.\r\n\r\n```csharp\r\npublic class EX_PrimitiveCast : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_PrimitiveCast](./uassetapi.kismet.bytecode.expressions.ex_primitivecast.md)\r\n\r\n## Fields\r\n\r\n### **ConversionType**\r\n\r\nThe type to cast to.\r\n\r\n```csharp\r\npublic ECastToken ConversionType;\r\n```\r\n\r\n### **Target**\r\n\r\nThe target of this expression.\r\n\r\n```csharp\r\npublic KismetExpression Target;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_PrimitiveCast()**\r\n\r\n```csharp\r\npublic EX_PrimitiveCast()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_propertyconst.md",
    "content": "# EX_PropertyConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_PropertyConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_propertyconst) instruction.\r\n\r\n```csharp\r\npublic class EX_PropertyConst : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_PropertyConst](./uassetapi.kismet.bytecode.expressions.ex_propertyconst.md)\r\n\r\n## Fields\r\n\r\n### **Property**\r\n\r\nA pointer to the property in question.\r\n\r\n```csharp\r\npublic KismetPropertyPointer Property;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_PropertyConst()**\r\n\r\n```csharp\r\npublic EX_PropertyConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_pushexecutionflow.md",
    "content": "# EX_PushExecutionFlow\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_PushExecutionFlow](./uassetapi.kismet.bytecode.eexprtoken.md#ex_pushexecutionflow) instruction.\r\n\r\n```csharp\r\npublic class EX_PushExecutionFlow : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_PushExecutionFlow](./uassetapi.kismet.bytecode.expressions.ex_pushexecutionflow.md)\r\n\r\n## Fields\r\n\r\n### **PushingAddress**\r\n\r\nThe address to push onto the execution flow stack.\r\n\r\n```csharp\r\npublic uint PushingAddress;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_PushExecutionFlow()**\r\n\r\n```csharp\r\npublic EX_PushExecutionFlow()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_removemulticastdelegate.md",
    "content": "# EX_RemoveMulticastDelegate\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_RemoveMulticastDelegate](./uassetapi.kismet.bytecode.eexprtoken.md#ex_removemulticastdelegate) instruction.\r\n\r\n```csharp\r\npublic class EX_RemoveMulticastDelegate : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_RemoveMulticastDelegate](./uassetapi.kismet.bytecode.expressions.ex_removemulticastdelegate.md)\r\n\r\n## Fields\r\n\r\n### **Delegate**\r\n\r\nDelegate property to assign to.\r\n\r\n```csharp\r\npublic KismetExpression Delegate;\r\n```\r\n\r\n### **DelegateToAdd**\r\n\r\nDelegate to add to the MC delegate for broadcast.\r\n\r\n```csharp\r\npublic KismetExpression DelegateToAdd;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_RemoveMulticastDelegate()**\r\n\r\n```csharp\r\npublic EX_RemoveMulticastDelegate()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_return.md",
    "content": "# EX_Return\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_Return](./uassetapi.kismet.bytecode.eexprtoken.md#ex_return) instruction.\r\n\r\n```csharp\r\npublic class EX_Return : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_Return](./uassetapi.kismet.bytecode.expressions.ex_return.md)\r\n\r\n## Fields\r\n\r\n### **ReturnExpression**\r\n\r\nThe return expression.\r\n\r\n```csharp\r\npublic KismetExpression ReturnExpression;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_Return()**\r\n\r\n```csharp\r\npublic EX_Return()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_rotationconst.md",
    "content": "# EX_RotationConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_RotationConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_rotationconst) instruction.\r\n\r\n```csharp\r\npublic class EX_RotationConst : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_RotationConst](./uassetapi.kismet.bytecode.expressions.ex_rotationconst.md)\r\n\r\n## Fields\r\n\r\n### **Value**\r\n\r\n```csharp\r\npublic FRotator Value;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_RotationConst()**\r\n\r\n```csharp\r\npublic EX_RotationConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_self.md",
    "content": "# EX_Self\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_Self](./uassetapi.kismet.bytecode.eexprtoken.md#ex_self) instruction.\r\n\r\n```csharp\r\npublic class EX_Self : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_Self](./uassetapi.kismet.bytecode.expressions.ex_self.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_Self()**\r\n\r\n```csharp\r\npublic EX_Self()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_setarray.md",
    "content": "# EX_SetArray\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_SetArray](./uassetapi.kismet.bytecode.eexprtoken.md#ex_setarray) instruction.\r\n\r\n```csharp\r\npublic class EX_SetArray : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_SetArray](./uassetapi.kismet.bytecode.expressions.ex_setarray.md)\r\n\r\n## Fields\r\n\r\n### **AssigningProperty**\r\n\r\nArray property to assign to\r\n\r\n```csharp\r\npublic KismetExpression AssigningProperty;\r\n```\r\n\r\n### **ArrayInnerProp**\r\n\r\nPointer to the array inner property (FProperty*).\r\n Only used in engine versions prior to [ObjectVersion.VER_UE4_CHANGE_SETARRAY_BYTECODE](./uassetapi.unrealtypes.objectversion.md#ver_ue4_change_setarray_bytecode).\r\n\r\n```csharp\r\npublic FPackageIndex ArrayInnerProp;\r\n```\r\n\r\n### **Elements**\r\n\r\nArray items.\r\n\r\n```csharp\r\npublic KismetExpression[] Elements;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_SetArray()**\r\n\r\n```csharp\r\npublic EX_SetArray()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_setconst.md",
    "content": "# EX_SetConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_SetConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_setconst) instruction.\r\n\r\n```csharp\r\npublic class EX_SetConst : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_SetConst](./uassetapi.kismet.bytecode.expressions.ex_setconst.md)\r\n\r\n## Fields\r\n\r\n### **InnerProperty**\r\n\r\nPointer to this constant's inner property (FProperty*).\r\n\r\n```csharp\r\npublic KismetPropertyPointer InnerProperty;\r\n```\r\n\r\n### **Elements**\r\n\r\nSet constant entries.\r\n\r\n```csharp\r\npublic KismetExpression[] Elements;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_SetConst()**\r\n\r\n```csharp\r\npublic EX_SetConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_setmap.md",
    "content": "# EX_SetMap\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_SetMap](./uassetapi.kismet.bytecode.eexprtoken.md#ex_setmap) instruction.\r\n\r\n```csharp\r\npublic class EX_SetMap : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_SetMap](./uassetapi.kismet.bytecode.expressions.ex_setmap.md)\r\n\r\n## Fields\r\n\r\n### **MapProperty**\r\n\r\nMap property.\r\n\r\n```csharp\r\npublic KismetExpression MapProperty;\r\n```\r\n\r\n### **Elements**\r\n\r\nSet entries.\r\n\r\n```csharp\r\npublic KismetExpression[] Elements;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_SetMap()**\r\n\r\n```csharp\r\npublic EX_SetMap()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_setset.md",
    "content": "# EX_SetSet\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_SetSet](./uassetapi.kismet.bytecode.eexprtoken.md#ex_setset) instruction.\r\n\r\n```csharp\r\npublic class EX_SetSet : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_SetSet](./uassetapi.kismet.bytecode.expressions.ex_setset.md)\r\n\r\n## Fields\r\n\r\n### **SetProperty**\r\n\r\nSet property.\r\n\r\n```csharp\r\npublic KismetExpression SetProperty;\r\n```\r\n\r\n### **Elements**\r\n\r\nSet entries.\r\n\r\n```csharp\r\npublic KismetExpression[] Elements;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_SetSet()**\r\n\r\n```csharp\r\npublic EX_SetSet()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_skip.md",
    "content": "# EX_Skip\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_Skip](./uassetapi.kismet.bytecode.eexprtoken.md#ex_skip) instruction.\r\n\r\n```csharp\r\npublic class EX_Skip : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_Skip](./uassetapi.kismet.bytecode.expressions.ex_skip.md)\r\n\r\n## Fields\r\n\r\n### **CodeOffset**\r\n\r\nThe offset to skip to.\r\n\r\n```csharp\r\npublic uint CodeOffset;\r\n```\r\n\r\n### **SkipExpression**\r\n\r\nAn expression to possibly skip.\r\n\r\n```csharp\r\npublic KismetExpression SkipExpression;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_Skip()**\r\n\r\n```csharp\r\npublic EX_Skip()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_skipoffsetconst.md",
    "content": "# EX_SkipOffsetConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_SkipOffsetConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_skipoffsetconst) instruction.\r\n Represents a code offset constant.\r\n\r\n```csharp\r\npublic class EX_SkipOffsetConst : UAssetAPI.Kismet.Bytecode.KismetExpression`1[[System.UInt32]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [KismetExpression&lt;UInt32&gt;](./uassetapi.kismet.bytecode.kismetexpression-1.md) → [EX_SkipOffsetConst](./uassetapi.kismet.bytecode.expressions.ex_skipoffsetconst.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Value**\r\n\r\nThe value of this expression if it is a constant.\r\n\r\n```csharp\r\npublic uint Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_SkipOffsetConst()**\r\n\r\n```csharp\r\npublic EX_SkipOffsetConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_softobjectconst.md",
    "content": "# EX_SoftObjectConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_SoftObjectConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_softobjectconst) instruction.\r\n\r\n```csharp\r\npublic class EX_SoftObjectConst : UAssetAPI.Kismet.Bytecode.KismetExpression`1[[UAssetAPI.Kismet.Bytecode.KismetExpression]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [KismetExpression&lt;KismetExpression&gt;](./uassetapi.kismet.bytecode.kismetexpression-1.md) → [EX_SoftObjectConst](./uassetapi.kismet.bytecode.expressions.ex_softobjectconst.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Value**\r\n\r\nThe value of this expression if it is a constant.\r\n\r\n```csharp\r\npublic KismetExpression Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_SoftObjectConst()**\r\n\r\n```csharp\r\npublic EX_SoftObjectConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_stringconst.md",
    "content": "# EX_StringConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_StringConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_stringconst) instruction.\r\n\r\n```csharp\r\npublic class EX_StringConst : UAssetAPI.Kismet.Bytecode.KismetExpression`1[[System.String]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [KismetExpression&lt;String&gt;](./uassetapi.kismet.bytecode.kismetexpression-1.md) → [EX_StringConst](./uassetapi.kismet.bytecode.expressions.ex_stringconst.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Value**\r\n\r\nThe value of this expression if it is a constant.\r\n\r\n```csharp\r\npublic string Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_StringConst()**\r\n\r\n```csharp\r\npublic EX_StringConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_structconst.md",
    "content": "# EX_StructConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_StructConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_structconst) instruction.\r\n\r\n```csharp\r\npublic class EX_StructConst : UAssetAPI.Kismet.Bytecode.KismetExpression`1[[UAssetAPI.Kismet.Bytecode.KismetExpression[]]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [KismetExpression&lt;KismetExpression[]&gt;](./uassetapi.kismet.bytecode.kismetexpression-1.md) → [EX_StructConst](./uassetapi.kismet.bytecode.expressions.ex_structconst.md)\r\n\r\n## Fields\r\n\r\n### **Struct**\r\n\r\nPointer to the UScriptStruct in question.\r\n\r\n```csharp\r\npublic FPackageIndex Struct;\r\n```\r\n\r\n### **StructSize**\r\n\r\nThe size of the struct that this constant represents in memory in bytes.\r\n\r\n```csharp\r\npublic int StructSize;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Value**\r\n\r\nThe value of this expression if it is a constant.\r\n\r\n```csharp\r\npublic KismetExpression[] Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[KismetExpression[]](./uassetapi.kismet.bytecode.kismetexpression.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_StructConst()**\r\n\r\n```csharp\r\npublic EX_StructConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_structmembercontext.md",
    "content": "# EX_StructMemberContext\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_StructMemberContext](./uassetapi.kismet.bytecode.eexprtoken.md#ex_structmembercontext) instruction.\r\n\r\n```csharp\r\npublic class EX_StructMemberContext : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_StructMemberContext](./uassetapi.kismet.bytecode.expressions.ex_structmembercontext.md)\r\n\r\n## Fields\r\n\r\n### **StructMemberExpression**\r\n\r\nA pointer to the struct member expression (FProperty*).\r\n\r\n```csharp\r\npublic KismetPropertyPointer StructMemberExpression;\r\n```\r\n\r\n### **StructExpression**\r\n\r\nStruct expression.\r\n\r\n```csharp\r\npublic KismetExpression StructExpression;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_StructMemberContext()**\r\n\r\n```csharp\r\npublic EX_StructMemberContext()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_switchvalue.md",
    "content": "# EX_SwitchValue\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_SwitchValue](./uassetapi.kismet.bytecode.eexprtoken.md#ex_switchvalue) instruction.\r\n\r\n```csharp\r\npublic class EX_SwitchValue : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_SwitchValue](./uassetapi.kismet.bytecode.expressions.ex_switchvalue.md)\r\n\r\n## Fields\r\n\r\n### **EndGotoOffset**\r\n\r\nCode offset to jump to when finished.\r\n\r\n```csharp\r\npublic uint EndGotoOffset;\r\n```\r\n\r\n### **IndexTerm**\r\n\r\nThe index term of this switch statement.\r\n\r\n```csharp\r\npublic KismetExpression IndexTerm;\r\n```\r\n\r\n### **DefaultTerm**\r\n\r\nThe default term of this switch statement.\r\n\r\n```csharp\r\npublic KismetExpression DefaultTerm;\r\n```\r\n\r\n### **Cases**\r\n\r\nAll the cases in this switch statement.\r\n\r\n```csharp\r\npublic FKismetSwitchCase[] Cases;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_SwitchValue()**\r\n\r\n```csharp\r\npublic EX_SwitchValue()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_textconst.md",
    "content": "# EX_TextConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_TextConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_textconst) instruction.\r\n\r\n```csharp\r\npublic class EX_TextConst : UAssetAPI.Kismet.Bytecode.KismetExpression`1[[UAssetAPI.Kismet.Bytecode.FScriptText]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [KismetExpression&lt;FScriptText&gt;](./uassetapi.kismet.bytecode.kismetexpression-1.md) → [EX_TextConst](./uassetapi.kismet.bytecode.expressions.ex_textconst.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Value**\r\n\r\nThe value of this expression if it is a constant.\r\n\r\n```csharp\r\npublic FScriptText Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FScriptText](./uassetapi.kismet.bytecode.fscripttext.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_TextConst()**\r\n\r\n```csharp\r\npublic EX_TextConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_tracepoint.md",
    "content": "# EX_Tracepoint\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_Tracepoint](./uassetapi.kismet.bytecode.eexprtoken.md#ex_tracepoint) instruction.\r\n\r\n```csharp\r\npublic class EX_Tracepoint : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_Tracepoint](./uassetapi.kismet.bytecode.expressions.ex_tracepoint.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_Tracepoint()**\r\n\r\n```csharp\r\npublic EX_Tracepoint()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_transformconst.md",
    "content": "# EX_TransformConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_TransformConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_transformconst) instruction.\r\n\r\n```csharp\r\npublic class EX_TransformConst : UAssetAPI.Kismet.Bytecode.KismetExpression`1[[UAssetAPI.UnrealTypes.FTransform]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [KismetExpression&lt;FTransform&gt;](./uassetapi.kismet.bytecode.kismetexpression-1.md) → [EX_TransformConst](./uassetapi.kismet.bytecode.expressions.ex_transformconst.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Value**\r\n\r\nThe value of this expression if it is a constant.\r\n\r\n```csharp\r\npublic FTransform Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FTransform](./uassetapi.unrealtypes.ftransform.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_TransformConst()**\r\n\r\n```csharp\r\npublic EX_TransformConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_true.md",
    "content": "# EX_True\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_True](./uassetapi.kismet.bytecode.eexprtoken.md#ex_true) instruction.\r\n\r\n```csharp\r\npublic class EX_True : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_True](./uassetapi.kismet.bytecode.expressions.ex_true.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_True()**\r\n\r\n```csharp\r\npublic EX_True()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_uint64const.md",
    "content": "# EX_UInt64Const\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_UInt64Const](./uassetapi.kismet.bytecode.eexprtoken.md#ex_uint64const) instruction.\r\n\r\n```csharp\r\npublic class EX_UInt64Const : UAssetAPI.Kismet.Bytecode.KismetExpression`1[[System.UInt64]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [KismetExpression&lt;UInt64&gt;](./uassetapi.kismet.bytecode.kismetexpression-1.md) → [EX_UInt64Const](./uassetapi.kismet.bytecode.expressions.ex_uint64const.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Value**\r\n\r\nThe value of this expression if it is a constant.\r\n\r\n```csharp\r\npublic ulong Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[UInt64](https://docs.microsoft.com/en-us/dotnet/api/system.uint64)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_UInt64Const()**\r\n\r\n```csharp\r\npublic EX_UInt64Const()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_unicodestringconst.md",
    "content": "# EX_UnicodeStringConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_UnicodeStringConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_unicodestringconst) instruction.\r\n\r\n```csharp\r\npublic class EX_UnicodeStringConst : UAssetAPI.Kismet.Bytecode.KismetExpression`1[[System.String]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [KismetExpression&lt;String&gt;](./uassetapi.kismet.bytecode.kismetexpression-1.md) → [EX_UnicodeStringConst](./uassetapi.kismet.bytecode.expressions.ex_unicodestringconst.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Value**\r\n\r\nThe value of this expression if it is a constant.\r\n\r\n```csharp\r\npublic string Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_UnicodeStringConst()**\r\n\r\n```csharp\r\npublic EX_UnicodeStringConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_variablebase.md",
    "content": "# EX_VariableBase\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nBase class for Kismet Variable expressions\r\n\r\n```csharp\r\npublic abstract class EX_VariableBase : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_VariableBase](./uassetapi.kismet.bytecode.expressions.ex_variablebase.md)\r\n\r\n## Fields\r\n\r\n### **Variable**\r\n\r\nA pointer to the variable in question.\r\n\r\n```csharp\r\npublic KismetPropertyPointer Variable;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_vector3fconst.md",
    "content": "# EX_Vector3fConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_Vector3fConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_vector3fconst) instruction.\r\n A float vector constant (always 3 floats, regardless of LWC).\r\n\r\n```csharp\r\npublic class EX_Vector3fConst : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_Vector3fConst](./uassetapi.kismet.bytecode.expressions.ex_vector3fconst.md)\r\n\r\n## Fields\r\n\r\n### **X**\r\n\r\n```csharp\r\npublic float X;\r\n```\r\n\r\n### **Y**\r\n\r\n```csharp\r\npublic float Y;\r\n```\r\n\r\n### **Z**\r\n\r\n```csharp\r\npublic float Z;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_Vector3fConst()**\r\n\r\n```csharp\r\npublic EX_Vector3fConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_vectorconst.md",
    "content": "# EX_VectorConst\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_VectorConst](./uassetapi.kismet.bytecode.eexprtoken.md#ex_vectorconst) instruction.\r\n\r\n```csharp\r\npublic class EX_VectorConst : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_VectorConst](./uassetapi.kismet.bytecode.expressions.ex_vectorconst.md)\r\n\r\n## Fields\r\n\r\n### **Value**\r\n\r\n```csharp\r\npublic FVector Value;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_VectorConst()**\r\n\r\n```csharp\r\npublic EX_VectorConst()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_virtualfunction.md",
    "content": "# EX_VirtualFunction\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_VirtualFunction](./uassetapi.kismet.bytecode.eexprtoken.md#ex_virtualfunction) instruction.\r\n\r\n```csharp\r\npublic class EX_VirtualFunction : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_VirtualFunction](./uassetapi.kismet.bytecode.expressions.ex_virtualfunction.md)\r\n\r\n## Fields\r\n\r\n### **VirtualFunctionName**\r\n\r\nVirtual function name.\r\n\r\n```csharp\r\npublic FName VirtualFunctionName;\r\n```\r\n\r\n### **Parameters**\r\n\r\nList of parameters for this function.\r\n\r\n```csharp\r\npublic KismetExpression[] Parameters;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_VirtualFunction()**\r\n\r\n```csharp\r\npublic EX_VirtualFunction()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.ex_wiretracepoint.md",
    "content": "# EX_WireTracepoint\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nA single Kismet bytecode instruction, corresponding to the [EExprToken.EX_WireTracepoint](./uassetapi.kismet.bytecode.eexprtoken.md#ex_wiretracepoint) instruction.\r\n\r\n```csharp\r\npublic class EX_WireTracepoint : UAssetAPI.Kismet.Bytecode.KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [EX_WireTracepoint](./uassetapi.kismet.bytecode.expressions.ex_wiretracepoint.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **EX_WireTracepoint()**\r\n\r\n```csharp\r\npublic EX_WireTracepoint()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out the expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites the expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressions.fkismetswitchcase.md",
    "content": "# FKismetSwitchCase\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode.Expressions\r\n\r\nRepresents a case in a Kismet bytecode switch statement.\r\n\r\n```csharp\r\npublic struct FKismetSwitchCase\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FKismetSwitchCase](./uassetapi.kismet.bytecode.expressions.fkismetswitchcase.md)\r\n\r\n## Fields\r\n\r\n### **CaseIndexValueTerm**\r\n\r\nThe index value term of this case.\r\n\r\n```csharp\r\npublic KismetExpression CaseIndexValueTerm;\r\n```\r\n\r\n### **NextOffset**\r\n\r\nCode offset to the next case.\r\n\r\n```csharp\r\npublic uint NextOffset;\r\n```\r\n\r\n### **CaseTerm**\r\n\r\nThe main case term.\r\n\r\n```csharp\r\npublic KismetExpression CaseTerm;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FKismetSwitchCase(KismetExpression, UInt32, KismetExpression)**\r\n\r\n```csharp\r\nFKismetSwitchCase(KismetExpression caseIndexValueTerm, uint nextOffset, KismetExpression caseTerm)\r\n```\r\n\r\n#### Parameters\r\n\r\n`caseIndexValueTerm` [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md)<br>\r\n\r\n`nextOffset` [UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n`caseTerm` [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.expressionserializer.md",
    "content": "# ExpressionSerializer\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode\r\n\r\n```csharp\r\npublic static class ExpressionSerializer\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ExpressionSerializer](./uassetapi.kismet.bytecode.expressionserializer.md)\r\n\r\n## Methods\r\n\r\n### **ReadExpression(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic static KismetExpression ReadExpression(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md)<br>\r\n\r\n### **WriteExpression(KismetExpression, AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic static int WriteExpression(KismetExpression expr, AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`expr` [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md)<br>\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.fscripttext.md",
    "content": "# FScriptText\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode\r\n\r\nRepresents an FText as serialized in Kismet bytecode.\r\n\r\n```csharp\r\npublic class FScriptText\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FScriptText](./uassetapi.kismet.bytecode.fscripttext.md)\r\n\r\n## Fields\r\n\r\n### **TextLiteralType**\r\n\r\n```csharp\r\npublic EBlueprintTextLiteralType TextLiteralType;\r\n```\r\n\r\n### **LocalizedSource**\r\n\r\nSource of this text if it is localized text. Used when [FScriptText.TextLiteralType](./uassetapi.kismet.bytecode.fscripttext.md#textliteraltype) is [EBlueprintTextLiteralType.InvariantText](./uassetapi.kismet.bytecode.eblueprinttextliteraltype.md#invarianttext).\r\n\r\n```csharp\r\npublic KismetExpression LocalizedSource;\r\n```\r\n\r\n### **LocalizedKey**\r\n\r\nKey of this text if it is localized text. Used when [FScriptText.TextLiteralType](./uassetapi.kismet.bytecode.fscripttext.md#textliteraltype) is [EBlueprintTextLiteralType.InvariantText](./uassetapi.kismet.bytecode.eblueprinttextliteraltype.md#invarianttext).\r\n\r\n```csharp\r\npublic KismetExpression LocalizedKey;\r\n```\r\n\r\n### **LocalizedNamespace**\r\n\r\nNamespace of this text if it is localized text. Used when [FScriptText.TextLiteralType](./uassetapi.kismet.bytecode.fscripttext.md#textliteraltype) is [EBlueprintTextLiteralType.InvariantText](./uassetapi.kismet.bytecode.eblueprinttextliteraltype.md#invarianttext).\r\n\r\n```csharp\r\npublic KismetExpression LocalizedNamespace;\r\n```\r\n\r\n### **InvariantLiteralString**\r\n\r\nValue of this text if it is an invariant string literal. Used when [FScriptText.TextLiteralType](./uassetapi.kismet.bytecode.fscripttext.md#textliteraltype) is [EBlueprintTextLiteralType.InvariantText](./uassetapi.kismet.bytecode.eblueprinttextliteraltype.md#invarianttext).\r\n\r\n```csharp\r\npublic KismetExpression InvariantLiteralString;\r\n```\r\n\r\n### **LiteralString**\r\n\r\nValue of this text if it is a string literal. Used when [FScriptText.TextLiteralType](./uassetapi.kismet.bytecode.fscripttext.md#textliteraltype) is [EBlueprintTextLiteralType.LiteralString](./uassetapi.kismet.bytecode.eblueprinttextliteraltype.md#literalstring).\r\n\r\n```csharp\r\npublic KismetExpression LiteralString;\r\n```\r\n\r\n### **StringTableAsset**\r\n\r\nPointer to this text's UStringTable. Not used at runtime, but exists for asset dependency gathering. Used when [FScriptText.TextLiteralType](./uassetapi.kismet.bytecode.fscripttext.md#textliteraltype) is [EBlueprintTextLiteralType.StringTableEntry](./uassetapi.kismet.bytecode.eblueprinttextliteraltype.md#stringtableentry).\r\n\r\n```csharp\r\npublic FPackageIndex StringTableAsset;\r\n```\r\n\r\n### **StringTableId**\r\n\r\nTable ID string literal (namespace). Used when [FScriptText.TextLiteralType](./uassetapi.kismet.bytecode.fscripttext.md#textliteraltype) is [EBlueprintTextLiteralType.StringTableEntry](./uassetapi.kismet.bytecode.eblueprinttextliteraltype.md#stringtableentry).\r\n\r\n```csharp\r\npublic KismetExpression StringTableId;\r\n```\r\n\r\n### **StringTableKey**\r\n\r\nString table key string literal. Used when [FScriptText.TextLiteralType](./uassetapi.kismet.bytecode.fscripttext.md#textliteraltype) is [EBlueprintTextLiteralType.StringTableEntry](./uassetapi.kismet.bytecode.eblueprinttextliteraltype.md#stringtableentry).\r\n\r\n```csharp\r\npublic KismetExpression StringTableKey;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FScriptText()**\r\n\r\n```csharp\r\npublic FScriptText()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out an FBlueprintText from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites an FBlueprintText to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.kismetexpression-1.md",
    "content": "# KismetExpression&lt;T&gt;\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode\r\n\r\n```csharp\r\npublic abstract class KismetExpression<T> : KismetExpression\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md) → [KismetExpression&lt;T&gt;](./uassetapi.kismet.bytecode.kismetexpression-1.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Value**\r\n\r\nThe value of this expression if it is a constant.\r\n\r\n```csharp\r\npublic T Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\nT<br>\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **KismetExpression()**\r\n\r\n```csharp\r\npublic KismetExpression()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.kismetexpression.md",
    "content": "# KismetExpression\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode\r\n\r\nA Kismet bytecode instruction.\r\n\r\n```csharp\r\npublic class KismetExpression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md)\r\n\r\n## Fields\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any expression in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue;\r\n```\r\n\r\n## Properties\r\n\r\n### **Token**\r\n\r\nThe token of this expression.\r\n\r\n```csharp\r\npublic EExprToken Token { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EExprToken](./uassetapi.kismet.bytecode.eexprtoken.md)<br>\r\n\r\n### **Inst**\r\n\r\nThe token of this instruction expressed as a string.\r\n\r\n```csharp\r\npublic string Inst { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **KismetExpression()**\r\n\r\n```csharp\r\npublic KismetExpression()\r\n```\r\n\r\n## Methods\r\n\r\n### **SetObject(Object)**\r\n\r\n```csharp\r\npublic void SetObject(object value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **GetObject&lt;T&gt;()**\r\n\r\n```csharp\r\npublic T GetObject<T>()\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\n#### Returns\r\n\r\nT<br>\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\nReads out an expression from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\nWrites an expression to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe iCode offset of the data that was written.\r\n\r\n### **Visit(UAsset, UInt32&, Action&lt;KismetExpression, UInt32&gt;)**\r\n\r\nVisits this expression and all child expressions, calling the visitor function for each with the in-memory offset.\r\n Note: The offset is the in-memory offset, not the serialization offset.\r\n\r\n```csharp\r\npublic void Visit(UAsset asset, UInt32& offset, Action<KismetExpression, uint> visitor)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\nThe asset containing this expression.\r\n\r\n`offset` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\nReference to the current in-memory offset, which is incremented as expressions are visited.\r\n\r\n`visitor` [Action&lt;KismetExpression, UInt32&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.action-2)<br>\r\nThe visitor function to call for each expression with the expression and its offset.\r\n\r\n### **GetSize(UAsset)**\r\n\r\nGets the in-memory size of this expression and all child expressions.\r\n\r\n```csharp\r\npublic uint GetSize(UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\nThe asset containing this expression.\r\n\r\n#### Returns\r\n\r\n[UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\nThe size in bytes of this expression.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.bytecode.kismetpropertypointer.md",
    "content": "# KismetPropertyPointer\r\n\r\nNamespace: UAssetAPI.Kismet.Bytecode\r\n\r\nRepresents a Kismet bytecode pointer to an FProperty or FField.\r\n\r\n```csharp\r\npublic class KismetPropertyPointer\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetPropertyPointer](./uassetapi.kismet.bytecode.kismetpropertypointer.md)\r\n\r\n## Fields\r\n\r\n### **Old**\r\n\r\nThe pointer serialized as an FPackageIndex. Used in versions older than [FReleaseObjectVersion.FFieldPathOwnerSerialization](./uassetapi.customversions.freleaseobjectversion.md#ffieldpathownerserialization).\r\n\r\n```csharp\r\npublic FPackageIndex Old;\r\n```\r\n\r\n### **New**\r\n\r\nThe pointer serialized as an FFieldPath. Used in versions newer than [FReleaseObjectVersion.FFieldPathOwnerSerialization](./uassetapi.customversions.freleaseobjectversion.md#ffieldpathownerserialization).\r\n\r\n```csharp\r\npublic FFieldPath New;\r\n```\r\n\r\n## Constructors\r\n\r\n### **KismetPropertyPointer(FPackageIndex)**\r\n\r\n```csharp\r\npublic KismetPropertyPointer(FPackageIndex older)\r\n```\r\n\r\n#### Parameters\r\n\r\n`older` [FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\n\r\n### **KismetPropertyPointer(FFieldPath)**\r\n\r\n```csharp\r\npublic KismetPropertyPointer(FFieldPath newer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`newer` [FFieldPath](./uassetapi.unrealtypes.ffieldpath.md)<br>\r\n\r\n### **KismetPropertyPointer()**\r\n\r\n```csharp\r\npublic KismetPropertyPointer()\r\n```\r\n\r\n## Methods\r\n\r\n### **ShouldSerializeOld()**\r\n\r\n```csharp\r\npublic bool ShouldSerializeOld()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **ShouldSerializeNew()**\r\n\r\n```csharp\r\npublic bool ShouldSerializeNew()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.kismet.kismetserializer.md",
    "content": "# KismetSerializer\r\n\r\nNamespace: UAssetAPI.Kismet\r\n\r\n```csharp\r\npublic static class KismetSerializer\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [KismetSerializer](./uassetapi.kismet.kismetserializer.md)\r\n\r\n## Fields\r\n\r\n### **asset**\r\n\r\n```csharp\r\npublic static UAsset asset;\r\n```\r\n\r\n## Methods\r\n\r\n### **SerializeScript(KismetExpression[])**\r\n\r\n```csharp\r\npublic static JArray SerializeScript(KismetExpression[] code)\r\n```\r\n\r\n#### Parameters\r\n\r\n`code` [KismetExpression[]](./uassetapi.kismet.bytecode.kismetexpression.md)<br>\r\n\r\n#### Returns\r\n\r\nJArray<br>\r\n\r\n### **GetName(Int32)**\r\n\r\n```csharp\r\npublic static string GetName(int index)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **GetClassIndex()**\r\n\r\n```csharp\r\npublic static int GetClassIndex()\r\n```\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **GetFullName(Int32, Boolean)**\r\n\r\n```csharp\r\npublic static string GetFullName(int index, bool alt)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`alt` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **GetParentName(Int32)**\r\n\r\n```csharp\r\npublic static string GetParentName(int index)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FindProperty(Int32, FName, FProperty&)**\r\n\r\n```csharp\r\npublic static bool FindProperty(int index, FName propname, FProperty& property)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`propname` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`property` [FProperty&](./uassetapi.fieldtypes.fproperty&.md)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **GetPropertyCategoryInfo(FProperty)**\r\n\r\n```csharp\r\npublic static FEdGraphPinType GetPropertyCategoryInfo(FProperty prop)\r\n```\r\n\r\n#### Parameters\r\n\r\n`prop` [FProperty](./uassetapi.fieldtypes.fproperty.md)<br>\r\n\r\n#### Returns\r\n\r\n[FEdGraphPinType](./uassetapi.kismet.kismetserializer.fedgraphpintype.md)<br>\r\n\r\n### **FillSimpleMemberReference(Int32)**\r\n\r\n```csharp\r\npublic static FSimpleMemberReference FillSimpleMemberReference(int index)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n#### Returns\r\n\r\n[FSimpleMemberReference](./uassetapi.kismet.kismetserializer.fsimplememberreference.md)<br>\r\n\r\n### **SerializeGraphPinType(FEdGraphPinType)**\r\n\r\n```csharp\r\npublic static JObject SerializeGraphPinType(FEdGraphPinType pin)\r\n```\r\n\r\n#### Parameters\r\n\r\n`pin` [FEdGraphPinType](./uassetapi.kismet.kismetserializer.fedgraphpintype.md)<br>\r\n\r\n#### Returns\r\n\r\nJObject<br>\r\n\r\n### **ConvertPropertyToPinType(FProperty)**\r\n\r\n```csharp\r\npublic static FEdGraphPinType ConvertPropertyToPinType(FProperty property)\r\n```\r\n\r\n#### Parameters\r\n\r\n`property` [FProperty](./uassetapi.fieldtypes.fproperty.md)<br>\r\n\r\n#### Returns\r\n\r\n[FEdGraphPinType](./uassetapi.kismet.kismetserializer.fedgraphpintype.md)<br>\r\n\r\n### **SerializePropertyPointer(KismetPropertyPointer, String[])**\r\n\r\n```csharp\r\npublic static JProperty[] SerializePropertyPointer(KismetPropertyPointer pointer, String[] names)\r\n```\r\n\r\n#### Parameters\r\n\r\n`pointer` [KismetPropertyPointer](./uassetapi.kismet.bytecode.kismetpropertypointer.md)<br>\r\n\r\n`names` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n#### Returns\r\n\r\nJProperty[]<br>\r\n\r\n### **SerializeExpression(KismetExpression, Int32&, Boolean)**\r\n\r\n```csharp\r\npublic static JObject SerializeExpression(KismetExpression expression, Int32& index, bool addindex)\r\n```\r\n\r\n#### Parameters\r\n\r\n`expression` [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md)<br>\r\n\r\n`index` [Int32&](https://docs.microsoft.com/en-us/dotnet/api/system.int32&)<br>\r\n\r\n`addindex` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n#### Returns\r\n\r\nJObject<br>\r\n\r\n### **ReadString(KismetExpression, Int32&)**\r\n\r\n```csharp\r\npublic static string ReadString(KismetExpression expr, Int32& index)\r\n```\r\n\r\n#### Parameters\r\n\r\n`expr` [KismetExpression](./uassetapi.kismet.bytecode.kismetexpression.md)<br>\r\n\r\n`index` [Int32&](https://docs.microsoft.com/en-us/dotnet/api/system.int32&)<br>\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.mainserializer.md",
    "content": "# MainSerializer\r\n\r\nNamespace: UAssetAPI\r\n\r\nThe main serializer for most property types in UAssetAPI.\r\n\r\n```csharp\r\npublic static class MainSerializer\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [MainSerializer](./uassetapi.mainserializer.md)\r\n\r\n## Fields\r\n\r\n### **AdditionalPropertyRegistry**\r\n\r\n```csharp\r\npublic static String[] AdditionalPropertyRegistry;\r\n```\r\n\r\n## Methods\r\n\r\n### **GetNamesOfAssembliesReferencedBy(Assembly)**\r\n\r\n```csharp\r\npublic static IEnumerable<string> GetNamesOfAssembliesReferencedBy(Assembly assembly)\r\n```\r\n\r\n#### Parameters\r\n\r\n`assembly` [Assembly](https://docs.microsoft.com/en-us/dotnet/api/system.reflection.assembly)<br>\r\n\r\n#### Returns\r\n\r\n[IEnumerable&lt;String&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1)<br>\r\n\r\n### **GenerateUnversionedHeader(List`1&, FName, FName, UAsset)**\r\n\r\nGenerates an unversioned header based on a list of properties, and sorts the list in the correct order to be serialized.\r\n\r\n```csharp\r\npublic static FUnversionedHeader GenerateUnversionedHeader(List`1& data, FName parentName, FName parentModulePath, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`data` [List`1&](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1&)<br>\r\nThe list of properties to sort and generate an unversioned header from.\r\n\r\n`parentName` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\nThe name of the parent of all the properties.\r\n\r\n`parentModulePath` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\nThe path to the module that the parent class/struct of this property is contained within.\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\nThe UAsset which the properties are contained within.\r\n\r\n#### Returns\r\n\r\n[FUnversionedHeader](./uassetapi.unversioned.funversionedheader.md)<br>\r\n\r\n### **TypeToClass(FName, FName, AncestryInfo, FName, FName, UAsset, AssetBinaryReader, Int32, EPropertyTagFlags, Int32, Boolean, Boolean, FPropertyTypeName)**\r\n\r\nInitializes the correct PropertyData class based off of serialized name, type, etc.\r\n\r\n```csharp\r\npublic static PropertyData TypeToClass(FName type, FName name, AncestryInfo ancestry, FName parentName, FName parentModulePath, UAsset asset, AssetBinaryReader reader, int leng, EPropertyTagFlags propertyTagFlags, int ArrayIndex, bool includeHeader, bool isZero, FPropertyTypeName propertyTypeName)\r\n```\r\n\r\n#### Parameters\r\n\r\n`type` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\nThe serialized type of this property.\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\nThe serialized name of this property.\r\n\r\n`ancestry` [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\nThe ancestry of the parent of this property.\r\n\r\n`parentName` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\nThe name of the parent class/struct of this property.\r\n\r\n`parentModulePath` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\nThe path to the module that the parent class/struct of this property is contained within.\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\nThe UAsset which this property is contained within.\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from. If left unspecified, you must call the [PropertyData.Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)](./uassetapi.propertytypes.objects.propertydata.md#readassetbinaryreader-boolean-int64-int64-propertyserializationcontext) method manually.\r\n\r\n`leng` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe length of this property on disk in bytes.\r\n\r\n`propertyTagFlags` [EPropertyTagFlags](./uassetapi.propertytypes.objects.epropertytagflags.md)<br>\r\nProperty tag flags, if available.\r\n\r\n`ArrayIndex` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe duplication index of this property.\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nDoes this property serialize its header in the current context?\r\n\r\n`isZero` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nIs the body of this property empty?\r\n\r\n`propertyTypeName` [FPropertyTypeName](./uassetapi.unrealtypes.fpropertytypename.md)<br>\r\nThe complete property type name, if available.\r\n\r\n#### Returns\r\n\r\n[PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\nA new PropertyData instance based off of the passed parameters.\r\n\r\n### **Read(AssetBinaryReader, AncestryInfo, FName, FName, FUnversionedHeader, Boolean)**\r\n\r\nReads a property into memory.\r\n\r\n```csharp\r\npublic static PropertyData Read(AssetBinaryReader reader, AncestryInfo ancestry, FName parentName, FName parentModulePath, FUnversionedHeader header, bool includeHeader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from. The underlying stream should be at the position of the property to be read.\r\n\r\n`ancestry` [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\nThe ancestry of the parent of this property.\r\n\r\n`parentName` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\nThe name of the parent class/struct of this property.\r\n\r\n`parentModulePath` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\nThe path to the module that the parent class/struct of this property is contained within.\r\n\r\n`header` [FUnversionedHeader](./uassetapi.unversioned.funversionedheader.md)<br>\r\nThe unversioned header to be used when reading this property. Leave null if none exists.\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nDoes this property serialize its header in the current context?\r\n\r\n#### Returns\r\n\r\n[PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\nThe property read from disk.\r\n\r\n### **ReadFProperty(AssetBinaryReader)**\r\n\r\nReads an FProperty into memory. Primarily used as a part of [StructExport](./uassetapi.exporttypes.structexport.md) serialization.\r\n\r\n```csharp\r\npublic static FProperty ReadFProperty(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from. The underlying stream should be at the position of the FProperty to be read.\r\n\r\n#### Returns\r\n\r\n[FProperty](./uassetapi.fieldtypes.fproperty.md)<br>\r\nThe FProperty read from disk.\r\n\r\n### **WriteFProperty(FProperty, AssetBinaryWriter)**\r\n\r\nSerializes an FProperty from memory.\r\n\r\n```csharp\r\npublic static void WriteFProperty(FProperty prop, AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`prop` [FProperty](./uassetapi.fieldtypes.fproperty.md)<br>\r\nThe FProperty to serialize.\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to serialize the FProperty to.\r\n\r\n### **ReadUProperty(AssetBinaryReader, FName)**\r\n\r\nReads a UProperty into memory. Primarily used as a part of [PropertyExport](./uassetapi.exporttypes.propertyexport.md) serialization.\r\n\r\n```csharp\r\npublic static UProperty ReadUProperty(AssetBinaryReader reader, FName serializedType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from. The underlying stream should be at the position of the UProperty to be read.\r\n\r\n`serializedType` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\nThe type of UProperty to be read.\r\n\r\n#### Returns\r\n\r\n[UProperty](./uassetapi.fieldtypes.uproperty.md)<br>\r\nThe FProperty read from disk.\r\n\r\n### **ReadUProperty(AssetBinaryReader, Type)**\r\n\r\nReads a UProperty into memory. Primarily used as a part of [PropertyExport](./uassetapi.exporttypes.propertyexport.md) serialization.\r\n\r\n```csharp\r\npublic static UProperty ReadUProperty(AssetBinaryReader reader, Type requestedType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from. The underlying stream should be at the position of the UProperty to be read.\r\n\r\n`requestedType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\nThe type of UProperty to be read.\r\n\r\n#### Returns\r\n\r\n[UProperty](./uassetapi.fieldtypes.uproperty.md)<br>\r\nThe FProperty read from disk.\r\n\r\n### **ReadUProperty&lt;T&gt;(AssetBinaryReader)**\r\n\r\nReads a UProperty into memory. Primarily used as a part of [PropertyExport](./uassetapi.exporttypes.propertyexport.md) serialization.\r\n\r\n```csharp\r\npublic static T ReadUProperty<T>(AssetBinaryReader reader)\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from. The underlying stream should be at the position of the UProperty to be read.\r\n\r\n#### Returns\r\n\r\nT<br>\r\nThe FProperty read from disk.\r\n\r\n### **WriteUProperty(UProperty, AssetBinaryWriter)**\r\n\r\nSerializes a UProperty from memory.\r\n\r\n```csharp\r\npublic static void WriteUProperty(UProperty prop, AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`prop` [UProperty](./uassetapi.fieldtypes.uproperty.md)<br>\r\nThe UProperty to serialize.\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to serialize the UProperty to.\r\n\r\n### **Write(PropertyData, AssetBinaryWriter, Boolean)**\r\n\r\nSerializes a property from memory.\r\n\r\n```csharp\r\npublic static int Write(PropertyData property, AssetBinaryWriter writer, bool includeHeader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`property` [PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\nThe property to serialize.\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to serialize the property to.\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nDoes this property serialize its header in the current context?\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe serial offset where the length of the property is stored.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.namemapoutofrangeexception.md",
    "content": "# NameMapOutOfRangeException\r\n\r\nNamespace: UAssetAPI\r\n\r\n```csharp\r\npublic class NameMapOutOfRangeException : System.FormatException, System.Runtime.Serialization.ISerializable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Exception](https://docs.microsoft.com/en-us/dotnet/api/system.exception) → [SystemException](https://docs.microsoft.com/en-us/dotnet/api/system.systemexception) → [FormatException](https://docs.microsoft.com/en-us/dotnet/api/system.formatexception) → [NameMapOutOfRangeException](./uassetapi.namemapoutofrangeexception.md)<br>\r\nImplements [ISerializable](https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.iserializable)\r\n\r\n## Fields\r\n\r\n### **RequiredName**\r\n\r\n```csharp\r\npublic FString RequiredName;\r\n```\r\n\r\n## Properties\r\n\r\n### **TargetSite**\r\n\r\n```csharp\r\npublic MethodBase TargetSite { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[MethodBase](https://docs.microsoft.com/en-us/dotnet/api/system.reflection.methodbase)<br>\r\n\r\n### **Message**\r\n\r\n```csharp\r\npublic string Message { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **Data**\r\n\r\n```csharp\r\npublic IDictionary Data { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[IDictionary](https://docs.microsoft.com/en-us/dotnet/api/system.collections.idictionary)<br>\r\n\r\n### **InnerException**\r\n\r\n```csharp\r\npublic Exception InnerException { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Exception](https://docs.microsoft.com/en-us/dotnet/api/system.exception)<br>\r\n\r\n### **HelpLink**\r\n\r\n```csharp\r\npublic string HelpLink { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **Source**\r\n\r\n```csharp\r\npublic string Source { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **HResult**\r\n\r\n```csharp\r\npublic int HResult { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **StackTrace**\r\n\r\n```csharp\r\npublic string StackTrace { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **NameMapOutOfRangeException(FString)**\r\n\r\n```csharp\r\npublic NameMapOutOfRangeException(FString requiredName)\r\n```\r\n\r\n#### Parameters\r\n\r\n`requiredName` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.pakbuilder.md",
    "content": "# PakBuilder\r\n\r\nNamespace: UAssetAPI\r\n\r\n```csharp\r\npublic class PakBuilder : Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid, System.IDisposable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [CriticalFinalizerObject](https://docs.microsoft.com/en-us/dotnet/api/system.runtime.constrainedexecution.criticalfinalizerobject) → [SafeHandle](https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.safehandle) → [SafeHandleZeroOrMinusOneIsInvalid](https://docs.microsoft.com/en-us/dotnet/api/microsoft.win32.safehandles.safehandlezeroorminusoneisinvalid) → [PakBuilder](./uassetapi.pakbuilder.md)<br>\r\nImplements [IDisposable](https://docs.microsoft.com/en-us/dotnet/api/system.idisposable)\r\n\r\n## Properties\r\n\r\n### **IsInvalid**\r\n\r\n```csharp\r\npublic bool IsInvalid { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **IsClosed**\r\n\r\n```csharp\r\npublic bool IsClosed { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **PakBuilder()**\r\n\r\n```csharp\r\npublic PakBuilder()\r\n```\r\n\r\n## Methods\r\n\r\n### **ReleaseHandle()**\r\n\r\n```csharp\r\nprotected bool ReleaseHandle()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Key(Byte[])**\r\n\r\n```csharp\r\npublic PakBuilder Key(Byte[] key)\r\n```\r\n\r\n#### Parameters\r\n\r\n`key` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n#### Returns\r\n\r\n[PakBuilder](./uassetapi.pakbuilder.md)<br>\r\n\r\n### **Compression(PakCompression[])**\r\n\r\n```csharp\r\npublic PakBuilder Compression(PakCompression[] compressions)\r\n```\r\n\r\n#### Parameters\r\n\r\n`compressions` [PakCompression[]](./uassetapi.pakcompression.md)<br>\r\n\r\n#### Returns\r\n\r\n[PakBuilder](./uassetapi.pakbuilder.md)<br>\r\n\r\n### **Writer(Stream, PakVersion, String, UInt64)**\r\n\r\n```csharp\r\npublic PakWriter Writer(Stream stream, PakVersion version, string mountPoint, ulong pathHashSeed)\r\n```\r\n\r\n#### Parameters\r\n\r\n`stream` [Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n`version` [PakVersion](./uassetapi.pakversion.md)<br>\r\n\r\n`mountPoint` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`pathHashSeed` [UInt64](https://docs.microsoft.com/en-us/dotnet/api/system.uint64)<br>\r\n\r\n#### Returns\r\n\r\n[PakWriter](./uassetapi.pakwriter.md)<br>\r\n\r\n### **Reader(Stream)**\r\n\r\n```csharp\r\npublic PakReader Reader(Stream stream)\r\n```\r\n\r\n#### Parameters\r\n\r\n`stream` [Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n#### Returns\r\n\r\n[PakReader](./uassetapi.pakreader.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.pakcompression.md",
    "content": "# PakCompression\r\n\r\nNamespace: UAssetAPI\r\n\r\n```csharp\r\npublic enum PakCompression\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [PakCompression](./uassetapi.pakcompression.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.pakreader.md",
    "content": "# PakReader\r\n\r\nNamespace: UAssetAPI\r\n\r\n```csharp\r\npublic class PakReader : Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid, System.IDisposable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [CriticalFinalizerObject](https://docs.microsoft.com/en-us/dotnet/api/system.runtime.constrainedexecution.criticalfinalizerobject) → [SafeHandle](https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.safehandle) → [SafeHandleZeroOrMinusOneIsInvalid](https://docs.microsoft.com/en-us/dotnet/api/microsoft.win32.safehandles.safehandlezeroorminusoneisinvalid) → [PakReader](./uassetapi.pakreader.md)<br>\r\nImplements [IDisposable](https://docs.microsoft.com/en-us/dotnet/api/system.idisposable)\r\n\r\n## Properties\r\n\r\n### **IsInvalid**\r\n\r\n```csharp\r\npublic bool IsInvalid { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **IsClosed**\r\n\r\n```csharp\r\npublic bool IsClosed { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **PakReader(IntPtr, Stream)**\r\n\r\n```csharp\r\npublic PakReader(IntPtr handle, Stream stream)\r\n```\r\n\r\n#### Parameters\r\n\r\n`handle` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n`stream` [Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n## Methods\r\n\r\n### **ReleaseHandle()**\r\n\r\n```csharp\r\nprotected bool ReleaseHandle()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **GetMountPoint()**\r\n\r\n```csharp\r\npublic string GetMountPoint()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **GetVersion()**\r\n\r\n```csharp\r\npublic PakVersion GetVersion()\r\n```\r\n\r\n#### Returns\r\n\r\n[PakVersion](./uassetapi.pakversion.md)<br>\r\n\r\n### **Get(Stream, String)**\r\n\r\n```csharp\r\npublic Byte[] Get(Stream stream, string path)\r\n```\r\n\r\n#### Parameters\r\n\r\n`stream` [Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n`path` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n#### Returns\r\n\r\n[Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **Files()**\r\n\r\n```csharp\r\npublic String[] Files()\r\n```\r\n\r\n#### Returns\r\n\r\n[String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.pakversion.md",
    "content": "# PakVersion\r\n\r\nNamespace: UAssetAPI\r\n\r\n```csharp\r\npublic enum PakVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [PakVersion](./uassetapi.pakversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.pakwriter.md",
    "content": "# PakWriter\r\n\r\nNamespace: UAssetAPI\r\n\r\n```csharp\r\npublic class PakWriter : Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid, System.IDisposable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [CriticalFinalizerObject](https://docs.microsoft.com/en-us/dotnet/api/system.runtime.constrainedexecution.criticalfinalizerobject) → [SafeHandle](https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.safehandle) → [SafeHandleZeroOrMinusOneIsInvalid](https://docs.microsoft.com/en-us/dotnet/api/microsoft.win32.safehandles.safehandlezeroorminusoneisinvalid) → [PakWriter](./uassetapi.pakwriter.md)<br>\r\nImplements [IDisposable](https://docs.microsoft.com/en-us/dotnet/api/system.idisposable)\r\n\r\n## Properties\r\n\r\n### **IsInvalid**\r\n\r\n```csharp\r\npublic bool IsInvalid { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **IsClosed**\r\n\r\n```csharp\r\npublic bool IsClosed { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **PakWriter(IntPtr, IntPtr)**\r\n\r\n```csharp\r\npublic PakWriter(IntPtr handle, IntPtr streamCtx)\r\n```\r\n\r\n#### Parameters\r\n\r\n`handle` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n`streamCtx` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n## Methods\r\n\r\n### **ReleaseHandle()**\r\n\r\n```csharp\r\nprotected bool ReleaseHandle()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **WriteFile(String, Byte[])**\r\n\r\n```csharp\r\npublic void WriteFile(string path, Byte[] data)\r\n```\r\n\r\n#### Parameters\r\n\r\n`path` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`data` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **WriteIndex()**\r\n\r\n```csharp\r\npublic void WriteIndex()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.ancestryinfo.md",
    "content": "# AncestryInfo\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\n```csharp\r\npublic class AncestryInfo : System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Ancestors**\r\n\r\n```csharp\r\npublic List<FName> Ancestors;\r\n```\r\n\r\n## Properties\r\n\r\n### **Parent**\r\n\r\n```csharp\r\npublic FName Parent { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n## Constructors\r\n\r\n### **AncestryInfo()**\r\n\r\n```csharp\r\npublic AncestryInfo()\r\n```\r\n\r\n## Methods\r\n\r\n### **Clone()**\r\n\r\n```csharp\r\npublic object Clone()\r\n```\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **CloneWithoutParent()**\r\n\r\n```csharp\r\npublic AncestryInfo CloneWithoutParent()\r\n```\r\n\r\n#### Returns\r\n\r\n[AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\n\r\n### **Initialize(AncestryInfo, FName, FName)**\r\n\r\n```csharp\r\npublic void Initialize(AncestryInfo ancestors, FName dad, FName modulePath)\r\n```\r\n\r\n#### Parameters\r\n\r\n`ancestors` [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\n\r\n`dad` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`modulePath` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **SetAsParent(FName, FName)**\r\n\r\n```csharp\r\npublic void SetAsParent(FName dad, FName modulePath)\r\n```\r\n\r\n#### Parameters\r\n\r\n`dad` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`modulePath` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.arraypropertydata.md",
    "content": "# ArrayPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes an array.\r\n\r\n```csharp\r\npublic class ArrayPropertyData : PropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;PropertyData[]&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [ArrayPropertyData](./uassetapi.propertytypes.objects.arraypropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **ArrayType**\r\n\r\n```csharp\r\npublic FName ArrayType;\r\n```\r\n\r\n### **DummyStruct**\r\n\r\n```csharp\r\npublic StructPropertyData DummyStruct;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic PropertyData[] Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[PropertyData[]](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **ArrayPropertyData(FName)**\r\n\r\n```csharp\r\npublic ArrayPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **ArrayPropertyData()**\r\n\r\n```csharp\r\npublic ArrayPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **ShouldSerializeDummyStruct()**\r\n\r\n```csharp\r\npublic bool ShouldSerializeDummyStruct()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **ResolveAncestries(UAsset, AncestryInfo)**\r\n\r\n```csharp\r\npublic void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`ancestrySoFar` [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **HandleCloned(PropertyData)**\r\n\r\n```csharp\r\nprotected void HandleCloned(PropertyData res)\r\n```\r\n\r\n#### Parameters\r\n\r\n`res` [PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.assetobjectpropertydata.md",
    "content": "# AssetObjectPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a reference variable to another object which may be null, and may become valid or invalid at any point. Near synonym for [SoftObjectPropertyData](./uassetapi.propertytypes.objects.softobjectpropertydata.md).\r\n\r\n```csharp\r\npublic class AssetObjectPropertyData : PropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FString&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [AssetObjectPropertyData](./uassetapi.propertytypes.objects.assetobjectpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **ID**\r\n\r\n```csharp\r\npublic uint ID;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FString Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **AssetObjectPropertyData(FName)**\r\n\r\n```csharp\r\npublic AssetObjectPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **AssetObjectPropertyData()**\r\n\r\n```csharp\r\npublic AssetObjectPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.boolpropertydata.md",
    "content": "# BoolPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a boolean ([Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)).\r\n\r\n```csharp\r\npublic class BoolPropertyData : PropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;Boolean&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BoolPropertyData](./uassetapi.propertytypes.objects.boolpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **DefaultValue**\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic bool Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **BoolPropertyData(FName)**\r\n\r\n```csharp\r\npublic BoolPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **BoolPropertyData()**\r\n\r\n```csharp\r\npublic BoolPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.bytepropertydata.md",
    "content": "# BytePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a byte or an enumeration value.\r\n\r\n```csharp\r\npublic class BytePropertyData : PropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [BytePropertyData](./uassetapi.propertytypes.objects.bytepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **ByteType**\r\n\r\n```csharp\r\npublic BytePropertyType ByteType;\r\n```\r\n\r\n### **EnumType**\r\n\r\n```csharp\r\npublic FName EnumType;\r\n```\r\n\r\n### **Value**\r\n\r\n```csharp\r\npublic byte Value;\r\n```\r\n\r\n### **EnumValue**\r\n\r\n```csharp\r\npublic FName EnumValue;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **BytePropertyData(FName)**\r\n\r\n```csharp\r\npublic BytePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **BytePropertyData()**\r\n\r\n```csharp\r\npublic BytePropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **ShouldSerializeValue()**\r\n\r\n```csharp\r\npublic bool ShouldSerializeValue()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **ShouldSerializeEnumValue()**\r\n\r\n```csharp\r\npublic bool ShouldSerializeEnumValue()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **GetEnumBase()**\r\n\r\n```csharp\r\npublic FName GetEnumBase()\r\n```\r\n\r\n#### Returns\r\n\r\n[FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **GetEnumFull()**\r\n\r\n```csharp\r\npublic FName GetEnumFull()\r\n```\r\n\r\n#### Returns\r\n\r\n[FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.bytepropertytype.md",
    "content": "# BytePropertyType\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\n```csharp\r\npublic enum BytePropertyType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [BytePropertyType](./uassetapi.propertytypes.objects.bytepropertytype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.delegatepropertydata.md",
    "content": "# DelegatePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a function bound to an Object.\r\n\r\n```csharp\r\npublic class DelegatePropertyData : PropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FDelegate&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [DelegatePropertyData](./uassetapi.propertytypes.objects.delegatepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FDelegate Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FDelegate](./uassetapi.propertytypes.objects.fdelegate.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **DelegatePropertyData(FName)**\r\n\r\n```csharp\r\npublic DelegatePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **DelegatePropertyData()**\r\n\r\n```csharp\r\npublic DelegatePropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **HandleCloned(PropertyData)**\r\n\r\n```csharp\r\nprotected void HandleCloned(PropertyData res)\r\n```\r\n\r\n#### Parameters\r\n\r\n`res` [PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.doublepropertydata.md",
    "content": "# DoublePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes an IEEE 64-bit floating point variable ([Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)).\r\n\r\n```csharp\r\npublic class DoublePropertyData : PropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [DoublePropertyData](./uassetapi.propertytypes.objects.doublepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **Value**\r\n\r\nThe double that this property represents.\r\n\r\n```csharp\r\npublic double Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **DefaultValue**\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **DoublePropertyData(FName)**\r\n\r\n```csharp\r\npublic DoublePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **DoublePropertyData()**\r\n\r\n```csharp\r\npublic DoublePropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.enumpropertydata.md",
    "content": "# EnumPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes an enumeration value.\r\n\r\n```csharp\r\npublic class EnumPropertyData : PropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FName&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [EnumPropertyData](./uassetapi.propertytypes.objects.enumpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **EnumType**\r\n\r\n```csharp\r\npublic FName EnumType;\r\n```\r\n\r\n### **InnerType**\r\n\r\nOnly used with unversioned properties.\r\n\r\n```csharp\r\npublic FName InnerType;\r\n```\r\n\r\n### **InvalidEnumIndexFallbackPrefix**\r\n\r\n```csharp\r\npublic static string InvalidEnumIndexFallbackPrefix;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FName Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **EnumPropertyData(FName)**\r\n\r\n```csharp\r\npublic EnumPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **EnumPropertyData()**\r\n\r\n```csharp\r\npublic EnumPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **InitializeZero(AssetBinaryReader)**\r\n\r\n```csharp\r\ninternal void InitializeZero(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **HandleCloned(PropertyData)**\r\n\r\n```csharp\r\nprotected void HandleCloned(PropertyData res)\r\n```\r\n\r\n#### Parameters\r\n\r\n`res` [PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.eoverriddenpropertyoperation.md",
    "content": "# EOverriddenPropertyOperation\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\n```csharp\r\npublic enum EOverriddenPropertyOperation\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EOverriddenPropertyOperation](./uassetapi.propertytypes.objects.eoverriddenpropertyoperation.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| None | 0 | no overridden operation was recorded on this property |\r\n| Modified | 1 | some sub property has recorded overridden operation |\r\n| Replace | 2 | everything has been overridden from this property down to every sub property/sub object |\r\n| Add | 3 | this element was added in the container |\r\n| Remove | 4 | this element was removed from the container |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.epropertytagextension.md",
    "content": "# EPropertyTagExtension\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\n```csharp\r\npublic enum EPropertyTagExtension\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPropertyTagExtension](./uassetapi.propertytypes.objects.epropertytagextension.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.epropertytagflags.md",
    "content": "# EPropertyTagFlags\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\n```csharp\r\npublic enum EPropertyTagFlags\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPropertyTagFlags](./uassetapi.propertytypes.objects.epropertytagflags.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.etextflag.md",
    "content": "# ETextFlag\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\n```csharp\r\npublic enum ETextFlag\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETextFlag](./uassetapi.propertytypes.objects.etextflag.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.etransformtype.md",
    "content": "# ETransformType\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\n```csharp\r\npublic enum ETransformType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETransformType](./uassetapi.propertytypes.objects.etransformtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.fdelegate.md",
    "content": "# FDelegate\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a function bound to an Object.\r\n\r\n```csharp\r\npublic class FDelegate\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FDelegate](./uassetapi.propertytypes.objects.fdelegate.md)\r\n\r\n## Fields\r\n\r\n### **Object**\r\n\r\nReferences the main actor export\r\n\r\n```csharp\r\npublic FPackageIndex Object;\r\n```\r\n\r\n### **Delegate**\r\n\r\nThe name of the delegate\r\n\r\n```csharp\r\npublic FName Delegate;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FDelegate(FPackageIndex, FName)**\r\n\r\n```csharp\r\npublic FDelegate(FPackageIndex _object, FName delegate)\r\n```\r\n\r\n#### Parameters\r\n\r\n`_object` [FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\n\r\n`delegate` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **FDelegate()**\r\n\r\n```csharp\r\npublic FDelegate()\r\n```\r\n\r\n### **FDelegate(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FDelegate(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.fformatargumentdata.md",
    "content": "# FFormatArgumentData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\n```csharp\r\npublic class FFormatArgumentData\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FFormatArgumentData](./uassetapi.propertytypes.objects.fformatargumentdata.md)\r\n\r\n## Fields\r\n\r\n### **ArgumentName**\r\n\r\n```csharp\r\npublic FString ArgumentName;\r\n```\r\n\r\n### **ArgumentValue**\r\n\r\n```csharp\r\npublic FFormatArgumentValue ArgumentValue;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FFormatArgumentData()**\r\n\r\n```csharp\r\npublic FFormatArgumentData()\r\n```\r\n\r\n### **FFormatArgumentData(FString, FFormatArgumentValue)**\r\n\r\n```csharp\r\npublic FFormatArgumentData(FString name, FFormatArgumentValue value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n`value` [FFormatArgumentValue](./uassetapi.propertytypes.objects.fformatargumentvalue.md)<br>\r\n\r\n### **FFormatArgumentData(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FFormatArgumentData(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.fformatargumentvalue.md",
    "content": "# FFormatArgumentValue\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\n```csharp\r\npublic class FFormatArgumentValue\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FFormatArgumentValue](./uassetapi.propertytypes.objects.fformatargumentvalue.md)\r\n\r\n## Fields\r\n\r\n### **Type**\r\n\r\n```csharp\r\npublic EFormatArgumentType Type;\r\n```\r\n\r\n### **Value**\r\n\r\n```csharp\r\npublic object Value;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FFormatArgumentValue()**\r\n\r\n```csharp\r\npublic FFormatArgumentValue()\r\n```\r\n\r\n### **FFormatArgumentValue(EFormatArgumentType, Object)**\r\n\r\n```csharp\r\npublic FFormatArgumentValue(EFormatArgumentType type, object value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`type` [EFormatArgumentType](./uassetapi.unrealtypes.engineenums.eformatargumenttype.md)<br>\r\n\r\n`value` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **FFormatArgumentValue(AssetBinaryReader, Boolean)**\r\n\r\n```csharp\r\npublic FFormatArgumentValue(AssetBinaryReader reader, bool isArgumentData)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`isArgumentData` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter, Boolean)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool isArgumentData)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`isArgumentData` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.fieldpathpropertydata.md",
    "content": "# FieldPathPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a reference variable to another object which may be null, and may become valid or invalid at any point. Near synonym for [SoftObjectPropertyData](./uassetapi.propertytypes.objects.softobjectpropertydata.md).\r\n\r\n```csharp\r\npublic class FieldPathPropertyData : BasePropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FFieldPath&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FFieldPath&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [FieldPathPropertyData](./uassetapi.propertytypes.objects.fieldpathpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FFieldPath Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FFieldPath](./uassetapi.unrealtypes.ffieldpath.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **FieldPathPropertyData(FName)**\r\n\r\n```csharp\r\npublic FieldPathPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **FieldPathPropertyData()**\r\n\r\n```csharp\r\npublic FieldPathPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.floatpropertydata.md",
    "content": "# FloatPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes an IEEE 32-bit floating point variable ([Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)).\r\n\r\n```csharp\r\npublic class FloatPropertyData : PropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [FloatPropertyData](./uassetapi.propertytypes.objects.floatpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **Value**\r\n\r\nThe float that this property represents.\r\n\r\n```csharp\r\npublic float Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **DefaultValue**\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **FloatPropertyData(FName)**\r\n\r\n```csharp\r\npublic FloatPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **FloatPropertyData()**\r\n\r\n```csharp\r\npublic FloatPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.fnumberformattingoptions.md",
    "content": "# FNumberFormattingOptions\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\n```csharp\r\npublic class FNumberFormattingOptions\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FNumberFormattingOptions](./uassetapi.propertytypes.objects.fnumberformattingoptions.md)\r\n\r\n## Fields\r\n\r\n### **AlwaysSign**\r\n\r\n```csharp\r\npublic bool AlwaysSign;\r\n```\r\n\r\n### **UseGrouping**\r\n\r\n```csharp\r\npublic bool UseGrouping;\r\n```\r\n\r\n### **RoundingMode**\r\n\r\n```csharp\r\npublic ERoundingMode RoundingMode;\r\n```\r\n\r\n### **MinimumIntegralDigits**\r\n\r\n```csharp\r\npublic int MinimumIntegralDigits;\r\n```\r\n\r\n### **MaximumIntegralDigits**\r\n\r\n```csharp\r\npublic int MaximumIntegralDigits;\r\n```\r\n\r\n### **MinimumFractionalDigits**\r\n\r\n```csharp\r\npublic int MinimumFractionalDigits;\r\n```\r\n\r\n### **MaximumFractionalDigits**\r\n\r\n```csharp\r\npublic int MaximumFractionalDigits;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FNumberFormattingOptions()**\r\n\r\n```csharp\r\npublic FNumberFormattingOptions()\r\n```\r\n\r\n### **FNumberFormattingOptions(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FNumberFormattingOptions(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.fsoftobjectpath.md",
    "content": "# FSoftObjectPath\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nA reference variable to another object which may be null, and may become valid or invalid at any point.\r\n\r\n```csharp\r\npublic struct FSoftObjectPath\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FSoftObjectPath](./uassetapi.propertytypes.objects.fsoftobjectpath.md)<br>\r\nImplements [IEquatable&lt;FSoftObjectPath&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.iequatable-1), [IStruct&lt;FSoftObjectPath&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Fields\r\n\r\n### **AssetPath**\r\n\r\nAsset path, patch to a top level object in a package. This is /package/path.assetname/\r\n\r\n```csharp\r\npublic FTopLevelAssetPath AssetPath;\r\n```\r\n\r\n### **SubPathString**\r\n\r\nOptional FString for subobject within an asset. This is the sub path after the :\r\n\r\n```csharp\r\npublic FString SubPathString;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FSoftObjectPath(FName, FName, FString)**\r\n\r\n```csharp\r\nFSoftObjectPath(FName packageName, FName assetName, FString subPathString)\r\n```\r\n\r\n#### Parameters\r\n\r\n`packageName` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`assetName` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`subPathString` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **FSoftObjectPath(FTopLevelAssetPath, FString)**\r\n\r\n```csharp\r\nFSoftObjectPath(FTopLevelAssetPath assetPath, FString subPathString)\r\n```\r\n\r\n#### Parameters\r\n\r\n`assetPath` [FTopLevelAssetPath](./uassetapi.propertytypes.objects.ftoplevelassetpath.md)<br>\r\n\r\n`subPathString` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **FSoftObjectPath(AssetBinaryReader, Boolean)**\r\n\r\n```csharp\r\nFSoftObjectPath(AssetBinaryReader reader, bool allowIndex)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`allowIndex` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFSoftObjectPath Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FSoftObjectPath](./uassetapi.propertytypes.objects.fsoftobjectpath.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer, bool allowIndex)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`allowIndex` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Equals(FSoftObjectPath)**\r\n\r\n```csharp\r\nbool Equals(FSoftObjectPath other)\r\n```\r\n\r\n#### Parameters\r\n\r\n`other` [FSoftObjectPath](./uassetapi.propertytypes.objects.fsoftobjectpath.md)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Equals(Object)**\r\n\r\n```csharp\r\nbool Equals(object obj)\r\n```\r\n\r\n#### Parameters\r\n\r\n`obj` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **GetHashCode()**\r\n\r\n```csharp\r\nint GetHashCode()\r\n```\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\nstring ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFSoftObjectPath FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FSoftObjectPath](./uassetapi.propertytypes.objects.fsoftobjectpath.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.ftoplevelassetpath.md",
    "content": "# FTopLevelAssetPath\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\n```csharp\r\npublic struct FTopLevelAssetPath\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FTopLevelAssetPath](./uassetapi.propertytypes.objects.ftoplevelassetpath.md)\r\n\r\n## Fields\r\n\r\n### **PackageName**\r\n\r\nName of the package containing the asset e.g. /Path/To/Package\r\n If less than 5.1, this is null\r\n\r\n```csharp\r\npublic FName PackageName;\r\n```\r\n\r\n### **AssetName**\r\n\r\nName of the asset within the package e.g. 'AssetName'.\r\n If less than 5.1, this contains the full path instead\r\n\r\n```csharp\r\npublic FName AssetName;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FTopLevelAssetPath(FName, FName)**\r\n\r\n```csharp\r\nFTopLevelAssetPath(FName packageName, FName assetName)\r\n```\r\n\r\n#### Parameters\r\n\r\n`packageName` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`assetName` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.int16propertydata.md",
    "content": "# Int16PropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a 16-bit signed integer variable ([Int16](https://docs.microsoft.com/en-us/dotnet/api/system.int16)).\r\n\r\n```csharp\r\npublic class Int16PropertyData : PropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;Int16&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [Int16PropertyData](./uassetapi.propertytypes.objects.int16propertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **DefaultValue**\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic short Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Int16](https://docs.microsoft.com/en-us/dotnet/api/system.int16)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **Int16PropertyData(FName)**\r\n\r\n```csharp\r\npublic Int16PropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **Int16PropertyData()**\r\n\r\n```csharp\r\npublic Int16PropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.int64propertydata.md",
    "content": "# Int64PropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a 64-bit signed integer variable ([Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)).\r\n\r\n```csharp\r\npublic class Int64PropertyData : PropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;Int64&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [Int64PropertyData](./uassetapi.propertytypes.objects.int64propertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **DefaultValue**\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic long Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **Int64PropertyData(FName)**\r\n\r\n```csharp\r\npublic Int64PropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **Int64PropertyData()**\r\n\r\n```csharp\r\npublic Int64PropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.int8propertydata.md",
    "content": "# Int8PropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes an 8-bit signed integer variable ([SByte](https://docs.microsoft.com/en-us/dotnet/api/system.sbyte)).\r\n\r\n```csharp\r\npublic class Int8PropertyData : PropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;SByte&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [Int8PropertyData](./uassetapi.propertytypes.objects.int8propertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **DefaultValue**\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic sbyte Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[SByte](https://docs.microsoft.com/en-us/dotnet/api/system.sbyte)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **Int8PropertyData(FName)**\r\n\r\n```csharp\r\npublic Int8PropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **Int8PropertyData()**\r\n\r\n```csharp\r\npublic Int8PropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.interfacepropertydata.md",
    "content": "# InterfacePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a reference variable to another object (import/export) which may be null ([FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)).\r\n\r\n```csharp\r\npublic class InterfacePropertyData : ObjectPropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FPackageIndex&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [ObjectPropertyData](./uassetapi.propertytypes.objects.objectpropertydata.md) → [InterfacePropertyData](./uassetapi.propertytypes.objects.interfacepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **DefaultValue**\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FPackageIndex Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **InterfacePropertyData(FName)**\r\n\r\n```csharp\r\npublic InterfacePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **InterfacePropertyData()**\r\n\r\n```csharp\r\npublic InterfacePropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.intpropertydata.md",
    "content": "# IntPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a 32-bit signed integer variable ([Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)).\r\n\r\n```csharp\r\npublic class IntPropertyData : PropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;Int32&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [IntPropertyData](./uassetapi.propertytypes.objects.intpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **DefaultValue**\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic int Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **IntPropertyData(FName)**\r\n\r\n```csharp\r\npublic IntPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **IntPropertyData()**\r\n\r\n```csharp\r\npublic IntPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.istruct-1.md",
    "content": "# IStruct&lt;T&gt;\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\n```csharp\r\npublic interface IStruct<T>\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nT Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\nT<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nT FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\nT<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.mappropertydata.md",
    "content": "# MapPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a map.\r\n\r\n```csharp\r\npublic class MapPropertyData : PropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [MapPropertyData](./uassetapi.propertytypes.objects.mappropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Value**\r\n\r\nThe map that this property represents.\r\n\r\n```csharp\r\npublic TMap<PropertyData, PropertyData> Value;\r\n```\r\n\r\n### **KeyType**\r\n\r\nUsed when the length of the map is zero.\r\n\r\n```csharp\r\npublic FName KeyType;\r\n```\r\n\r\n### **ValueType**\r\n\r\nUsed when the length of the map is zero.\r\n\r\n```csharp\r\npublic FName ValueType;\r\n```\r\n\r\n### **KeysToRemove**\r\n\r\n```csharp\r\npublic PropertyData[] KeysToRemove;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MapPropertyData(FName)**\r\n\r\n```csharp\r\npublic MapPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MapPropertyData()**\r\n\r\n```csharp\r\npublic MapPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **ShouldSerializeKeyType()**\r\n\r\n```csharp\r\npublic bool ShouldSerializeKeyType()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **ShouldSerializeValueType()**\r\n\r\n```csharp\r\npublic bool ShouldSerializeValueType()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **ResolveAncestries(UAsset, AncestryInfo)**\r\n\r\n```csharp\r\npublic void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`ancestrySoFar` [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **HandleCloned(PropertyData)**\r\n\r\n```csharp\r\nprotected void HandleCloned(PropertyData res)\r\n```\r\n\r\n#### Parameters\r\n\r\n`res` [PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.multicastdelegatepropertydata.md",
    "content": "# MulticastDelegatePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a list of functions bound to an Object.\r\n\r\n```csharp\r\npublic class MulticastDelegatePropertyData : PropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FDelegate[]&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MulticastDelegatePropertyData](./uassetapi.propertytypes.objects.multicastdelegatepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FDelegate[] Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FDelegate[]](./uassetapi.propertytypes.objects.fdelegate.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MulticastDelegatePropertyData(FName)**\r\n\r\n```csharp\r\npublic MulticastDelegatePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MulticastDelegatePropertyData()**\r\n\r\n```csharp\r\npublic MulticastDelegatePropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **HandleCloned(PropertyData)**\r\n\r\n```csharp\r\nprotected void HandleCloned(PropertyData res)\r\n```\r\n\r\n#### Parameters\r\n\r\n`res` [PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.multicastinlinedelegatepropertydata.md",
    "content": "# MulticastInlineDelegatePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a list of functions bound to an Object.\r\n\r\n```csharp\r\npublic class MulticastInlineDelegatePropertyData : MulticastDelegatePropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FDelegate[]&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MulticastDelegatePropertyData](./uassetapi.propertytypes.objects.multicastdelegatepropertydata.md) → [MulticastInlineDelegatePropertyData](./uassetapi.propertytypes.objects.multicastinlinedelegatepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FDelegate[] Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FDelegate[]](./uassetapi.propertytypes.objects.fdelegate.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MulticastInlineDelegatePropertyData(FName)**\r\n\r\n```csharp\r\npublic MulticastInlineDelegatePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MulticastInlineDelegatePropertyData()**\r\n\r\n```csharp\r\npublic MulticastInlineDelegatePropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.multicastsparsedelegatepropertydata.md",
    "content": "# MulticastSparseDelegatePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a list of functions bound to an Object.\r\n\r\n```csharp\r\npublic class MulticastSparseDelegatePropertyData : MulticastDelegatePropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FDelegate[]&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MulticastDelegatePropertyData](./uassetapi.propertytypes.objects.multicastdelegatepropertydata.md) → [MulticastSparseDelegatePropertyData](./uassetapi.propertytypes.objects.multicastsparsedelegatepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FDelegate[] Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FDelegate[]](./uassetapi.propertytypes.objects.fdelegate.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MulticastSparseDelegatePropertyData(FName)**\r\n\r\n```csharp\r\npublic MulticastSparseDelegatePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MulticastSparseDelegatePropertyData()**\r\n\r\n```csharp\r\npublic MulticastSparseDelegatePropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.namepropertydata.md",
    "content": "# NamePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes an [FName](./uassetapi.unrealtypes.fname.md).\r\n\r\n```csharp\r\npublic class NamePropertyData : PropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FName&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [NamePropertyData](./uassetapi.propertytypes.objects.namepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FName Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **NamePropertyData(FName)**\r\n\r\n```csharp\r\npublic NamePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **NamePropertyData()**\r\n\r\n```csharp\r\npublic NamePropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **CanBeZero(UAsset)**\r\n\r\n```csharp\r\npublic bool CanBeZero(UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.objectpropertydata.md",
    "content": "# ObjectPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a reference variable to another object (import/export) which may be null ([FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)).\r\n\r\n```csharp\r\npublic class ObjectPropertyData : PropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FPackageIndex&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [ObjectPropertyData](./uassetapi.propertytypes.objects.objectpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **DefaultValue**\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FPackageIndex Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **ObjectPropertyData(FName)**\r\n\r\n```csharp\r\npublic ObjectPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **ObjectPropertyData()**\r\n\r\n```csharp\r\npublic ObjectPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **IsImport()**\r\n\r\nReturns true if this ObjectProperty represents an import.\r\n\r\n```csharp\r\npublic bool IsImport()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nIs this ObjectProperty an import?\r\n\r\n### **IsExport()**\r\n\r\nReturns true if this ObjectProperty represents an export.\r\n\r\n```csharp\r\npublic bool IsExport()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nIs this ObjectProperty an export?\r\n\r\n### **IsNull()**\r\n\r\nReturn true if this ObjectProperty represents null (i.e. neither an import nor an export)\r\n\r\n```csharp\r\npublic bool IsNull()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nDoes this ObjectProperty represent null?\r\n\r\n### **ToImport(UAsset)**\r\n\r\nCheck that this ObjectProperty is an import index and return the corresponding import.\r\n\r\n```csharp\r\npublic Import ToImport(UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[Import](./uassetapi.import.md)<br>\r\nThe import that this ObjectProperty represents in the import map.\r\n\r\n#### Exceptions\r\n\r\n[InvalidOperationException](https://docs.microsoft.com/en-us/dotnet/api/system.invalidoperationexception)<br>\r\nThrown when this is not an index into the import map.\r\n\r\n### **ToExport(UAsset)**\r\n\r\nCheck that this ObjectProperty is an export index and return the corresponding export.\r\n\r\n```csharp\r\npublic Export ToExport(UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[Export](./uassetapi.exporttypes.export.md)<br>\r\nThe export that this ObjectProperty represents in the the export map.\r\n\r\n#### Exceptions\r\n\r\n[InvalidOperationException](https://docs.microsoft.com/en-us/dotnet/api/system.invalidoperationexception)<br>\r\nThrown when this is not an index into the export map.\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.propertydata-1.md",
    "content": "# PropertyData&lt;T&gt;\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\n```csharp\r\npublic abstract class PropertyData<T> : PropertyData, System.ICloneable\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;T&gt;](./uassetapi.propertytypes.objects.propertydata-1.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic T Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\nT<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\nThe type of this property as an FString.\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **PropertyData(FName)**\r\n\r\n```csharp\r\npublic PropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **PropertyData()**\r\n\r\n```csharp\r\npublic PropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.propertydata.md",
    "content": "# PropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nGeneric Unreal property class.\r\n\r\n```csharp\r\npublic abstract class PropertyData : System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\nThe type of this property as an FString.\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **PropertyData(FName)**\r\n\r\n```csharp\r\npublic PropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **PropertyData()**\r\n\r\n```csharp\r\npublic PropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **ShouldSerializeOverrideOperation()**\r\n\r\n```csharp\r\npublic bool ShouldSerializeOverrideOperation()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **ShouldSerializebExperimentalOverridableLogic()**\r\n\r\n```csharp\r\npublic bool ShouldSerializebExperimentalOverridableLogic()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **SetObject(Object)**\r\n\r\n```csharp\r\npublic void SetObject(object value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **GetObject&lt;T&gt;()**\r\n\r\n```csharp\r\npublic T GetObject<T>()\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\n#### Returns\r\n\r\nT<br>\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\nReads out a property from a BinaryReader.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nWhether or not to also read the \"header\" of the property, which is data considered by the Unreal Engine to be data that is part of the PropertyData base class rather than any particular child class.\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\nAn estimate for the length of the data being read out.\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\nA second estimate for the length of the data being read out.\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\nThe context in which this property is being read.\r\n\r\n### **ResolveAncestries(UAsset, AncestryInfo)**\r\n\r\nResolves the ancestry of all child properties of this property.\r\n\r\n```csharp\r\npublic void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`ancestrySoFar` [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\n\r\n### **ReadEndPropertyTag(AssetBinaryReader)**\r\n\r\nComplete reading the property tag of this property.\r\n\r\n```csharp\r\nprotected void ReadEndPropertyTag(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\nWrites a property to a BinaryWriter.\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\nThe BinaryWriter to write from.\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nWhether or not to also write the \"header\" of the property, which is data considered by the Unreal Engine to be data that is part of the PropertyData base class rather than any particular child class.\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\nThe context in which this property is being written.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe length in bytes of the data that was written.\r\n\r\n### **InitializeZero(AssetBinaryReader)**\r\n\r\nInitialize this property when serialized as zero.\r\n\r\n```csharp\r\ninternal void InitializeZero(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe BinaryReader to read from.\r\n\r\n### **WriteEndPropertyTag(AssetBinaryWriter)**\r\n\r\nComplete writing the property tag of this property.\r\n\r\n```csharp\r\nprotected void WriteEndPropertyTag(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n### **CanBeZero(UAsset)**\r\n\r\nDoes the body of this property entirely consist of null bytes? If so, the body can be skipped during serialization in unversioned properties.\r\n\r\n```csharp\r\npublic bool CanBeZero(UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\nThe asset to test serialization within.\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nWhether or not the property can be serialized as zero.\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\nSets certain fields of the property based off of an array of strings.\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nAn array of strings to derive certain fields from.\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\nThe asset that the property belongs to.\r\n\r\n### **Clone()**\r\n\r\nPerforms a deep clone of the current PropertyData instance.\r\n\r\n```csharp\r\npublic object Clone()\r\n```\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\nA deep copy of the current property.\r\n\r\n### **HandleCloned(PropertyData)**\r\n\r\n```csharp\r\nprotected void HandleCloned(PropertyData res)\r\n```\r\n\r\n#### Parameters\r\n\r\n`res` [PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.propertyserializationcontext.md",
    "content": "# PropertySerializationContext\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\n```csharp\r\npublic enum PropertySerializationContext\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.setpropertydata.md",
    "content": "# SetPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a set.\r\n\r\n```csharp\r\npublic class SetPropertyData : ArrayPropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;PropertyData[]&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [ArrayPropertyData](./uassetapi.propertytypes.objects.arraypropertydata.md) → [SetPropertyData](./uassetapi.propertytypes.objects.setpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **ElementsToRemove**\r\n\r\n```csharp\r\npublic PropertyData[] ElementsToRemove;\r\n```\r\n\r\n### **ArrayType**\r\n\r\n```csharp\r\npublic FName ArrayType;\r\n```\r\n\r\n### **DummyStruct**\r\n\r\n```csharp\r\npublic StructPropertyData DummyStruct;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic PropertyData[] Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[PropertyData[]](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **SetPropertyData(FName)**\r\n\r\n```csharp\r\npublic SetPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **SetPropertyData()**\r\n\r\n```csharp\r\npublic SetPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **HandleCloned(PropertyData)**\r\n\r\n```csharp\r\nprotected void HandleCloned(PropertyData res)\r\n```\r\n\r\n#### Parameters\r\n\r\n`res` [PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.softobjectpropertydata.md",
    "content": "# SoftObjectPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a reference variable to another object which may be null, and may become valid or invalid at any point. Near synonym for [AssetObjectPropertyData](./uassetapi.propertytypes.objects.assetobjectpropertydata.md).\r\n\r\n```csharp\r\npublic class SoftObjectPropertyData : BasePropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FSoftObjectPath&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FSoftObjectPath&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [SoftObjectPropertyData](./uassetapi.propertytypes.objects.softobjectpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FSoftObjectPath Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FSoftObjectPath](./uassetapi.propertytypes.objects.fsoftobjectpath.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **SoftObjectPropertyData(FName)**\r\n\r\n```csharp\r\npublic SoftObjectPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **SoftObjectPropertyData()**\r\n\r\n```csharp\r\npublic SoftObjectPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.strpropertydata.md",
    "content": "# StrPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes an [FString](./uassetapi.unrealtypes.fstring.md).\r\n\r\n```csharp\r\npublic class StrPropertyData : PropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FString&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [StrPropertyData](./uassetapi.propertytypes.objects.strpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FString Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **StrPropertyData(FName)**\r\n\r\n```csharp\r\npublic StrPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **StrPropertyData()**\r\n\r\n```csharp\r\npublic StrPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.texthistorytype.md",
    "content": "# TextHistoryType\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\n```csharp\r\npublic enum TextHistoryType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [TextHistoryType](./uassetapi.propertytypes.objects.texthistorytype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.textpropertydata.md",
    "content": "# TextPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes an FText.\r\n\r\n```csharp\r\npublic class TextPropertyData : PropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FString&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [TextPropertyData](./uassetapi.propertytypes.objects.textpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Flags**\r\n\r\nFlags with various information on what sort of FText this is\r\n\r\n```csharp\r\npublic ETextFlag Flags;\r\n```\r\n\r\n### **HistoryType**\r\n\r\nThe HistoryType of this FText.\r\n\r\n```csharp\r\npublic TextHistoryType HistoryType;\r\n```\r\n\r\n### **TableId**\r\n\r\nThe string table ID being referenced, if applicable\r\n\r\n```csharp\r\npublic FName TableId;\r\n```\r\n\r\n### **Namespace**\r\n\r\nA namespace to use when parsing texts that use LOCTEXT\r\n\r\n```csharp\r\npublic FString Namespace;\r\n```\r\n\r\n### **CultureInvariantString**\r\n\r\nThe source string for this FText. In the Unreal Engine, this is also known as SourceString.\r\n\r\n```csharp\r\npublic FString CultureInvariantString;\r\n```\r\n\r\n### **SourceFmt**\r\n\r\n```csharp\r\npublic TextPropertyData SourceFmt;\r\n```\r\n\r\n### **Arguments**\r\n\r\n```csharp\r\npublic FFormatArgumentValue[] Arguments;\r\n```\r\n\r\n### **ArgumentsData**\r\n\r\n```csharp\r\npublic FFormatArgumentData[] ArgumentsData;\r\n```\r\n\r\n### **TransformType**\r\n\r\n```csharp\r\npublic ETransformType TransformType;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FString Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **TextPropertyData(FName)**\r\n\r\n```csharp\r\npublic TextPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **TextPropertyData()**\r\n\r\n```csharp\r\npublic TextPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **ShouldSerializeTableId()**\r\n\r\n```csharp\r\npublic bool ShouldSerializeTableId()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **HandleCloned(PropertyData)**\r\n\r\n```csharp\r\nprotected void HandleCloned(PropertyData res)\r\n```\r\n\r\n#### Parameters\r\n\r\n`res` [PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.uint16propertydata.md",
    "content": "# UInt16PropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a 16-bit unsigned integer variable ([UInt16](https://docs.microsoft.com/en-us/dotnet/api/system.uint16)).\r\n\r\n```csharp\r\npublic class UInt16PropertyData : PropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;UInt16&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [UInt16PropertyData](./uassetapi.propertytypes.objects.uint16propertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **DefaultValue**\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic ushort Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[UInt16](https://docs.microsoft.com/en-us/dotnet/api/system.uint16)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **UInt16PropertyData(FName)**\r\n\r\n```csharp\r\npublic UInt16PropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **UInt16PropertyData()**\r\n\r\n```csharp\r\npublic UInt16PropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.uint32propertydata.md",
    "content": "# UInt32PropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a 32-bit unsigned integer variable ([UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)).\r\n\r\n```csharp\r\npublic class UInt32PropertyData : PropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;UInt32&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [UInt32PropertyData](./uassetapi.propertytypes.objects.uint32propertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **DefaultValue**\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic uint Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **UInt32PropertyData(FName)**\r\n\r\n```csharp\r\npublic UInt32PropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **UInt32PropertyData()**\r\n\r\n```csharp\r\npublic UInt32PropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.uint64propertydata.md",
    "content": "# UInt64PropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a 64-bit unsigned integer variable ([UInt64](https://docs.microsoft.com/en-us/dotnet/api/system.uint64)).\r\n\r\n```csharp\r\npublic class UInt64PropertyData : PropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;UInt64&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [UInt64PropertyData](./uassetapi.propertytypes.objects.uint64propertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **DefaultValue**\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic ulong Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[UInt64](https://docs.microsoft.com/en-us/dotnet/api/system.uint64)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **UInt64PropertyData(FName)**\r\n\r\n```csharp\r\npublic UInt64PropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **UInt64PropertyData()**\r\n\r\n```csharp\r\npublic UInt64PropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.unknownpropertydata.md",
    "content": "# UnknownPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\nDescribes a property which UAssetAPI has no specific serialization for, and is instead represented as an array of bytes as a fallback.\r\n\r\n```csharp\r\npublic class UnknownPropertyData : PropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;Byte[]&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [UnknownPropertyData](./uassetapi.propertytypes.objects.unknownpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **SerializingPropertyType**\r\n\r\n```csharp\r\npublic FString SerializingPropertyType;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic Byte[] Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **UnknownPropertyData(FName)**\r\n\r\n```csharp\r\npublic UnknownPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **UnknownPropertyData()**\r\n\r\n```csharp\r\npublic UnknownPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **SetSerializingPropertyType(FString)**\r\n\r\n```csharp\r\npublic void SetSerializingPropertyType(FString newType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`newType` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **HandleCloned(PropertyData)**\r\n\r\n```csharp\r\nprotected void HandleCloned(PropertyData res)\r\n```\r\n\r\n#### Parameters\r\n\r\n`res` [PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.objects.weakobjectpropertydata.md",
    "content": "# WeakObjectPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Objects\r\n\r\n```csharp\r\npublic class WeakObjectPropertyData : ObjectPropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FPackageIndex&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [ObjectPropertyData](./uassetapi.propertytypes.objects.objectpropertydata.md) → [WeakObjectPropertyData](./uassetapi.propertytypes.objects.weakobjectpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **DefaultValue**\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FPackageIndex Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **WeakObjectPropertyData(FName)**\r\n\r\n```csharp\r\npublic WeakObjectPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **WeakObjectPropertyData()**\r\n\r\n```csharp\r\npublic WeakObjectPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.box2dpropertydata.md",
    "content": "# Box2DPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class Box2DPropertyData : TBoxPropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;TBox&lt;FVector2D&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [TBoxPropertyData&lt;FVector2D&gt;](./uassetapi.propertytypes.structs.tboxpropertydata-1.md) → [Box2DPropertyData](./uassetapi.propertytypes.structs.box2dpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic TBox<FVector2D> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[TBox&lt;FVector2D&gt;](./uassetapi.unrealtypes.tbox-1.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **Box2DPropertyData(FName)**\r\n\r\n```csharp\r\npublic Box2DPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **Box2DPropertyData()**\r\n\r\n```csharp\r\npublic Box2DPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.box2fpropertydata.md",
    "content": "# Box2fPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class Box2fPropertyData : TBoxPropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;TBox&lt;FVector2f&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [TBoxPropertyData&lt;FVector2f&gt;](./uassetapi.propertytypes.structs.tboxpropertydata-1.md) → [Box2fPropertyData](./uassetapi.propertytypes.structs.box2fpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic TBox<FVector2f> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[TBox&lt;FVector2f&gt;](./uassetapi.unrealtypes.tbox-1.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **Box2fPropertyData(FName)**\r\n\r\n```csharp\r\npublic Box2fPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **Box2fPropertyData()**\r\n\r\n```csharp\r\npublic Box2fPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.boxpropertydata.md",
    "content": "# BoxPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class BoxPropertyData : TBoxPropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;TBox&lt;FVector&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [TBoxPropertyData&lt;FVector&gt;](./uassetapi.propertytypes.structs.tboxpropertydata-1.md) → [BoxPropertyData](./uassetapi.propertytypes.structs.boxpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic TBox<FVector> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[TBox&lt;FVector&gt;](./uassetapi.unrealtypes.tbox-1.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **BoxPropertyData(FName)**\r\n\r\n```csharp\r\npublic BoxPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **BoxPropertyData()**\r\n\r\n```csharp\r\npublic BoxPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.clothloddatacommonpropertydata.md",
    "content": "# ClothLODDataCommonPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class ClothLODDataCommonPropertyData : ClothLODDataPropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;List&lt;PropertyData&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md) → [ClothLODDataPropertyData](./uassetapi.propertytypes.structs.clothloddatapropertydata.md) → [ClothLODDataCommonPropertyData](./uassetapi.propertytypes.structs.clothloddatacommonpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **TransitionUpSkinData**\r\n\r\nSkinning data for transitioning from a higher detail LOD to this one\r\n\r\n```csharp\r\npublic FMeshToMeshVertData[] TransitionUpSkinData;\r\n```\r\n\r\n### **TransitionDownSkinData**\r\n\r\nSkinning data for transitioning from a lower detail LOD to this one\r\n\r\n```csharp\r\npublic FMeshToMeshVertData[] TransitionDownSkinData;\r\n```\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic FName StructType;\r\n```\r\n\r\n### **SerializeNone**\r\n\r\n```csharp\r\npublic bool SerializeNone;\r\n```\r\n\r\n### **StructGUID**\r\n\r\n```csharp\r\npublic Guid StructGUID;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic List<PropertyData> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[List&lt;PropertyData&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **ClothLODDataCommonPropertyData(FName, FName)**\r\n\r\n```csharp\r\npublic ClothLODDataCommonPropertyData(FName name, FName forcedType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`forcedType` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **ClothLODDataCommonPropertyData(FName)**\r\n\r\n```csharp\r\npublic ClothLODDataCommonPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **ClothLODDataCommonPropertyData()**\r\n\r\n```csharp\r\npublic ClothLODDataCommonPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.clothloddatapropertydata.md",
    "content": "# ClothLODDataPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nCommon Cloth LOD representation for all clothing assets.\r\n\r\n```csharp\r\npublic class ClothLODDataPropertyData : StructPropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;List&lt;PropertyData&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md) → [ClothLODDataPropertyData](./uassetapi.propertytypes.structs.clothloddatapropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **TransitionUpSkinData**\r\n\r\nSkinning data for transitioning from a higher detail LOD to this one\r\n\r\n```csharp\r\npublic FMeshToMeshVertData[] TransitionUpSkinData;\r\n```\r\n\r\n### **TransitionDownSkinData**\r\n\r\nSkinning data for transitioning from a lower detail LOD to this one\r\n\r\n```csharp\r\npublic FMeshToMeshVertData[] TransitionDownSkinData;\r\n```\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic FName StructType;\r\n```\r\n\r\n### **SerializeNone**\r\n\r\n```csharp\r\npublic bool SerializeNone;\r\n```\r\n\r\n### **StructGUID**\r\n\r\n```csharp\r\npublic Guid StructGUID;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic List<PropertyData> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[List&lt;PropertyData&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **ClothLODDataPropertyData(FName, FName)**\r\n\r\n```csharp\r\npublic ClothLODDataPropertyData(FName name, FName forcedType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`forcedType` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **ClothLODDataPropertyData(FName)**\r\n\r\n```csharp\r\npublic ClothLODDataPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **ClothLODDataPropertyData()**\r\n\r\n```csharp\r\npublic ClothLODDataPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.clothtetherdatapropertydata.md",
    "content": "# ClothTetherDataPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nLong range attachment tether pathfinding based on Dijkstra's algorithm.\r\n\r\n```csharp\r\npublic class ClothTetherDataPropertyData : StructPropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;List&lt;PropertyData&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md) → [ClothTetherDataPropertyData](./uassetapi.propertytypes.structs.clothtetherdatapropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Tethers**\r\n\r\n```csharp\r\npublic ValueTuple`3[][] Tethers;\r\n```\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic FName StructType;\r\n```\r\n\r\n### **SerializeNone**\r\n\r\n```csharp\r\npublic bool SerializeNone;\r\n```\r\n\r\n### **StructGUID**\r\n\r\n```csharp\r\npublic Guid StructGUID;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic List<PropertyData> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[List&lt;PropertyData&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **ClothTetherDataPropertyData(FName, FName)**\r\n\r\n```csharp\r\npublic ClothTetherDataPropertyData(FName name, FName forcedType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`forcedType` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **ClothTetherDataPropertyData(FName)**\r\n\r\n```csharp\r\npublic ClothTetherDataPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **ClothTetherDataPropertyData()**\r\n\r\n```csharp\r\npublic ClothTetherDataPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.colormaterialinputpropertydata.md",
    "content": "# ColorMaterialInputPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class ColorMaterialInputPropertyData : MaterialInputPropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;ColorPropertyData&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MaterialInputPropertyData&lt;ColorPropertyData&gt;](./uassetapi.propertytypes.structs.materialinputpropertydata-1.md) → [ColorMaterialInputPropertyData](./uassetapi.propertytypes.structs.colormaterialinputpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Expression**\r\n\r\n```csharp\r\npublic FPackageIndex Expression;\r\n```\r\n\r\n### **OutputIndex**\r\n\r\n```csharp\r\npublic int OutputIndex;\r\n```\r\n\r\n### **InputName**\r\n\r\n```csharp\r\npublic FName InputName;\r\n```\r\n\r\n### **InputNameOld**\r\n\r\n```csharp\r\npublic FString InputNameOld;\r\n```\r\n\r\n### **Mask**\r\n\r\n```csharp\r\npublic int Mask;\r\n```\r\n\r\n### **MaskR**\r\n\r\n```csharp\r\npublic int MaskR;\r\n```\r\n\r\n### **MaskG**\r\n\r\n```csharp\r\npublic int MaskG;\r\n```\r\n\r\n### **MaskB**\r\n\r\n```csharp\r\npublic int MaskB;\r\n```\r\n\r\n### **MaskA**\r\n\r\n```csharp\r\npublic int MaskA;\r\n```\r\n\r\n### **ExpressionName**\r\n\r\n```csharp\r\npublic FName ExpressionName;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic ColorPropertyData Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[ColorPropertyData](./uassetapi.propertytypes.structs.colorpropertydata.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **ColorMaterialInputPropertyData(FName)**\r\n\r\n```csharp\r\npublic ColorMaterialInputPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **ColorMaterialInputPropertyData()**\r\n\r\n```csharp\r\npublic ColorMaterialInputPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **ResolveAncestries(UAsset, AncestryInfo)**\r\n\r\n```csharp\r\npublic void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`ancestrySoFar` [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.colorpropertydata.md",
    "content": "# ColorPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nDescribes a color with 8 bits of precision per channel.\r\n\r\n```csharp\r\npublic class ColorPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[System.Drawing.Color]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;Color&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [ColorPropertyData](./uassetapi.propertytypes.structs.colorpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic Color Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\nColor<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **ColorPropertyData(FName)**\r\n\r\n```csharp\r\npublic ColorPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **ColorPropertyData()**\r\n\r\n```csharp\r\npublic ColorPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **HandleCloned(PropertyData)**\r\n\r\n```csharp\r\nprotected void HandleCloned(PropertyData res)\r\n```\r\n\r\n#### Parameters\r\n\r\n`res` [PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.datetimepropertydata.md",
    "content": "# DateTimePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nImplements a date and time.\r\n \r\n Values of this type represent dates and times between Midnight 00:00:00, January 1, 0001 and\r\n Midnight 23:59:59.9999999, December 31, 9999 in the Gregorian calendar. Internally, the time\r\n values are stored in ticks of 0.1 microseconds (= 100 nanoseconds) since January 1, 0001.\r\n \r\n The companion class [TimespanPropertyData](./uassetapi.propertytypes.structs.timespanpropertydata.md) ([TimeSpan](https://docs.microsoft.com/en-us/dotnet/api/system.timespan)) is provided for\r\n enabling date and time based arithmetic, such as calculating the difference between two dates\r\n or adding a certain amount of time to a given date.\r\n\r\n```csharp\r\npublic class DateTimePropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[System.DateTime]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;DateTime&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [DateTimePropertyData](./uassetapi.propertytypes.structs.datetimepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic DateTime Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[DateTime](https://docs.microsoft.com/en-us/dotnet/api/system.datetime)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **DateTimePropertyData(FName)**\r\n\r\n```csharp\r\npublic DateTimePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **DateTimePropertyData()**\r\n\r\n```csharp\r\npublic DateTimePropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **HandleCloned(PropertyData)**\r\n\r\n```csharp\r\nprotected void HandleCloned(PropertyData res)\r\n```\r\n\r\n#### Parameters\r\n\r\n`res` [PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.deprecateslatevector2dpropertydata.md",
    "content": "# DeprecateSlateVector2DPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class DeprecateSlateVector2DPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FVector2f]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FVector2f&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FVector2f&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [DeprecateSlateVector2DPropertyData](./uassetapi.propertytypes.structs.deprecateslatevector2dpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FVector2f Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FVector2f](./uassetapi.unrealtypes.fvector2f.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **DeprecateSlateVector2DPropertyData(FName)**\r\n\r\n```csharp\r\npublic DeprecateSlateVector2DPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **DeprecateSlateVector2DPropertyData()**\r\n\r\n```csharp\r\npublic DeprecateSlateVector2DPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.esectionevaluationflags.md",
    "content": "# ESectionEvaluationFlags\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic enum ESectionEvaluationFlags\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESectionEvaluationFlags](./uassetapi.propertytypes.structs.esectionevaluationflags.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.expressioninputpropertydata.md",
    "content": "# ExpressionInputPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class ExpressionInputPropertyData : MaterialInputPropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;Int32&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MaterialInputPropertyData&lt;Int32&gt;](./uassetapi.propertytypes.structs.materialinputpropertydata-1.md) → [ExpressionInputPropertyData](./uassetapi.propertytypes.structs.expressioninputpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Expression**\r\n\r\n```csharp\r\npublic FPackageIndex Expression;\r\n```\r\n\r\n### **OutputIndex**\r\n\r\n```csharp\r\npublic int OutputIndex;\r\n```\r\n\r\n### **InputName**\r\n\r\n```csharp\r\npublic FName InputName;\r\n```\r\n\r\n### **InputNameOld**\r\n\r\n```csharp\r\npublic FString InputNameOld;\r\n```\r\n\r\n### **Mask**\r\n\r\n```csharp\r\npublic int Mask;\r\n```\r\n\r\n### **MaskR**\r\n\r\n```csharp\r\npublic int MaskR;\r\n```\r\n\r\n### **MaskG**\r\n\r\n```csharp\r\npublic int MaskG;\r\n```\r\n\r\n### **MaskB**\r\n\r\n```csharp\r\npublic int MaskB;\r\n```\r\n\r\n### **MaskA**\r\n\r\n```csharp\r\npublic int MaskA;\r\n```\r\n\r\n### **ExpressionName**\r\n\r\n```csharp\r\npublic FName ExpressionName;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic int Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **ExpressionInputPropertyData(FName)**\r\n\r\n```csharp\r\npublic ExpressionInputPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **ExpressionInputPropertyData()**\r\n\r\n```csharp\r\npublic ExpressionInputPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fentityandmetadataindex.md",
    "content": "# FEntityAndMetaDataIndex\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic struct FEntityAndMetaDataIndex\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FEntityAndMetaDataIndex](./uassetapi.propertytypes.structs.fentityandmetadataindex.md)\r\n\r\n## Fields\r\n\r\n### **EntityIndex**\r\n\r\n```csharp\r\npublic int EntityIndex;\r\n```\r\n\r\n### **MetaDataIndex**\r\n\r\n```csharp\r\npublic int MetaDataIndex;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FEntityAndMetaDataIndex(Int32, Int32)**\r\n\r\n```csharp\r\nFEntityAndMetaDataIndex(int entityIndex, int metaDataIndex)\r\n```\r\n\r\n#### Parameters\r\n\r\n`entityIndex` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`metaDataIndex` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FEntityAndMetaDataIndex(AssetBinaryReader)**\r\n\r\n```csharp\r\nFEntityAndMetaDataIndex(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nvoid Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fentry.md",
    "content": "# FEntry\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic struct FEntry\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FEntry](./uassetapi.propertytypes.structs.fentry.md)\r\n\r\n## Fields\r\n\r\n### **StartIndex**\r\n\r\nThe index into Items of the first item\r\n\r\n```csharp\r\npublic int StartIndex;\r\n```\r\n\r\n### **Size**\r\n\r\nThe number of currently valid items\r\n\r\n```csharp\r\npublic int Size;\r\n```\r\n\r\n### **Capacity**\r\n\r\nThe total capacity of allowed items before reallocating\r\n\r\n```csharp\r\npublic int Capacity;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FEntry(Int32, Int32, Int32)**\r\n\r\n```csharp\r\nFEntry(int startIndex, int size, int capacity)\r\n```\r\n\r\n#### Parameters\r\n\r\n`startIndex` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`size` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`capacity` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FEntry(AssetBinaryReader)**\r\n\r\n```csharp\r\nFEntry(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nvoid Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fevaluationtreeentryhandle.md",
    "content": "# FEvaluationTreeEntryHandle\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nA structure that uniquely identifies an entry within a TEvaluationTreeEntryContaine\r\n\r\n```csharp\r\npublic struct FEvaluationTreeEntryHandle\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FEvaluationTreeEntryHandle](./uassetapi.propertytypes.structs.fevaluationtreeentryhandle.md)\r\n\r\n## Fields\r\n\r\n### **EntryIndex**\r\n\r\nSpecifies an index into TEvaluationTreeEntryContainer::Entries\r\n\r\n```csharp\r\npublic int EntryIndex;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FEvaluationTreeEntryHandle(Int32)**\r\n\r\n```csharp\r\nFEvaluationTreeEntryHandle(int _EntryIndex)\r\n```\r\n\r\n#### Parameters\r\n\r\n`_EntryIndex` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FEvaluationTreeEntryHandle(AssetBinaryReader)**\r\n\r\n```csharp\r\nFEvaluationTreeEntryHandle(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nvoid Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.flevelsequencelegacyobjectreference.md",
    "content": "# FLevelSequenceLegacyObjectReference\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class FLevelSequenceLegacyObjectReference\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FLevelSequenceLegacyObjectReference](./uassetapi.propertytypes.structs.flevelsequencelegacyobjectreference.md)\r\n\r\n## Fields\r\n\r\n### **ObjectId**\r\n\r\n```csharp\r\npublic Guid ObjectId;\r\n```\r\n\r\n### **ObjectPath**\r\n\r\n```csharp\r\npublic FString ObjectPath;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FLevelSequenceLegacyObjectReference(Guid, FString)**\r\n\r\n```csharp\r\npublic FLevelSequenceLegacyObjectReference(Guid objectId, FString objectPath)\r\n```\r\n\r\n#### Parameters\r\n\r\n`objectId` [Guid](https://docs.microsoft.com/en-us/dotnet/api/system.guid)<br>\r\n\r\n`objectPath` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **FLevelSequenceLegacyObjectReference(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FLevelSequenceLegacyObjectReference(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.floatrangepropertydata.md",
    "content": "# FloatRangePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class FloatRangePropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [FloatRangePropertyData](./uassetapi.propertytypes.structs.floatrangepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **LowerBound**\r\n\r\n```csharp\r\npublic float LowerBound;\r\n```\r\n\r\n### **UpperBound**\r\n\r\n```csharp\r\npublic float UpperBound;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **FloatRangePropertyData(FName)**\r\n\r\n```csharp\r\npublic FloatRangePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **FloatRangePropertyData()**\r\n\r\n```csharp\r\npublic FloatRangePropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmeshtomeshvertdata.md",
    "content": "# FMeshToMeshVertData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nA structure for holding mesh-to-mesh triangle influences to skin one mesh to another (similar to a wrap deformer)\r\n\r\n```csharp\r\npublic class FMeshToMeshVertData\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FMeshToMeshVertData](./uassetapi.propertytypes.structs.fmeshtomeshvertdata.md)\r\n\r\n## Fields\r\n\r\n### **PositionBaryCoordsAndDist**\r\n\r\nBarycentric coords and distance along normal for the position of the final vert\r\n\r\n```csharp\r\npublic Vector4fPropertyData PositionBaryCoordsAndDist;\r\n```\r\n\r\n### **NormalBaryCoordsAndDist**\r\n\r\nBarycentric coords and distance along normal for the location of the unit normal endpoint.\r\n Actual normal = ResolvedNormalPosition - ResolvedPosition\r\n\r\n```csharp\r\npublic Vector4fPropertyData NormalBaryCoordsAndDist;\r\n```\r\n\r\n### **TangentBaryCoordsAndDist**\r\n\r\nBarycentric coords and distance along normal for the location of the unit Tangent endpoint.\r\n Actual normal = ResolvedNormalPosition - ResolvedPosition\r\n\r\n```csharp\r\npublic Vector4fPropertyData TangentBaryCoordsAndDist;\r\n```\r\n\r\n### **SourceMeshVertIndices**\r\n\r\nContains the 3 indices for verts in the source mesh forming a triangle, the last element\r\n is a flag to decide how the skinning works, 0xffff uses no simulation, and just normal\r\n skinning, anything else uses the source mesh and the above skin data to get the final position\r\n\r\n```csharp\r\npublic UInt16[] SourceMeshVertIndices;\r\n```\r\n\r\n### **Weight**\r\n\r\nFor weighted averaging of multiple triangle influences\r\n\r\n```csharp\r\npublic float Weight;\r\n```\r\n\r\n### **Padding**\r\n\r\nDummy for alignment\r\n\r\n```csharp\r\npublic uint Padding;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMeshToMeshVertData(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FMeshToMeshVertData(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **FMeshToMeshVertData(Vector4fPropertyData, Vector4fPropertyData, Vector4fPropertyData, UInt16[], Single, UInt32)**\r\n\r\n```csharp\r\npublic FMeshToMeshVertData(Vector4fPropertyData positionBaryCoordsAndDist, Vector4fPropertyData normalBaryCoordsAndDist, Vector4fPropertyData tangentBaryCoordsAndDist, UInt16[] sourceMeshVertIndices, float weight, uint padding)\r\n```\r\n\r\n#### Parameters\r\n\r\n`positionBaryCoordsAndDist` [Vector4fPropertyData](./uassetapi.propertytypes.structs.vector4fpropertydata.md)<br>\r\n\r\n`normalBaryCoordsAndDist` [Vector4fPropertyData](./uassetapi.propertytypes.structs.vector4fpropertydata.md)<br>\r\n\r\n`tangentBaryCoordsAndDist` [Vector4fPropertyData](./uassetapi.propertytypes.structs.vector4fpropertydata.md)<br>\r\n\r\n`sourceMeshVertIndices` [UInt16[]](https://docs.microsoft.com/en-us/dotnet/api/system.uint16)<br>\r\n\r\n`weight` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`padding` [UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n### **FMeshToMeshVertData()**\r\n\r\n```csharp\r\npublic FMeshToMeshVertData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmoviescenechannel-1.md",
    "content": "# FMovieSceneChannel&lt;T&gt;\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class FMovieSceneChannel<T>\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FMovieSceneChannel&lt;T&gt;](./uassetapi.propertytypes.structs.fmoviescenechannel-1.md)\r\n\r\n## Fields\r\n\r\n### **PreInfinityExtrap**\r\n\r\n```csharp\r\npublic ERichCurveExtrapolation PreInfinityExtrap;\r\n```\r\n\r\n### **PostInfinityExtrap**\r\n\r\n```csharp\r\npublic ERichCurveExtrapolation PostInfinityExtrap;\r\n```\r\n\r\n### **TimesStructLength**\r\n\r\n```csharp\r\npublic int TimesStructLength;\r\n```\r\n\r\n### **Times**\r\n\r\n```csharp\r\npublic FFrameNumber[] Times;\r\n```\r\n\r\n### **ValuesStructLength**\r\n\r\n```csharp\r\npublic int ValuesStructLength;\r\n```\r\n\r\n### **Values**\r\n\r\n```csharp\r\npublic FMovieSceneValue`1[] Values;\r\n```\r\n\r\n### **DefaultValue**\r\n\r\n```csharp\r\npublic T DefaultValue;\r\n```\r\n\r\n### **bHasDefaultValue**\r\n\r\n```csharp\r\npublic bool bHasDefaultValue;\r\n```\r\n\r\n### **TickResolution**\r\n\r\n```csharp\r\npublic FFrameRate TickResolution;\r\n```\r\n\r\n### **bShowCurve**\r\n\r\n```csharp\r\npublic bool bShowCurve;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMovieSceneChannel()**\r\n\r\n```csharp\r\npublic FMovieSceneChannel()\r\n```\r\n\r\n### **FMovieSceneChannel(AssetBinaryReader, Func&lt;T&gt;)**\r\n\r\n```csharp\r\npublic FMovieSceneChannel(AssetBinaryReader reader, Func<T> valueReader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`valueReader` Func&lt;T&gt;<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter, Action&lt;T&gt;)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer, Action<T> valueWriter)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`valueWriter` Action&lt;T&gt;<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmoviescenedoublechannel.md",
    "content": "# FMovieSceneDoubleChannel\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class FMovieSceneDoubleChannel : FMovieSceneChannel`1\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FMovieSceneChannel&lt;Double&gt;](./uassetapi.propertytypes.structs.fmoviescenechannel-1.md) → [FMovieSceneDoubleChannel](./uassetapi.propertytypes.structs.fmoviescenedoublechannel.md)\r\n\r\n## Fields\r\n\r\n### **PreInfinityExtrap**\r\n\r\n```csharp\r\npublic ERichCurveExtrapolation PreInfinityExtrap;\r\n```\r\n\r\n### **PostInfinityExtrap**\r\n\r\n```csharp\r\npublic ERichCurveExtrapolation PostInfinityExtrap;\r\n```\r\n\r\n### **TimesStructLength**\r\n\r\n```csharp\r\npublic int TimesStructLength;\r\n```\r\n\r\n### **Times**\r\n\r\n```csharp\r\npublic FFrameNumber[] Times;\r\n```\r\n\r\n### **ValuesStructLength**\r\n\r\n```csharp\r\npublic int ValuesStructLength;\r\n```\r\n\r\n### **Values**\r\n\r\n```csharp\r\npublic FMovieSceneValue`1[] Values;\r\n```\r\n\r\n### **DefaultValue**\r\n\r\n```csharp\r\npublic double DefaultValue;\r\n```\r\n\r\n### **bHasDefaultValue**\r\n\r\n```csharp\r\npublic bool bHasDefaultValue;\r\n```\r\n\r\n### **TickResolution**\r\n\r\n```csharp\r\npublic FFrameRate TickResolution;\r\n```\r\n\r\n### **bShowCurve**\r\n\r\n```csharp\r\npublic bool bShowCurve;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMovieSceneDoubleChannel(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FMovieSceneDoubleChannel(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmoviescenedoublevalue.md",
    "content": "# FMovieSceneDoubleValue\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class FMovieSceneDoubleValue : FMovieSceneValue`1\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FMovieSceneValue&lt;Double&gt;](./uassetapi.propertytypes.structs.fmoviescenevalue-1.md) → [FMovieSceneDoubleValue](./uassetapi.propertytypes.structs.fmoviescenedoublevalue.md)\r\n\r\n## Fields\r\n\r\n### **Value**\r\n\r\n```csharp\r\npublic double Value;\r\n```\r\n\r\n### **Tangent**\r\n\r\n```csharp\r\npublic FMovieSceneTangentData Tangent;\r\n```\r\n\r\n### **InterpMode**\r\n\r\n```csharp\r\npublic ERichCurveInterpMode InterpMode;\r\n```\r\n\r\n### **TangentMode**\r\n\r\n```csharp\r\npublic ERichCurveTangentMode TangentMode;\r\n```\r\n\r\n### **padding**\r\n\r\n```csharp\r\npublic Byte[] padding;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMovieSceneDoubleValue(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FMovieSceneDoubleValue(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmoviesceneevaluationfieldentitytree.md",
    "content": "# FMovieSceneEvaluationFieldEntityTree\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic struct FMovieSceneEvaluationFieldEntityTree\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FMovieSceneEvaluationFieldEntityTree](./uassetapi.propertytypes.structs.fmoviesceneevaluationfieldentitytree.md)\r\n\r\n## Fields\r\n\r\n### **SerializedData**\r\n\r\n```csharp\r\npublic TMovieSceneEvaluationTree<FEntityAndMetaDataIndex> SerializedData;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMovieSceneEvaluationFieldEntityTree(AssetBinaryReader)**\r\n\r\n```csharp\r\nFMovieSceneEvaluationFieldEntityTree(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmoviesceneevaluationkey.md",
    "content": "# FMovieSceneEvaluationKey\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nKeyable struct that represents a particular entity within an evaluation template (either a section/template or a track)\r\n\r\n```csharp\r\npublic struct FMovieSceneEvaluationKey\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FMovieSceneEvaluationKey](./uassetapi.propertytypes.structs.fmoviesceneevaluationkey.md)\r\n\r\n## Fields\r\n\r\n### **SequenceID**\r\n\r\nID of the sequence that the entity is contained within\r\n\r\n```csharp\r\npublic uint SequenceID;\r\n```\r\n\r\n### **TrackIdentifier**\r\n\r\nID of the track this key relates to\r\n\r\n```csharp\r\npublic uint TrackIdentifier;\r\n```\r\n\r\n### **SectionIndex**\r\n\r\nIndex of the section template within the track this key relates to (or -1 where this key relates to a track)\r\n\r\n```csharp\r\npublic uint SectionIndex;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMovieSceneEvaluationKey(UInt32, UInt32, UInt32)**\r\n\r\n```csharp\r\nFMovieSceneEvaluationKey(uint _SequenceID, uint _TrackIdentifier, uint _SectionIndex)\r\n```\r\n\r\n#### Parameters\r\n\r\n`_SequenceID` [UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n`_TrackIdentifier` [UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n`_SectionIndex` [UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n### **FMovieSceneEvaluationKey(AssetBinaryReader)**\r\n\r\n```csharp\r\nFMovieSceneEvaluationKey(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmoviesceneevaluationtree.md",
    "content": "# FMovieSceneEvaluationTree\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class FMovieSceneEvaluationTree\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FMovieSceneEvaluationTree](./uassetapi.propertytypes.structs.fmoviesceneevaluationtree.md)\r\n\r\n## Fields\r\n\r\n### **RootNode**\r\n\r\nThis tree's root node\r\n\r\n```csharp\r\npublic FMovieSceneEvaluationTreeNode RootNode;\r\n```\r\n\r\n### **ChildNodes**\r\n\r\nSegmented array of all child nodes within this tree (in no particular order)\r\n\r\n```csharp\r\npublic TEvaluationTreeEntryContainer<FMovieSceneEvaluationTreeNode> ChildNodes;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMovieSceneEvaluationTree(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FMovieSceneEvaluationTree(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmoviesceneevaluationtreenode.md",
    "content": "# FMovieSceneEvaluationTreeNode\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class FMovieSceneEvaluationTreeNode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FMovieSceneEvaluationTreeNode](./uassetapi.propertytypes.structs.fmoviesceneevaluationtreenode.md)\r\n\r\n## Fields\r\n\r\n### **Range**\r\n\r\nThe time-range that this node represents\r\n\r\n```csharp\r\npublic TRange<FFrameNumber> Range;\r\n```\r\n\r\n### **Parent**\r\n\r\n```csharp\r\npublic FMovieSceneEvaluationTreeNodeHandle Parent;\r\n```\r\n\r\n### **ChildrenID**\r\n\r\nIdentifier for the child node entries associated with this node (FMovieSceneEvaluationTree::ChildNodes)\r\n\r\n```csharp\r\npublic FEvaluationTreeEntryHandle ChildrenID;\r\n```\r\n\r\n### **DataID**\r\n\r\nIdentifier for externally stored data entries associated with this node\r\n\r\n```csharp\r\npublic FEvaluationTreeEntryHandle DataID;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMovieSceneEvaluationTreeNode(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FMovieSceneEvaluationTreeNode(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmoviesceneevaluationtreenodehandle.md",
    "content": "# FMovieSceneEvaluationTreeNodeHandle\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nA handle to a node in an FMovieSceneEvaluationTree, defined in terms of an entry handle (corrsponding to FMovieSceneEvaluationTree::ChildNodes), and its child index\r\n\r\n```csharp\r\npublic struct FMovieSceneEvaluationTreeNodeHandle\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FMovieSceneEvaluationTreeNodeHandle](./uassetapi.propertytypes.structs.fmoviesceneevaluationtreenodehandle.md)\r\n\r\n## Fields\r\n\r\n### **ChildrenHandle**\r\n\r\nEntry handle for the parent's children in FMovieSceneEvaluationTree::ChildNodes\r\n\r\n```csharp\r\npublic FEvaluationTreeEntryHandle ChildrenHandle;\r\n```\r\n\r\n### **Index**\r\n\r\nThe index of this child within its parent's children\r\n\r\n```csharp\r\npublic int Index;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMovieSceneEvaluationTreeNodeHandle(Int32, Int32)**\r\n\r\n```csharp\r\nFMovieSceneEvaluationTreeNodeHandle(int _ChildrenHandle, int _Index)\r\n```\r\n\r\n#### Parameters\r\n\r\n`_ChildrenHandle` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`_Index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FMovieSceneEvaluationTreeNodeHandle(AssetBinaryReader)**\r\n\r\n```csharp\r\nFMovieSceneEvaluationTreeNodeHandle(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nvoid Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmoviesceneeventparameters.md",
    "content": "# FMovieSceneEventParameters\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic struct FMovieSceneEventParameters\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FMovieSceneEventParameters](./uassetapi.propertytypes.structs.fmoviesceneeventparameters.md)\r\n\r\n## Fields\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic FSoftObjectPath StructType;\r\n```\r\n\r\n### **StructBytes**\r\n\r\n```csharp\r\npublic Byte[] StructBytes;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMovieSceneEventParameters(FSoftObjectPath, Byte[])**\r\n\r\n```csharp\r\nFMovieSceneEventParameters(FSoftObjectPath structType, Byte[] structBytes)\r\n```\r\n\r\n#### Parameters\r\n\r\n`structType` [FSoftObjectPath](./uassetapi.propertytypes.objects.fsoftobjectpath.md)<br>\r\n\r\n`structBytes` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **FMovieSceneEventParameters(AssetBinaryReader)**\r\n\r\n```csharp\r\nFMovieSceneEventParameters(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmoviescenefloatchannel.md",
    "content": "# FMovieSceneFloatChannel\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class FMovieSceneFloatChannel : FMovieSceneChannel`1\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FMovieSceneChannel&lt;Single&gt;](./uassetapi.propertytypes.structs.fmoviescenechannel-1.md) → [FMovieSceneFloatChannel](./uassetapi.propertytypes.structs.fmoviescenefloatchannel.md)\r\n\r\n## Fields\r\n\r\n### **PreInfinityExtrap**\r\n\r\n```csharp\r\npublic ERichCurveExtrapolation PreInfinityExtrap;\r\n```\r\n\r\n### **PostInfinityExtrap**\r\n\r\n```csharp\r\npublic ERichCurveExtrapolation PostInfinityExtrap;\r\n```\r\n\r\n### **TimesStructLength**\r\n\r\n```csharp\r\npublic int TimesStructLength;\r\n```\r\n\r\n### **Times**\r\n\r\n```csharp\r\npublic FFrameNumber[] Times;\r\n```\r\n\r\n### **ValuesStructLength**\r\n\r\n```csharp\r\npublic int ValuesStructLength;\r\n```\r\n\r\n### **Values**\r\n\r\n```csharp\r\npublic FMovieSceneValue`1[] Values;\r\n```\r\n\r\n### **DefaultValue**\r\n\r\n```csharp\r\npublic float DefaultValue;\r\n```\r\n\r\n### **bHasDefaultValue**\r\n\r\n```csharp\r\npublic bool bHasDefaultValue;\r\n```\r\n\r\n### **TickResolution**\r\n\r\n```csharp\r\npublic FFrameRate TickResolution;\r\n```\r\n\r\n### **bShowCurve**\r\n\r\n```csharp\r\npublic bool bShowCurve;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMovieSceneFloatChannel(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FMovieSceneFloatChannel(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmoviescenefloatvalue.md",
    "content": "# FMovieSceneFloatValue\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class FMovieSceneFloatValue : FMovieSceneValue`1\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FMovieSceneValue&lt;Single&gt;](./uassetapi.propertytypes.structs.fmoviescenevalue-1.md) → [FMovieSceneFloatValue](./uassetapi.propertytypes.structs.fmoviescenefloatvalue.md)\r\n\r\n## Fields\r\n\r\n### **Value**\r\n\r\n```csharp\r\npublic float Value;\r\n```\r\n\r\n### **Tangent**\r\n\r\n```csharp\r\npublic FMovieSceneTangentData Tangent;\r\n```\r\n\r\n### **InterpMode**\r\n\r\n```csharp\r\npublic ERichCurveInterpMode InterpMode;\r\n```\r\n\r\n### **TangentMode**\r\n\r\n```csharp\r\npublic ERichCurveTangentMode TangentMode;\r\n```\r\n\r\n### **padding**\r\n\r\n```csharp\r\npublic Byte[] padding;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMovieSceneFloatValue(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FMovieSceneFloatValue(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmoviescenesegment.md",
    "content": "# FMovieSceneSegment\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nInformation about a single segment of an evaluation track\r\n\r\n```csharp\r\npublic class FMovieSceneSegment\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FMovieSceneSegment](./uassetapi.propertytypes.structs.fmoviescenesegment.md)\r\n\r\n## Fields\r\n\r\n### **RangeOld**\r\n\r\nThe segment's range\r\n\r\n```csharp\r\npublic TRange<float> RangeOld;\r\n```\r\n\r\n### **Range**\r\n\r\n```csharp\r\npublic TRange<FFrameNumber> Range;\r\n```\r\n\r\n### **ID**\r\n\r\n```csharp\r\npublic int ID;\r\n```\r\n\r\n### **bAllowEmpty**\r\n\r\nWhether this segment has been generated yet or not\r\n\r\n```csharp\r\npublic bool bAllowEmpty;\r\n```\r\n\r\n### **Impls**\r\n\r\nArray of implementations that reside at the segment's range\r\n\r\n```csharp\r\npublic StructPropertyData[] Impls;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMovieSceneSegment()**\r\n\r\n```csharp\r\npublic FMovieSceneSegment()\r\n```\r\n\r\n### **FMovieSceneSegment(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FMovieSceneSegment(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmoviescenesubsectiondata.md",
    "content": "# FMovieSceneSubSectionData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nData that represents a single sub-section\r\n\r\n```csharp\r\npublic struct FMovieSceneSubSectionData\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FMovieSceneSubSectionData](./uassetapi.propertytypes.structs.fmoviescenesubsectiondata.md)\r\n\r\n## Fields\r\n\r\n### **Section**\r\n\r\nThe sub section itself\r\n\r\n```csharp\r\npublic FPackageIndex Section;\r\n```\r\n\r\n### **ObjectBindingId**\r\n\r\nThe object binding that the sub section belongs to (usually zero)\r\n\r\n```csharp\r\npublic Guid ObjectBindingId;\r\n```\r\n\r\n### **Flags**\r\n\r\nEvaluation flags for the section\r\n\r\n```csharp\r\npublic ESectionEvaluationFlags Flags;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMovieSceneSubSectionData(FPackageIndex, Guid, ESectionEvaluationFlags)**\r\n\r\n```csharp\r\nFMovieSceneSubSectionData(FPackageIndex section, Guid objectBindingId, ESectionEvaluationFlags flags)\r\n```\r\n\r\n#### Parameters\r\n\r\n`section` [FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\n\r\n`objectBindingId` [Guid](https://docs.microsoft.com/en-us/dotnet/api/system.guid)<br>\r\n\r\n`flags` [ESectionEvaluationFlags](./uassetapi.propertytypes.structs.esectionevaluationflags.md)<br>\r\n\r\n### **FMovieSceneSubSectionData(AssetBinaryReader)**\r\n\r\n```csharp\r\nFMovieSceneSubSectionData(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmoviescenesubsectionfielddata.md",
    "content": "# FMovieSceneSubSectionFieldData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic struct FMovieSceneSubSectionFieldData\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FMovieSceneSubSectionFieldData](./uassetapi.propertytypes.structs.fmoviescenesubsectionfielddata.md)\r\n\r\n## Fields\r\n\r\n### **Field**\r\n\r\n```csharp\r\npublic TMovieSceneEvaluationTree<FMovieSceneSubSectionData> Field;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMovieSceneSubSectionFieldData(AssetBinaryReader)**\r\n\r\n```csharp\r\nFMovieSceneSubSectionFieldData(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmoviescenesubsequencetree.md",
    "content": "# FMovieSceneSubSequenceTree\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic struct FMovieSceneSubSequenceTree\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FMovieSceneSubSequenceTree](./uassetapi.propertytypes.structs.fmoviescenesubsequencetree.md)\r\n\r\n## Fields\r\n\r\n### **Data**\r\n\r\n```csharp\r\npublic TMovieSceneEvaluationTree<FMovieSceneSubSequenceTreeEntry> Data;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMovieSceneSubSequenceTree(AssetBinaryReader)**\r\n\r\n```csharp\r\nFMovieSceneSubSequenceTree(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmoviescenesubsequencetreeentry.md",
    "content": "# FMovieSceneSubSequenceTreeEntry\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic struct FMovieSceneSubSequenceTreeEntry\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FMovieSceneSubSequenceTreeEntry](./uassetapi.propertytypes.structs.fmoviescenesubsequencetreeentry.md)\r\n\r\n## Fields\r\n\r\n### **SequenceID**\r\n\r\n```csharp\r\npublic uint SequenceID;\r\n```\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic ESectionEvaluationFlags Flags;\r\n```\r\n\r\n### **RootToSequenceWarpCounter**\r\n\r\n```csharp\r\npublic StructPropertyData RootToSequenceWarpCounter;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMovieSceneSubSequenceTreeEntry(UInt32, Byte, StructPropertyData)**\r\n\r\n```csharp\r\nFMovieSceneSubSequenceTreeEntry(uint sequenceID, byte flags, StructPropertyData _struct)\r\n```\r\n\r\n#### Parameters\r\n\r\n`sequenceID` [UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n`flags` [Byte](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n`_struct` [StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md)<br>\r\n\r\n### **FMovieSceneSubSequenceTreeEntry(AssetBinaryReader)**\r\n\r\n```csharp\r\nFMovieSceneSubSequenceTreeEntry(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nvoid Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmoviescenetangentdata.md",
    "content": "# FMovieSceneTangentData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class FMovieSceneTangentData\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FMovieSceneTangentData](./uassetapi.propertytypes.structs.fmoviescenetangentdata.md)\r\n\r\n## Fields\r\n\r\n### **ArriveTangent**\r\n\r\n```csharp\r\npublic float ArriveTangent;\r\n```\r\n\r\n### **LeaveTangent**\r\n\r\n```csharp\r\npublic float LeaveTangent;\r\n```\r\n\r\n### **ArriveTangentWeight**\r\n\r\n```csharp\r\npublic float ArriveTangentWeight;\r\n```\r\n\r\n### **LeaveTangentWeight**\r\n\r\n```csharp\r\npublic float LeaveTangentWeight;\r\n```\r\n\r\n### **TangentWeightMode**\r\n\r\n```csharp\r\npublic ERichCurveTangentWeightMode TangentWeightMode;\r\n```\r\n\r\n### **padding**\r\n\r\n```csharp\r\npublic Byte[] padding;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMovieSceneTangentData()**\r\n\r\n```csharp\r\npublic FMovieSceneTangentData()\r\n```\r\n\r\n### **FMovieSceneTangentData(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FMovieSceneTangentData(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmoviescenetrackfielddata.md",
    "content": "# FMovieSceneTrackFieldData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic struct FMovieSceneTrackFieldData\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FMovieSceneTrackFieldData](./uassetapi.propertytypes.structs.fmoviescenetrackfielddata.md)\r\n\r\n## Fields\r\n\r\n### **Field**\r\n\r\n```csharp\r\npublic TMovieSceneEvaluationTree<uint> Field;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMovieSceneTrackFieldData(AssetBinaryReader)**\r\n\r\n```csharp\r\nFMovieSceneTrackFieldData(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fmoviescenevalue-1.md",
    "content": "# FMovieSceneValue&lt;T&gt;\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class FMovieSceneValue<T>\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FMovieSceneValue&lt;T&gt;](./uassetapi.propertytypes.structs.fmoviescenevalue-1.md)\r\n\r\n## Fields\r\n\r\n### **Value**\r\n\r\n```csharp\r\npublic T Value;\r\n```\r\n\r\n### **Tangent**\r\n\r\n```csharp\r\npublic FMovieSceneTangentData Tangent;\r\n```\r\n\r\n### **InterpMode**\r\n\r\n```csharp\r\npublic ERichCurveInterpMode InterpMode;\r\n```\r\n\r\n### **TangentMode**\r\n\r\n```csharp\r\npublic ERichCurveTangentMode TangentMode;\r\n```\r\n\r\n### **padding**\r\n\r\n```csharp\r\npublic Byte[] padding;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMovieSceneValue(AssetBinaryReader, T)**\r\n\r\n```csharp\r\npublic FMovieSceneValue(AssetBinaryReader reader, T value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`value` T<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter, Action&lt;T&gt;)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer, Action<T> valueWriter)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`valueWriter` Action&lt;T&gt;<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fnamecurvekey.md",
    "content": "# FNameCurveKey\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic struct FNameCurveKey\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FNameCurveKey](./uassetapi.propertytypes.structs.fnamecurvekey.md)<br>\r\nImplements [IStruct&lt;FNameCurveKey&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Fields\r\n\r\n### **Time**\r\n\r\n```csharp\r\npublic float Time;\r\n```\r\n\r\n### **Value**\r\n\r\n```csharp\r\npublic FName Value;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FNameCurveKey(Single, FName)**\r\n\r\n```csharp\r\nFNameCurveKey(float time, FName value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`time` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`value` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **FNameCurveKey(AssetBinaryReader)**\r\n\r\n```csharp\r\nFNameCurveKey(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFNameCurveKey Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FNameCurveKey](./uassetapi.propertytypes.structs.fnamecurvekey.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\nstring ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFNameCurveKey FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FNameCurveKey](./uassetapi.propertytypes.structs.fnamecurvekey.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fnavagentselector.md",
    "content": "# FNavAgentSelector\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic struct FNavAgentSelector\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FNavAgentSelector](./uassetapi.propertytypes.structs.fnavagentselector.md)<br>\r\nImplements [IStruct&lt;FNavAgentSelector&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Fields\r\n\r\n### **PackedBits**\r\n\r\n```csharp\r\npublic uint PackedBits;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FNavAgentSelector(UInt32)**\r\n\r\n```csharp\r\nFNavAgentSelector(uint packedBits)\r\n```\r\n\r\n#### Parameters\r\n\r\n`packedBits` [UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n### **FNavAgentSelector(AssetBinaryReader)**\r\n\r\n```csharp\r\nFNavAgentSelector(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFNavAgentSelector Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FNavAgentSelector](./uassetapi.propertytypes.structs.fnavagentselector.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\nstring ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFNavAgentSelector FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FNavAgentSelector](./uassetapi.propertytypes.structs.fnavagentselector.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fontcharacterpropertydata.md",
    "content": "# FontCharacterPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class FontCharacterPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.UnrealTypes.FFontCharacter]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FFontCharacter&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [FontCharacterPropertyData](./uassetapi.propertytypes.structs.fontcharacterpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FFontCharacter Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FFontCharacter](./uassetapi.unrealtypes.ffontcharacter.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **FontCharacterPropertyData(FName)**\r\n\r\n```csharp\r\npublic FontCharacterPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **FontCharacterPropertyData()**\r\n\r\n```csharp\r\npublic FontCharacterPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fontdatapropertydata.md",
    "content": "# FontDataPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class FontDataPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.UnrealTypes.FFontData]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FFontData&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [FontDataPropertyData](./uassetapi.propertytypes.structs.fontdatapropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FFontData Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FFontData](./uassetapi.unrealtypes.ffontdata.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **FontDataPropertyData(FName)**\r\n\r\n```csharp\r\npublic FontDataPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **FontDataPropertyData()**\r\n\r\n```csharp\r\npublic FontDataPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.framenumberpropertydata.md",
    "content": "# FrameNumberPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class FrameNumberPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FFrameNumber]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FFrameNumber&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FFrameNumber&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [FrameNumberPropertyData](./uassetapi.propertytypes.structs.framenumberpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FFrameNumber Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FFrameNumber](./uassetapi.unrealtypes.fframenumber.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **FrameNumberPropertyData(FName)**\r\n\r\n```csharp\r\npublic FrameNumberPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **FrameNumberPropertyData()**\r\n\r\n```csharp\r\npublic FrameNumberPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fsectionevaluationdatatree.md",
    "content": "# FSectionEvaluationDataTree\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic struct FSectionEvaluationDataTree\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FSectionEvaluationDataTree](./uassetapi.propertytypes.structs.fsectionevaluationdatatree.md)\r\n\r\n## Fields\r\n\r\n### **Tree**\r\n\r\n```csharp\r\npublic TMovieSceneEvaluationTree<StructPropertyData> Tree;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FSectionEvaluationDataTree(AssetBinaryReader)**\r\n\r\n```csharp\r\nFSectionEvaluationDataTree(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **&lt;.ctor&gt;g__ReadTree|1_1(AssetBinaryReader)**\r\n\r\n```csharp\r\nStructPropertyData <.ctor>g__ReadTree|1_1(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md)<br>\r\n\r\n### **&lt;Write&gt;g__WriteTree|2_0(AssetBinaryWriter, StructPropertyData)**\r\n\r\n```csharp\r\nvoid <Write>g__WriteTree|2_0(AssetBinaryWriter writer, StructPropertyData data)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`data` [StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.fstringcurvekey.md",
    "content": "# FStringCurveKey\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic struct FStringCurveKey\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FStringCurveKey](./uassetapi.propertytypes.structs.fstringcurvekey.md)<br>\r\nImplements [IStruct&lt;FStringCurveKey&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Fields\r\n\r\n### **Time**\r\n\r\n```csharp\r\npublic float Time;\r\n```\r\n\r\n### **Value**\r\n\r\n```csharp\r\npublic FString Value;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FStringCurveKey(Single, FString)**\r\n\r\n```csharp\r\nFStringCurveKey(float time, FString value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`time` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`value` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **FStringCurveKey(AssetBinaryReader)**\r\n\r\n```csharp\r\nFStringCurveKey(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFStringCurveKey Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FStringCurveKey](./uassetapi.propertytypes.structs.fstringcurvekey.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\nstring ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFStringCurveKey FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FStringCurveKey](./uassetapi.propertytypes.structs.fstringcurvekey.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.gameplaytagcontainerpropertydata.md",
    "content": "# GameplayTagContainerPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class GameplayTagContainerPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.UnrealTypes.FName[]]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FName[]&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [GameplayTagContainerPropertyData](./uassetapi.propertytypes.structs.gameplaytagcontainerpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FName[] Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FName[]](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **GameplayTagContainerPropertyData(FName)**\r\n\r\n```csharp\r\npublic GameplayTagContainerPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **GameplayTagContainerPropertyData()**\r\n\r\n```csharp\r\npublic GameplayTagContainerPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **HandleCloned(PropertyData)**\r\n\r\n```csharp\r\nprotected void HandleCloned(PropertyData res)\r\n```\r\n\r\n#### Parameters\r\n\r\n`res` [PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.guidpropertydata.md",
    "content": "# GuidPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nDescribes a 128-bit [Guid](https://docs.microsoft.com/en-us/dotnet/api/system.guid).\r\n\r\n```csharp\r\npublic class GuidPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[System.Guid]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;Guid&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [GuidPropertyData](./uassetapi.propertytypes.structs.guidpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic Guid Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Guid](https://docs.microsoft.com/en-us/dotnet/api/system.guid)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **GuidPropertyData(FName)**\r\n\r\n```csharp\r\npublic GuidPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **GuidPropertyData()**\r\n\r\n```csharp\r\npublic GuidPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **HandleCloned(PropertyData)**\r\n\r\n```csharp\r\nprotected void HandleCloned(PropertyData res)\r\n```\r\n\r\n#### Parameters\r\n\r\n`res` [PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.intpointpropertydata.md",
    "content": "# IntPointPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class IntPointPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[System.Int32[]]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;Int32[]&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [IntPointPropertyData](./uassetapi.propertytypes.structs.intpointpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic Int32[] Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Int32[]](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **IntPointPropertyData(FName)**\r\n\r\n```csharp\r\npublic IntPointPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **IntPointPropertyData()**\r\n\r\n```csharp\r\npublic IntPointPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.intvector2propertydata.md",
    "content": "# IntVector2PropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class IntVector2PropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FIntVector2]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FIntVector2&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FIntVector2&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [IntVector2PropertyData](./uassetapi.propertytypes.structs.intvector2propertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FIntVector2 Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FIntVector2](./uassetapi.unrealtypes.fintvector2.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **IntVector2PropertyData(FName)**\r\n\r\n```csharp\r\npublic IntVector2PropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **IntVector2PropertyData()**\r\n\r\n```csharp\r\npublic IntVector2PropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.intvectorpropertydata.md",
    "content": "# IntVectorPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class IntVectorPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FIntVector]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FIntVector&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FIntVector&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [IntVectorPropertyData](./uassetapi.propertytypes.structs.intvectorpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FIntVector Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FIntVector](./uassetapi.unrealtypes.fintvector.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **IntVectorPropertyData(FName)**\r\n\r\n```csharp\r\npublic IntVectorPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **IntVectorPropertyData()**\r\n\r\n```csharp\r\npublic IntVectorPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.keyhandlemappropertydata.md",
    "content": "# KeyHandleMapPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class KeyHandleMapPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [KeyHandleMapPropertyData](./uassetapi.propertytypes.structs.keyhandlemappropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **KeyHandleMapPropertyData(FName)**\r\n\r\n```csharp\r\npublic KeyHandleMapPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **KeyHandleMapPropertyData()**\r\n\r\n```csharp\r\npublic KeyHandleMapPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.levelsequenceobjectreferencemappropertydata.md",
    "content": "# LevelSequenceObjectReferenceMapPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class LevelSequenceObjectReferenceMapPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.UnrealTypes.TMap`2[[System.Guid],[UAssetAPI.PropertyTypes.Structs.FLevelSequenceLegacyObjectReference]]]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;TMap&lt;Guid, FLevelSequenceLegacyObjectReference&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [LevelSequenceObjectReferenceMapPropertyData](./uassetapi.propertytypes.structs.levelsequenceobjectreferencemappropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic TMap<Guid, FLevelSequenceLegacyObjectReference> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[TMap&lt;Guid, FLevelSequenceLegacyObjectReference&gt;](./uassetapi.unrealtypes.tmap-2.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **LevelSequenceObjectReferenceMapPropertyData(FName)**\r\n\r\n```csharp\r\npublic LevelSequenceObjectReferenceMapPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **LevelSequenceObjectReferenceMapPropertyData()**\r\n\r\n```csharp\r\npublic LevelSequenceObjectReferenceMapPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.linearcolorpropertydata.md",
    "content": "# LinearColorPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class LinearColorPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FLinearColor]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FLinearColor&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FLinearColor&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [LinearColorPropertyData](./uassetapi.propertytypes.structs.linearcolorpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FLinearColor Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FLinearColor](./uassetapi.unrealtypes.flinearcolor.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **LinearColorPropertyData(FName)**\r\n\r\n```csharp\r\npublic LinearColorPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **LinearColorPropertyData()**\r\n\r\n```csharp\r\npublic LinearColorPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.materialattributesinputpropertydata.md",
    "content": "# MaterialAttributesInputPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MaterialAttributesInputPropertyData : MaterialInputPropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;Int32&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MaterialInputPropertyData&lt;Int32&gt;](./uassetapi.propertytypes.structs.materialinputpropertydata-1.md) → [MaterialAttributesInputPropertyData](./uassetapi.propertytypes.structs.materialattributesinputpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Expression**\r\n\r\n```csharp\r\npublic FPackageIndex Expression;\r\n```\r\n\r\n### **OutputIndex**\r\n\r\n```csharp\r\npublic int OutputIndex;\r\n```\r\n\r\n### **InputName**\r\n\r\n```csharp\r\npublic FName InputName;\r\n```\r\n\r\n### **InputNameOld**\r\n\r\n```csharp\r\npublic FString InputNameOld;\r\n```\r\n\r\n### **Mask**\r\n\r\n```csharp\r\npublic int Mask;\r\n```\r\n\r\n### **MaskR**\r\n\r\n```csharp\r\npublic int MaskR;\r\n```\r\n\r\n### **MaskG**\r\n\r\n```csharp\r\npublic int MaskG;\r\n```\r\n\r\n### **MaskB**\r\n\r\n```csharp\r\npublic int MaskB;\r\n```\r\n\r\n### **MaskA**\r\n\r\n```csharp\r\npublic int MaskA;\r\n```\r\n\r\n### **ExpressionName**\r\n\r\n```csharp\r\npublic FName ExpressionName;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic int Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MaterialAttributesInputPropertyData(FName)**\r\n\r\n```csharp\r\npublic MaterialAttributesInputPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MaterialAttributesInputPropertyData()**\r\n\r\n```csharp\r\npublic MaterialAttributesInputPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.materialoverridenanitepropertydata.md",
    "content": "# MaterialOverrideNanitePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MaterialOverrideNanitePropertyData : StructPropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;List&lt;PropertyData&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md) → [MaterialOverrideNanitePropertyData](./uassetapi.propertytypes.structs.materialoverridenanitepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **OverrideMaterialRef**\r\n\r\n```csharp\r\npublic FSoftObjectPath OverrideMaterialRef;\r\n```\r\n\r\n### **bEnableOverride**\r\n\r\n```csharp\r\npublic bool bEnableOverride;\r\n```\r\n\r\n### **OverrideMaterial**\r\n\r\n```csharp\r\npublic FPackageIndex OverrideMaterial;\r\n```\r\n\r\n### **bSerializeAsCookedData**\r\n\r\n```csharp\r\npublic bool bSerializeAsCookedData;\r\n```\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic FName StructType;\r\n```\r\n\r\n### **SerializeNone**\r\n\r\n```csharp\r\npublic bool SerializeNone;\r\n```\r\n\r\n### **StructGUID**\r\n\r\n```csharp\r\npublic Guid StructGUID;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic List<PropertyData> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[List&lt;PropertyData&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MaterialOverrideNanitePropertyData(FName, FName)**\r\n\r\n```csharp\r\npublic MaterialOverrideNanitePropertyData(FName name, FName forcedType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`forcedType` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MaterialOverrideNanitePropertyData(FName)**\r\n\r\n```csharp\r\npublic MaterialOverrideNanitePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MaterialOverrideNanitePropertyData()**\r\n\r\n```csharp\r\npublic MaterialOverrideNanitePropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.matrixpropertydata.md",
    "content": "# MatrixPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MatrixPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FMatrix]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FMatrix&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FMatrix&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [MatrixPropertyData](./uassetapi.propertytypes.structs.matrixpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FMatrix Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FMatrix](./uassetapi.unrealtypes.fmatrix.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MatrixPropertyData(FName)**\r\n\r\n```csharp\r\npublic MatrixPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MatrixPropertyData()**\r\n\r\n```csharp\r\npublic MatrixPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.moviescenedoublechannelpropertydata.md",
    "content": "# MovieSceneDoubleChannelPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MovieSceneDoubleChannelPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.PropertyTypes.Structs.FMovieSceneDoubleChannel]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FMovieSceneDoubleChannel&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MovieSceneDoubleChannelPropertyData](./uassetapi.propertytypes.structs.moviescenedoublechannelpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FMovieSceneDoubleChannel Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FMovieSceneDoubleChannel](./uassetapi.propertytypes.structs.fmoviescenedoublechannel.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MovieSceneDoubleChannelPropertyData(FName)**\r\n\r\n```csharp\r\npublic MovieSceneDoubleChannelPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneDoubleChannelPropertyData()**\r\n\r\n```csharp\r\npublic MovieSceneDoubleChannelPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.moviesceneevaltemplateptrpropertydata.md",
    "content": "# MovieSceneEvalTemplatePtrPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MovieSceneEvalTemplatePtrPropertyData : MovieSceneTemplatePropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;List&lt;PropertyData&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md) → [MovieSceneTemplatePropertyData](./uassetapi.propertytypes.structs.moviescenetemplatepropertydata.md) → [MovieSceneEvalTemplatePtrPropertyData](./uassetapi.propertytypes.structs.moviesceneevaltemplateptrpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic FName StructType;\r\n```\r\n\r\n### **SerializeNone**\r\n\r\n```csharp\r\npublic bool SerializeNone;\r\n```\r\n\r\n### **StructGUID**\r\n\r\n```csharp\r\npublic Guid StructGUID;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic List<PropertyData> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[List&lt;PropertyData&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MovieSceneEvalTemplatePtrPropertyData(FName, FName)**\r\n\r\n```csharp\r\npublic MovieSceneEvalTemplatePtrPropertyData(FName name, FName forcedType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`forcedType` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneEvalTemplatePtrPropertyData(FName)**\r\n\r\n```csharp\r\npublic MovieSceneEvalTemplatePtrPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneEvalTemplatePtrPropertyData()**\r\n\r\n```csharp\r\npublic MovieSceneEvalTemplatePtrPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.moviesceneevaluationfieldentitytreepropertydata.md",
    "content": "# MovieSceneEvaluationFieldEntityTreePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MovieSceneEvaluationFieldEntityTreePropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.PropertyTypes.Structs.FMovieSceneEvaluationFieldEntityTree]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FMovieSceneEvaluationFieldEntityTree&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MovieSceneEvaluationFieldEntityTreePropertyData](./uassetapi.propertytypes.structs.moviesceneevaluationfieldentitytreepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FMovieSceneEvaluationFieldEntityTree Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FMovieSceneEvaluationFieldEntityTree](./uassetapi.propertytypes.structs.fmoviesceneevaluationfieldentitytree.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MovieSceneEvaluationFieldEntityTreePropertyData(FName)**\r\n\r\n```csharp\r\npublic MovieSceneEvaluationFieldEntityTreePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneEvaluationFieldEntityTreePropertyData()**\r\n\r\n```csharp\r\npublic MovieSceneEvaluationFieldEntityTreePropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.moviesceneevaluationkeypropertydata.md",
    "content": "# MovieSceneEvaluationKeyPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MovieSceneEvaluationKeyPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.PropertyTypes.Structs.FMovieSceneEvaluationKey]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FMovieSceneEvaluationKey&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MovieSceneEvaluationKeyPropertyData](./uassetapi.propertytypes.structs.moviesceneevaluationkeypropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FMovieSceneEvaluationKey Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FMovieSceneEvaluationKey](./uassetapi.propertytypes.structs.fmoviesceneevaluationkey.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MovieSceneEvaluationKeyPropertyData(FName)**\r\n\r\n```csharp\r\npublic MovieSceneEvaluationKeyPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneEvaluationKeyPropertyData()**\r\n\r\n```csharp\r\npublic MovieSceneEvaluationKeyPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.moviesceneeventparameterspropertydata.md",
    "content": "# MovieSceneEventParametersPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MovieSceneEventParametersPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.PropertyTypes.Structs.FMovieSceneEventParameters]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FMovieSceneEventParameters&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MovieSceneEventParametersPropertyData](./uassetapi.propertytypes.structs.moviesceneeventparameterspropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FMovieSceneEventParameters Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FMovieSceneEventParameters](./uassetapi.propertytypes.structs.fmoviesceneeventparameters.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MovieSceneEventParametersPropertyData(FName)**\r\n\r\n```csharp\r\npublic MovieSceneEventParametersPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneEventParametersPropertyData()**\r\n\r\n```csharp\r\npublic MovieSceneEventParametersPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.moviescenefloatchannelpropertydata.md",
    "content": "# MovieSceneFloatChannelPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MovieSceneFloatChannelPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.PropertyTypes.Structs.FMovieSceneFloatChannel]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FMovieSceneFloatChannel&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MovieSceneFloatChannelPropertyData](./uassetapi.propertytypes.structs.moviescenefloatchannelpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FMovieSceneFloatChannel Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FMovieSceneFloatChannel](./uassetapi.propertytypes.structs.fmoviescenefloatchannel.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MovieSceneFloatChannelPropertyData(FName)**\r\n\r\n```csharp\r\npublic MovieSceneFloatChannelPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneFloatChannelPropertyData()**\r\n\r\n```csharp\r\npublic MovieSceneFloatChannelPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.moviescenefloatvaluepropertydata.md",
    "content": "# MovieSceneFloatValuePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MovieSceneFloatValuePropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.PropertyTypes.Structs.FMovieSceneFloatValue]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FMovieSceneFloatValue&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MovieSceneFloatValuePropertyData](./uassetapi.propertytypes.structs.moviescenefloatvaluepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FMovieSceneFloatValue Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FMovieSceneFloatValue](./uassetapi.propertytypes.structs.fmoviescenefloatvalue.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MovieSceneFloatValuePropertyData(FName)**\r\n\r\n```csharp\r\npublic MovieSceneFloatValuePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneFloatValuePropertyData()**\r\n\r\n```csharp\r\npublic MovieSceneFloatValuePropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.moviesceneframerangepropertydata.md",
    "content": "# MovieSceneFrameRangePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MovieSceneFrameRangePropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.UnrealTypes.TRange`1[[UAssetAPI.UnrealTypes.FFrameNumber]]]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;TRange&lt;FFrameNumber&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MovieSceneFrameRangePropertyData](./uassetapi.propertytypes.structs.moviesceneframerangepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic TRange<FFrameNumber> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[TRange&lt;FFrameNumber&gt;](./uassetapi.unrealtypes.trange-1.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MovieSceneFrameRangePropertyData(FName)**\r\n\r\n```csharp\r\npublic MovieSceneFrameRangePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneFrameRangePropertyData()**\r\n\r\n```csharp\r\npublic MovieSceneFrameRangePropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.moviescenegenerationledgerpropertydata.md",
    "content": "# MovieSceneGenerationLedgerPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MovieSceneGenerationLedgerPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [MovieSceneGenerationLedgerPropertyData](./uassetapi.propertytypes.structs.moviescenegenerationledgerpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MovieSceneGenerationLedgerPropertyData(FName)**\r\n\r\n```csharp\r\npublic MovieSceneGenerationLedgerPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneGenerationLedgerPropertyData()**\r\n\r\n```csharp\r\npublic MovieSceneGenerationLedgerPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.moviescenesegmentidentifierpropertydata.md",
    "content": "# MovieSceneSegmentIdentifierPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MovieSceneSegmentIdentifierPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[System.Int32]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;Int32&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MovieSceneSegmentIdentifierPropertyData](./uassetapi.propertytypes.structs.moviescenesegmentidentifierpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic int Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MovieSceneSegmentIdentifierPropertyData(FName)**\r\n\r\n```csharp\r\npublic MovieSceneSegmentIdentifierPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneSegmentIdentifierPropertyData()**\r\n\r\n```csharp\r\npublic MovieSceneSegmentIdentifierPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.moviescenesegmentpropertydata.md",
    "content": "# MovieSceneSegmentPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MovieSceneSegmentPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.PropertyTypes.Structs.FMovieSceneSegment]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FMovieSceneSegment&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MovieSceneSegmentPropertyData](./uassetapi.propertytypes.structs.moviescenesegmentpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FMovieSceneSegment Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FMovieSceneSegment](./uassetapi.propertytypes.structs.fmoviescenesegment.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MovieSceneSegmentPropertyData(FName)**\r\n\r\n```csharp\r\npublic MovieSceneSegmentPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneSegmentPropertyData()**\r\n\r\n```csharp\r\npublic MovieSceneSegmentPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.moviescenesequenceidpropertydata.md",
    "content": "# MovieSceneSequenceIDPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MovieSceneSequenceIDPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[System.UInt32]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;UInt32&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MovieSceneSequenceIDPropertyData](./uassetapi.propertytypes.structs.moviescenesequenceidpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic uint Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MovieSceneSequenceIDPropertyData(FName)**\r\n\r\n```csharp\r\npublic MovieSceneSequenceIDPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneSequenceIDPropertyData()**\r\n\r\n```csharp\r\npublic MovieSceneSequenceIDPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.moviescenesequenceinstancedataptrpropertydata.md",
    "content": "# MovieSceneSequenceInstanceDataPtrPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MovieSceneSequenceInstanceDataPtrPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.UnrealTypes.FPackageIndex]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FPackageIndex&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MovieSceneSequenceInstanceDataPtrPropertyData](./uassetapi.propertytypes.structs.moviescenesequenceinstancedataptrpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FPackageIndex Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MovieSceneSequenceInstanceDataPtrPropertyData(FName)**\r\n\r\n```csharp\r\npublic MovieSceneSequenceInstanceDataPtrPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneSequenceInstanceDataPtrPropertyData()**\r\n\r\n```csharp\r\npublic MovieSceneSequenceInstanceDataPtrPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.moviescenesubsectionfielddatapropertydata.md",
    "content": "# MovieSceneSubSectionFieldDataPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MovieSceneSubSectionFieldDataPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.PropertyTypes.Structs.FMovieSceneSubSectionFieldData]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FMovieSceneSubSectionFieldData&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MovieSceneSubSectionFieldDataPropertyData](./uassetapi.propertytypes.structs.moviescenesubsectionfielddatapropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FMovieSceneSubSectionFieldData Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FMovieSceneSubSectionFieldData](./uassetapi.propertytypes.structs.fmoviescenesubsectionfielddata.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MovieSceneSubSectionFieldDataPropertyData(FName)**\r\n\r\n```csharp\r\npublic MovieSceneSubSectionFieldDataPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneSubSectionFieldDataPropertyData()**\r\n\r\n```csharp\r\npublic MovieSceneSubSectionFieldDataPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.moviescenesubsequencetreepropertydata.md",
    "content": "# MovieSceneSubSequenceTreePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MovieSceneSubSequenceTreePropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.PropertyTypes.Structs.FMovieSceneSubSequenceTree]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FMovieSceneSubSequenceTree&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MovieSceneSubSequenceTreePropertyData](./uassetapi.propertytypes.structs.moviescenesubsequencetreepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FMovieSceneSubSequenceTree Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FMovieSceneSubSequenceTree](./uassetapi.propertytypes.structs.fmoviescenesubsequencetree.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MovieSceneSubSequenceTreePropertyData(FName)**\r\n\r\n```csharp\r\npublic MovieSceneSubSequenceTreePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneSubSequenceTreePropertyData()**\r\n\r\n```csharp\r\npublic MovieSceneSubSequenceTreePropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.moviescenetemplatepropertydata.md",
    "content": "# MovieSceneTemplatePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MovieSceneTemplatePropertyData : StructPropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;List&lt;PropertyData&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md) → [MovieSceneTemplatePropertyData](./uassetapi.propertytypes.structs.moviescenetemplatepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic FName StructType;\r\n```\r\n\r\n### **SerializeNone**\r\n\r\n```csharp\r\npublic bool SerializeNone;\r\n```\r\n\r\n### **StructGUID**\r\n\r\n```csharp\r\npublic Guid StructGUID;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic List<PropertyData> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[List&lt;PropertyData&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MovieSceneTemplatePropertyData(FName, FName)**\r\n\r\n```csharp\r\npublic MovieSceneTemplatePropertyData(FName name, FName forcedType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`forcedType` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneTemplatePropertyData(FName)**\r\n\r\n```csharp\r\npublic MovieSceneTemplatePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneTemplatePropertyData()**\r\n\r\n```csharp\r\npublic MovieSceneTemplatePropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.moviescenetrackfielddatapropertydata.md",
    "content": "# MovieSceneTrackFieldDataPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MovieSceneTrackFieldDataPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.PropertyTypes.Structs.FMovieSceneTrackFieldData]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FMovieSceneTrackFieldData&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MovieSceneTrackFieldDataPropertyData](./uassetapi.propertytypes.structs.moviescenetrackfielddatapropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FMovieSceneTrackFieldData Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FMovieSceneTrackFieldData](./uassetapi.propertytypes.structs.fmoviescenetrackfielddata.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MovieSceneTrackFieldDataPropertyData(FName)**\r\n\r\n```csharp\r\npublic MovieSceneTrackFieldDataPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneTrackFieldDataPropertyData()**\r\n\r\n```csharp\r\npublic MovieSceneTrackFieldDataPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.moviescenetrackidentifierpropertydata.md",
    "content": "# MovieSceneTrackIdentifierPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MovieSceneTrackIdentifierPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[System.UInt32]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;UInt32&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MovieSceneTrackIdentifierPropertyData](./uassetapi.propertytypes.structs.moviescenetrackidentifierpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic uint Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MovieSceneTrackIdentifierPropertyData(FName)**\r\n\r\n```csharp\r\npublic MovieSceneTrackIdentifierPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneTrackIdentifierPropertyData()**\r\n\r\n```csharp\r\npublic MovieSceneTrackIdentifierPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.moviescenetrackimplementationptrpropertydata.md",
    "content": "# MovieSceneTrackImplementationPtrPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class MovieSceneTrackImplementationPtrPropertyData : MovieSceneTemplatePropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;List&lt;PropertyData&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md) → [MovieSceneTemplatePropertyData](./uassetapi.propertytypes.structs.moviescenetemplatepropertydata.md) → [MovieSceneTrackImplementationPtrPropertyData](./uassetapi.propertytypes.structs.moviescenetrackimplementationptrpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic FName StructType;\r\n```\r\n\r\n### **SerializeNone**\r\n\r\n```csharp\r\npublic bool SerializeNone;\r\n```\r\n\r\n### **StructGUID**\r\n\r\n```csharp\r\npublic Guid StructGUID;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic List<PropertyData> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[List&lt;PropertyData&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **MovieSceneTrackImplementationPtrPropertyData(FName, FName)**\r\n\r\n```csharp\r\npublic MovieSceneTrackImplementationPtrPropertyData(FName name, FName forcedType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`forcedType` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneTrackImplementationPtrPropertyData(FName)**\r\n\r\n```csharp\r\npublic MovieSceneTrackImplementationPtrPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **MovieSceneTrackImplementationPtrPropertyData()**\r\n\r\n```csharp\r\npublic MovieSceneTrackImplementationPtrPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.namecurvekeypropertydata.md",
    "content": "# NameCurveKeyPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class NameCurveKeyPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.PropertyTypes.Structs.FNameCurveKey]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FNameCurveKey&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FNameCurveKey&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [NameCurveKeyPropertyData](./uassetapi.propertytypes.structs.namecurvekeypropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FNameCurveKey Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FNameCurveKey](./uassetapi.propertytypes.structs.fnamecurvekey.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **NameCurveKeyPropertyData(FName)**\r\n\r\n```csharp\r\npublic NameCurveKeyPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **NameCurveKeyPropertyData()**\r\n\r\n```csharp\r\npublic NameCurveKeyPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.navagentselectorpropertydata.md",
    "content": "# NavAgentSelectorPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class NavAgentSelectorPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.PropertyTypes.Structs.FNavAgentSelector]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FNavAgentSelector&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FNavAgentSelector&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [NavAgentSelectorPropertyData](./uassetapi.propertytypes.structs.navagentselectorpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FNavAgentSelector Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FNavAgentSelector](./uassetapi.propertytypes.structs.fnavagentselector.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **NavAgentSelectorPropertyData(FName)**\r\n\r\n```csharp\r\npublic NavAgentSelectorPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **NavAgentSelectorPropertyData()**\r\n\r\n```csharp\r\npublic NavAgentSelectorPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.niagaradatachannelvariablepropertydata.md",
    "content": "# NiagaraDataChannelVariablePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class NiagaraDataChannelVariablePropertyData : NiagaraVariableBasePropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;List&lt;PropertyData&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md) → [NiagaraVariableBasePropertyData](./uassetapi.propertytypes.structs.niagaravariablebasepropertydata.md) → [NiagaraDataChannelVariablePropertyData](./uassetapi.propertytypes.structs.niagaradatachannelvariablepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **VariableName**\r\n\r\n```csharp\r\npublic FName VariableName;\r\n```\r\n\r\n### **TypeDef**\r\n\r\n```csharp\r\npublic StructPropertyData TypeDef;\r\n```\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic FName StructType;\r\n```\r\n\r\n### **SerializeNone**\r\n\r\n```csharp\r\npublic bool SerializeNone;\r\n```\r\n\r\n### **StructGUID**\r\n\r\n```csharp\r\npublic Guid StructGUID;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic List<PropertyData> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[List&lt;PropertyData&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **NiagaraDataChannelVariablePropertyData(FName, FName)**\r\n\r\n```csharp\r\npublic NiagaraDataChannelVariablePropertyData(FName name, FName forcedType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`forcedType` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **NiagaraDataChannelVariablePropertyData(FName)**\r\n\r\n```csharp\r\npublic NiagaraDataChannelVariablePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **NiagaraDataChannelVariablePropertyData()**\r\n\r\n```csharp\r\npublic NiagaraDataChannelVariablePropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.niagaradatainterfacegpuparaminfopropertydata.md",
    "content": "# NiagaraDataInterfaceGPUParamInfoPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class NiagaraDataInterfaceGPUParamInfoPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FNiagaraDataInterfaceGPUParamInfo]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FNiagaraDataInterfaceGPUParamInfo&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FNiagaraDataInterfaceGPUParamInfo&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [NiagaraDataInterfaceGPUParamInfoPropertyData](./uassetapi.propertytypes.structs.niagaradatainterfacegpuparaminfopropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FNiagaraDataInterfaceGPUParamInfo Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FNiagaraDataInterfaceGPUParamInfo](./uassetapi.unrealtypes.fniagaradatainterfacegpuparaminfo.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **NiagaraDataInterfaceGPUParamInfoPropertyData(FName)**\r\n\r\n```csharp\r\npublic NiagaraDataInterfaceGPUParamInfoPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **NiagaraDataInterfaceGPUParamInfoPropertyData()**\r\n\r\n```csharp\r\npublic NiagaraDataInterfaceGPUParamInfoPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.niagaravariablebasepropertydata.md",
    "content": "# NiagaraVariableBasePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class NiagaraVariableBasePropertyData : StructPropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;List&lt;PropertyData&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md) → [NiagaraVariableBasePropertyData](./uassetapi.propertytypes.structs.niagaravariablebasepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **VariableName**\r\n\r\n```csharp\r\npublic FName VariableName;\r\n```\r\n\r\n### **TypeDef**\r\n\r\n```csharp\r\npublic StructPropertyData TypeDef;\r\n```\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic FName StructType;\r\n```\r\n\r\n### **SerializeNone**\r\n\r\n```csharp\r\npublic bool SerializeNone;\r\n```\r\n\r\n### **StructGUID**\r\n\r\n```csharp\r\npublic Guid StructGUID;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic List<PropertyData> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[List&lt;PropertyData&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **NiagaraVariableBasePropertyData(FName, FName)**\r\n\r\n```csharp\r\npublic NiagaraVariableBasePropertyData(FName name, FName forcedType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`forcedType` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **NiagaraVariableBasePropertyData(FName)**\r\n\r\n```csharp\r\npublic NiagaraVariableBasePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **NiagaraVariableBasePropertyData()**\r\n\r\n```csharp\r\npublic NiagaraVariableBasePropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.niagaravariablepropertydata.md",
    "content": "# NiagaraVariablePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class NiagaraVariablePropertyData : NiagaraVariableBasePropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;List&lt;PropertyData&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md) → [NiagaraVariableBasePropertyData](./uassetapi.propertytypes.structs.niagaravariablebasepropertydata.md) → [NiagaraVariablePropertyData](./uassetapi.propertytypes.structs.niagaravariablepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **VarData**\r\n\r\n```csharp\r\npublic Byte[] VarData;\r\n```\r\n\r\n### **VariableName**\r\n\r\n```csharp\r\npublic FName VariableName;\r\n```\r\n\r\n### **TypeDef**\r\n\r\n```csharp\r\npublic StructPropertyData TypeDef;\r\n```\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic FName StructType;\r\n```\r\n\r\n### **SerializeNone**\r\n\r\n```csharp\r\npublic bool SerializeNone;\r\n```\r\n\r\n### **StructGUID**\r\n\r\n```csharp\r\npublic Guid StructGUID;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic List<PropertyData> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[List&lt;PropertyData&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **NiagaraVariablePropertyData(FName, FName)**\r\n\r\n```csharp\r\npublic NiagaraVariablePropertyData(FName name, FName forcedType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`forcedType` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **NiagaraVariablePropertyData(FName)**\r\n\r\n```csharp\r\npublic NiagaraVariablePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **NiagaraVariablePropertyData()**\r\n\r\n```csharp\r\npublic NiagaraVariablePropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.niagaravariablewithoffsetpropertydata.md",
    "content": "# NiagaraVariableWithOffsetPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class NiagaraVariableWithOffsetPropertyData : NiagaraVariableBasePropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;List&lt;PropertyData&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md) → [NiagaraVariableBasePropertyData](./uassetapi.propertytypes.structs.niagaravariablebasepropertydata.md) → [NiagaraVariableWithOffsetPropertyData](./uassetapi.propertytypes.structs.niagaravariablewithoffsetpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **VariableOffset**\r\n\r\n```csharp\r\npublic int VariableOffset;\r\n```\r\n\r\n### **VariableName**\r\n\r\n```csharp\r\npublic FName VariableName;\r\n```\r\n\r\n### **TypeDef**\r\n\r\n```csharp\r\npublic StructPropertyData TypeDef;\r\n```\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic FName StructType;\r\n```\r\n\r\n### **SerializeNone**\r\n\r\n```csharp\r\npublic bool SerializeNone;\r\n```\r\n\r\n### **StructGUID**\r\n\r\n```csharp\r\npublic Guid StructGUID;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic List<PropertyData> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[List&lt;PropertyData&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **NiagaraVariableWithOffsetPropertyData(FName, FName)**\r\n\r\n```csharp\r\npublic NiagaraVariableWithOffsetPropertyData(FName name, FName forcedType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`forcedType` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **NiagaraVariableWithOffsetPropertyData(FName)**\r\n\r\n```csharp\r\npublic NiagaraVariableWithOffsetPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **NiagaraVariableWithOffsetPropertyData()**\r\n\r\n```csharp\r\npublic NiagaraVariableWithOffsetPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.perplatformboolpropertydata.md",
    "content": "# PerPlatformBoolPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n[BoolPropertyData](./uassetapi.propertytypes.objects.boolpropertydata.md) ([Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)) property with per-platform overrides.\r\n\r\n```csharp\r\npublic class PerPlatformBoolPropertyData : TPerPlatformPropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;Boolean[]&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [TPerPlatformPropertyData&lt;Boolean&gt;](./uassetapi.propertytypes.structs.tperplatformpropertydata-1.md) → [PerPlatformBoolPropertyData](./uassetapi.propertytypes.structs.perplatformboolpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic Boolean[] Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean[]](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **PerPlatformBoolPropertyData(FName)**\r\n\r\n```csharp\r\npublic PerPlatformBoolPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **PerPlatformBoolPropertyData()**\r\n\r\n```csharp\r\npublic PerPlatformBoolPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.perplatformfloatpropertydata.md",
    "content": "# PerPlatformFloatPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n[FloatPropertyData](./uassetapi.propertytypes.objects.floatpropertydata.md) ([Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)) property with per-platform overrides.\r\n\r\n```csharp\r\npublic class PerPlatformFloatPropertyData : TPerPlatformPropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;Single[]&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [TPerPlatformPropertyData&lt;Single&gt;](./uassetapi.propertytypes.structs.tperplatformpropertydata-1.md) → [PerPlatformFloatPropertyData](./uassetapi.propertytypes.structs.perplatformfloatpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic Single[] Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single[]](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **PerPlatformFloatPropertyData(FName)**\r\n\r\n```csharp\r\npublic PerPlatformFloatPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **PerPlatformFloatPropertyData()**\r\n\r\n```csharp\r\npublic PerPlatformFloatPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.perplatformframeratepropertydata.md",
    "content": "# PerPlatformFrameRatePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n[PerPlatformFrameRatePropertyData](./uassetapi.propertytypes.structs.perplatformframeratepropertydata.md) ([FFrameRate](./uassetapi.unrealtypes.fframerate.md)) property with per-platform overrides.\r\n\r\n```csharp\r\npublic class PerPlatformFrameRatePropertyData : TPerPlatformPropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FFrameRate[]&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [TPerPlatformPropertyData&lt;FFrameRate&gt;](./uassetapi.propertytypes.structs.tperplatformpropertydata-1.md) → [PerPlatformFrameRatePropertyData](./uassetapi.propertytypes.structs.perplatformframeratepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FFrameRate[] Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FFrameRate[]](./uassetapi.unrealtypes.fframerate.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **PerPlatformFrameRatePropertyData(FName)**\r\n\r\n```csharp\r\npublic PerPlatformFrameRatePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **PerPlatformFrameRatePropertyData()**\r\n\r\n```csharp\r\npublic PerPlatformFrameRatePropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.perplatformintpropertydata.md",
    "content": "# PerPlatformIntPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n[IntPropertyData](./uassetapi.propertytypes.objects.intpropertydata.md) ([Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)) property with per-platform overrides.\r\n\r\n```csharp\r\npublic class PerPlatformIntPropertyData : TPerPlatformPropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;Int32[]&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [TPerPlatformPropertyData&lt;Int32&gt;](./uassetapi.propertytypes.structs.tperplatformpropertydata-1.md) → [PerPlatformIntPropertyData](./uassetapi.propertytypes.structs.perplatformintpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic Int32[] Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Int32[]](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **PerPlatformIntPropertyData(FName)**\r\n\r\n```csharp\r\npublic PerPlatformIntPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **PerPlatformIntPropertyData()**\r\n\r\n```csharp\r\npublic PerPlatformIntPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.perqualitylevelfloatpropertydata.md",
    "content": "# PerQualityLevelFloatPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class PerQualityLevelFloatPropertyData : TPerQualityLevelPropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;TPerQualityLevel&lt;Single&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [TPerQualityLevelPropertyData&lt;Single&gt;](./uassetapi.propertytypes.structs.tperqualitylevelpropertydata-1.md) → [PerQualityLevelFloatPropertyData](./uassetapi.propertytypes.structs.perqualitylevelfloatpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic TPerQualityLevel<float> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[TPerQualityLevel&lt;Single&gt;](./uassetapi.unrealtypes.tperqualitylevel-1.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **PerQualityLevelFloatPropertyData(FName)**\r\n\r\n```csharp\r\npublic PerQualityLevelFloatPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **PerQualityLevelFloatPropertyData()**\r\n\r\n```csharp\r\npublic PerQualityLevelFloatPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.perqualitylevelintpropertydata.md",
    "content": "# PerQualityLevelIntPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class PerQualityLevelIntPropertyData : TPerQualityLevelPropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;TPerQualityLevel&lt;Int32&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [TPerQualityLevelPropertyData&lt;Int32&gt;](./uassetapi.propertytypes.structs.tperqualitylevelpropertydata-1.md) → [PerQualityLevelIntPropertyData](./uassetapi.propertytypes.structs.perqualitylevelintpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic TPerQualityLevel<int> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[TPerQualityLevel&lt;Int32&gt;](./uassetapi.unrealtypes.tperqualitylevel-1.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **PerQualityLevelIntPropertyData(FName)**\r\n\r\n```csharp\r\npublic PerQualityLevelIntPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **PerQualityLevelIntPropertyData()**\r\n\r\n```csharp\r\npublic PerQualityLevelIntPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.planepropertydata.md",
    "content": "# PlanePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nA plane in 3-D space stores the coeffecients as Xx+Yy+Zz=W.\r\n\r\n```csharp\r\npublic class PlanePropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FPlane]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FPlane&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FPlane&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [PlanePropertyData](./uassetapi.propertytypes.structs.planepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FPlane Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FPlane](./uassetapi.unrealtypes.fplane.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **PlanePropertyData(FName)**\r\n\r\n```csharp\r\npublic PlanePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **PlanePropertyData()**\r\n\r\n```csharp\r\npublic PlanePropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.quatpropertydata.md",
    "content": "# QuatPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nFloating point quaternion that can represent a rotation about an axis in 3-D space.\r\n The X, Y, Z, W components also double as the Axis/Angle format.\r\n\r\n```csharp\r\npublic class QuatPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FQuat]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FQuat&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FQuat&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [QuatPropertyData](./uassetapi.propertytypes.structs.quatpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FQuat Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FQuat](./uassetapi.unrealtypes.fquat.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **QuatPropertyData(FName)**\r\n\r\n```csharp\r\npublic QuatPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **QuatPropertyData()**\r\n\r\n```csharp\r\npublic QuatPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.rawstructpropertydata.md",
    "content": "# RawStructPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class RawStructPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[System.Byte[]]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;Byte[]&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [RawStructPropertyData](./uassetapi.propertytypes.structs.rawstructpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic FName StructType;\r\n```\r\n\r\n### **SerializeNone**\r\n\r\n```csharp\r\npublic bool SerializeNone;\r\n```\r\n\r\n### **StructGUID**\r\n\r\n```csharp\r\npublic Guid StructGUID;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic Byte[] Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **RawStructPropertyData(FName)**\r\n\r\n```csharp\r\npublic RawStructPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **RawStructPropertyData()**\r\n\r\n```csharp\r\npublic RawStructPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.richcurvekeypropertydata.md",
    "content": "# RichCurveKeyPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class RichCurveKeyPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FRichCurveKey]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FRichCurveKey&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FRichCurveKey&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [RichCurveKeyPropertyData](./uassetapi.propertytypes.structs.richcurvekeypropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FRichCurveKey Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FRichCurveKey](./uassetapi.unrealtypes.frichcurvekey.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **RichCurveKeyPropertyData(FName)**\r\n\r\n```csharp\r\npublic RichCurveKeyPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **RichCurveKeyPropertyData()**\r\n\r\n```csharp\r\npublic RichCurveKeyPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.rotatorpropertydata.md",
    "content": "# RotatorPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nImplements a container for rotation information.\r\n All rotation values are stored in degrees.\r\n\r\n```csharp\r\npublic class RotatorPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FRotator]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FRotator&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FRotator&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [RotatorPropertyData](./uassetapi.propertytypes.structs.rotatorpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FRotator Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FRotator](./uassetapi.unrealtypes.frotator.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **RotatorPropertyData(FName)**\r\n\r\n```csharp\r\npublic RotatorPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **RotatorPropertyData()**\r\n\r\n```csharp\r\npublic RotatorPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.scalarmaterialinputpropertydata.md",
    "content": "# ScalarMaterialInputPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class ScalarMaterialInputPropertyData : MaterialInputPropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;Single&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MaterialInputPropertyData&lt;Single&gt;](./uassetapi.propertytypes.structs.materialinputpropertydata-1.md) → [ScalarMaterialInputPropertyData](./uassetapi.propertytypes.structs.scalarmaterialinputpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Expression**\r\n\r\n```csharp\r\npublic FPackageIndex Expression;\r\n```\r\n\r\n### **OutputIndex**\r\n\r\n```csharp\r\npublic int OutputIndex;\r\n```\r\n\r\n### **InputName**\r\n\r\n```csharp\r\npublic FName InputName;\r\n```\r\n\r\n### **InputNameOld**\r\n\r\n```csharp\r\npublic FString InputNameOld;\r\n```\r\n\r\n### **Mask**\r\n\r\n```csharp\r\npublic int Mask;\r\n```\r\n\r\n### **MaskR**\r\n\r\n```csharp\r\npublic int MaskR;\r\n```\r\n\r\n### **MaskG**\r\n\r\n```csharp\r\npublic int MaskG;\r\n```\r\n\r\n### **MaskB**\r\n\r\n```csharp\r\npublic int MaskB;\r\n```\r\n\r\n### **MaskA**\r\n\r\n```csharp\r\npublic int MaskA;\r\n```\r\n\r\n### **ExpressionName**\r\n\r\n```csharp\r\npublic FName ExpressionName;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic float Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **ScalarMaterialInputPropertyData(FName)**\r\n\r\n```csharp\r\npublic ScalarMaterialInputPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **ScalarMaterialInputPropertyData()**\r\n\r\n```csharp\r\npublic ScalarMaterialInputPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.sectionevaluationdatatreepropertydata.md",
    "content": "# SectionEvaluationDataTreePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class SectionEvaluationDataTreePropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.PropertyTypes.Structs.FSectionEvaluationDataTree]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FSectionEvaluationDataTree&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [SectionEvaluationDataTreePropertyData](./uassetapi.propertytypes.structs.sectionevaluationdatatreepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FSectionEvaluationDataTree Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FSectionEvaluationDataTree](./uassetapi.propertytypes.structs.fsectionevaluationdatatree.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **SectionEvaluationDataTreePropertyData(FName)**\r\n\r\n```csharp\r\npublic SectionEvaluationDataTreePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **SectionEvaluationDataTreePropertyData()**\r\n\r\n```csharp\r\npublic SectionEvaluationDataTreePropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.skeletalmeshareaweightedtrianglesamplerpropertydata.md",
    "content": "# SkeletalMeshAreaWeightedTriangleSamplerPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class SkeletalMeshAreaWeightedTriangleSamplerPropertyData : WeightedRandomSamplerPropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FWeightedRandomSampler&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FWeightedRandomSampler&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [WeightedRandomSamplerPropertyData](./uassetapi.propertytypes.structs.weightedrandomsamplerpropertydata.md) → [SkeletalMeshAreaWeightedTriangleSamplerPropertyData](./uassetapi.propertytypes.structs.skeletalmeshareaweightedtrianglesamplerpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FWeightedRandomSampler Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FWeightedRandomSampler](./uassetapi.unrealtypes.fweightedrandomsampler.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **SkeletalMeshAreaWeightedTriangleSamplerPropertyData(FName)**\r\n\r\n```csharp\r\npublic SkeletalMeshAreaWeightedTriangleSamplerPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **SkeletalMeshAreaWeightedTriangleSamplerPropertyData()**\r\n\r\n```csharp\r\npublic SkeletalMeshAreaWeightedTriangleSamplerPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.skeletalmeshsamplinglodbuiltdatapropertydata.md",
    "content": "# SkeletalMeshSamplingLODBuiltDataPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class SkeletalMeshSamplingLODBuiltDataPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.PropertyTypes.Structs.SkeletalMeshAreaWeightedTriangleSamplerPropertyData]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;SkeletalMeshAreaWeightedTriangleSamplerPropertyData&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [SkeletalMeshSamplingLODBuiltDataPropertyData](./uassetapi.propertytypes.structs.skeletalmeshsamplinglodbuiltdatapropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic SkeletalMeshAreaWeightedTriangleSamplerPropertyData Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[SkeletalMeshAreaWeightedTriangleSamplerPropertyData](./uassetapi.propertytypes.structs.skeletalmeshareaweightedtrianglesamplerpropertydata.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **SkeletalMeshSamplingLODBuiltDataPropertyData(FName)**\r\n\r\n```csharp\r\npublic SkeletalMeshSamplingLODBuiltDataPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **SkeletalMeshSamplingLODBuiltDataPropertyData()**\r\n\r\n```csharp\r\npublic SkeletalMeshSamplingLODBuiltDataPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **ResolveAncestries(UAsset, AncestryInfo)**\r\n\r\n```csharp\r\npublic void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`ancestrySoFar` [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.smartnamepropertydata.md",
    "content": "# SmartNamePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nSpecial FName struct used within animations.\r\n\r\n```csharp\r\npublic class SmartNamePropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [SmartNamePropertyData](./uassetapi.propertytypes.structs.smartnamepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **DisplayName**\r\n\r\nThe display name of this FSmartName.\r\n\r\n```csharp\r\npublic FName DisplayName;\r\n```\r\n\r\n### **SmartNameID**\r\n\r\nSmartName::UID_Type - for faster access\r\n\r\n```csharp\r\npublic ushort SmartNameID;\r\n```\r\n\r\n### **TempGUID**\r\n\r\nUncertain\r\n\r\n```csharp\r\npublic Guid TempGUID;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **SmartNamePropertyData(FName)**\r\n\r\n```csharp\r\npublic SmartNamePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **SmartNamePropertyData()**\r\n\r\n```csharp\r\npublic SmartNamePropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.softassetpathpropertydata.md",
    "content": "# SoftAssetPathPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class SoftAssetPathPropertyData : SoftObjectPathPropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FSoftObjectPath&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [SoftObjectPathPropertyData](./uassetapi.propertytypes.structs.softobjectpathpropertydata.md) → [SoftAssetPathPropertyData](./uassetapi.propertytypes.structs.softassetpathpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Path**\r\n\r\nUsed in older versions of the Unreal Engine.\r\n\r\n```csharp\r\npublic FString Path;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FSoftObjectPath Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FSoftObjectPath](./uassetapi.propertytypes.objects.fsoftobjectpath.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **SoftAssetPathPropertyData(FName)**\r\n\r\n```csharp\r\npublic SoftAssetPathPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **SoftAssetPathPropertyData()**\r\n\r\n```csharp\r\npublic SoftAssetPathPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.softclasspathpropertydata.md",
    "content": "# SoftClassPathPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nA struct that contains a string reference to a class. Can be used to make soft references to classes.\r\n\r\n```csharp\r\npublic class SoftClassPathPropertyData : SoftObjectPathPropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FSoftObjectPath&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [SoftObjectPathPropertyData](./uassetapi.propertytypes.structs.softobjectpathpropertydata.md) → [SoftClassPathPropertyData](./uassetapi.propertytypes.structs.softclasspathpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Path**\r\n\r\nUsed in older versions of the Unreal Engine.\r\n\r\n```csharp\r\npublic FString Path;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FSoftObjectPath Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FSoftObjectPath](./uassetapi.propertytypes.objects.fsoftobjectpath.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **SoftClassPathPropertyData(FName)**\r\n\r\n```csharp\r\npublic SoftClassPathPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **SoftClassPathPropertyData()**\r\n\r\n```csharp\r\npublic SoftClassPathPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.softobjectpathpropertydata.md",
    "content": "# SoftObjectPathPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nA struct that contains a string reference to an object, either a top level asset or a subobject.\r\n This can be used to make soft references to assets that are loaded on demand.\r\n This is stored internally as an FName pointing to the top level asset (/package/path.assetname) and an option a string subobject path.\r\n\r\n```csharp\r\npublic class SoftObjectPathPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.PropertyTypes.Objects.FSoftObjectPath]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FSoftObjectPath&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [SoftObjectPathPropertyData](./uassetapi.propertytypes.structs.softobjectpathpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Path**\r\n\r\nUsed in older versions of the Unreal Engine.\r\n\r\n```csharp\r\npublic FString Path;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FSoftObjectPath Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FSoftObjectPath](./uassetapi.propertytypes.objects.fsoftobjectpath.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **SoftObjectPathPropertyData(FName)**\r\n\r\n```csharp\r\npublic SoftObjectPathPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **SoftObjectPathPropertyData()**\r\n\r\n```csharp\r\npublic SoftObjectPathPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.stringassetreferencepropertydata.md",
    "content": "# StringAssetReferencePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nA struct that contains a string reference to a class. Can be used to make soft references to classes.\r\n\r\n```csharp\r\npublic class StringAssetReferencePropertyData : SoftObjectPathPropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FSoftObjectPath&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [SoftObjectPathPropertyData](./uassetapi.propertytypes.structs.softobjectpathpropertydata.md) → [StringAssetReferencePropertyData](./uassetapi.propertytypes.structs.stringassetreferencepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Path**\r\n\r\nUsed in older versions of the Unreal Engine.\r\n\r\n```csharp\r\npublic FString Path;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FSoftObjectPath Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FSoftObjectPath](./uassetapi.propertytypes.objects.fsoftobjectpath.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **StringAssetReferencePropertyData(FName)**\r\n\r\n```csharp\r\npublic StringAssetReferencePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **StringAssetReferencePropertyData()**\r\n\r\n```csharp\r\npublic StringAssetReferencePropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.stringclassreferencepropertydata.md",
    "content": "# StringClassReferencePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class StringClassReferencePropertyData : SoftObjectPathPropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FSoftObjectPath&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [SoftObjectPathPropertyData](./uassetapi.propertytypes.structs.softobjectpathpropertydata.md) → [StringClassReferencePropertyData](./uassetapi.propertytypes.structs.stringclassreferencepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Path**\r\n\r\nUsed in older versions of the Unreal Engine.\r\n\r\n```csharp\r\npublic FString Path;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FSoftObjectPath Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FSoftObjectPath](./uassetapi.propertytypes.objects.fsoftobjectpath.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **StringClassReferencePropertyData(FName)**\r\n\r\n```csharp\r\npublic StringClassReferencePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **StringClassReferencePropertyData()**\r\n\r\n```csharp\r\npublic StringClassReferencePropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.stringcurvekeypropertydata.md",
    "content": "# StringCurveKeyPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class StringCurveKeyPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.PropertyTypes.Structs.FStringCurveKey]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FStringCurveKey&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FStringCurveKey&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [StringCurveKeyPropertyData](./uassetapi.propertytypes.structs.stringcurvekeypropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FStringCurveKey Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FStringCurveKey](./uassetapi.propertytypes.structs.fstringcurvekey.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **StringCurveKeyPropertyData(FName)**\r\n\r\n```csharp\r\npublic StringCurveKeyPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **StringCurveKeyPropertyData()**\r\n\r\n```csharp\r\npublic StringCurveKeyPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.structpropertydata.md",
    "content": "# StructPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class StructPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[System.Collections.Generic.List`1[[UAssetAPI.PropertyTypes.Objects.PropertyData]]]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;List&lt;PropertyData&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic FName StructType;\r\n```\r\n\r\n### **SerializeNone**\r\n\r\n```csharp\r\npublic bool SerializeNone;\r\n```\r\n\r\n### **StructGUID**\r\n\r\n```csharp\r\npublic Guid StructGUID;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic List<PropertyData> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[List&lt;PropertyData&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\nDetermines whether or not this particular property has custom serialization within a StructProperty.\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **StructPropertyData(FName)**\r\n\r\n```csharp\r\npublic StructPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **StructPropertyData(FName, FName)**\r\n\r\n```csharp\r\npublic StructPropertyData(FName name, FName forcedType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`forcedType` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **StructPropertyData()**\r\n\r\n```csharp\r\npublic StructPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **ResolveAncestries(UAsset, AncestryInfo)**\r\n\r\n```csharp\r\npublic void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`ancestrySoFar` [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\n\r\n### **DetermineIfSerializeWithCustomStructSerialization(UAsset, PropertySerializationContext, RegistryEntry&)**\r\n\r\n```csharp\r\ninternal bool DetermineIfSerializeWithCustomStructSerialization(UAsset Asset, PropertySerializationContext serializationContext, RegistryEntry& targetEntry)\r\n```\r\n\r\n#### Parameters\r\n\r\n`Asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n`targetEntry` [RegistryEntry&](./uassetapi.registryentry&.md)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **HandleCloned(PropertyData)**\r\n\r\n```csharp\r\nprotected void HandleCloned(PropertyData res)\r\n```\r\n\r\n#### Parameters\r\n\r\n`res` [PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.tevaluationtreeentrycontainer-1.md",
    "content": "# TEvaluationTreeEntryContainer&lt;T&gt;\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic struct TEvaluationTreeEntryContainer<T>\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [TEvaluationTreeEntryContainer&lt;T&gt;](./uassetapi.propertytypes.structs.tevaluationtreeentrycontainer-1.md)\r\n\r\n## Fields\r\n\r\n### **Entries**\r\n\r\nList of allocated entries for each allocated entry. Should only ever grow, never shrink. Shrinking would cause previously established handles to become invalid. */\r\n\r\n```csharp\r\npublic FEntry[] Entries;\r\n```\r\n\r\n### **Items**\r\n\r\nLinear array of allocated entry contents. Once allocated, indices are never invalidated until Compact is called. Entries needing more capacity are re-allocated on the end of the array.\r\n\r\n```csharp\r\npublic T[] Items;\r\n```\r\n\r\n## Constructors\r\n\r\n### **TEvaluationTreeEntryContainer(FEntry[], T[])**\r\n\r\n```csharp\r\nTEvaluationTreeEntryContainer(FEntry[] entries, T[] items)\r\n```\r\n\r\n#### Parameters\r\n\r\n`entries` [FEntry[]](./uassetapi.propertytypes.structs.fentry.md)<br>\r\n\r\n`items` T[]<br>\r\n\r\n### **TEvaluationTreeEntryContainer(AssetBinaryReader, Func&lt;T&gt;)**\r\n\r\n```csharp\r\nTEvaluationTreeEntryContainer(AssetBinaryReader reader, Func<T> valueReader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`valueReader` Func&lt;T&gt;<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter, Action&lt;T&gt;)**\r\n\r\n```csharp\r\nvoid Write(AssetBinaryWriter writer, Action<T> valueWriter)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`valueWriter` Action&lt;T&gt;<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.timespanpropertydata.md",
    "content": "# TimespanPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nImplements a time span.\r\n A time span is the difference between two dates and times. For example, the time span between\r\n 12:00:00 January 1, 2000 and 18:00:00 January 2, 2000 is 30.0 hours. Time spans are measured in\r\n positive or negative ticks depending on whether the difference is measured forward or backward.\r\n Each tick has a resolution of 0.1 microseconds (= 100 nanoseconds).\r\n \r\n In conjunction with the companion class [DateTimePropertyData](./uassetapi.propertytypes.structs.datetimepropertydata.md) ([DateTime](https://docs.microsoft.com/en-us/dotnet/api/system.datetime)),\r\n time spans can be used to perform date and time based arithmetic, such as calculating the\r\n difference between two dates or adding a certain amount of time to a given date.\r\n\r\n```csharp\r\npublic class TimespanPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[System.TimeSpan]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;TimeSpan&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [TimespanPropertyData](./uassetapi.propertytypes.structs.timespanpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic TimeSpan Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[TimeSpan](https://docs.microsoft.com/en-us/dotnet/api/system.timespan)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **TimespanPropertyData(FName)**\r\n\r\n```csharp\r\npublic TimespanPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **TimespanPropertyData()**\r\n\r\n```csharp\r\npublic TimespanPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **HandleCloned(PropertyData)**\r\n\r\n```csharp\r\nprotected void HandleCloned(PropertyData res)\r\n```\r\n\r\n#### Parameters\r\n\r\n`res` [PropertyData](./uassetapi.propertytypes.objects.propertydata.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.tmoviesceneevaluationtree-1.md",
    "content": "# TMovieSceneEvaluationTree&lt;T&gt;\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class TMovieSceneEvaluationTree<T> : FMovieSceneEvaluationTree\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FMovieSceneEvaluationTree](./uassetapi.propertytypes.structs.fmoviesceneevaluationtree.md) → [TMovieSceneEvaluationTree&lt;T&gt;](./uassetapi.propertytypes.structs.tmoviesceneevaluationtree-1.md)\r\n\r\n## Fields\r\n\r\n### **Data**\r\n\r\nTree data container that corresponds to FMovieSceneEvaluationTreeNode::DataID\r\n\r\n```csharp\r\npublic TEvaluationTreeEntryContainer<T> Data;\r\n```\r\n\r\n### **RootNode**\r\n\r\nThis tree's root node\r\n\r\n```csharp\r\npublic FMovieSceneEvaluationTreeNode RootNode;\r\n```\r\n\r\n### **ChildNodes**\r\n\r\nSegmented array of all child nodes within this tree (in no particular order)\r\n\r\n```csharp\r\npublic TEvaluationTreeEntryContainer<FMovieSceneEvaluationTreeNode> ChildNodes;\r\n```\r\n\r\n## Constructors\r\n\r\n### **TMovieSceneEvaluationTree(AssetBinaryReader, Func&lt;T&gt;)**\r\n\r\n```csharp\r\npublic TMovieSceneEvaluationTree(AssetBinaryReader reader, Func<T> valueReader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`valueReader` Func&lt;T&gt;<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter, Action&lt;T&gt;)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer, Action<T> valueWriter)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`valueWriter` Action&lt;T&gt;<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.twovectorspropertydata.md",
    "content": "# TwoVectorsPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class TwoVectorsPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FTwoVectors]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FTwoVectors&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FTwoVectors&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [TwoVectorsPropertyData](./uassetapi.propertytypes.structs.twovectorspropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FTwoVectors Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FTwoVectors](./uassetapi.unrealtypes.ftwovectors.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **TwoVectorsPropertyData(FName)**\r\n\r\n```csharp\r\npublic TwoVectorsPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **TwoVectorsPropertyData()**\r\n\r\n```csharp\r\npublic TwoVectorsPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.vector2dpropertydata.md",
    "content": "# Vector2DPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nA vector in 2-D space composed of components (X, Y) with floating/double point precision.\r\n\r\n```csharp\r\npublic class Vector2DPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FVector2D]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FVector2D&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FVector2D&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [Vector2DPropertyData](./uassetapi.propertytypes.structs.vector2dpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FVector2D Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FVector2D](./uassetapi.unrealtypes.fvector2d.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **Vector2DPropertyData(FName)**\r\n\r\n```csharp\r\npublic Vector2DPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **Vector2DPropertyData()**\r\n\r\n```csharp\r\npublic Vector2DPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.vector2fpropertydata.md",
    "content": "# Vector2fPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nA vector in 2-D space composed of components (X, Y) with floating/double point precision.\r\n\r\n```csharp\r\npublic class Vector2fPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FVector2f]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FVector2f&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FVector2f&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [Vector2fPropertyData](./uassetapi.propertytypes.structs.vector2fpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FVector2f Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FVector2f](./uassetapi.unrealtypes.fvector2f.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **Vector2fPropertyData(FName)**\r\n\r\n```csharp\r\npublic Vector2fPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **Vector2fPropertyData()**\r\n\r\n```csharp\r\npublic Vector2fPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.vector2materialinputpropertydata.md",
    "content": "# Vector2MaterialInputPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class Vector2MaterialInputPropertyData : MaterialInputPropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;Vector2DPropertyData&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MaterialInputPropertyData&lt;Vector2DPropertyData&gt;](./uassetapi.propertytypes.structs.materialinputpropertydata-1.md) → [Vector2MaterialInputPropertyData](./uassetapi.propertytypes.structs.vector2materialinputpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Expression**\r\n\r\n```csharp\r\npublic FPackageIndex Expression;\r\n```\r\n\r\n### **OutputIndex**\r\n\r\n```csharp\r\npublic int OutputIndex;\r\n```\r\n\r\n### **InputName**\r\n\r\n```csharp\r\npublic FName InputName;\r\n```\r\n\r\n### **InputNameOld**\r\n\r\n```csharp\r\npublic FString InputNameOld;\r\n```\r\n\r\n### **Mask**\r\n\r\n```csharp\r\npublic int Mask;\r\n```\r\n\r\n### **MaskR**\r\n\r\n```csharp\r\npublic int MaskR;\r\n```\r\n\r\n### **MaskG**\r\n\r\n```csharp\r\npublic int MaskG;\r\n```\r\n\r\n### **MaskB**\r\n\r\n```csharp\r\npublic int MaskB;\r\n```\r\n\r\n### **MaskA**\r\n\r\n```csharp\r\npublic int MaskA;\r\n```\r\n\r\n### **ExpressionName**\r\n\r\n```csharp\r\npublic FName ExpressionName;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic Vector2DPropertyData Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Vector2DPropertyData](./uassetapi.propertytypes.structs.vector2dpropertydata.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **Vector2MaterialInputPropertyData(FName)**\r\n\r\n```csharp\r\npublic Vector2MaterialInputPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **Vector2MaterialInputPropertyData()**\r\n\r\n```csharp\r\npublic Vector2MaterialInputPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **ResolveAncestries(UAsset, AncestryInfo)**\r\n\r\n```csharp\r\npublic void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`ancestrySoFar` [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.vector3fpropertydata.md",
    "content": "# Vector3fPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nA vector in 3-D space composed of components (X, Y, Z) with floating point precision.\r\n\r\n```csharp\r\npublic class Vector3fPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FVector3f]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FVector3f&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FVector3f&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [Vector3fPropertyData](./uassetapi.propertytypes.structs.vector3fpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FVector3f Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FVector3f](./uassetapi.unrealtypes.fvector3f.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **Vector3fPropertyData(FName)**\r\n\r\n```csharp\r\npublic Vector3fPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **Vector3fPropertyData()**\r\n\r\n```csharp\r\npublic Vector3fPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.vector4fpropertydata.md",
    "content": "# Vector4fPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nA vector in 4-D space composed of components (X, Y, Z, W) with floating point precision.\r\n\r\n```csharp\r\npublic class Vector4fPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FVector4f]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FVector4f&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FVector4f&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [Vector4fPropertyData](./uassetapi.propertytypes.structs.vector4fpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FVector4f Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FVector4f](./uassetapi.unrealtypes.fvector4f.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **Vector4fPropertyData(FName)**\r\n\r\n```csharp\r\npublic Vector4fPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **Vector4fPropertyData()**\r\n\r\n```csharp\r\npublic Vector4fPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.vector4propertydata.md",
    "content": "# Vector4PropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nA vector in 4-D space composed of components (X, Y, Z, W) with floating/double point precision.\r\n\r\n```csharp\r\npublic class Vector4PropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FVector4]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FVector4&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FVector4&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [Vector4PropertyData](./uassetapi.propertytypes.structs.vector4propertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FVector4 Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FVector4](./uassetapi.unrealtypes.fvector4.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **Vector4PropertyData(FName)**\r\n\r\n```csharp\r\npublic Vector4PropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **Vector4PropertyData()**\r\n\r\n```csharp\r\npublic Vector4PropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.vectormaterialinputpropertydata.md",
    "content": "# VectorMaterialInputPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class VectorMaterialInputPropertyData : MaterialInputPropertyData`1, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;VectorPropertyData&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [MaterialInputPropertyData&lt;VectorPropertyData&gt;](./uassetapi.propertytypes.structs.materialinputpropertydata-1.md) → [VectorMaterialInputPropertyData](./uassetapi.propertytypes.structs.vectormaterialinputpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Expression**\r\n\r\n```csharp\r\npublic FPackageIndex Expression;\r\n```\r\n\r\n### **OutputIndex**\r\n\r\n```csharp\r\npublic int OutputIndex;\r\n```\r\n\r\n### **InputName**\r\n\r\n```csharp\r\npublic FName InputName;\r\n```\r\n\r\n### **InputNameOld**\r\n\r\n```csharp\r\npublic FString InputNameOld;\r\n```\r\n\r\n### **Mask**\r\n\r\n```csharp\r\npublic int Mask;\r\n```\r\n\r\n### **MaskR**\r\n\r\n```csharp\r\npublic int MaskR;\r\n```\r\n\r\n### **MaskG**\r\n\r\n```csharp\r\npublic int MaskG;\r\n```\r\n\r\n### **MaskB**\r\n\r\n```csharp\r\npublic int MaskB;\r\n```\r\n\r\n### **MaskA**\r\n\r\n```csharp\r\npublic int MaskA;\r\n```\r\n\r\n### **ExpressionName**\r\n\r\n```csharp\r\npublic FName ExpressionName;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic VectorPropertyData Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[VectorPropertyData](./uassetapi.propertytypes.structs.vectorpropertydata.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **VectorMaterialInputPropertyData(FName)**\r\n\r\n```csharp\r\npublic VectorMaterialInputPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **VectorMaterialInputPropertyData()**\r\n\r\n```csharp\r\npublic VectorMaterialInputPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **ResolveAncestries(UAsset, AncestryInfo)**\r\n\r\n```csharp\r\npublic void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`ancestrySoFar` [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.vectornetquantize100propertydata.md",
    "content": "# VectorNetQuantize100PropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class VectorNetQuantize100PropertyData : VectorNetQuantizePropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;List&lt;PropertyData&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md) → [VectorNetQuantizePropertyData](./uassetapi.propertytypes.structs.vectornetquantizepropertydata.md) → [VectorNetQuantize100PropertyData](./uassetapi.propertytypes.structs.vectornetquantize100propertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic FName StructType;\r\n```\r\n\r\n### **SerializeNone**\r\n\r\n```csharp\r\npublic bool SerializeNone;\r\n```\r\n\r\n### **StructGUID**\r\n\r\n```csharp\r\npublic Guid StructGUID;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic List<PropertyData> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[List&lt;PropertyData&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **VectorNetQuantize100PropertyData(FName)**\r\n\r\n```csharp\r\npublic VectorNetQuantize100PropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **VectorNetQuantize100PropertyData()**\r\n\r\n```csharp\r\npublic VectorNetQuantize100PropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.vectornetquantize10propertydata.md",
    "content": "# VectorNetQuantize10PropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class VectorNetQuantize10PropertyData : VectorNetQuantizePropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;List&lt;PropertyData&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md) → [VectorNetQuantizePropertyData](./uassetapi.propertytypes.structs.vectornetquantizepropertydata.md) → [VectorNetQuantize10PropertyData](./uassetapi.propertytypes.structs.vectornetquantize10propertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic FName StructType;\r\n```\r\n\r\n### **SerializeNone**\r\n\r\n```csharp\r\npublic bool SerializeNone;\r\n```\r\n\r\n### **StructGUID**\r\n\r\n```csharp\r\npublic Guid StructGUID;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic List<PropertyData> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[List&lt;PropertyData&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **VectorNetQuantize10PropertyData(FName)**\r\n\r\n```csharp\r\npublic VectorNetQuantize10PropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **VectorNetQuantize10PropertyData()**\r\n\r\n```csharp\r\npublic VectorNetQuantize10PropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.vectornetquantizenormalpropertydata.md",
    "content": "# VectorNetQuantizeNormalPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class VectorNetQuantizeNormalPropertyData : VectorNetQuantizePropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;List&lt;PropertyData&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md) → [VectorNetQuantizePropertyData](./uassetapi.propertytypes.structs.vectornetquantizepropertydata.md) → [VectorNetQuantizeNormalPropertyData](./uassetapi.propertytypes.structs.vectornetquantizenormalpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic FName StructType;\r\n```\r\n\r\n### **SerializeNone**\r\n\r\n```csharp\r\npublic bool SerializeNone;\r\n```\r\n\r\n### **StructGUID**\r\n\r\n```csharp\r\npublic Guid StructGUID;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic List<PropertyData> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[List&lt;PropertyData&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **VectorNetQuantizeNormalPropertyData(FName)**\r\n\r\n```csharp\r\npublic VectorNetQuantizeNormalPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **VectorNetQuantizeNormalPropertyData()**\r\n\r\n```csharp\r\npublic VectorNetQuantizeNormalPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.vectornetquantizepropertydata.md",
    "content": "# VectorNetQuantizePropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class VectorNetQuantizePropertyData : StructPropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;List&lt;PropertyData&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md) → [VectorNetQuantizePropertyData](./uassetapi.propertytypes.structs.vectornetquantizepropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic FName StructType;\r\n```\r\n\r\n### **SerializeNone**\r\n\r\n```csharp\r\npublic bool SerializeNone;\r\n```\r\n\r\n### **StructGUID**\r\n\r\n```csharp\r\npublic Guid StructGUID;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic List<PropertyData> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[List&lt;PropertyData&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **VectorNetQuantizePropertyData(FName, FName)**\r\n\r\n```csharp\r\npublic VectorNetQuantizePropertyData(FName name, FName forcedType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`forcedType` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **VectorNetQuantizePropertyData(FName)**\r\n\r\n```csharp\r\npublic VectorNetQuantizePropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **VectorNetQuantizePropertyData()**\r\n\r\n```csharp\r\npublic VectorNetQuantizePropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.vectorpropertydata.md",
    "content": "# VectorPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nA vector in 3-D space composed of components (X, Y, Z) with floating/double point precision.\r\n\r\n```csharp\r\npublic class VectorPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FVector]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FVector&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FVector&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [VectorPropertyData](./uassetapi.propertytypes.structs.vectorpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FVector Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FVector](./uassetapi.unrealtypes.fvector.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **VectorPropertyData(FName)**\r\n\r\n```csharp\r\npublic VectorPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **VectorPropertyData()**\r\n\r\n```csharp\r\npublic VectorPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.viewtargetblendfunction.md",
    "content": "# ViewTargetBlendFunction\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nOptions that define how to blend when changing view targets in [ViewTargetBlendParamsPropertyData](./uassetapi.propertytypes.structs.viewtargetblendparamspropertydata.md).\r\n\r\n```csharp\r\npublic enum ViewTargetBlendFunction\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ViewTargetBlendFunction](./uassetapi.propertytypes.structs.viewtargetblendfunction.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.viewtargetblendparamspropertydata.md",
    "content": "# ViewTargetBlendParamsPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\nA set of parameters to describe how to transition between view targets.\r\n Referred to as FViewTargetTransitionParams in the Unreal Engine.\r\n\r\n```csharp\r\npublic class ViewTargetBlendParamsPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [ViewTargetBlendParamsPropertyData](./uassetapi.propertytypes.structs.viewtargetblendparamspropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **BlendTime**\r\n\r\n```csharp\r\npublic float BlendTime;\r\n```\r\n\r\n### **BlendFunction**\r\n\r\n```csharp\r\npublic ViewTargetBlendFunction BlendFunction;\r\n```\r\n\r\n### **BlendExp**\r\n\r\n```csharp\r\npublic float BlendExp;\r\n```\r\n\r\n### **bLockOutgoing**\r\n\r\n```csharp\r\npublic bool bLockOutgoing;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **ViewTargetBlendParamsPropertyData(FName)**\r\n\r\n```csharp\r\npublic ViewTargetBlendParamsPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **ViewTargetBlendParamsPropertyData()**\r\n\r\n```csharp\r\npublic ViewTargetBlendParamsPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic void FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.propertytypes.structs.weightedrandomsamplerpropertydata.md",
    "content": "# WeightedRandomSamplerPropertyData\r\n\r\nNamespace: UAssetAPI.PropertyTypes.Structs\r\n\r\n```csharp\r\npublic class WeightedRandomSamplerPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FWeightedRandomSampler]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FWeightedRandomSampler&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FWeightedRandomSampler&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [WeightedRandomSamplerPropertyData](./uassetapi.propertytypes.structs.weightedrandomsamplerpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FWeightedRandomSampler Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FWeightedRandomSampler](./uassetapi.unrealtypes.fweightedrandomsampler.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **WeightedRandomSamplerPropertyData(FName)**\r\n\r\n```csharp\r\npublic WeightedRandomSamplerPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **WeightedRandomSamplerPropertyData()**\r\n\r\n```csharp\r\npublic WeightedRandomSamplerPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.repakinterop.md",
    "content": "# RePakInterop\r\n\r\nNamespace: UAssetAPI\r\n\r\n```csharp\r\npublic static class RePakInterop\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [RePakInterop](./uassetapi.repakinterop.md)\r\n\r\n## Fields\r\n\r\n### **NativeLib**\r\n\r\n```csharp\r\npublic static string NativeLib;\r\n```\r\n\r\n## Methods\r\n\r\n### **pak_setup_allocator()**\r\n\r\n```csharp\r\npublic static IntPtr pak_setup_allocator()\r\n```\r\n\r\n#### Returns\r\n\r\n[IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n### **pak_teardown_allocator()**\r\n\r\n```csharp\r\npublic static IntPtr pak_teardown_allocator()\r\n```\r\n\r\n#### Returns\r\n\r\n[IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n### **pak_builder_new()**\r\n\r\n```csharp\r\npublic static IntPtr pak_builder_new()\r\n```\r\n\r\n#### Returns\r\n\r\n[IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n### **pak_builder_drop(IntPtr)**\r\n\r\n```csharp\r\npublic static void pak_builder_drop(IntPtr builder)\r\n```\r\n\r\n#### Parameters\r\n\r\n`builder` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n### **pak_reader_drop(IntPtr)**\r\n\r\n```csharp\r\npublic static void pak_reader_drop(IntPtr reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n### **pak_writer_drop(IntPtr)**\r\n\r\n```csharp\r\npublic static void pak_writer_drop(IntPtr writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n### **pak_buffer_drop(IntPtr, UInt64)**\r\n\r\n```csharp\r\npublic static void pak_buffer_drop(IntPtr buffer, ulong length)\r\n```\r\n\r\n#### Parameters\r\n\r\n`buffer` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n`length` [UInt64](https://docs.microsoft.com/en-us/dotnet/api/system.uint64)<br>\r\n\r\n### **pak_cstring_drop(IntPtr)**\r\n\r\n```csharp\r\npublic static void pak_cstring_drop(IntPtr cstrign)\r\n```\r\n\r\n#### Parameters\r\n\r\n`cstrign` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n### **pak_builder_key(IntPtr, Byte[])**\r\n\r\n```csharp\r\npublic static IntPtr pak_builder_key(IntPtr builder, Byte[] key)\r\n```\r\n\r\n#### Parameters\r\n\r\n`builder` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n`key` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n#### Returns\r\n\r\n[IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n### **pak_builder_compression(IntPtr, Byte[], Int32)**\r\n\r\n```csharp\r\npublic static IntPtr pak_builder_compression(IntPtr builder, Byte[] compressions, int length)\r\n```\r\n\r\n#### Parameters\r\n\r\n`builder` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n`compressions` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n`length` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n#### Returns\r\n\r\n[IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n### **pak_builder_reader(IntPtr, StreamCallbacks)**\r\n\r\n```csharp\r\npublic static IntPtr pak_builder_reader(IntPtr builder, StreamCallbacks ctx)\r\n```\r\n\r\n#### Parameters\r\n\r\n`builder` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n`ctx` [StreamCallbacks](./uassetapi.repakinterop.streamcallbacks.md)<br>\r\n\r\n#### Returns\r\n\r\n[IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n### **pak_builder_writer(IntPtr, StreamCallbacks, PakVersion, String, UInt64)**\r\n\r\n```csharp\r\npublic static IntPtr pak_builder_writer(IntPtr builder, StreamCallbacks ctx, PakVersion version, string mount_point, ulong path_hash_seed)\r\n```\r\n\r\n#### Parameters\r\n\r\n`builder` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n`ctx` [StreamCallbacks](./uassetapi.repakinterop.streamcallbacks.md)<br>\r\n\r\n`version` [PakVersion](./uassetapi.pakversion.md)<br>\r\n\r\n`mount_point` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`path_hash_seed` [UInt64](https://docs.microsoft.com/en-us/dotnet/api/system.uint64)<br>\r\n\r\n#### Returns\r\n\r\n[IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n### **pak_reader_version(IntPtr)**\r\n\r\n```csharp\r\npublic static PakVersion pak_reader_version(IntPtr reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n#### Returns\r\n\r\n[PakVersion](./uassetapi.pakversion.md)<br>\r\n\r\n### **pak_reader_mount_point(IntPtr)**\r\n\r\n```csharp\r\npublic static IntPtr pak_reader_mount_point(IntPtr reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n#### Returns\r\n\r\n[IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n### **pak_reader_get(IntPtr, String, StreamCallbacks, IntPtr&, UInt64&)**\r\n\r\n```csharp\r\npublic static int pak_reader_get(IntPtr reader, string path, StreamCallbacks ctx, IntPtr& buffer, UInt64& length)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n`path` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`ctx` [StreamCallbacks](./uassetapi.repakinterop.streamcallbacks.md)<br>\r\n\r\n`buffer` [IntPtr&](https://docs.microsoft.com/en-us/dotnet/api/system.intptr&)<br>\r\n\r\n`length` [UInt64&](https://docs.microsoft.com/en-us/dotnet/api/system.uint64&)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **pak_reader_files(IntPtr, UInt64&)**\r\n\r\n```csharp\r\npublic static IntPtr pak_reader_files(IntPtr reader, UInt64& length)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n`length` [UInt64&](https://docs.microsoft.com/en-us/dotnet/api/system.uint64&)<br>\r\n\r\n#### Returns\r\n\r\n[IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n### **pak_drop_files(IntPtr, UInt64)**\r\n\r\n```csharp\r\npublic static IntPtr pak_drop_files(IntPtr buffer, ulong length)\r\n```\r\n\r\n#### Parameters\r\n\r\n`buffer` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n`length` [UInt64](https://docs.microsoft.com/en-us/dotnet/api/system.uint64)<br>\r\n\r\n#### Returns\r\n\r\n[IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n### **pak_writer_write_file(IntPtr, String, Byte[], Int32)**\r\n\r\n```csharp\r\npublic static int pak_writer_write_file(IntPtr writer, string path, Byte[] data, int data_len)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n`path` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`data` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n`data_len` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **pak_writer_write_index(IntPtr)**\r\n\r\n```csharp\r\npublic static int pak_writer_write_index(IntPtr writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.streamcallbacks.md",
    "content": "# StreamCallbacks\r\n\r\nNamespace: UAssetAPI\r\n\r\n```csharp\r\npublic static class StreamCallbacks\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [StreamCallbacks](./uassetapi.streamcallbacks.md)\r\n\r\n## Methods\r\n\r\n### **Create(Stream)**\r\n\r\n```csharp\r\npublic static StreamCallbacks Create(Stream stream)\r\n```\r\n\r\n#### Parameters\r\n\r\n`stream` [Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n#### Returns\r\n\r\n[StreamCallbacks](./uassetapi.repakinterop.streamcallbacks.md)<br>\r\n\r\n### **Free(IntPtr)**\r\n\r\n```csharp\r\npublic static void Free(IntPtr streamCtx)\r\n```\r\n\r\n#### Parameters\r\n\r\n`streamCtx` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n### **ReadCallback(IntPtr, IntPtr, UInt64)**\r\n\r\n```csharp\r\npublic static long ReadCallback(IntPtr context, IntPtr buffer, ulong bufferLen)\r\n```\r\n\r\n#### Parameters\r\n\r\n`context` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n`buffer` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n`bufferLen` [UInt64](https://docs.microsoft.com/en-us/dotnet/api/system.uint64)<br>\r\n\r\n#### Returns\r\n\r\n[Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n### **WriteCallback(IntPtr, IntPtr, Int32)**\r\n\r\n```csharp\r\npublic static int WriteCallback(IntPtr context, IntPtr buffer, int bufferLen)\r\n```\r\n\r\n#### Parameters\r\n\r\n`context` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n`buffer` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n`bufferLen` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **SeekCallback(IntPtr, Int64, Int32)**\r\n\r\n```csharp\r\npublic static ulong SeekCallback(IntPtr context, long offset, int origin)\r\n```\r\n\r\n#### Parameters\r\n\r\n`context` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n`offset` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`origin` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n#### Returns\r\n\r\n[UInt64](https://docs.microsoft.com/en-us/dotnet/api/system.uint64)<br>\r\n\r\n### **FlushCallback(IntPtr)**\r\n\r\n```csharp\r\npublic static int FlushCallback(IntPtr context)\r\n```\r\n\r\n#### Parameters\r\n\r\n`context` [IntPtr](https://docs.microsoft.com/en-us/dotnet/api/system.intptr)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.structtypes.skeletalmeshsamplingregionbuiltdatapropertydata.md",
    "content": "# SkeletalMeshSamplingRegionBuiltDataPropertyData\r\n\r\nNamespace: UAssetAPI.StructTypes\r\n\r\n```csharp\r\npublic class SkeletalMeshSamplingRegionBuiltDataPropertyData : UAssetAPI.PropertyTypes.Objects.BasePropertyData`1[[UAssetAPI.UnrealTypes.FSkeletalMeshSamplingRegionBuiltData]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FSkeletalMeshSamplingRegionBuiltData&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [BasePropertyData&lt;FSkeletalMeshSamplingRegionBuiltData&gt;](./uassetapi.propertytypes.objects.basepropertydata-1.md) → [SkeletalMeshSamplingRegionBuiltDataPropertyData](./uassetapi.structtypes.skeletalmeshsamplingregionbuiltdatapropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FSkeletalMeshSamplingRegionBuiltData Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FSkeletalMeshSamplingRegionBuiltData](./uassetapi.unrealtypes.fskeletalmeshsamplingregionbuiltdata.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **SkeletalMeshSamplingRegionBuiltDataPropertyData(FName)**\r\n\r\n```csharp\r\npublic SkeletalMeshSamplingRegionBuiltDataPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **SkeletalMeshSamplingRegionBuiltDataPropertyData()**\r\n\r\n```csharp\r\npublic SkeletalMeshSamplingRegionBuiltDataPropertyData()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.uaputils.md",
    "content": "# UAPUtils\r\n\r\nNamespace: UAssetAPI\r\n\r\n```csharp\r\npublic static class UAPUtils\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UAPUtils](./uassetapi.uaputils.md)\r\n\r\n## Fields\r\n\r\n### **CurrentCommit**\r\n\r\n```csharp\r\npublic static string CurrentCommit;\r\n```\r\n\r\n## Methods\r\n\r\n### **SerializeJson(Object, Boolean)**\r\n\r\n```csharp\r\npublic static string SerializeJson(object obj, bool isFormatted)\r\n```\r\n\r\n#### Parameters\r\n\r\n`obj` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n`isFormatted` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FindAllInstances&lt;T&gt;(Object)**\r\n\r\n```csharp\r\npublic static List<T> FindAllInstances<T>(object parent)\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\n#### Parameters\r\n\r\n`parent` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n#### Returns\r\n\r\nList&lt;T&gt;<br>\r\n\r\n### **Clamp&lt;T&gt;(T, T, T)**\r\n\r\n```csharp\r\npublic static T Clamp<T>(T val, T min, T max)\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\n#### Parameters\r\n\r\n`val` T<br>\r\n\r\n`min` T<br>\r\n\r\n`max` T<br>\r\n\r\n#### Returns\r\n\r\nT<br>\r\n\r\n### **GetOrderedFields&lt;T&gt;()**\r\n\r\n```csharp\r\npublic static FieldInfo[] GetOrderedFields<T>()\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\n#### Returns\r\n\r\n[FieldInfo[]](https://docs.microsoft.com/en-us/dotnet/api/system.reflection.fieldinfo)<br>\r\n\r\n### **GetOrderedFields(Type)**\r\n\r\n```csharp\r\npublic static FieldInfo[] GetOrderedFields(Type t)\r\n```\r\n\r\n#### Parameters\r\n\r\n`t` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n#### Returns\r\n\r\n[FieldInfo[]](https://docs.microsoft.com/en-us/dotnet/api/system.reflection.fieldinfo)<br>\r\n\r\n### **GetOrderedMembers&lt;T&gt;()**\r\n\r\n```csharp\r\npublic static MemberInfo[] GetOrderedMembers<T>()\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\n#### Returns\r\n\r\n[MemberInfo[]](https://docs.microsoft.com/en-us/dotnet/api/system.reflection.memberinfo)<br>\r\n\r\n### **GetOrderedMembers(Type)**\r\n\r\n```csharp\r\npublic static MemberInfo[] GetOrderedMembers(Type t)\r\n```\r\n\r\n#### Parameters\r\n\r\n`t` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n#### Returns\r\n\r\n[MemberInfo[]](https://docs.microsoft.com/en-us/dotnet/api/system.reflection.memberinfo)<br>\r\n\r\n### **GetValue(MemberInfo, Object)**\r\n\r\n```csharp\r\npublic static object GetValue(MemberInfo memberInfo, object forObject)\r\n```\r\n\r\n#### Parameters\r\n\r\n`memberInfo` [MemberInfo](https://docs.microsoft.com/en-us/dotnet/api/system.reflection.memberinfo)<br>\r\n\r\n`forObject` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **SetValue(MemberInfo, Object, Object)**\r\n\r\n```csharp\r\npublic static void SetValue(MemberInfo memberInfo, object forObject, object forVal)\r\n```\r\n\r\n#### Parameters\r\n\r\n`memberInfo` [MemberInfo](https://docs.microsoft.com/en-us/dotnet/api/system.reflection.memberinfo)<br>\r\n\r\n`forObject` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n`forVal` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **GetImportNameReferenceWithoutZero(Int32, UAsset)**\r\n\r\n```csharp\r\npublic static FString GetImportNameReferenceWithoutZero(int j, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`j` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **InterpretAsGuidAndConvertToUnsignedInts(String)**\r\n\r\n```csharp\r\npublic static UInt32[] InterpretAsGuidAndConvertToUnsignedInts(string value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n#### Returns\r\n\r\n[UInt32[]](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n### **ConvertStringToByteArray(String)**\r\n\r\n```csharp\r\npublic static Byte[] ConvertStringToByteArray(string val)\r\n```\r\n\r\n#### Parameters\r\n\r\n`val` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n#### Returns\r\n\r\n[Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **ToUnsignedInts(Guid)**\r\n\r\n```csharp\r\npublic static UInt32[] ToUnsignedInts(Guid value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [Guid](https://docs.microsoft.com/en-us/dotnet/api/system.guid)<br>\r\n\r\n#### Returns\r\n\r\n[UInt32[]](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n### **GUID(UInt32, UInt32, UInt32, UInt32)**\r\n\r\n```csharp\r\npublic static Guid GUID(uint value1, uint value2, uint value3, uint value4)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value1` [UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n`value2` [UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n`value3` [UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n`value4` [UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n#### Returns\r\n\r\n[Guid](https://docs.microsoft.com/en-us/dotnet/api/system.guid)<br>\r\n\r\n### **ConvertToGUID(String)**\r\n\r\n```csharp\r\npublic static Guid ConvertToGUID(string GuidString)\r\n```\r\n\r\n#### Parameters\r\n\r\n`GuidString` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n#### Returns\r\n\r\n[Guid](https://docs.microsoft.com/en-us/dotnet/api/system.guid)<br>\r\n\r\n### **ConvertToString(Guid)**\r\n\r\n```csharp\r\npublic static string ConvertToString(Guid val)\r\n```\r\n\r\n#### Parameters\r\n\r\n`val` [Guid](https://docs.microsoft.com/en-us/dotnet/api/system.guid)<br>\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **ConvertHexStringToByteArray(String)**\r\n\r\n```csharp\r\npublic static Byte[] ConvertHexStringToByteArray(string hexString)\r\n```\r\n\r\n#### Parameters\r\n\r\n`hexString` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n#### Returns\r\n\r\n[Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **AlignPadding(Int64, Int32)**\r\n\r\n```csharp\r\npublic static long AlignPadding(long pos, int align)\r\n```\r\n\r\n#### Parameters\r\n\r\n`pos` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`align` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n#### Returns\r\n\r\n[Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n### **AlignPadding(Int32, Int32)**\r\n\r\n```csharp\r\npublic static int AlignPadding(int pos, int align)\r\n```\r\n\r\n#### Parameters\r\n\r\n`pos` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`align` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **DivideAndRoundUp(Int32, Int32)**\r\n\r\n```csharp\r\npublic static int DivideAndRoundUp(int a, int b)\r\n```\r\n\r\n#### Parameters\r\n\r\n`a` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`b` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FixDirectorySeparatorsForDisk(String)**\r\n\r\n```csharp\r\npublic static string FixDirectorySeparatorsForDisk(string path)\r\n```\r\n\r\n#### Parameters\r\n\r\n`path` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **SortByDependencies&lt;T&gt;(IEnumerable&lt;T&gt;, IDictionary&lt;T, IList&lt;T&gt;&gt;)**\r\n\r\n```csharp\r\npublic static List<T> SortByDependencies<T>(IEnumerable<T> allExports, IDictionary<T, IList<T>> dependencies)\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\n#### Parameters\r\n\r\n`allExports` IEnumerable&lt;T&gt;<br>\r\n\r\n`dependencies` IDictionary&lt;T, IList&lt;T&gt;&gt;<br>\r\n\r\n#### Returns\r\n\r\nList&lt;T&gt;<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.uasset.md",
    "content": "# UAsset\r\n\r\nNamespace: UAssetAPI\r\n\r\nRepresents an Unreal Engine asset.\r\n\r\n```csharp\r\npublic class UAsset : INameMap\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UAsset](./uassetapi.uasset.md)<br>\r\nImplements [INameMap](./uassetapi.inamemap.md)\r\n\r\n## Fields\r\n\r\n### **Info**\r\n\r\nAgent string to provide context in serialized JSON.\r\n\r\n```csharp\r\npublic string Info;\r\n```\r\n\r\n### **FilePath**\r\n\r\nThe path of the file on disk that this asset represents. This does not need to be specified for regular parsing.\r\n\r\n```csharp\r\npublic string FilePath;\r\n```\r\n\r\n### **Mappings**\r\n\r\nThe corresponding mapping data for the game that this asset is from. Optional unless unversioned properties are present.\r\n\r\n```csharp\r\npublic Usmap Mappings;\r\n```\r\n\r\n### **CustomSerializationFlags**\r\n\r\nList of custom serialization flags, used to override certain optional behavior in how UAssetAPI serializes assets.\r\n\r\n```csharp\r\npublic CustomSerializationFlags CustomSerializationFlags;\r\n```\r\n\r\n### **UseSeparateBulkDataFiles**\r\n\r\nShould the asset be split into separate .uasset, .uexp, and .ubulk files, as opposed to one single .uasset file?\r\n\r\n```csharp\r\npublic bool UseSeparateBulkDataFiles;\r\n```\r\n\r\n### **IsUnversioned**\r\n\r\nShould this asset not serialize its engine and custom versions?\r\n\r\n```csharp\r\npublic bool IsUnversioned;\r\n```\r\n\r\n### **FileVersionLicenseeUE**\r\n\r\nThe licensee file version. Used by some games to add their own Engine-level versioning.\r\n\r\n```csharp\r\npublic int FileVersionLicenseeUE;\r\n```\r\n\r\n### **ObjectVersion**\r\n\r\nThe object version of UE4 that will be used to parse this asset.\r\n\r\n```csharp\r\npublic ObjectVersion ObjectVersion;\r\n```\r\n\r\n### **ObjectVersionUE5**\r\n\r\nThe object version of UE5 that will be used to parse this asset. Set to [ObjectVersionUE5.UNKNOWN](./uassetapi.unrealtypes.objectversionue5.md#unknown) for UE4 games.\r\n\r\n```csharp\r\npublic ObjectVersionUE5 ObjectVersionUE5;\r\n```\r\n\r\n### **CustomVersionContainer**\r\n\r\nAll the custom versions stored in the archive.\r\n\r\n```csharp\r\npublic List<CustomVersion> CustomVersionContainer;\r\n```\r\n\r\n### **SoftObjectPathList**\r\n\r\nList of SoftObjectPath contained in this package.\r\n\r\n```csharp\r\npublic List<FSoftObjectPath> SoftObjectPathList;\r\n```\r\n\r\n### **GatherableTextData**\r\n\r\nMap of the gatherable text data.\r\n\r\n```csharp\r\npublic List<FGatherableTextData> GatherableTextData;\r\n```\r\n\r\n### **Exports**\r\n\r\nMap of object exports. UAssetAPI used to call these \"categories.\"\r\n\r\n```csharp\r\npublic List<Export> Exports;\r\n```\r\n\r\n### **SearchableNames**\r\n\r\nList of Searchable Names, by object containing them. Sorted to keep order consistent.\r\n\r\n```csharp\r\npublic SortedDictionary<FPackageIndex, List<FName>> SearchableNames;\r\n```\r\n\r\n### **Thumbnails**\r\n\r\nMap of object full names to the thumbnails\r\n\r\n```csharp\r\npublic Dictionary<string, FObjectThumbnail> Thumbnails;\r\n```\r\n\r\n### **WorldTileInfo**\r\n\r\nTile information used by WorldComposition.\r\n Defines properties necessary for tile positioning in the world.\r\n\r\n```csharp\r\npublic FWorldTileInfo WorldTileInfo;\r\n```\r\n\r\n### **AppendedNullBytes**\r\n\r\nThe number of null bytes appended to the end of the package header (.uasset file).\r\n This should typically be zero, but may be greater when reading assets generated by external tools.\r\n\r\n```csharp\r\npublic int AppendedNullBytes;\r\n```\r\n\r\n### **MapStructTypeOverride**\r\n\r\nIn MapProperties that have StructProperties as their keys or values, there is no universal, context-free way to determine the type of the struct.\r\n\r\n\r\n\r\nTo that end, this dictionary maps MapProperty names to the type of the structs within them (tuple of key struct type and value struct type) if they are not None-terminated property lists.\r\n\r\n```csharp\r\npublic Dictionary<string, Tuple<FString, FString>> MapStructTypeOverride;\r\n```\r\n\r\n### **ArrayStructTypeOverride**\r\n\r\nIN ENGINE VERSIONS BEFORE [ObjectVersion.VER_UE4_INNER_ARRAY_TAG_INFO](./uassetapi.unrealtypes.objectversion.md#ver_ue4_inner_array_tag_info):\r\n\r\n\r\n\r\nIn ArrayProperties that have StructProperties as their keys or values, there is no universal, context-free way to determine the type of the struct. To that end, this dictionary maps ArrayProperty names to the type of the structs within them.\r\n\r\n```csharp\r\npublic Dictionary<string, FString> ArrayStructTypeOverride;\r\n```\r\n\r\n### **OtherAssetsFailedToAccess**\r\n\r\n```csharp\r\npublic ISet<FName> OtherAssetsFailedToAccess;\r\n```\r\n\r\n### **LegacyFileVersion**\r\n\r\nThe package file version number when this package was saved.\r\n\r\n```csharp\r\npublic int LegacyFileVersion;\r\n```\r\n\r\n**Remarks:**\r\n\r\nThe lower 16 bits stores the UE3 engine version, while the upper 16 bits stores the UE4/licensee version. For newer packages this is -7.\r\n VersionDescription-2indicates presence of enum-based custom versions-3indicates guid-based custom versions-4indicates removal of the UE3 version. Packages saved with this ID cannot be loaded in older engine versions-5indicates the replacement of writing out the \"UE3 version\" so older versions of engine can gracefully fail to open newer packages-6indicates optimizations to how custom versions are being serialized-7indicates the texture allocation info has been removed from the summary-8indicates that the UE5 version has been added to the summary-9indicates a contractual change in when early exits are required based on FileVersionTooNew. At or after this LegacyFileVersion, we support changing the PackageFileSummary serialization format for all bytes serialized after FileVersionLicensee, and that format change can be conditional on any of the versions parsed before that point. All packageloaders that understand the -9 legacyfileformat are required to early exit without further serialization at that point if FileVersionTooNew is true.\r\n\r\n### **DataResourceVersion**\r\n\r\nThe version to use for serializing data resources.\r\n\r\n```csharp\r\npublic EObjectDataResourceVersion DataResourceVersion;\r\n```\r\n\r\n### **DataResources**\r\n\r\nList of serialized UObject binary/bulk data resources.\r\n\r\n```csharp\r\npublic List<FObjectDataResource> DataResources;\r\n```\r\n\r\n### **UsesEventDrivenLoader**\r\n\r\nWhether or not this asset is loaded with the Event Driven Loader.\r\n\r\n```csharp\r\npublic bool UsesEventDrivenLoader;\r\n```\r\n\r\n### **WillSerializeNameHashes**\r\n\r\nWhether or not this asset serializes hashes in the name map.\r\n If null, this will be automatically determined based on the object version.\r\n\r\n```csharp\r\npublic Nullable<bool> WillSerializeNameHashes;\r\n```\r\n\r\n### **Imports**\r\n\r\nMap of object imports. UAssetAPI used to call these \"links.\"\r\n\r\n```csharp\r\npublic List<Import> Imports;\r\n```\r\n\r\n### **DependsMap**\r\n\r\nList of dependency lists for each export.\r\n\r\n```csharp\r\npublic List<Int32[]> DependsMap;\r\n```\r\n\r\n### **SoftPackageReferenceList**\r\n\r\nList of packages that are soft referenced by this package.\r\n\r\n```csharp\r\npublic List<FString> SoftPackageReferenceList;\r\n```\r\n\r\n### **AssetRegistryData**\r\n\r\nUncertain\r\n\r\n```csharp\r\npublic Byte[] AssetRegistryData;\r\n```\r\n\r\n### **BulkData**\r\n\r\nAny bulk data that is not stored in the export map.\r\n\r\n```csharp\r\npublic Byte[] BulkData;\r\n```\r\n\r\n### **ValorantGarbageData**\r\n\r\nSome garbage data that appears to be present in certain games (e.g. Valorant)\r\n\r\n```csharp\r\npublic Byte[] ValorantGarbageData;\r\n```\r\n\r\n### **SeaOfThievesGarbageData**\r\n\r\nSome garbage data that appears to be present in certain games (e.g. Sea of Thieves)\r\n null = not present\r\n empty array = present, but serialize as offset = 0, length = 0\r\n\r\n```csharp\r\npublic Byte[] SeaOfThievesGarbageData;\r\n```\r\n\r\n### **Generations**\r\n\r\nData about previous versions of this package.\r\n\r\n```csharp\r\npublic List<FGenerationInfo> Generations;\r\n```\r\n\r\n### **PackageGuid**\r\n\r\nCurrent ID for this package. Effectively unused.\r\n\r\n```csharp\r\npublic Guid PackageGuid;\r\n```\r\n\r\n### **PersistentGuid**\r\n\r\nCurrent persistent ID for this package.\r\n\r\n```csharp\r\npublic Guid PersistentGuid;\r\n```\r\n\r\n### **RecordedEngineVersion**\r\n\r\nEngine version this package was saved with. This may differ from CompatibleWithEngineVersion for assets saved with a hotfix release.\r\n\r\n```csharp\r\npublic FEngineVersion RecordedEngineVersion;\r\n```\r\n\r\n### **RecordedCompatibleWithEngineVersion**\r\n\r\nEngine version this package is compatible with. Assets saved by Hotfix releases and engine versions that maintain binary compatibility will have\r\n a CompatibleWithEngineVersion.Patch that matches the original release (as opposed to SavedByEngineVersion which will have a patch version of the new release).\r\n\r\n```csharp\r\npublic FEngineVersion RecordedCompatibleWithEngineVersion;\r\n```\r\n\r\n### **ChunkIDs**\r\n\r\nStreaming install ChunkIDs\r\n\r\n```csharp\r\npublic Int32[] ChunkIDs;\r\n```\r\n\r\n### **PackageSource**\r\n\r\nValue that is used by the Unreal Engine to determine if the package was saved by Epic, a licensee, modder, etc.\r\n\r\n```csharp\r\npublic uint PackageSource;\r\n```\r\n\r\n### **FolderName**\r\n\r\nIn UE4: \"FolderName\": The Generic Browser folder name that this package lives in. Usually \"None\" in cooked assets.\r\n In UE5: \"PackageName\": The package name the file was last saved with.\r\n\r\n```csharp\r\npublic FString FolderName;\r\n```\r\n\r\n### **OverrideNameMapHashes**\r\n\r\nA map of name map entries to hashes to use when serializing instead of the default engine hash algorithm. Useful when external programs improperly specify name map hashes and binary equality must be maintained.\r\n\r\n```csharp\r\npublic Dictionary<FString, uint> OverrideNameMapHashes;\r\n```\r\n\r\n### **LocalizationId**\r\n\r\nLocalization ID of this package\r\n\r\n```csharp\r\npublic FString LocalizationId;\r\n```\r\n\r\n### **UASSET_MAGIC**\r\n\r\nMagic number for the .uasset format\r\n\r\n```csharp\r\npublic static uint UASSET_MAGIC;\r\n```\r\n\r\n### **ACE7_MAGIC**\r\n\r\nMagic number for Ace Combat 7 encrypted .uasset format\r\n\r\n```csharp\r\npublic static uint ACE7_MAGIC;\r\n```\r\n\r\n## Properties\r\n\r\n### **PackageFlags**\r\n\r\nThe flags for this package.\r\n\r\n```csharp\r\npublic EPackageFlags PackageFlags { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[EPackageFlags](./uassetapi.unrealtypes.epackageflags.md)<br>\r\n\r\n### **HasUnversionedProperties**\r\n\r\nWhether or not this asset uses unversioned properties.\r\n\r\n```csharp\r\npublic bool HasUnversionedProperties { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **IsFilterEditorOnly**\r\n\r\nWhether or not this asset has PKG_FilterEditorOnly flag.\r\n\r\n```csharp\r\npublic bool IsFilterEditorOnly { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **UAsset(String, EngineVersion, Usmap, CustomSerializationFlags)**\r\n\r\nReads an asset from disk and initializes a new instance of the [UAsset](./uassetapi.uasset.md) class to store its data in memory.\r\n\r\n```csharp\r\npublic UAsset(string path, EngineVersion engineVersion, Usmap mappings, CustomSerializationFlags customSerializationFlags)\r\n```\r\n\r\n#### Parameters\r\n\r\n`path` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe path of the asset file on disk that this instance will read from.\r\n\r\n`engineVersion` [EngineVersion](./uassetapi.unrealtypes.engineversion.md)<br>\r\nThe version of the Unreal Engine that will be used to parse this asset. If the asset is versioned, this can be left unspecified.\r\n\r\n`mappings` [Usmap](./uassetapi.unversioned.usmap.md)<br>\r\nA valid set of mappings for the game that this asset is from. Not required unless unversioned properties are used.\r\n\r\n`customSerializationFlags` [CustomSerializationFlags](./uassetapi.customserializationflags.md)<br>\r\nA set of custom serialization flags, which can be used to override certain optional behavior in how UAssetAPI serializes assets.\r\n\r\n#### Exceptions\r\n\r\n[UnknownEngineVersionException](./uassetapi.unknownengineversionexception.md)<br>\r\nThrown when this is an unversioned asset and [UAsset.ObjectVersion](./uassetapi.uasset.md#objectversion) is unspecified.\r\n\r\n[FormatException](https://docs.microsoft.com/en-us/dotnet/api/system.formatexception)<br>\r\nThrow when the asset cannot be parsed correctly.\r\n\r\n### **UAsset(String, Boolean, EngineVersion, Usmap, CustomSerializationFlags)**\r\n\r\nReads an asset from disk and initializes a new instance of the [UAsset](./uassetapi.uasset.md) class to store its data in memory.\r\n\r\n```csharp\r\npublic UAsset(string path, bool loadUexp, EngineVersion engineVersion, Usmap mappings, CustomSerializationFlags customSerializationFlags)\r\n```\r\n\r\n#### Parameters\r\n\r\n`path` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe path of the asset file on disk that this instance will read from.\r\n\r\n`loadUexp` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nWhether to load the .uexp file. False only reads the .uasset file.\r\n\r\n`engineVersion` [EngineVersion](./uassetapi.unrealtypes.engineversion.md)<br>\r\nThe version of the Unreal Engine that will be used to parse this asset. If the asset is versioned, this can be left unspecified.\r\n\r\n`mappings` [Usmap](./uassetapi.unversioned.usmap.md)<br>\r\nA valid set of mappings for the game that this asset is from. Not required unless unversioned properties are used.\r\n\r\n`customSerializationFlags` [CustomSerializationFlags](./uassetapi.customserializationflags.md)<br>\r\nA set of custom serialization flags, which can be used to override certain optional behavior in how UAssetAPI serializes assets.\r\n\r\n#### Exceptions\r\n\r\n[UnknownEngineVersionException](./uassetapi.unknownengineversionexception.md)<br>\r\nThrown when this is an unversioned asset and [UAsset.ObjectVersion](./uassetapi.uasset.md#objectversion) is unspecified.\r\n\r\n[FormatException](https://docs.microsoft.com/en-us/dotnet/api/system.formatexception)<br>\r\nThrow when the asset cannot be parsed correctly.\r\n\r\n### **UAsset(AssetBinaryReader, EngineVersion, Usmap, Boolean, CustomSerializationFlags)**\r\n\r\nReads an asset from a BinaryReader and initializes a new instance of the [UAsset](./uassetapi.uasset.md) class to store its data in memory.\r\n\r\n```csharp\r\npublic UAsset(AssetBinaryReader reader, EngineVersion engineVersion, Usmap mappings, bool useSeparateBulkDataFiles, CustomSerializationFlags customSerializationFlags)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe asset's BinaryReader that this instance will read from. If a .uexp file exists, the .uexp file's data should be appended to the end of the .uasset file's data.\r\n\r\n`engineVersion` [EngineVersion](./uassetapi.unrealtypes.engineversion.md)<br>\r\nThe version of the Unreal Engine that will be used to parse this asset. If the asset is versioned, this can be left unspecified.\r\n\r\n`mappings` [Usmap](./uassetapi.unversioned.usmap.md)<br>\r\nA valid set of mappings for the game that this asset is from. Not required unless unversioned properties are used.\r\n\r\n`useSeparateBulkDataFiles` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nDoes this asset uses separate bulk data files (.uexp, .ubulk)?\r\n\r\n`customSerializationFlags` [CustomSerializationFlags](./uassetapi.customserializationflags.md)<br>\r\nA set of custom serialization flags, which can be used to override certain optional behavior in how UAssetAPI serializes assets.\r\n\r\n#### Exceptions\r\n\r\n[UnknownEngineVersionException](./uassetapi.unknownengineversionexception.md)<br>\r\nThrown when this is an unversioned asset and [UAsset.ObjectVersion](./uassetapi.uasset.md#objectversion) is unspecified.\r\n\r\n[FormatException](https://docs.microsoft.com/en-us/dotnet/api/system.formatexception)<br>\r\nThrow when the asset cannot be parsed correctly.\r\n\r\n### **UAsset(EngineVersion, Usmap, CustomSerializationFlags)**\r\n\r\nInitializes a new instance of the [UAsset](./uassetapi.uasset.md) class. This instance will store no asset data and does not represent any asset in particular until the [UAsset.Read(AssetBinaryReader, Int32[], Int32[])](./uassetapi.uasset.md#readassetbinaryreader-int32-int32) method is manually called.\r\n\r\n```csharp\r\npublic UAsset(EngineVersion engineVersion, Usmap mappings, CustomSerializationFlags customSerializationFlags)\r\n```\r\n\r\n#### Parameters\r\n\r\n`engineVersion` [EngineVersion](./uassetapi.unrealtypes.engineversion.md)<br>\r\nThe version of the Unreal Engine that will be used to parse this asset. If the asset is versioned, this can be left unspecified.\r\n\r\n`mappings` [Usmap](./uassetapi.unversioned.usmap.md)<br>\r\nA valid set of mappings for the game that this asset is from. Not required unless unversioned properties are used.\r\n\r\n`customSerializationFlags` [CustomSerializationFlags](./uassetapi.customserializationflags.md)<br>\r\nA set of custom serialization flags, which can be used to override certain optional behavior in how UAssetAPI serializes assets.\r\n\r\n### **UAsset(String, ObjectVersion, ObjectVersionUE5, List&lt;CustomVersion&gt;, Usmap, CustomSerializationFlags)**\r\n\r\nReads an asset from disk and initializes a new instance of the [UAsset](./uassetapi.uasset.md) class to store its data in memory.\r\n\r\n```csharp\r\npublic UAsset(string path, ObjectVersion objectVersion, ObjectVersionUE5 objectVersionUE5, List<CustomVersion> customVersionContainer, Usmap mappings, CustomSerializationFlags customSerializationFlags)\r\n```\r\n\r\n#### Parameters\r\n\r\n`path` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe path of the asset file on disk that this instance will read from.\r\n\r\n`objectVersion` [ObjectVersion](./uassetapi.unrealtypes.objectversion.md)<br>\r\nThe UE4 object version of the Unreal Engine that will be used to parse this asset.\r\n\r\n`objectVersionUE5` [ObjectVersionUE5](./uassetapi.unrealtypes.objectversionue5.md)<br>\r\nThe UE5 object version of the Unreal Engine that will be used to parse this asset.\r\n\r\n`customVersionContainer` [List&lt;CustomVersion&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\nA list of custom versions to parse this asset with.\r\n\r\n`mappings` [Usmap](./uassetapi.unversioned.usmap.md)<br>\r\nA valid set of mappings for the game that this asset is from. Not required unless unversioned properties are used.\r\n\r\n`customSerializationFlags` [CustomSerializationFlags](./uassetapi.customserializationflags.md)<br>\r\nA set of custom serialization flags, which can be used to override certain optional behavior in how UAssetAPI serializes assets.\r\n\r\n#### Exceptions\r\n\r\n[UnknownEngineVersionException](./uassetapi.unknownengineversionexception.md)<br>\r\nThrown when this is an unversioned asset and [UAsset.ObjectVersion](./uassetapi.uasset.md#objectversion) is unspecified.\r\n\r\n[FormatException](https://docs.microsoft.com/en-us/dotnet/api/system.formatexception)<br>\r\nThrow when the asset cannot be parsed correctly.\r\n\r\n### **UAsset(AssetBinaryReader, ObjectVersion, ObjectVersionUE5, List&lt;CustomVersion&gt;, Usmap, Boolean, CustomSerializationFlags)**\r\n\r\nReads an asset from a BinaryReader and initializes a new instance of the [UAsset](./uassetapi.uasset.md) class to store its data in memory.\r\n\r\n```csharp\r\npublic UAsset(AssetBinaryReader reader, ObjectVersion objectVersion, ObjectVersionUE5 objectVersionUE5, List<CustomVersion> customVersionContainer, Usmap mappings, bool useSeparateBulkDataFiles, CustomSerializationFlags customSerializationFlags)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe asset's BinaryReader that this instance will read from.\r\n\r\n`objectVersion` [ObjectVersion](./uassetapi.unrealtypes.objectversion.md)<br>\r\nThe UE4 object version of the Unreal Engine that will be used to parse this asset.\r\n\r\n`objectVersionUE5` [ObjectVersionUE5](./uassetapi.unrealtypes.objectversionue5.md)<br>\r\nThe UE5 object version of the Unreal Engine that will be used to parse this asset.\r\n\r\n`customVersionContainer` [List&lt;CustomVersion&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\nA list of custom versions to parse this asset with.\r\n\r\n`mappings` [Usmap](./uassetapi.unversioned.usmap.md)<br>\r\nA valid set of mappings for the game that this asset is from. Not required unless unversioned properties are used.\r\n\r\n`useSeparateBulkDataFiles` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nDoes this asset uses separate bulk data files (.uexp, .ubulk)?\r\n\r\n`customSerializationFlags` [CustomSerializationFlags](./uassetapi.customserializationflags.md)<br>\r\nA set of custom serialization flags, which can be used to override certain optional behavior in how UAssetAPI serializes assets.\r\n\r\n#### Exceptions\r\n\r\n[UnknownEngineVersionException](./uassetapi.unknownengineversionexception.md)<br>\r\nThrown when this is an unversioned asset and [UAsset.ObjectVersion](./uassetapi.uasset.md#objectversion) is unspecified.\r\n\r\n[FormatException](https://docs.microsoft.com/en-us/dotnet/api/system.formatexception)<br>\r\nThrow when the asset cannot be parsed correctly.\r\n\r\n### **UAsset(ObjectVersion, ObjectVersionUE5, List&lt;CustomVersion&gt;, Usmap, CustomSerializationFlags)**\r\n\r\nInitializes a new instance of the [UAsset](./uassetapi.uasset.md) class. This instance will store no asset data and does not represent any asset in particular until the [UAsset.Read(AssetBinaryReader, Int32[], Int32[])](./uassetapi.uasset.md#readassetbinaryreader-int32-int32) method is manually called.\r\n\r\n```csharp\r\npublic UAsset(ObjectVersion objectVersion, ObjectVersionUE5 objectVersionUE5, List<CustomVersion> customVersionContainer, Usmap mappings, CustomSerializationFlags customSerializationFlags)\r\n```\r\n\r\n#### Parameters\r\n\r\n`objectVersion` [ObjectVersion](./uassetapi.unrealtypes.objectversion.md)<br>\r\nThe UE4 object version of the Unreal Engine that will be used to parse this asset.\r\n\r\n`objectVersionUE5` [ObjectVersionUE5](./uassetapi.unrealtypes.objectversionue5.md)<br>\r\nThe UE5 object version of the Unreal Engine that will be used to parse this asset.\r\n\r\n`customVersionContainer` [List&lt;CustomVersion&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\nA list of custom versions to parse this asset with.\r\n\r\n`mappings` [Usmap](./uassetapi.unversioned.usmap.md)<br>\r\nA valid set of mappings for the game that this asset is from. Not required unless unversioned properties are used.\r\n\r\n`customSerializationFlags` [CustomSerializationFlags](./uassetapi.customserializationflags.md)<br>\r\nA set of custom serialization flags, which can be used to override certain optional behavior in how UAssetAPI serializes assets.\r\n\r\n### **UAsset()**\r\n\r\nInitializes a new instance of the [UAsset](./uassetapi.uasset.md) class. This instance will store no asset data and does not represent any asset in particular until the [UAsset.Read(AssetBinaryReader, Int32[], Int32[])](./uassetapi.uasset.md#readassetbinaryreader-int32-int32) method is manually called.\r\n\r\n```csharp\r\npublic UAsset()\r\n```\r\n\r\n## Methods\r\n\r\n### **FixNameMapLookupIfNeeded()**\r\n\r\n```csharp\r\ninternal void FixNameMapLookupIfNeeded()\r\n```\r\n\r\n### **GetNameMapIndexList()**\r\n\r\nReturns the name map as a read-only list of FStrings.\r\n\r\n```csharp\r\npublic IReadOnlyList<FString> GetNameMapIndexList()\r\n```\r\n\r\n#### Returns\r\n\r\n[IReadOnlyList&lt;FString&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlylist-1)<br>\r\nThe name map as a read-only list of FStrings.\r\n\r\n### **ClearNameIndexList()**\r\n\r\nClears the name map. This method should be used with extreme caution, as it may break unparsed references to the name map.\r\n\r\n```csharp\r\npublic void ClearNameIndexList()\r\n```\r\n\r\n### **SetNameReference(Int32, FString)**\r\n\r\nReplaces a value in the name map at a particular index.\r\n\r\n```csharp\r\npublic void SetNameReference(int index, FString value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe index to overwrite in the name map.\r\n\r\n`value` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\nThe value that will be replaced in the name map.\r\n\r\n### **GetNameReference(Int32)**\r\n\r\nGets a value in the name map at a particular index.\r\n\r\n```csharp\r\npublic FString GetNameReference(int index)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe index to return the value at.\r\n\r\n#### Returns\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\nThe value at the index provided.\r\n\r\n### **GetNameReferenceWithoutZero(Int32)**\r\n\r\nGets a value in the name map at a particular index, but with the index zero being treated as if it is not valid.\r\n\r\n```csharp\r\npublic FString GetNameReferenceWithoutZero(int index)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe index to return the value at.\r\n\r\n#### Returns\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\nThe value at the index provided.\r\n\r\n### **ContainsNameReference(FString)**\r\n\r\nChecks whether or not the value exists in the name map.\r\n\r\n```csharp\r\npublic bool ContainsNameReference(FString search)\r\n```\r\n\r\n#### Parameters\r\n\r\n`search` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\nThe value to search the name map for.\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\ntrue if the value appears in the name map, otherwise false.\r\n\r\n### **SearchNameReference(FString)**\r\n\r\nSearches the name map for a particular value.\r\n\r\n```csharp\r\npublic int SearchNameReference(FString search)\r\n```\r\n\r\n#### Parameters\r\n\r\n`search` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\nThe value to search the name map for.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe index at which the value appears in the name map.\r\n\r\n#### Exceptions\r\n\r\n[NameMapOutOfRangeException](./uassetapi.namemapoutofrangeexception.md)<br>\r\nThrown when the value provided does not appear in the name map.\r\n\r\n### **AddNameReference(FString, Boolean, Boolean)**\r\n\r\nAdds a new value to the name map.\r\n\r\n```csharp\r\npublic int AddNameReference(FString name, bool forceAddDuplicates, bool skipFixes)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\nThe value to add to the name map.\r\n\r\n`forceAddDuplicates` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nWhether or not to add a new entry if the value provided already exists in the name map.\r\n\r\n`skipFixes` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nWhether or not to skip other additional fixes made upon adding new entries to the name map. In nearly all cases, this should be false.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe index of the new value in the name map. If the value already existed in the name map beforehand, that index will be returned instead.\r\n\r\n#### Exceptions\r\n\r\n[ArgumentException](https://docs.microsoft.com/en-us/dotnet/api/system.argumentexception)<br>\r\nThrown when forceAddDuplicates is false and the value provided is null or empty.\r\n\r\n### **CanCreateDummies()**\r\n\r\nWhether or not we can create dummies in this name map. If false, attempting to define a dummy will append to the name map instead.\r\n\r\n```csharp\r\npublic bool CanCreateDummies()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nA boolean.\r\n\r\n### **PathToStream(String, Boolean)**\r\n\r\nCreates a MemoryStream from an asset path.\r\n\r\n```csharp\r\npublic MemoryStream PathToStream(string p, bool loadUEXP)\r\n```\r\n\r\n#### Parameters\r\n\r\n`p` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe path to the input file.\r\n\r\n`loadUEXP` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nWhether to load the UEXP file. False only reads the UASSET.\r\n\r\n#### Returns\r\n\r\n[MemoryStream](https://docs.microsoft.com/en-us/dotnet/api/system.io.memorystream)<br>\r\nA new MemoryStream that stores the binary data of the input file.\r\n\r\n### **PathToReader(String, Boolean)**\r\n\r\nCreates a BinaryReader from an asset path.\r\n\r\n```csharp\r\npublic AssetBinaryReader PathToReader(string p, bool loadUEXP)\r\n```\r\n\r\n#### Parameters\r\n\r\n`p` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe path to the input file.\r\n\r\n`loadUEXP` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nWhether to load the .uexp file. False only reads the .uasset file.\r\n\r\n#### Returns\r\n\r\n[AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nA new BinaryReader that stores the binary data of the input file.\r\n\r\n### **GetClassExport()**\r\n\r\nSearches for and returns this asset's ClassExport, if one exists.\r\n\r\n```csharp\r\npublic ClassExport GetClassExport()\r\n```\r\n\r\n#### Returns\r\n\r\n[ClassExport](./uassetapi.exporttypes.classexport.md)<br>\r\nThe asset's ClassExport if one exists, otherwise null.\r\n\r\n### **ResolveAncestries()**\r\n\r\nResolves the ancestry of all properties present in this asset.\r\n\r\n```csharp\r\npublic void ResolveAncestries()\r\n```\r\n\r\n### **FindAssetOnDiskFromPath(String)**\r\n\r\nAttempt to find another asset on disk given an asset path (i.e. one starting with /Game/).\r\n\r\n```csharp\r\npublic string FindAssetOnDiskFromPath(string path)\r\n```\r\n\r\n#### Parameters\r\n\r\n`path` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe asset path.\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe path to the file on disk, or null if none could be found.\r\n\r\n### **SetEngineVersion(EngineVersion)**\r\n\r\nSets the version of the Unreal Engine to use in serialization.\r\n\r\n```csharp\r\npublic void SetEngineVersion(EngineVersion newVersion)\r\n```\r\n\r\n#### Parameters\r\n\r\n`newVersion` [EngineVersion](./uassetapi.unrealtypes.engineversion.md)<br>\r\nThe new version of the Unreal Engine to use in serialization.\r\n\r\n#### Exceptions\r\n\r\n[InvalidOperationException](https://docs.microsoft.com/en-us/dotnet/api/system.invalidoperationexception)<br>\r\nThrown when an invalid EngineVersion is specified.\r\n\r\n### **GetEngineVersion(ObjectVersion, ObjectVersionUE5, List&lt;CustomVersion&gt;)**\r\n\r\n```csharp\r\npublic static EngineVersion GetEngineVersion(ObjectVersion objectVersion, ObjectVersionUE5 objectVersionUE5, List<CustomVersion> customVersionContainer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`objectVersion` [ObjectVersion](./uassetapi.unrealtypes.objectversion.md)<br>\r\n\r\n`objectVersionUE5` [ObjectVersionUE5](./uassetapi.unrealtypes.objectversionue5.md)<br>\r\n\r\n`customVersionContainer` [List&lt;CustomVersion&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n#### Returns\r\n\r\n[EngineVersion](./uassetapi.unrealtypes.engineversion.md)<br>\r\n\r\n### **GetEngineVersion()**\r\n\r\nEstimates the retail version of the Unreal Engine based on the object and custom versions.\r\n\r\n```csharp\r\npublic EngineVersion GetEngineVersion()\r\n```\r\n\r\n#### Returns\r\n\r\n[EngineVersion](./uassetapi.unrealtypes.engineversion.md)<br>\r\nThe estimated retail version of the Unreal Engine.\r\n\r\n### **GetCustomVersion(Guid)**\r\n\r\nFetches the version of a custom version in this asset.\r\n\r\n```csharp\r\npublic int GetCustomVersion(Guid key)\r\n```\r\n\r\n#### Parameters\r\n\r\n`key` [Guid](https://docs.microsoft.com/en-us/dotnet/api/system.guid)<br>\r\nThe GUID of the custom version to retrieve.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe version of the retrieved custom version.\r\n\r\n### **GetCustomVersion(String)**\r\n\r\nFetches the version of a custom version in this asset.\r\n\r\n```csharp\r\npublic int GetCustomVersion(string friendlyName)\r\n```\r\n\r\n#### Parameters\r\n\r\n`friendlyName` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe friendly name of the custom version to retrieve.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe version of the retrieved custom version.\r\n\r\n### **GetCustomVersion&lt;T&gt;()**\r\n\r\nFetches a custom version's enum value based off of its type.\r\n\r\n```csharp\r\npublic T GetCustomVersion<T>()\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\nThe enum type of the custom version to retrieve.\r\n\r\n#### Returns\r\n\r\nT<br>\r\nThe enum value of the requested custom version.\r\n\r\n#### Exceptions\r\n\r\n[ArgumentException](https://docs.microsoft.com/en-us/dotnet/api/system.argumentexception)<br>\r\nThrown when T is not an enumerated type.\r\n\r\n### **GuessCustomVersionFromTypeAndEngineVersion(EngineVersion, Type)**\r\n\r\n```csharp\r\npublic static int GuessCustomVersionFromTypeAndEngineVersion(EngineVersion chosenVersion, Type typ)\r\n```\r\n\r\n#### Parameters\r\n\r\n`chosenVersion` [EngineVersion](./uassetapi.unrealtypes.engineversion.md)<br>\r\n\r\n`typ` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **GetDefaultCustomVersionContainer(EngineVersion)**\r\n\r\nFetches a list of all default custom versions for a specific Unreal version.\r\n\r\n```csharp\r\npublic static List<CustomVersion> GetDefaultCustomVersionContainer(EngineVersion chosenVersion)\r\n```\r\n\r\n#### Parameters\r\n\r\n`chosenVersion` [EngineVersion](./uassetapi.unrealtypes.engineversion.md)<br>\r\nThe version of the engine to check against.\r\n\r\n#### Returns\r\n\r\n[List&lt;CustomVersion&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\nA list of all the default custom version values for the given engine version.\r\n\r\n### **ParseExport(AssetBinaryReader, Int32, Boolean)**\r\n\r\nRead an export from disk.\r\n\r\n```csharp\r\npublic void ParseExport(AssetBinaryReader reader, int i, bool read)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe binary reader.\r\n\r\n`i` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe index of the export in the export map to read.\r\n\r\n`read` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nWhether or not to serialize the body of the export. If false, simply converts to the respective sub-type.\r\n\r\n### **ConvertExportToChildExportAndRead(AssetBinaryReader, Int32, Boolean)**\r\n\r\n```csharp\r\npublic void ConvertExportToChildExportAndRead(AssetBinaryReader reader, int i, bool read)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`i` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`read` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **VerifyBinaryEquality()**\r\n\r\nChecks whether or not this asset maintains binary equality when serialized.\r\n\r\n```csharp\r\npublic bool VerifyBinaryEquality()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nWhether or not the asset maintained binary equality.\r\n\r\n### **GetParentClass(FName&, FName&)**\r\n\r\nFinds the class path and export name of the SuperStruct of this asset, if it exists.\r\n\r\n```csharp\r\npublic void GetParentClass(FName& parentClassPath, FName& parentClassExportName)\r\n```\r\n\r\n#### Parameters\r\n\r\n`parentClassPath` [FName&](./uassetapi.unrealtypes.fname&.md)<br>\r\nThe class path of the SuperStruct of this asset, if it exists.\r\n\r\n`parentClassExportName` [FName&](./uassetapi.unrealtypes.fname&.md)<br>\r\nThe export name of the SuperStruct of this asset, if it exists.\r\n\r\n### **GetParentClassExportName(FName&)**\r\n\r\n```csharp\r\ninternal FName GetParentClassExportName(FName& modulePath)\r\n```\r\n\r\n#### Parameters\r\n\r\n`modulePath` [FName&](./uassetapi.unrealtypes.fname&.md)<br>\r\n\r\n#### Returns\r\n\r\n[FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **AddImport(Import)**\r\n\r\nAdds a new import to the import map. This is equivalent to adding directly to the [UAsset.Imports](./uassetapi.uasset.md#imports) list.\r\n\r\n```csharp\r\npublic FPackageIndex AddImport(Import li)\r\n```\r\n\r\n#### Parameters\r\n\r\n`li` [Import](./uassetapi.import.md)<br>\r\nThe new import to add to the import map.\r\n\r\n#### Returns\r\n\r\n[FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\nThe FPackageIndex corresponding to the newly-added import.\r\n\r\n### **SearchForImport(FName, FName, FPackageIndex, FName)**\r\n\r\nSearches for an import in the import map based off of certain parameters.\r\n\r\n```csharp\r\npublic int SearchForImport(FName classPackage, FName className, FPackageIndex outerIndex, FName objectName)\r\n```\r\n\r\n#### Parameters\r\n\r\n`classPackage` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\nThe ClassPackage that the requested import will have.\r\n\r\n`className` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\nThe ClassName that the requested import will have.\r\n\r\n`outerIndex` [FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\nThe CuterIndex that the requested import will have.\r\n\r\n`objectName` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\nThe ObjectName that the requested import will have.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe index of the requested import in the name map, or zero if one could not be found.\r\n\r\n### **SearchForImport(FName, FName, FName)**\r\n\r\nSearches for an import in the import map based off of certain parameters.\r\n\r\n```csharp\r\npublic int SearchForImport(FName classPackage, FName className, FName objectName)\r\n```\r\n\r\n#### Parameters\r\n\r\n`classPackage` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\nThe ClassPackage that the requested import will have.\r\n\r\n`className` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\nThe ClassName that the requested import will have.\r\n\r\n`objectName` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\nThe ObjectName that the requested import will have.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe index of the requested import in the name map, or zero if one could not be found.\r\n\r\n### **SearchForImport(FName)**\r\n\r\nSearches for an import in the import map based off of certain parameters.\r\n\r\n```csharp\r\npublic int SearchForImport(FName objectName)\r\n```\r\n\r\n#### Parameters\r\n\r\n`objectName` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\nThe ObjectName that the requested import will have.\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe index of the requested import in the name map, or zero if one could not be found.\r\n\r\n### **PullSchemasFromAnotherAsset(FName)**\r\n\r\n```csharp\r\npublic bool PullSchemasFromAnotherAsset(FName path)\r\n```\r\n\r\n#### Parameters\r\n\r\n`path` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **CopySplitUp(Stream, Stream, Int32, Int32)**\r\n\r\nCopies a portion of a stream to another stream.\r\n\r\n```csharp\r\ninternal static void CopySplitUp(Stream input, Stream output, int start, int leng)\r\n```\r\n\r\n#### Parameters\r\n\r\n`input` [Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\nThe input stream.\r\n\r\n`output` [Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\nThe output stream.\r\n\r\n`start` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe offset in the input stream to start copying from.\r\n\r\n`leng` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe length in bytes of the data to be copied.\r\n\r\n### **Read(AssetBinaryReader, Int32[], Int32[])**\r\n\r\nReads an asset into memory.\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, Int32[] manualSkips, Int32[] forceReads)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\nThe input reader.\r\n\r\n`manualSkips` [Int32[]](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nAn array of export indices to skip parsing. For most applications, this should be left blank.\r\n\r\n`forceReads` [Int32[]](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nAn array of export indices that must be read, overriding entries in the manualSkips parameter. For most applications, this should be left blank.\r\n\r\n#### Exceptions\r\n\r\n[UnknownEngineVersionException](./uassetapi.unknownengineversionexception.md)<br>\r\nThrown when this is an unversioned asset and [UAsset.ObjectVersion](./uassetapi.uasset.md#objectversion) is unspecified.\r\n\r\n[FormatException](https://docs.microsoft.com/en-us/dotnet/api/system.formatexception)<br>\r\nThrow when the asset cannot be parsed correctly.\r\n\r\n### **WriteData()**\r\n\r\nSerializes an asset from memory.\r\n\r\n```csharp\r\npublic MemoryStream WriteData()\r\n```\r\n\r\n#### Returns\r\n\r\n[MemoryStream](https://docs.microsoft.com/en-us/dotnet/api/system.io.memorystream)<br>\r\nA new MemoryStream containing the full binary data of the serialized asset.\r\n\r\n### **Write(MemoryStream&, MemoryStream&)**\r\n\r\nSerializes and writes an asset to two split streams (.uasset and .uexp) from memory.\r\n\r\n```csharp\r\npublic void Write(MemoryStream& uassetStream, MemoryStream& uexpStream)\r\n```\r\n\r\n#### Parameters\r\n\r\n`uassetStream` [MemoryStream&](https://docs.microsoft.com/en-us/dotnet/api/system.io.memorystream&)<br>\r\nA stream containing the contents of the .uasset file.\r\n\r\n`uexpStream` [MemoryStream&](https://docs.microsoft.com/en-us/dotnet/api/system.io.memorystream&)<br>\r\nA stream containing the contents of the .uexp file, if needed, otherwise null.\r\n\r\n#### Exceptions\r\n\r\n[UnknownEngineVersionException](./uassetapi.unknownengineversionexception.md)<br>\r\nThrown when [UAsset.ObjectVersion](./uassetapi.uasset.md#objectversion) is unspecified.\r\n\r\n### **Write(String)**\r\n\r\nSerializes and writes an asset to disk from memory.\r\n\r\n```csharp\r\npublic void Write(string outputPath)\r\n```\r\n\r\n#### Parameters\r\n\r\n`outputPath` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe path on disk to write the asset to.\r\n\r\n#### Exceptions\r\n\r\n[UnknownEngineVersionException](./uassetapi.unknownengineversionexception.md)<br>\r\nThrown when [UAsset.ObjectVersion](./uassetapi.uasset.md#objectversion) is unspecified.\r\n\r\n### **SerializeJson(Boolean)**\r\n\r\nSerializes this asset as JSON.\r\n\r\n```csharp\r\npublic string SerializeJson(bool isFormatted)\r\n```\r\n\r\n#### Parameters\r\n\r\n`isFormatted` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nWhether or not the returned JSON string should be indented.\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nA serialized JSON string that represents the asset.\r\n\r\n### **SerializeJson(Formatting)**\r\n\r\nSerializes this asset as JSON.\r\n\r\n```csharp\r\npublic string SerializeJson(Formatting jsonFormatting)\r\n```\r\n\r\n#### Parameters\r\n\r\n`jsonFormatting` Formatting<br>\r\nThe formatting to use for the returned JSON string.\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nA serialized JSON string that represents the asset.\r\n\r\n### **SerializeJsonObject(Object, Boolean)**\r\n\r\nSerializes an object as JSON.\r\n\r\n```csharp\r\npublic string SerializeJsonObject(object value, bool isFormatted)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\nThe object to serialize as JSON.\r\n\r\n`isFormatted` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nWhether or not the returned JSON string should be indented.\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nA serialized JSON string that represents the object.\r\n\r\n### **SerializeJsonObject(Object, Formatting)**\r\n\r\nSerializes an object as JSON.\r\n\r\n```csharp\r\npublic string SerializeJsonObject(object value, Formatting jsonFormatting)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\nThe object to serialize as JSON.\r\n\r\n`jsonFormatting` Formatting<br>\r\nThe formatting to use for the returned JSON string.\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nA serialized JSON string that represents the object.\r\n\r\n### **DeserializeJsonObject&lt;T&gt;(String)**\r\n\r\nDeserializes an object from JSON.\r\n\r\n```csharp\r\npublic T DeserializeJsonObject<T>(string json)\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\n#### Parameters\r\n\r\n`json` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nA serialized JSON string to parse.\r\n\r\n#### Returns\r\n\r\nT<br>\r\n\r\n### **DeserializeJson(String)**\r\n\r\nReads an asset from serialized JSON and initializes a new instance of the [UAsset](./uassetapi.uasset.md) class to store its data in memory.\r\n\r\n```csharp\r\npublic static UAsset DeserializeJson(string json)\r\n```\r\n\r\n#### Parameters\r\n\r\n`json` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nA serialized JSON string to parse.\r\n\r\n#### Returns\r\n\r\n[UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **DeserializeJson(Stream)**\r\n\r\nReads an asset from serialized JSON and initializes a new instance of the [UAsset](./uassetapi.uasset.md) class to store its data in memory.\r\n\r\n```csharp\r\npublic static UAsset DeserializeJson(Stream stream)\r\n```\r\n\r\n#### Parameters\r\n\r\n`stream` [Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\nA stream containing serialized JSON string to parse.\r\n\r\n#### Returns\r\n\r\n[UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unknownengineversionexception.md",
    "content": "# UnknownEngineVersionException\r\n\r\nNamespace: UAssetAPI\r\n\r\n```csharp\r\npublic class UnknownEngineVersionException : System.InvalidOperationException, System.Runtime.Serialization.ISerializable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Exception](https://docs.microsoft.com/en-us/dotnet/api/system.exception) → [SystemException](https://docs.microsoft.com/en-us/dotnet/api/system.systemexception) → [InvalidOperationException](https://docs.microsoft.com/en-us/dotnet/api/system.invalidoperationexception) → [UnknownEngineVersionException](./uassetapi.unknownengineversionexception.md)<br>\r\nImplements [ISerializable](https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.iserializable)\r\n\r\n## Properties\r\n\r\n### **TargetSite**\r\n\r\n```csharp\r\npublic MethodBase TargetSite { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[MethodBase](https://docs.microsoft.com/en-us/dotnet/api/system.reflection.methodbase)<br>\r\n\r\n### **Message**\r\n\r\n```csharp\r\npublic string Message { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **Data**\r\n\r\n```csharp\r\npublic IDictionary Data { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[IDictionary](https://docs.microsoft.com/en-us/dotnet/api/system.collections.idictionary)<br>\r\n\r\n### **InnerException**\r\n\r\n```csharp\r\npublic Exception InnerException { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Exception](https://docs.microsoft.com/en-us/dotnet/api/system.exception)<br>\r\n\r\n### **HelpLink**\r\n\r\n```csharp\r\npublic string HelpLink { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **Source**\r\n\r\n```csharp\r\npublic string Source { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **HResult**\r\n\r\n```csharp\r\npublic int HResult { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **StackTrace**\r\n\r\n```csharp\r\npublic string StackTrace { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n## Constructors\r\n\r\n### **UnknownEngineVersionException(String)**\r\n\r\n```csharp\r\npublic UnknownEngineVersionException(string message)\r\n```\r\n\r\n#### Parameters\r\n\r\n`message` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealbinaryreader.md",
    "content": "# UnrealBinaryReader\r\n\r\nNamespace: UAssetAPI\r\n\r\nAny binary reader used in the parsing of Unreal file types.\r\n\r\n```csharp\r\npublic class UnrealBinaryReader : System.IO.BinaryReader, System.IDisposable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [BinaryReader](https://docs.microsoft.com/en-us/dotnet/api/system.io.binaryreader) → [UnrealBinaryReader](./uassetapi.unrealbinaryreader.md)<br>\r\nImplements [IDisposable](https://docs.microsoft.com/en-us/dotnet/api/system.idisposable)\r\n\r\n## Properties\r\n\r\n### **BaseStream**\r\n\r\n```csharp\r\npublic Stream BaseStream { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n## Constructors\r\n\r\n### **UnrealBinaryReader(Stream)**\r\n\r\n```csharp\r\npublic UnrealBinaryReader(Stream stream)\r\n```\r\n\r\n#### Parameters\r\n\r\n`stream` [Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n## Methods\r\n\r\n### **ReverseIfBigEndian(Byte[])**\r\n\r\n```csharp\r\nprotected Byte[] ReverseIfBigEndian(Byte[] data)\r\n```\r\n\r\n#### Parameters\r\n\r\n`data` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n#### Returns\r\n\r\n[Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **ReadInt16()**\r\n\r\n```csharp\r\npublic short ReadInt16()\r\n```\r\n\r\n#### Returns\r\n\r\n[Int16](https://docs.microsoft.com/en-us/dotnet/api/system.int16)<br>\r\n\r\n### **ReadUInt16()**\r\n\r\n```csharp\r\npublic ushort ReadUInt16()\r\n```\r\n\r\n#### Returns\r\n\r\n[UInt16](https://docs.microsoft.com/en-us/dotnet/api/system.uint16)<br>\r\n\r\n### **ReadInt32()**\r\n\r\n```csharp\r\npublic int ReadInt32()\r\n```\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ReadUInt32()**\r\n\r\n```csharp\r\npublic uint ReadUInt32()\r\n```\r\n\r\n#### Returns\r\n\r\n[UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n### **ReadInt64()**\r\n\r\n```csharp\r\npublic long ReadInt64()\r\n```\r\n\r\n#### Returns\r\n\r\n[Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n### **ReadUInt64()**\r\n\r\n```csharp\r\npublic ulong ReadUInt64()\r\n```\r\n\r\n#### Returns\r\n\r\n[UInt64](https://docs.microsoft.com/en-us/dotnet/api/system.uint64)<br>\r\n\r\n### **ReadSingle()**\r\n\r\n```csharp\r\npublic float ReadSingle()\r\n```\r\n\r\n#### Returns\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **ReadDouble()**\r\n\r\n```csharp\r\npublic double ReadDouble()\r\n```\r\n\r\n#### Returns\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **ReadBooleanInt()**\r\n\r\n```csharp\r\npublic bool ReadBooleanInt()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **ReadString()**\r\n\r\n```csharp\r\npublic string ReadString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **ReadFString()**\r\n\r\n```csharp\r\npublic FString ReadFString()\r\n```\r\n\r\n#### Returns\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **ReadUtf8String()**\r\n\r\n```csharp\r\npublic FString ReadUtf8String()\r\n```\r\n\r\n#### Returns\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **ReadNameMapString(UInt32&)**\r\n\r\n```csharp\r\npublic FString ReadNameMapString(UInt32& hashes)\r\n```\r\n\r\n#### Parameters\r\n\r\n`hashes` [UInt32&](https://docs.microsoft.com/en-us/dotnet/api/system.uint32&)<br>\r\n\r\n#### Returns\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **ReadCustomVersionContainer(ECustomVersionSerializationFormat, List&lt;CustomVersion&gt;, Usmap)**\r\n\r\n```csharp\r\npublic List<CustomVersion> ReadCustomVersionContainer(ECustomVersionSerializationFormat format, List<CustomVersion> oldCustomVersionContainer, Usmap Mappings)\r\n```\r\n\r\n#### Parameters\r\n\r\n`format` [ECustomVersionSerializationFormat](./uassetapi.unversioned.ecustomversionserializationformat.md)<br>\r\n\r\n`oldCustomVersionContainer` [List&lt;CustomVersion&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n`Mappings` [Usmap](./uassetapi.unversioned.usmap.md)<br>\r\n\r\n#### Returns\r\n\r\n[List&lt;CustomVersion&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealbinarywriter.md",
    "content": "# UnrealBinaryWriter\r\n\r\nNamespace: UAssetAPI\r\n\r\nAny binary writer used in the parsing of Unreal file types.\r\n\r\n```csharp\r\npublic class UnrealBinaryWriter : System.IO.BinaryWriter, System.IDisposable, System.IAsyncDisposable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [BinaryWriter](https://docs.microsoft.com/en-us/dotnet/api/system.io.binarywriter) → [UnrealBinaryWriter](./uassetapi.unrealbinarywriter.md)<br>\r\nImplements [IDisposable](https://docs.microsoft.com/en-us/dotnet/api/system.idisposable), [IAsyncDisposable](https://docs.microsoft.com/en-us/dotnet/api/system.iasyncdisposable)\r\n\r\n## Properties\r\n\r\n### **BaseStream**\r\n\r\n```csharp\r\npublic Stream BaseStream { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n## Constructors\r\n\r\n### **UnrealBinaryWriter()**\r\n\r\n```csharp\r\npublic UnrealBinaryWriter()\r\n```\r\n\r\n### **UnrealBinaryWriter(Stream)**\r\n\r\n```csharp\r\npublic UnrealBinaryWriter(Stream stream)\r\n```\r\n\r\n#### Parameters\r\n\r\n`stream` [Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n### **UnrealBinaryWriter(Stream, Encoding)**\r\n\r\n```csharp\r\npublic UnrealBinaryWriter(Stream stream, Encoding encoding)\r\n```\r\n\r\n#### Parameters\r\n\r\n`stream` [Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n`encoding` [Encoding](https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding)<br>\r\n\r\n### **UnrealBinaryWriter(Stream, Encoding, Boolean)**\r\n\r\n```csharp\r\npublic UnrealBinaryWriter(Stream stream, Encoding encoding, bool leaveOpen)\r\n```\r\n\r\n#### Parameters\r\n\r\n`stream` [Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n`encoding` [Encoding](https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding)<br>\r\n\r\n`leaveOpen` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Methods\r\n\r\n### **ReverseIfBigEndian(Byte[])**\r\n\r\n```csharp\r\nprotected Byte[] ReverseIfBigEndian(Byte[] data)\r\n```\r\n\r\n#### Parameters\r\n\r\n`data` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n#### Returns\r\n\r\n[Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **Write(Int16)**\r\n\r\n```csharp\r\npublic void Write(short value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [Int16](https://docs.microsoft.com/en-us/dotnet/api/system.int16)<br>\r\n\r\n### **Write(UInt16)**\r\n\r\n```csharp\r\npublic void Write(ushort value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [UInt16](https://docs.microsoft.com/en-us/dotnet/api/system.uint16)<br>\r\n\r\n### **Write(Int32)**\r\n\r\n```csharp\r\npublic void Write(int value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Write(UInt32)**\r\n\r\n```csharp\r\npublic void Write(uint value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n### **Write(Int64)**\r\n\r\n```csharp\r\npublic void Write(long value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n### **Write(UInt64)**\r\n\r\n```csharp\r\npublic void Write(ulong value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [UInt64](https://docs.microsoft.com/en-us/dotnet/api/system.uint64)<br>\r\n\r\n### **Write(Single)**\r\n\r\n```csharp\r\npublic void Write(float value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **Write(Double)**\r\n\r\n```csharp\r\npublic void Write(double value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **Write(String)**\r\n\r\n```csharp\r\npublic void Write(string value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **Write(FString)**\r\n\r\n```csharp\r\npublic int Write(FString value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **WriteUtf8String(FString)**\r\n\r\n```csharp\r\npublic int WriteUtf8String(FString value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **WriteCustomVersionContainer(ECustomVersionSerializationFormat, List&lt;CustomVersion&gt;)**\r\n\r\n```csharp\r\npublic void WriteCustomVersionContainer(ECustomVersionSerializationFormat format, List<CustomVersion> CustomVersionContainer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`format` [ECustomVersionSerializationFormat](./uassetapi.unversioned.ecustomversionserializationformat.md)<br>\r\n\r\n`CustomVersionContainer` [List&lt;CustomVersion&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.comparer2-1.md",
    "content": "# Comparer2&lt;T&gt;\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic class Comparer2<T> : , System.Collections.IComparer, \r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → Comparer&lt;T&gt; → [Comparer2&lt;T&gt;](./uassetapi.unrealtypes.comparer2-1.md)<br>\r\nImplements [IComparer](https://docs.microsoft.com/en-us/dotnet/api/system.collections.icomparer), IComparer&lt;T&gt;\r\n\r\n## Constructors\r\n\r\n### **Comparer2(Comparison&lt;T&gt;)**\r\n\r\n```csharp\r\npublic Comparer2(Comparison<T> comparison)\r\n```\r\n\r\n#### Parameters\r\n\r\n`comparison` Comparison&lt;T&gt;<br>\r\n\r\n## Methods\r\n\r\n### **Compare(T, T)**\r\n\r\n```csharp\r\npublic int Compare(T arg1, T arg2)\r\n```\r\n\r\n#### Parameters\r\n\r\n`arg1` T<br>\r\n\r\n`arg2` T<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.dictionaryenumerator-2.md",
    "content": "# DictionaryEnumerator&lt;TKey, TValue&gt;\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic class DictionaryEnumerator<TKey, TValue> : System.Collections.IDictionaryEnumerator, System.Collections.IEnumerator, System.IDisposable\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`TKey`<br>\r\n\r\n`TValue`<br>\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [DictionaryEnumerator&lt;TKey, TValue&gt;](./uassetapi.unrealtypes.dictionaryenumerator-2.md)<br>\r\nImplements [IDictionaryEnumerator](https://docs.microsoft.com/en-us/dotnet/api/system.collections.idictionaryenumerator), [IEnumerator](https://docs.microsoft.com/en-us/dotnet/api/system.collections.ienumerator), [IDisposable](https://docs.microsoft.com/en-us/dotnet/api/system.idisposable)\r\n\r\n## Properties\r\n\r\n### **Entry**\r\n\r\n```csharp\r\npublic DictionaryEntry Entry { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[DictionaryEntry](https://docs.microsoft.com/en-us/dotnet/api/system.collections.dictionaryentry)<br>\r\n\r\n### **Key**\r\n\r\n```csharp\r\npublic object Key { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **Value**\r\n\r\n```csharp\r\npublic object Value { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **Current**\r\n\r\n```csharp\r\npublic object Current { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **DictionaryEnumerator(IDictionary&lt;TKey, TValue&gt;)**\r\n\r\n```csharp\r\npublic DictionaryEnumerator(IDictionary<TKey, TValue> value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` IDictionary&lt;TKey, TValue&gt;<br>\r\n\r\n## Methods\r\n\r\n### **Dispose()**\r\n\r\n```csharp\r\npublic void Dispose()\r\n```\r\n\r\n### **Reset()**\r\n\r\n```csharp\r\npublic void Reset()\r\n```\r\n\r\n### **MoveNext()**\r\n\r\n```csharp\r\npublic bool MoveNext()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.eaxis.md",
    "content": "# EAxis\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic enum EAxis\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAxis](./uassetapi.unrealtypes.eaxis.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.eclassflags.md",
    "content": "# EClassFlags\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nFlags describing a class.\r\n\r\n```csharp\r\npublic enum EClassFlags\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EClassFlags](./uassetapi.unrealtypes.eclassflags.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| CLASS_None | 0 | No Flags |\r\n| CLASS_Abstract | 1 | Class is abstract and can't be instantiated directly. |\r\n| CLASS_DefaultConfig | 2 | Save object configuration only to Default INIs, never to local INIs. Must be combined with CLASS_Config |\r\n| CLASS_Config | 4 | Load object configuration at construction time. |\r\n| CLASS_Transient | 8 | This object type can't be saved; null it out at save time. |\r\n| CLASS_Parsed | 16 | Successfully parsed. |\r\n| CLASS_MatchedSerializers | 32 | ??? |\r\n| CLASS_ProjectUserConfig | 64 | Indicates that the config settings for this class will be saved to Project/User*.ini (similar to CLASS_GlobalUserConfig) |\r\n| CLASS_Native | 128 | Class is a native class - native interfaces will have CLASS_Native set, but not RF_MarkAsNative |\r\n| CLASS_NoExport | 256 | Don't export to C++ header. |\r\n| CLASS_NotPlaceable | 512 | Do not allow users to create in the editor. |\r\n| CLASS_PerObjectConfig | 1024 | Handle object configuration on a per-object basis, rather than per-class. |\r\n| CLASS_ReplicationDataIsSetUp | 2048 | Whether SetUpRuntimeReplicationData still needs to be called for this class |\r\n| CLASS_EditInlineNew | 4096 | Class can be constructed from editinline New button. |\r\n| CLASS_CollapseCategories | 8192 | Display properties in the editor without using categories. |\r\n| CLASS_Interface | 16384 | Class is an interface |\r\n| CLASS_CustomConstructor | 32768 | Do not export a constructor for this class, assuming it is in the cpptext |\r\n| CLASS_Const | 65536 | All properties and functions in this class are const and should be exported as const |\r\n| CLASS_LayoutChanging | 131072 | Class flag indicating the class is having its layout changed, and therefore is not ready for a CDO to be created |\r\n| CLASS_CompiledFromBlueprint | 262144 | Indicates that the class was created from blueprint source material |\r\n| CLASS_MinimalAPI | 524288 | Indicates that only the bare minimum bits of this class should be DLL exported/imported |\r\n| CLASS_RequiredAPI | 1048576 | Indicates this class must be DLL exported/imported (along with all of it's members) |\r\n| CLASS_DefaultToInstanced | 2097152 | Indicates that references to this class default to instanced. Used to be subclasses of UComponent, but now can be any UObject |\r\n| CLASS_TokenStreamAssembled | 4194304 | Indicates that the parent token stream has been merged with ours. |\r\n| CLASS_HasInstancedReference | 8388608 | Class has component properties. |\r\n| CLASS_Hidden | 16777216 | Don't show this class in the editor class browser or edit inline new menus. |\r\n| CLASS_Deprecated | 33554432 | Don't save objects of this class when serializing |\r\n| CLASS_HideDropDown | 67108864 | Class not shown in editor drop down for class selection |\r\n| CLASS_GlobalUserConfig | 134217728 | Class settings are saved to AppData/..../Blah.ini (as opposed to CLASS_DefaultConfig) |\r\n| CLASS_Intrinsic | 268435456 | Class was declared directly in C++ and has no boilerplate generated by UnrealHeaderTool |\r\n| CLASS_Constructed | 536870912 | Class has already been constructed (maybe in a previous DLL version before hot-reload). |\r\n| CLASS_ConfigDoNotCheckDefaults | 1073741824 | Indicates that object configuration will not check against ini base/defaults when serialized |\r\n| CLASS_NewerVersionExists | 2147483648 | Class has been consigned to oblivion as part of a blueprint recompile, and a newer version currently exists. |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.efonthinting.md",
    "content": "# EFontHinting\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic enum EFontHinting\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EFontHinting](./uassetapi.unrealtypes.efonthinting.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.efontloadingpolicy.md",
    "content": "# EFontLoadingPolicy\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic enum EFontLoadingPolicy\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EFontLoadingPolicy](./uassetapi.unrealtypes.efontloadingpolicy.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.efunctionflags.md",
    "content": "# EFunctionFlags\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nFlags describing a function.\r\n\r\n```csharp\r\npublic enum EFunctionFlags\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EFunctionFlags](./uassetapi.unrealtypes.efunctionflags.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.einterpcurvemode.md",
    "content": "# EInterpCurveMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic enum EInterpCurveMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EInterpCurveMode](./uassetapi.unrealtypes.einterpcurvemode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.emappednametype.md",
    "content": "# EMappedNameType\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic enum EMappedNameType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMappedNameType](./uassetapi.unrealtypes.emappednametype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.animationcompressionformat.md",
    "content": "# AnimationCompressionFormat\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum AnimationCompressionFormat\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [AnimationCompressionFormat](./uassetapi.unrealtypes.engineenums.animationcompressionformat.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.animationkeyformat.md",
    "content": "# AnimationKeyFormat\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum AnimationKeyFormat\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [AnimationKeyFormat](./uassetapi.unrealtypes.engineenums.animationkeyformat.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.animphyscollisiontype.md",
    "content": "# AnimPhysCollisionType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum AnimPhysCollisionType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [AnimPhysCollisionType](./uassetapi.unrealtypes.engineenums.animphyscollisiontype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.animphystwistaxis.md",
    "content": "# AnimPhysTwistAxis\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum AnimPhysTwistAxis\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [AnimPhysTwistAxis](./uassetapi.unrealtypes.engineenums.animphystwistaxis.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.beam2sourcetargetmethod.md",
    "content": "# Beam2SourceTargetMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum Beam2SourceTargetMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [Beam2SourceTargetMethod](./uassetapi.unrealtypes.engineenums.beam2sourcetargetmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.beam2sourcetargettangentmethod.md",
    "content": "# Beam2SourceTargetTangentMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum Beam2SourceTargetTangentMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [Beam2SourceTargetTangentMethod](./uassetapi.unrealtypes.engineenums.beam2sourcetargettangentmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.beammodifiertype.md",
    "content": "# BeamModifierType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum BeamModifierType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [BeamModifierType](./uassetapi.unrealtypes.engineenums.beammodifiertype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.cylinderheightaxis.md",
    "content": "# CylinderHeightAxis\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum CylinderHeightAxis\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [CylinderHeightAxis](./uassetapi.unrealtypes.engineenums.cylinderheightaxis.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.distributionparammode.md",
    "content": "# DistributionParamMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum DistributionParamMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [DistributionParamMode](./uassetapi.unrealtypes.engineenums.distributionparammode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eactorupdateoverlapsmethod.md",
    "content": "# EActorUpdateOverlapsMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EActorUpdateOverlapsMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EActorUpdateOverlapsMethod](./uassetapi.unrealtypes.engineenums.eactorupdateoverlapsmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eadditiveanimationtype.md",
    "content": "# EAdditiveAnimationType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAdditiveAnimationType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAdditiveAnimationType](./uassetapi.unrealtypes.engineenums.eadditiveanimationtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eadditivebaseposetype.md",
    "content": "# EAdditiveBasePoseType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAdditiveBasePoseType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAdditiveBasePoseType](./uassetapi.unrealtypes.engineenums.eadditivebaseposetype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eadmanagerdelegate.md",
    "content": "# EAdManagerDelegate\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAdManagerDelegate\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAdManagerDelegate](./uassetapi.unrealtypes.engineenums.eadmanagerdelegate.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eairabsorptionmethod.md",
    "content": "# EAirAbsorptionMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAirAbsorptionMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAirAbsorptionMethod](./uassetapi.unrealtypes.engineenums.eairabsorptionmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ealphablendoption.md",
    "content": "# EAlphaBlendOption\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAlphaBlendOption\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAlphaBlendOption](./uassetapi.unrealtypes.engineenums.ealphablendoption.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ealphachannelmode.md",
    "content": "# EAlphaChannelMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAlphaChannelMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAlphaChannelMode](./uassetapi.unrealtypes.engineenums.ealphachannelmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eangularconstraintmotion.md",
    "content": "# EAngularConstraintMotion\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAngularConstraintMotion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAngularConstraintMotion](./uassetapi.unrealtypes.engineenums.eangularconstraintmotion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eangulardrivemode.md",
    "content": "# EAngularDriveMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAngularDriveMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAngularDriveMode](./uassetapi.unrealtypes.engineenums.eangulardrivemode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eanimalphainputtype.md",
    "content": "# EAnimAlphaInputType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAnimAlphaInputType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAnimAlphaInputType](./uassetapi.unrealtypes.engineenums.eanimalphainputtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eanimassetcurveflags.md",
    "content": "# EAnimAssetCurveFlags\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAnimAssetCurveFlags\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAnimAssetCurveFlags](./uassetapi.unrealtypes.engineenums.eanimassetcurveflags.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eanimationmode.md",
    "content": "# EAnimationMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAnimationMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAnimationMode](./uassetapi.unrealtypes.engineenums.eanimationmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eanimcurvetype.md",
    "content": "# EAnimCurveType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAnimCurveType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAnimCurveType](./uassetapi.unrealtypes.engineenums.eanimcurvetype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eanimgrouprole.md",
    "content": "# EAnimGroupRole\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAnimGroupRole\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAnimGroupRole](./uassetapi.unrealtypes.engineenums.eanimgrouprole.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eaniminterpolationtype.md",
    "content": "# EAnimInterpolationType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAnimInterpolationType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAnimInterpolationType](./uassetapi.unrealtypes.engineenums.eaniminterpolationtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eanimlinkmethod.md",
    "content": "# EAnimLinkMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAnimLinkMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAnimLinkMethod](./uassetapi.unrealtypes.engineenums.eanimlinkmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eanimnotifyeventtype.md",
    "content": "# EAnimNotifyEventType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAnimNotifyEventType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAnimNotifyEventType](./uassetapi.unrealtypes.engineenums.eanimnotifyeventtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eantialiasingmethod.md",
    "content": "# EAntiAliasingMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAntiAliasingMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAntiAliasingMethod](./uassetapi.unrealtypes.engineenums.eantialiasingmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eapplicationstate.md",
    "content": "# EApplicationState\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EApplicationState\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EApplicationState](./uassetapi.unrealtypes.engineenums.eapplicationstate.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.easpectratioaxisconstraint.md",
    "content": "# EAspectRatioAxisConstraint\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAspectRatioAxisConstraint\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAspectRatioAxisConstraint](./uassetapi.unrealtypes.engineenums.easpectratioaxisconstraint.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eattachlocation.md",
    "content": "# EAttachLocation\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAttachLocation\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAttachLocation](./uassetapi.unrealtypes.engineenums.eattachlocation.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eattachmentrule.md",
    "content": "# EAttachmentRule\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAttachmentRule\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAttachmentRule](./uassetapi.unrealtypes.engineenums.eattachmentrule.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eattenuationdistancemodel.md",
    "content": "# EAttenuationDistanceModel\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAttenuationDistanceModel\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAttenuationDistanceModel](./uassetapi.unrealtypes.engineenums.eattenuationdistancemodel.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eattenuationshape.md",
    "content": "# EAttenuationShape\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAttenuationShape\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAttenuationShape](./uassetapi.unrealtypes.engineenums.eattenuationshape.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eattractorparticleselectionmethod.md",
    "content": "# EAttractorParticleSelectionMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAttractorParticleSelectionMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAttractorParticleSelectionMethod](./uassetapi.unrealtypes.engineenums.eattractorparticleselectionmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eaudiocomponentplaystate.md",
    "content": "# EAudioComponentPlayState\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAudioComponentPlayState\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAudioComponentPlayState](./uassetapi.unrealtypes.engineenums.eaudiocomponentplaystate.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eaudiofadercurve.md",
    "content": "# EAudioFaderCurve\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAudioFaderCurve\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAudioFaderCurve](./uassetapi.unrealtypes.engineenums.eaudiofadercurve.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eaudiooutputtarget.md",
    "content": "# EAudioOutputTarget\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAudioOutputTarget\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAudioOutputTarget](./uassetapi.unrealtypes.engineenums.eaudiooutputtarget.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eaudiorecordingexporttype.md",
    "content": "# EAudioRecordingExportType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAudioRecordingExportType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAudioRecordingExportType](./uassetapi.unrealtypes.engineenums.eaudiorecordingexporttype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eautoexposuremethod.md",
    "content": "# EAutoExposureMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAutoExposureMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAutoExposureMethod](./uassetapi.unrealtypes.engineenums.eautoexposuremethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eautoexposuremethodui.md",
    "content": "# EAutoExposureMethodUI\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAutoExposureMethodUI\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAutoExposureMethodUI](./uassetapi.unrealtypes.engineenums.eautoexposuremethodui.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eautopossessai.md",
    "content": "# EAutoPossessAI\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAutoPossessAI\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAutoPossessAI](./uassetapi.unrealtypes.engineenums.eautopossessai.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eautoreceiveinput.md",
    "content": "# EAutoReceiveInput\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAutoReceiveInput\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAutoReceiveInput](./uassetapi.unrealtypes.engineenums.eautoreceiveinput.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eaxisoption.md",
    "content": "# EAxisOption\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EAxisOption\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EAxisOption](./uassetapi.unrealtypes.engineenums.eaxisoption.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ebeam2method.md",
    "content": "# EBeam2Method\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBeam2Method\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBeam2Method](./uassetapi.unrealtypes.engineenums.ebeam2method.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ebeamtapermethod.md",
    "content": "# EBeamTaperMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBeamTaperMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBeamTaperMethod](./uassetapi.unrealtypes.engineenums.ebeamtapermethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eblendablelocation.md",
    "content": "# EBlendableLocation\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBlendableLocation\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBlendableLocation](./uassetapi.unrealtypes.engineenums.eblendablelocation.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eblendmode.md",
    "content": "# EBlendMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBlendMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBlendMode](./uassetapi.unrealtypes.engineenums.eblendmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eblendspaceaxis.md",
    "content": "# EBlendSpaceAxis\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBlendSpaceAxis\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBlendSpaceAxis](./uassetapi.unrealtypes.engineenums.eblendspaceaxis.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ebloommethod.md",
    "content": "# EBloomMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBloomMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBloomMethod](./uassetapi.unrealtypes.engineenums.ebloommethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eblueprintcompilemode.md",
    "content": "# EBlueprintCompileMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBlueprintCompileMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBlueprintCompileMode](./uassetapi.unrealtypes.engineenums.eblueprintcompilemode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eblueprintnativizationflag.md",
    "content": "# EBlueprintNativizationFlag\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBlueprintNativizationFlag\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBlueprintNativizationFlag](./uassetapi.unrealtypes.engineenums.eblueprintnativizationflag.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eblueprintpinstyletype.md",
    "content": "# EBlueprintPinStyleType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBlueprintPinStyleType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBlueprintPinStyleType](./uassetapi.unrealtypes.engineenums.eblueprintpinstyletype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eblueprintstatus.md",
    "content": "# EBlueprintStatus\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBlueprintStatus\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBlueprintStatus](./uassetapi.unrealtypes.engineenums.eblueprintstatus.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eblueprinttype.md",
    "content": "# EBlueprintType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBlueprintType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBlueprintType](./uassetapi.unrealtypes.engineenums.eblueprinttype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ebodycollisionresponse.md",
    "content": "# EBodyCollisionResponse\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBodyCollisionResponse\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBodyCollisionResponse](./uassetapi.unrealtypes.engineenums.ebodycollisionresponse.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eboneaxis.md",
    "content": "# EBoneAxis\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBoneAxis\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBoneAxis](./uassetapi.unrealtypes.engineenums.eboneaxis.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ebonecontrolspace.md",
    "content": "# EBoneControlSpace\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBoneControlSpace\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBoneControlSpace](./uassetapi.unrealtypes.engineenums.ebonecontrolspace.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ebonefilteractionoption.md",
    "content": "# EBoneFilterActionOption\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBoneFilterActionOption\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBoneFilterActionOption](./uassetapi.unrealtypes.engineenums.ebonefilteractionoption.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ebonerotationsource.md",
    "content": "# EBoneRotationSource\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBoneRotationSource\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBoneRotationSource](./uassetapi.unrealtypes.engineenums.ebonerotationsource.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ebonespaces.md",
    "content": "# EBoneSpaces\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBoneSpaces\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBoneSpaces](./uassetapi.unrealtypes.engineenums.ebonespaces.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ebonetranslationretargetingmode.md",
    "content": "# EBoneTranslationRetargetingMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBoneTranslationRetargetingMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBoneTranslationRetargetingMode](./uassetapi.unrealtypes.engineenums.ebonetranslationretargetingmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ebonevisibilitystatus.md",
    "content": "# EBoneVisibilityStatus\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBoneVisibilityStatus\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBoneVisibilityStatus](./uassetapi.unrealtypes.engineenums.ebonevisibilitystatus.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ebrushtype.md",
    "content": "# EBrushType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EBrushType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EBrushType](./uassetapi.unrealtypes.engineenums.ebrushtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecameraalphablendmode.md",
    "content": "# ECameraAlphaBlendMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECameraAlphaBlendMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECameraAlphaBlendMode](./uassetapi.unrealtypes.engineenums.ecameraalphablendmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecameraanimplayspace.md",
    "content": "# ECameraAnimPlaySpace\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECameraAnimPlaySpace\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECameraAnimPlaySpace](./uassetapi.unrealtypes.engineenums.ecameraanimplayspace.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecameraprojectionmode.md",
    "content": "# ECameraProjectionMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECameraProjectionMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECameraProjectionMode](./uassetapi.unrealtypes.engineenums.ecameraprojectionmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecamerashakeattenuation.md",
    "content": "# ECameraShakeAttenuation\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECameraShakeAttenuation\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECameraShakeAttenuation](./uassetapi.unrealtypes.engineenums.ecamerashakeattenuation.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecanbecharacterbase.md",
    "content": "# ECanBeCharacterBase\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECanBeCharacterBase\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECanBeCharacterBase](./uassetapi.unrealtypes.engineenums.ecanbecharacterbase.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecancreateconnectionresponse.md",
    "content": "# ECanCreateConnectionResponse\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECanCreateConnectionResponse\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECanCreateConnectionResponse](./uassetapi.unrealtypes.engineenums.ecancreateconnectionresponse.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.echannelmaskparametercolor.md",
    "content": "# EChannelMaskParameterColor\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EChannelMaskParameterColor\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EChannelMaskParameterColor](./uassetapi.unrealtypes.engineenums.echannelmaskparametercolor.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eclampmode.md",
    "content": "# EClampMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EClampMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EClampMode](./uassetapi.unrealtypes.engineenums.eclampmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eclearsceneoptions.md",
    "content": "# EClearSceneOptions\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EClearSceneOptions\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EClearSceneOptions](./uassetapi.unrealtypes.engineenums.eclearsceneoptions.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eclothmassmode.md",
    "content": "# EClothMassMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EClothMassMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EClothMassMode](./uassetapi.unrealtypes.engineenums.eclothmassmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecloudstoragedelegate.md",
    "content": "# ECloudStorageDelegate\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECloudStorageDelegate\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECloudStorageDelegate](./uassetapi.unrealtypes.engineenums.ecloudstoragedelegate.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecollisionchannel.md",
    "content": "# ECollisionChannel\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECollisionChannel\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECollisionChannel](./uassetapi.unrealtypes.engineenums.ecollisionchannel.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecollisionenabled.md",
    "content": "# ECollisionEnabled\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECollisionEnabled\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECollisionEnabled](./uassetapi.unrealtypes.engineenums.ecollisionenabled.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecollisionresponse.md",
    "content": "# ECollisionResponse\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECollisionResponse\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECollisionResponse](./uassetapi.unrealtypes.engineenums.ecollisionresponse.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecollisiontraceflag.md",
    "content": "# ECollisionTraceFlag\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECollisionTraceFlag\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECollisionTraceFlag](./uassetapi.unrealtypes.engineenums.ecollisiontraceflag.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecomponentcreationmethod.md",
    "content": "# EComponentCreationMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EComponentCreationMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EComponentCreationMethod](./uassetapi.unrealtypes.engineenums.ecomponentcreationmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecomponentmobility.md",
    "content": "# EComponentMobility\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EComponentMobility\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EComponentMobility](./uassetapi.unrealtypes.engineenums.ecomponentmobility.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecomponentsockettype.md",
    "content": "# EComponentSocketType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EComponentSocketType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EComponentSocketType](./uassetapi.unrealtypes.engineenums.ecomponentsockettype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecomponenttype.md",
    "content": "# EComponentType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EComponentType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EComponentType](./uassetapi.unrealtypes.engineenums.ecomponenttype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecompositetexturemode.md",
    "content": "# ECompositeTextureMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECompositeTextureMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECompositeTextureMode](./uassetapi.unrealtypes.engineenums.ecompositetexturemode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecompositingsamplecount.md",
    "content": "# ECompositingSampleCount\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECompositingSampleCount\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECompositingSampleCount](./uassetapi.unrealtypes.engineenums.ecompositingsamplecount.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.econstraintframe.md",
    "content": "# EConstraintFrame\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EConstraintFrame\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EConstraintFrame](./uassetapi.unrealtypes.engineenums.econstraintframe.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.econstrainttransform.md",
    "content": "# EConstraintTransform\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EConstraintTransform\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EConstraintTransform](./uassetapi.unrealtypes.engineenums.econstrainttransform.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.econtrolconstraint.md",
    "content": "# EControlConstraint\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EControlConstraint\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EControlConstraint](./uassetapi.unrealtypes.engineenums.econtrolconstraint.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.econtrolleranalogstick.md",
    "content": "# EControllerAnalogStick\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EControllerAnalogStick\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EControllerAnalogStick](./uassetapi.unrealtypes.engineenums.econtrolleranalogstick.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecopytype.md",
    "content": "# ECopyType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECopyType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECopyType](./uassetapi.unrealtypes.engineenums.ecopytype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecsgoper.md",
    "content": "# ECsgOper\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECsgOper\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECsgOper](./uassetapi.unrealtypes.engineenums.ecsgoper.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecurveblendoption.md",
    "content": "# ECurveBlendOption\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECurveBlendOption\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECurveBlendOption](./uassetapi.unrealtypes.engineenums.ecurveblendoption.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecurvetablemode.md",
    "content": "# ECurveTableMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECurveTableMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECurveTableMode](./uassetapi.unrealtypes.engineenums.ecurvetablemode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecustomdepthstencil.md",
    "content": "# ECustomDepthStencil\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECustomDepthStencil\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECustomDepthStencil](./uassetapi.unrealtypes.engineenums.ecustomdepthstencil.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecustommaterialoutputtype.md",
    "content": "# ECustomMaterialOutputType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECustomMaterialOutputType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECustomMaterialOutputType](./uassetapi.unrealtypes.engineenums.ecustommaterialoutputtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ecustomtimestepsynchronizationstate.md",
    "content": "# ECustomTimeStepSynchronizationState\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ECustomTimeStepSynchronizationState\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECustomTimeStepSynchronizationState](./uassetapi.unrealtypes.engineenums.ecustomtimestepsynchronizationstate.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.edecalblendmode.md",
    "content": "# EDecalBlendMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EDecalBlendMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EDecalBlendMode](./uassetapi.unrealtypes.engineenums.edecalblendmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.edecompressiontype.md",
    "content": "# EDecompressionType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EDecompressionType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EDecompressionType](./uassetapi.unrealtypes.engineenums.edecompressiontype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.edefaultbackbufferpixelformat.md",
    "content": "# EDefaultBackBufferPixelFormat\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EDefaultBackBufferPixelFormat\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EDefaultBackBufferPixelFormat](./uassetapi.unrealtypes.engineenums.edefaultbackbufferpixelformat.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.edemoplayfailure.md",
    "content": "# EDemoPlayFailure\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EDemoPlayFailure\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EDemoPlayFailure](./uassetapi.unrealtypes.engineenums.edemoplayfailure.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.edepthoffieldfunctionvalue.md",
    "content": "# EDepthOfFieldFunctionValue\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EDepthOfFieldFunctionValue\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EDepthOfFieldFunctionValue](./uassetapi.unrealtypes.engineenums.edepthoffieldfunctionvalue.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.edepthoffieldmethod.md",
    "content": "# EDepthOfFieldMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EDepthOfFieldMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EDepthOfFieldMethod](./uassetapi.unrealtypes.engineenums.edepthoffieldmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.edetachmentrule.md",
    "content": "# EDetachmentRule\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EDetachmentRule\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EDetachmentRule](./uassetapi.unrealtypes.engineenums.edetachmentrule.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.edetailmode.md",
    "content": "# EDetailMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EDetailMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EDetailMode](./uassetapi.unrealtypes.engineenums.edetailmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.edistributionvectorlockflags.md",
    "content": "# EDistributionVectorLockFlags\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EDistributionVectorLockFlags\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EDistributionVectorLockFlags](./uassetapi.unrealtypes.engineenums.edistributionvectorlockflags.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.edistributionvectormirrorflags.md",
    "content": "# EDistributionVectorMirrorFlags\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EDistributionVectorMirrorFlags\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EDistributionVectorMirrorFlags](./uassetapi.unrealtypes.engineenums.edistributionvectormirrorflags.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.edofmode.md",
    "content": "# EDOFMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EDOFMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EDOFMode](./uassetapi.unrealtypes.engineenums.edofmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.edrawdebugitemtype.md",
    "content": "# EDrawDebugItemType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EDrawDebugItemType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EDrawDebugItemType](./uassetapi.unrealtypes.engineenums.edrawdebugitemtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.edrawdebugtrace.md",
    "content": "# EDrawDebugTrace\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EDrawDebugTrace\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EDrawDebugTrace](./uassetapi.unrealtypes.engineenums.edrawdebugtrace.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.edynamicforcefeedbackaction.md",
    "content": "# EDynamicForceFeedbackAction\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EDynamicForceFeedbackAction\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EDynamicForceFeedbackAction](./uassetapi.unrealtypes.engineenums.edynamicforcefeedbackaction.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eearlyzpass.md",
    "content": "# EEarlyZPass\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EEarlyZPass\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EEarlyZPass](./uassetapi.unrealtypes.engineenums.eearlyzpass.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eeasingfunc.md",
    "content": "# EEasingFunc\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EEasingFunc\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EEasingFunc](./uassetapi.unrealtypes.engineenums.eeasingfunc.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eedgraphpindirection.md",
    "content": "# EEdGraphPinDirection\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EEdGraphPinDirection\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EEdGraphPinDirection](./uassetapi.unrealtypes.engineenums.eedgraphpindirection.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eemitterdynamicparametervalue.md",
    "content": "# EEmitterDynamicParameterValue\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EEmitterDynamicParameterValue\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EEmitterDynamicParameterValue](./uassetapi.unrealtypes.engineenums.eemitterdynamicparametervalue.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eemitternormalsmode.md",
    "content": "# EEmitterNormalsMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EEmitterNormalsMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EEmitterNormalsMode](./uassetapi.unrealtypes.engineenums.eemitternormalsmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eemitterrendermode.md",
    "content": "# EEmitterRenderMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EEmitterRenderMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EEmitterRenderMode](./uassetapi.unrealtypes.engineenums.eemitterrendermode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eendplayreason.md",
    "content": "# EEndPlayReason\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EEndPlayReason\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EEndPlayReason](./uassetapi.unrealtypes.engineenums.eendplayreason.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eevaluatecurvetableresult.md",
    "content": "# EEvaluateCurveTableResult\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EEvaluateCurveTableResult\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EEvaluateCurveTableResult](./uassetapi.unrealtypes.engineenums.eevaluatecurvetableresult.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eevaluatordatasource.md",
    "content": "# EEvaluatorDataSource\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EEvaluatorDataSource\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EEvaluatorDataSource](./uassetapi.unrealtypes.engineenums.eevaluatordatasource.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eevaluatormode.md",
    "content": "# EEvaluatorMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EEvaluatorMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EEvaluatorMode](./uassetapi.unrealtypes.engineenums.eevaluatormode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.efastarrayserializerdeltaflags.md",
    "content": "# EFastArraySerializerDeltaFlags\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EFastArraySerializerDeltaFlags\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EFastArraySerializerDeltaFlags](./uassetapi.unrealtypes.engineenums.efastarrayserializerdeltaflags.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.efilterinterpolationtype.md",
    "content": "# EFilterInterpolationType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EFilterInterpolationType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EFilterInterpolationType](./uassetapi.unrealtypes.engineenums.efilterinterpolationtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.efontcachetype.md",
    "content": "# EFontCacheType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EFontCacheType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EFontCacheType](./uassetapi.unrealtypes.engineenums.efontcachetype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.efontimportcharacterset.md",
    "content": "# EFontImportCharacterSet\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EFontImportCharacterSet\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EFontImportCharacterSet](./uassetapi.unrealtypes.engineenums.efontimportcharacterset.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eformatargumenttype.md",
    "content": "# EFormatArgumentType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EFormatArgumentType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EFormatArgumentType](./uassetapi.unrealtypes.engineenums.eformatargumenttype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.efrictioncombinemode.md",
    "content": "# EFrictionCombineMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EFrictionCombineMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EFrictionCombineMode](./uassetapi.unrealtypes.engineenums.efrictioncombinemode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.efullyloadpackagetype.md",
    "content": "# EFullyLoadPackageType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EFullyLoadPackageType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EFullyLoadPackageType](./uassetapi.unrealtypes.engineenums.efullyloadpackagetype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.efunctioninputtype.md",
    "content": "# EFunctionInputType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EFunctionInputType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EFunctionInputType](./uassetapi.unrealtypes.engineenums.efunctioninputtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.egbufferformat.md",
    "content": "# EGBufferFormat\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EGBufferFormat\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EGBufferFormat](./uassetapi.unrealtypes.engineenums.egbufferformat.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.egrammaticalgender.md",
    "content": "# EGrammaticalGender\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EGrammaticalGender\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EGrammaticalGender](./uassetapi.unrealtypes.engineenums.egrammaticalgender.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.egrammaticalnumber.md",
    "content": "# EGrammaticalNumber\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EGrammaticalNumber\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EGrammaticalNumber](./uassetapi.unrealtypes.engineenums.egrammaticalnumber.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.egraphaxisstyle.md",
    "content": "# EGraphAxisStyle\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EGraphAxisStyle\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EGraphAxisStyle](./uassetapi.unrealtypes.engineenums.egraphaxisstyle.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.egraphdatastyle.md",
    "content": "# EGraphDataStyle\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EGraphDataStyle\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EGraphDataStyle](./uassetapi.unrealtypes.engineenums.egraphdatastyle.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.egraphtype.md",
    "content": "# EGraphType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EGraphType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EGraphType](./uassetapi.unrealtypes.engineenums.egraphtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ehascustomnavigablegeometry.md",
    "content": "# EHasCustomNavigableGeometry\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EHasCustomNavigableGeometry\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EHasCustomNavigableGeometry](./uassetapi.unrealtypes.engineenums.ehascustomnavigablegeometry.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ehitproxypriority.md",
    "content": "# EHitProxyPriority\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EHitProxyPriority\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EHitProxyPriority](./uassetapi.unrealtypes.engineenums.ehitproxypriority.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ehoriztextaligment.md",
    "content": "# EHorizTextAligment\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EHorizTextAligment\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EHorizTextAligment](./uassetapi.unrealtypes.engineenums.ehoriztextaligment.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eimportancelevel.md",
    "content": "# EImportanceLevel\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EImportanceLevel\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EImportanceLevel](./uassetapi.unrealtypes.engineenums.eimportancelevel.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eimportanceweight.md",
    "content": "# EImportanceWeight\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EImportanceWeight\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EImportanceWeight](./uassetapi.unrealtypes.engineenums.eimportanceweight.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eindirectlightingcachequality.md",
    "content": "# EIndirectLightingCacheQuality\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EIndirectLightingCacheQuality\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EIndirectLightingCacheQuality](./uassetapi.unrealtypes.engineenums.eindirectlightingcachequality.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.einertializationbonestate.md",
    "content": "# EInertializationBoneState\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EInertializationBoneState\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EInertializationBoneState](./uassetapi.unrealtypes.engineenums.einertializationbonestate.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.einertializationspace.md",
    "content": "# EInertializationSpace\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EInertializationSpace\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EInertializationSpace](./uassetapi.unrealtypes.engineenums.einertializationspace.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.einertializationstate.md",
    "content": "# EInertializationState\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EInertializationState\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EInertializationState](./uassetapi.unrealtypes.engineenums.einertializationstate.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.einitialoscillatoroffset.md",
    "content": "# EInitialOscillatorOffset\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EInitialOscillatorOffset\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EInitialOscillatorOffset](./uassetapi.unrealtypes.engineenums.einitialoscillatoroffset.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.einputevent.md",
    "content": "# EInputEvent\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EInputEvent\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EInputEvent](./uassetapi.unrealtypes.engineenums.einputevent.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.einterpmoveaxis.md",
    "content": "# EInterpMoveAxis\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EInterpMoveAxis\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EInterpMoveAxis](./uassetapi.unrealtypes.engineenums.einterpmoveaxis.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.einterptobehaviourtype.md",
    "content": "# EInterpToBehaviourType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EInterpToBehaviourType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EInterpToBehaviourType](./uassetapi.unrealtypes.engineenums.einterptobehaviourtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.einterptrackmoverotmode.md",
    "content": "# EInterpTrackMoveRotMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EInterpTrackMoveRotMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EInterpTrackMoveRotMode](./uassetapi.unrealtypes.engineenums.einterptrackmoverotmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ekinematicbonesupdatetophysics.md",
    "content": "# EKinematicBonesUpdateToPhysics\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EKinematicBonesUpdateToPhysics\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EKinematicBonesUpdateToPhysics](./uassetapi.unrealtypes.engineenums.ekinematicbonesupdatetophysics.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.elandscapecullingprecision.md",
    "content": "# ELandscapeCullingPrecision\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ELandscapeCullingPrecision\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ELandscapeCullingPrecision](./uassetapi.unrealtypes.engineenums.elandscapecullingprecision.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.elegendposition.md",
    "content": "# ELegendPosition\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ELegendPosition\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ELegendPosition](./uassetapi.unrealtypes.engineenums.elegendposition.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.elerpinterpolationmode.md",
    "content": "# ELerpInterpolationMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ELerpInterpolationMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ELerpInterpolationMode](./uassetapi.unrealtypes.engineenums.elerpinterpolationmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.elightingbuildquality.md",
    "content": "# ELightingBuildQuality\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ELightingBuildQuality\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ELightingBuildQuality](./uassetapi.unrealtypes.engineenums.elightingbuildquality.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.elightmappaddingtype.md",
    "content": "# ELightMapPaddingType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ELightMapPaddingType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ELightMapPaddingType](./uassetapi.unrealtypes.engineenums.elightmappaddingtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.elightmaptype.md",
    "content": "# ELightmapType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ELightmapType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ELightmapType](./uassetapi.unrealtypes.engineenums.elightmaptype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.elightunits.md",
    "content": "# ELightUnits\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ELightUnits\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ELightUnits](./uassetapi.unrealtypes.engineenums.elightunits.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.elinearconstraintmotion.md",
    "content": "# ELinearConstraintMotion\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ELinearConstraintMotion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ELinearConstraintMotion](./uassetapi.unrealtypes.engineenums.elinearconstraintmotion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.elocationbonesocketselectionmethod.md",
    "content": "# ELocationBoneSocketSelectionMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ELocationBoneSocketSelectionMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ELocationBoneSocketSelectionMethod](./uassetapi.unrealtypes.engineenums.elocationbonesocketselectionmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.elocationbonesocketsource.md",
    "content": "# ELocationBoneSocketSource\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ELocationBoneSocketSource\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ELocationBoneSocketSource](./uassetapi.unrealtypes.engineenums.elocationbonesocketsource.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.elocationemitterselectionmethod.md",
    "content": "# ELocationEmitterSelectionMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ELocationEmitterSelectionMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ELocationEmitterSelectionMethod](./uassetapi.unrealtypes.engineenums.elocationemitterselectionmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.elocationskelvertsurfacesource.md",
    "content": "# ELocationSkelVertSurfaceSource\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ELocationSkelVertSurfaceSource\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ELocationSkelVertSurfaceSource](./uassetapi.unrealtypes.engineenums.elocationskelvertsurfacesource.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ematerialattributeblend.md",
    "content": "# EMaterialAttributeBlend\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMaterialAttributeBlend\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMaterialAttributeBlend](./uassetapi.unrealtypes.engineenums.ematerialattributeblend.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ematerialdecalresponse.md",
    "content": "# EMaterialDecalResponse\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMaterialDecalResponse\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMaterialDecalResponse](./uassetapi.unrealtypes.engineenums.ematerialdecalresponse.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ematerialdomain.md",
    "content": "# EMaterialDomain\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMaterialDomain\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMaterialDomain](./uassetapi.unrealtypes.engineenums.ematerialdomain.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ematerialexposedtextureproperty.md",
    "content": "# EMaterialExposedTextureProperty\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMaterialExposedTextureProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMaterialExposedTextureProperty](./uassetapi.unrealtypes.engineenums.ematerialexposedtextureproperty.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ematerialexposedviewproperty.md",
    "content": "# EMaterialExposedViewProperty\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMaterialExposedViewProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMaterialExposedViewProperty](./uassetapi.unrealtypes.engineenums.ematerialexposedviewproperty.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ematerialfunctionusage.md",
    "content": "# EMaterialFunctionUsage\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMaterialFunctionUsage\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMaterialFunctionUsage](./uassetapi.unrealtypes.engineenums.ematerialfunctionusage.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ematerialmergetype.md",
    "content": "# EMaterialMergeType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMaterialMergeType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMaterialMergeType](./uassetapi.unrealtypes.engineenums.ematerialmergetype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ematerialparameterassociation.md",
    "content": "# EMaterialParameterAssociation\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMaterialParameterAssociation\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMaterialParameterAssociation](./uassetapi.unrealtypes.engineenums.ematerialparameterassociation.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ematerialpositiontransformsource.md",
    "content": "# EMaterialPositionTransformSource\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMaterialPositionTransformSource\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMaterialPositionTransformSource](./uassetapi.unrealtypes.engineenums.ematerialpositiontransformsource.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ematerialproperty.md",
    "content": "# EMaterialProperty\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMaterialProperty\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMaterialProperty](./uassetapi.unrealtypes.engineenums.ematerialproperty.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ematerialsamplertype.md",
    "content": "# EMaterialSamplerType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMaterialSamplerType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMaterialSamplerType](./uassetapi.unrealtypes.engineenums.ematerialsamplertype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ematerialsceneattributeinputmode.md",
    "content": "# EMaterialSceneAttributeInputMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMaterialSceneAttributeInputMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMaterialSceneAttributeInputMode](./uassetapi.unrealtypes.engineenums.ematerialsceneattributeinputmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ematerialshadingmodel.md",
    "content": "# EMaterialShadingModel\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMaterialShadingModel\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMaterialShadingModel](./uassetapi.unrealtypes.engineenums.ematerialshadingmodel.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ematerialstencilcompare.md",
    "content": "# EMaterialStencilCompare\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMaterialStencilCompare\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMaterialStencilCompare](./uassetapi.unrealtypes.engineenums.ematerialstencilcompare.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ematerialtessellationmode.md",
    "content": "# EMaterialTessellationMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMaterialTessellationMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMaterialTessellationMode](./uassetapi.unrealtypes.engineenums.ematerialtessellationmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ematerialusage.md",
    "content": "# EMaterialUsage\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMaterialUsage\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMaterialUsage](./uassetapi.unrealtypes.engineenums.ematerialusage.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ematerialvectorcoordtransform.md",
    "content": "# EMaterialVectorCoordTransform\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMaterialVectorCoordTransform\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMaterialVectorCoordTransform](./uassetapi.unrealtypes.engineenums.ematerialvectorcoordtransform.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ematerialvectorcoordtransformsource.md",
    "content": "# EMaterialVectorCoordTransformSource\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMaterialVectorCoordTransformSource\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMaterialVectorCoordTransformSource](./uassetapi.unrealtypes.engineenums.ematerialvectorcoordtransformsource.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ematrixcolumns.md",
    "content": "# EMatrixColumns\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMatrixColumns\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMatrixColumns](./uassetapi.unrealtypes.engineenums.ematrixcolumns.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emaxconcurrentresolutionrule.md",
    "content": "# EMaxConcurrentResolutionRule\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMaxConcurrentResolutionRule\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMaxConcurrentResolutionRule](./uassetapi.unrealtypes.engineenums.emaxconcurrentresolutionrule.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emeshbufferaccess.md",
    "content": "# EMeshBufferAccess\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMeshBufferAccess\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMeshBufferAccess](./uassetapi.unrealtypes.engineenums.emeshbufferaccess.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emeshcamerafacingoptions.md",
    "content": "# EMeshCameraFacingOptions\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMeshCameraFacingOptions\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMeshCameraFacingOptions](./uassetapi.unrealtypes.engineenums.emeshcamerafacingoptions.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emeshcamerafacingupaxis.md",
    "content": "# EMeshCameraFacingUpAxis\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMeshCameraFacingUpAxis\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMeshCameraFacingUpAxis](./uassetapi.unrealtypes.engineenums.emeshcamerafacingupaxis.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emeshfeatureimportance.md",
    "content": "# EMeshFeatureImportance\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMeshFeatureImportance\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMeshFeatureImportance](./uassetapi.unrealtypes.engineenums.emeshfeatureimportance.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emeshinstancingreplacementmethod.md",
    "content": "# EMeshInstancingReplacementMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMeshInstancingReplacementMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMeshInstancingReplacementMethod](./uassetapi.unrealtypes.engineenums.emeshinstancingreplacementmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emeshlodselectiontype.md",
    "content": "# EMeshLODSelectionType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMeshLODSelectionType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMeshLODSelectionType](./uassetapi.unrealtypes.engineenums.emeshlodselectiontype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emeshmergetype.md",
    "content": "# EMeshMergeType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMeshMergeType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMeshMergeType](./uassetapi.unrealtypes.engineenums.emeshmergetype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emeshscreenalignment.md",
    "content": "# EMeshScreenAlignment\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMeshScreenAlignment\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMeshScreenAlignment](./uassetapi.unrealtypes.engineenums.emeshscreenalignment.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emicrotransactiondelegate.md",
    "content": "# EMicroTransactionDelegate\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMicroTransactionDelegate\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMicroTransactionDelegate](./uassetapi.unrealtypes.engineenums.emicrotransactiondelegate.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emicrotransactionresult.md",
    "content": "# EMicroTransactionResult\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMicroTransactionResult\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMicroTransactionResult](./uassetapi.unrealtypes.engineenums.emicrotransactionresult.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emobilemsaasamplecount.md",
    "content": "# EMobileMSAASampleCount\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMobileMSAASampleCount\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMobileMSAASampleCount](./uassetapi.unrealtypes.engineenums.emobilemsaasamplecount.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emoduletype.md",
    "content": "# EModuleType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EModuleType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EModuleType](./uassetapi.unrealtypes.engineenums.emoduletype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emonochannelupmixmethod.md",
    "content": "# EMonoChannelUpmixMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMonoChannelUpmixMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMonoChannelUpmixMethod](./uassetapi.unrealtypes.engineenums.emonochannelupmixmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emontagenotifyticktype.md",
    "content": "# EMontageNotifyTickType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMontageNotifyTickType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMontageNotifyTickType](./uassetapi.unrealtypes.engineenums.emontagenotifyticktype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emontageplayreturntype.md",
    "content": "# EMontagePlayReturnType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMontagePlayReturnType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMontagePlayReturnType](./uassetapi.unrealtypes.engineenums.emontageplayreturntype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emontagesubstepresult.md",
    "content": "# EMontageSubStepResult\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMontageSubStepResult\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMontageSubStepResult](./uassetapi.unrealtypes.engineenums.emontagesubstepresult.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emousecapturemode.md",
    "content": "# EMouseCaptureMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMouseCaptureMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMouseCaptureMode](./uassetapi.unrealtypes.engineenums.emousecapturemode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emouselockmode.md",
    "content": "# EMouseLockMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMouseLockMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMouseLockMode](./uassetapi.unrealtypes.engineenums.emouselockmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emovecomponentaction.md",
    "content": "# EMoveComponentAction\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMoveComponentAction\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMoveComponentAction](./uassetapi.unrealtypes.engineenums.emovecomponentaction.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.emovementmode.md",
    "content": "# EMovementMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EMovementMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EMovementMode](./uassetapi.unrealtypes.engineenums.emovementmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.enaturalsoundfalloffmode.md",
    "content": "# ENaturalSoundFalloffMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ENaturalSoundFalloffMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ENaturalSoundFalloffMode](./uassetapi.unrealtypes.engineenums.enaturalsoundfalloffmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.enavdatagatheringmode.md",
    "content": "# ENavDataGatheringMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ENavDataGatheringMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ENavDataGatheringMode](./uassetapi.unrealtypes.engineenums.enavdatagatheringmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.enavdatagatheringmodeconfig.md",
    "content": "# ENavDataGatheringModeConfig\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ENavDataGatheringModeConfig\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ENavDataGatheringModeConfig](./uassetapi.unrealtypes.engineenums.enavdatagatheringmodeconfig.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.enavigationoptionflag.md",
    "content": "# ENavigationOptionFlag\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ENavigationOptionFlag\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ENavigationOptionFlag](./uassetapi.unrealtypes.engineenums.enavigationoptionflag.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.enavigationqueryresult.md",
    "content": "# ENavigationQueryResult\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ENavigationQueryResult\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ENavigationQueryResult](./uassetapi.unrealtypes.engineenums.enavigationqueryresult.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.enavlinkdirection.md",
    "content": "# ENavLinkDirection\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ENavLinkDirection\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ENavLinkDirection](./uassetapi.unrealtypes.engineenums.enavlinkdirection.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.enavpathevent.md",
    "content": "# ENavPathEvent\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ENavPathEvent\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ENavPathEvent](./uassetapi.unrealtypes.engineenums.enavpathevent.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.enetdormancy.md",
    "content": "# ENetDormancy\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ENetDormancy\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ENetDormancy](./uassetapi.unrealtypes.engineenums.enetdormancy.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.enetrole.md",
    "content": "# ENetRole\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ENetRole\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ENetRole](./uassetapi.unrealtypes.engineenums.enetrole.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.enetworkfailure.md",
    "content": "# ENetworkFailure\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ENetworkFailure\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ENetworkFailure](./uassetapi.unrealtypes.engineenums.enetworkfailure.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.enetworklagstate.md",
    "content": "# ENetworkLagState\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ENetworkLagState\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ENetworkLagState](./uassetapi.unrealtypes.engineenums.enetworklagstate.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.enetworksmoothingmode.md",
    "content": "# ENetworkSmoothingMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ENetworkSmoothingMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ENetworkSmoothingMode](./uassetapi.unrealtypes.engineenums.enetworksmoothingmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.enodeadvancedpins.md",
    "content": "# ENodeAdvancedPins\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ENodeAdvancedPins\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ENodeAdvancedPins](./uassetapi.unrealtypes.engineenums.enodeadvancedpins.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.enodeenabledstate.md",
    "content": "# ENodeEnabledState\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ENodeEnabledState\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ENodeEnabledState](./uassetapi.unrealtypes.engineenums.enodeenabledstate.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.enodetitletype.md",
    "content": "# ENodeTitleType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ENodeTitleType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ENodeTitleType](./uassetapi.unrealtypes.engineenums.enodetitletype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.enoisefunction.md",
    "content": "# ENoiseFunction\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ENoiseFunction\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ENoiseFunction](./uassetapi.unrealtypes.engineenums.enoisefunction.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.enormalmode.md",
    "content": "# ENormalMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ENormalMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ENormalMode](./uassetapi.unrealtypes.engineenums.enormalmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.enotifyfiltertype.md",
    "content": "# ENotifyFilterType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ENotifyFilterType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ENotifyFilterType](./uassetapi.unrealtypes.engineenums.enotifyfiltertype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.enotifytriggermode.md",
    "content": "# ENotifyTriggerMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ENotifyTriggerMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ENotifyTriggerMode](./uassetapi.unrealtypes.engineenums.enotifytriggermode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eobjecttypequery.md",
    "content": "# EObjectTypeQuery\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EObjectTypeQuery\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EObjectTypeQuery](./uassetapi.unrealtypes.engineenums.eobjecttypequery.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eocclusioncombinemode.md",
    "content": "# EOcclusionCombineMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EOcclusionCombineMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EOcclusionCombineMode](./uassetapi.unrealtypes.engineenums.eocclusioncombinemode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eopacitysourcemode.md",
    "content": "# EOpacitySourceMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EOpacitySourceMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EOpacitySourceMode](./uassetapi.unrealtypes.engineenums.eopacitysourcemode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eoptimizationtype.md",
    "content": "# EOptimizationType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EOptimizationType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EOptimizationType](./uassetapi.unrealtypes.engineenums.eoptimizationtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eorbitchainmode.md",
    "content": "# EOrbitChainMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EOrbitChainMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EOrbitChainMode](./uassetapi.unrealtypes.engineenums.eorbitchainmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eoscillatorwaveform.md",
    "content": "# EOscillatorWaveform\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EOscillatorWaveform\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EOscillatorWaveform](./uassetapi.unrealtypes.engineenums.eoscillatorwaveform.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eoverlapfilteroption.md",
    "content": "# EOverlapFilterOption\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EOverlapFilterOption\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EOverlapFilterOption](./uassetapi.unrealtypes.engineenums.eoverlapfilteroption.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.epanningmethod.md",
    "content": "# EPanningMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EPanningMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPanningMethod](./uassetapi.unrealtypes.engineenums.epanningmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eparticleaxislock.md",
    "content": "# EParticleAxisLock\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EParticleAxisLock\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EParticleAxisLock](./uassetapi.unrealtypes.engineenums.eparticleaxislock.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eparticleburstmethod.md",
    "content": "# EParticleBurstMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EParticleBurstMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EParticleBurstMethod](./uassetapi.unrealtypes.engineenums.eparticleburstmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eparticlecameraoffsetupdatemethod.md",
    "content": "# EParticleCameraOffsetUpdateMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EParticleCameraOffsetUpdateMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EParticleCameraOffsetUpdateMethod](./uassetapi.unrealtypes.engineenums.eparticlecameraoffsetupdatemethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eparticlecollisioncomplete.md",
    "content": "# EParticleCollisionComplete\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EParticleCollisionComplete\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EParticleCollisionComplete](./uassetapi.unrealtypes.engineenums.eparticlecollisioncomplete.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eparticlecollisionmode.md",
    "content": "# EParticleCollisionMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EParticleCollisionMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EParticleCollisionMode](./uassetapi.unrealtypes.engineenums.eparticlecollisionmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eparticlecollisionresponse.md",
    "content": "# EParticleCollisionResponse\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EParticleCollisionResponse\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EParticleCollisionResponse](./uassetapi.unrealtypes.engineenums.eparticlecollisionresponse.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eparticledetailmode.md",
    "content": "# EParticleDetailMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EParticleDetailMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EParticleDetailMode](./uassetapi.unrealtypes.engineenums.eparticledetailmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eparticleeventtype.md",
    "content": "# EParticleEventType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EParticleEventType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EParticleEventType](./uassetapi.unrealtypes.engineenums.eparticleeventtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eparticlescreenalignment.md",
    "content": "# EParticleScreenAlignment\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EParticleScreenAlignment\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EParticleScreenAlignment](./uassetapi.unrealtypes.engineenums.eparticlescreenalignment.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eparticlesignificancelevel.md",
    "content": "# EParticleSignificanceLevel\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EParticleSignificanceLevel\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EParticleSignificanceLevel](./uassetapi.unrealtypes.engineenums.eparticlesignificancelevel.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eparticlesortmode.md",
    "content": "# EParticleSortMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EParticleSortMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EParticleSortMode](./uassetapi.unrealtypes.engineenums.eparticlesortmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eparticlesourceselectionmethod.md",
    "content": "# EParticleSourceSelectionMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EParticleSourceSelectionMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EParticleSourceSelectionMethod](./uassetapi.unrealtypes.engineenums.eparticlesourceselectionmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eparticlesubuvinterpmethod.md",
    "content": "# EParticleSubUVInterpMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EParticleSubUVInterpMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EParticleSubUVInterpMethod](./uassetapi.unrealtypes.engineenums.eparticlesubuvinterpmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eparticlesysparamtype.md",
    "content": "# EParticleSysParamType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EParticleSysParamType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EParticleSysParamType](./uassetapi.unrealtypes.engineenums.eparticlesysparamtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eparticlesysteminsignificancereaction.md",
    "content": "# EParticleSystemInsignificanceReaction\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EParticleSystemInsignificanceReaction\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EParticleSystemInsignificanceReaction](./uassetapi.unrealtypes.engineenums.eparticlesysteminsignificancereaction.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eparticlesystemocclusionboundsmethod.md",
    "content": "# EParticleSystemOcclusionBoundsMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EParticleSystemOcclusionBoundsMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EParticleSystemOcclusionBoundsMethod](./uassetapi.unrealtypes.engineenums.eparticlesystemocclusionboundsmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eparticlesystemupdatemode.md",
    "content": "# EParticleSystemUpdateMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EParticleSystemUpdateMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EParticleSystemUpdateMode](./uassetapi.unrealtypes.engineenums.eparticlesystemupdatemode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eparticleuvflipmode.md",
    "content": "# EParticleUVFlipMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EParticleUVFlipMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EParticleUVFlipMode](./uassetapi.unrealtypes.engineenums.eparticleuvflipmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ephysbodyop.md",
    "content": "# EPhysBodyOp\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EPhysBodyOp\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPhysBodyOp](./uassetapi.unrealtypes.engineenums.ephysbodyop.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ephysicalmaterialmaskcolor.md",
    "content": "# EPhysicalMaterialMaskColor\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EPhysicalMaterialMaskColor\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPhysicalMaterialMaskColor](./uassetapi.unrealtypes.engineenums.ephysicalmaterialmaskcolor.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ephysicalsurface.md",
    "content": "# EPhysicalSurface\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EPhysicalSurface\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPhysicalSurface](./uassetapi.unrealtypes.engineenums.ephysicalsurface.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ephysicstransformupdatemode.md",
    "content": "# EPhysicsTransformUpdateMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EPhysicsTransformUpdateMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPhysicsTransformUpdateMode](./uassetapi.unrealtypes.engineenums.ephysicstransformupdatemode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ephysicstype.md",
    "content": "# EPhysicsType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EPhysicsType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPhysicsType](./uassetapi.unrealtypes.engineenums.ephysicstype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.epincontainertype.md",
    "content": "# EPinContainerType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EPinContainerType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPinContainerType](./uassetapi.unrealtypes.engineenums.epincontainertype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.epinhidingmode.md",
    "content": "# EPinHidingMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EPinHidingMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPinHidingMode](./uassetapi.unrealtypes.engineenums.epinhidingmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eplaneconstraintaxissetting.md",
    "content": "# EPlaneConstraintAxisSetting\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EPlaneConstraintAxisSetting\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPlaneConstraintAxisSetting](./uassetapi.unrealtypes.engineenums.eplaneconstraintaxissetting.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eplatforminterfacedatatype.md",
    "content": "# EPlatformInterfaceDataType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EPlatformInterfaceDataType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPlatformInterfaceDataType](./uassetapi.unrealtypes.engineenums.eplatforminterfacedatatype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.epostcopyoperation.md",
    "content": "# EPostCopyOperation\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EPostCopyOperation\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPostCopyOperation](./uassetapi.unrealtypes.engineenums.epostcopyoperation.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.epreviewanimationblueprintapplicationmethod.md",
    "content": "# EPreviewAnimationBlueprintApplicationMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EPreviewAnimationBlueprintApplicationMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPreviewAnimationBlueprintApplicationMethod](./uassetapi.unrealtypes.engineenums.epreviewanimationblueprintapplicationmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eprimaryassetcookrule.md",
    "content": "# EPrimaryAssetCookRule\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EPrimaryAssetCookRule\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPrimaryAssetCookRule](./uassetapi.unrealtypes.engineenums.eprimaryassetcookrule.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.epriorityattenuationmethod.md",
    "content": "# EPriorityAttenuationMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EPriorityAttenuationMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPriorityAttenuationMethod](./uassetapi.unrealtypes.engineenums.epriorityattenuationmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eproxynormalcomputationmethod.md",
    "content": "# EProxyNormalComputationMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EProxyNormalComputationMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EProxyNormalComputationMethod](./uassetapi.unrealtypes.engineenums.eproxynormalcomputationmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.epscpoolmethod.md",
    "content": "# EPSCPoolMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EPSCPoolMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPSCPoolMethod](./uassetapi.unrealtypes.engineenums.epscpoolmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.equitpreference.md",
    "content": "# EQuitPreference\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EQuitPreference\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EQuitPreference](./uassetapi.unrealtypes.engineenums.equitpreference.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eradialimpulsefalloff.md",
    "content": "# ERadialImpulseFalloff\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERadialImpulseFalloff\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERadialImpulseFalloff](./uassetapi.unrealtypes.engineenums.eradialimpulsefalloff.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.erawcurvetracktypes.md",
    "content": "# ERawCurveTrackTypes\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERawCurveTrackTypes\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERawCurveTrackTypes](./uassetapi.unrealtypes.engineenums.erawcurvetracktypes.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eraytracingglobalilluminationtype.md",
    "content": "# ERayTracingGlobalIlluminationType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERayTracingGlobalIlluminationType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERayTracingGlobalIlluminationType](./uassetapi.unrealtypes.engineenums.eraytracingglobalilluminationtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ereflectedandrefractedraytracedshadows.md",
    "content": "# EReflectedAndRefractedRayTracedShadows\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EReflectedAndRefractedRayTracedShadows\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EReflectedAndRefractedRayTracedShadows](./uassetapi.unrealtypes.engineenums.ereflectedandrefractedraytracedshadows.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ereflectionsourcetype.md",
    "content": "# EReflectionSourceType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EReflectionSourceType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EReflectionSourceType](./uassetapi.unrealtypes.engineenums.ereflectionsourcetype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ereflectionstype.md",
    "content": "# EReflectionsType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EReflectionsType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EReflectionsType](./uassetapi.unrealtypes.engineenums.ereflectionstype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.erefractionmode.md",
    "content": "# ERefractionMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERefractionMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERefractionMode](./uassetapi.unrealtypes.engineenums.erefractionmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.erelativetransformspace.md",
    "content": "# ERelativeTransformSpace\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERelativeTransformSpace\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERelativeTransformSpace](./uassetapi.unrealtypes.engineenums.erelativetransformspace.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.erendererstencilmask.md",
    "content": "# ERendererStencilMask\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERendererStencilMask\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERendererStencilMask](./uassetapi.unrealtypes.engineenums.erendererstencilmask.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.erenderfocusrule.md",
    "content": "# ERenderFocusRule\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERenderFocusRule\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERenderFocusRule](./uassetapi.unrealtypes.engineenums.erenderfocusrule.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ereporterlinestyle.md",
    "content": "# EReporterLineStyle\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EReporterLineStyle\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EReporterLineStyle](./uassetapi.unrealtypes.engineenums.ereporterlinestyle.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ereverbsendmethod.md",
    "content": "# EReverbSendMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EReverbSendMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EReverbSendMethod](./uassetapi.unrealtypes.engineenums.ereverbsendmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.erichcurvecompressionformat.md",
    "content": "# ERichCurveCompressionFormat\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERichCurveCompressionFormat\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERichCurveCompressionFormat](./uassetapi.unrealtypes.engineenums.erichcurvecompressionformat.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.erichcurveextrapolation.md",
    "content": "# ERichCurveExtrapolation\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERichCurveExtrapolation\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERichCurveExtrapolation](./uassetapi.unrealtypes.engineenums.erichcurveextrapolation.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.erichcurveinterpmode.md",
    "content": "# ERichCurveInterpMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERichCurveInterpMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERichCurveInterpMode](./uassetapi.unrealtypes.engineenums.erichcurveinterpmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.erichcurvekeytimecompressionformat.md",
    "content": "# ERichCurveKeyTimeCompressionFormat\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERichCurveKeyTimeCompressionFormat\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERichCurveKeyTimeCompressionFormat](./uassetapi.unrealtypes.engineenums.erichcurvekeytimecompressionformat.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.erichcurvetangentmode.md",
    "content": "# ERichCurveTangentMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERichCurveTangentMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERichCurveTangentMode](./uassetapi.unrealtypes.engineenums.erichcurvetangentmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.erichcurvetangentweightmode.md",
    "content": "# ERichCurveTangentWeightMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERichCurveTangentWeightMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERichCurveTangentWeightMode](./uassetapi.unrealtypes.engineenums.erichcurvetangentweightmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.erootmotionaccumulatemode.md",
    "content": "# ERootMotionAccumulateMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERootMotionAccumulateMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERootMotionAccumulateMode](./uassetapi.unrealtypes.engineenums.erootmotionaccumulatemode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.erootmotionfinishvelocitymode.md",
    "content": "# ERootMotionFinishVelocityMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERootMotionFinishVelocityMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERootMotionFinishVelocityMode](./uassetapi.unrealtypes.engineenums.erootmotionfinishvelocitymode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.erootmotionmode.md",
    "content": "# ERootMotionMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERootMotionMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERootMotionMode](./uassetapi.unrealtypes.engineenums.erootmotionmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.erootmotionrootlock.md",
    "content": "# ERootMotionRootLock\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERootMotionRootLock\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERootMotionRootLock](./uassetapi.unrealtypes.engineenums.erootmotionrootlock.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.erootmotionsourcesettingsflags.md",
    "content": "# ERootMotionSourceSettingsFlags\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERootMotionSourceSettingsFlags\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERootMotionSourceSettingsFlags](./uassetapi.unrealtypes.engineenums.erootmotionsourcesettingsflags.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.erootmotionsourcestatusflags.md",
    "content": "# ERootMotionSourceStatusFlags\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERootMotionSourceStatusFlags\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERootMotionSourceStatusFlags](./uassetapi.unrealtypes.engineenums.erootmotionsourcestatusflags.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.erotatorquantization.md",
    "content": "# ERotatorQuantization\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERotatorQuantization\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERotatorQuantization](./uassetapi.unrealtypes.engineenums.erotatorquantization.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eroundingmode.md",
    "content": "# ERoundingMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERoundingMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERoundingMode](./uassetapi.unrealtypes.engineenums.eroundingmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eruntimevirtualtexturemainpasstype.md",
    "content": "# ERuntimeVirtualTextureMainPassType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERuntimeVirtualTextureMainPassType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERuntimeVirtualTextureMainPassType](./uassetapi.unrealtypes.engineenums.eruntimevirtualtexturemainpasstype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eruntimevirtualtexturematerialtype.md",
    "content": "# ERuntimeVirtualTextureMaterialType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERuntimeVirtualTextureMaterialType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERuntimeVirtualTextureMaterialType](./uassetapi.unrealtypes.engineenums.eruntimevirtualtexturematerialtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eruntimevirtualtexturemipvaluemode.md",
    "content": "# ERuntimeVirtualTextureMipValueMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ERuntimeVirtualTextureMipValueMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERuntimeVirtualTextureMipValueMode](./uassetapi.unrealtypes.engineenums.eruntimevirtualtexturemipvaluemode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.esamplersourcemode.md",
    "content": "# ESamplerSourceMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESamplerSourceMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESamplerSourceMode](./uassetapi.unrealtypes.engineenums.esamplersourcemode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.escenecapturecompositemode.md",
    "content": "# ESceneCaptureCompositeMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESceneCaptureCompositeMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESceneCaptureCompositeMode](./uassetapi.unrealtypes.engineenums.escenecapturecompositemode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.escenecaptureprimitiverendermode.md",
    "content": "# ESceneCapturePrimitiveRenderMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESceneCapturePrimitiveRenderMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESceneCapturePrimitiveRenderMode](./uassetapi.unrealtypes.engineenums.escenecaptureprimitiverendermode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.escenecapturesource.md",
    "content": "# ESceneCaptureSource\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESceneCaptureSource\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESceneCaptureSource](./uassetapi.unrealtypes.engineenums.escenecapturesource.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.escenedepthprioritygroup.md",
    "content": "# ESceneDepthPriorityGroup\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESceneDepthPriorityGroup\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESceneDepthPriorityGroup](./uassetapi.unrealtypes.engineenums.escenedepthprioritygroup.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.escenetextureid.md",
    "content": "# ESceneTextureId\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESceneTextureId\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESceneTextureId](./uassetapi.unrealtypes.engineenums.escenetextureid.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.escreenorientation.md",
    "content": "# EScreenOrientation\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EScreenOrientation\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EScreenOrientation](./uassetapi.unrealtypes.engineenums.escreenorientation.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.esendlevelcontrolmethod.md",
    "content": "# ESendLevelControlMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESendLevelControlMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESendLevelControlMethod](./uassetapi.unrealtypes.engineenums.esendlevelcontrolmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.esettingsdof.md",
    "content": "# ESettingsDOF\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESettingsDOF\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESettingsDOF](./uassetapi.unrealtypes.engineenums.esettingsdof.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.esettingslockedaxis.md",
    "content": "# ESettingsLockedAxis\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESettingsLockedAxis\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESettingsLockedAxis](./uassetapi.unrealtypes.engineenums.esettingslockedaxis.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eshadowmapflags.md",
    "content": "# EShadowMapFlags\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EShadowMapFlags\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EShadowMapFlags](./uassetapi.unrealtypes.engineenums.eshadowmapflags.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eskeletalmeshgeoimportversions.md",
    "content": "# ESkeletalMeshGeoImportVersions\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESkeletalMeshGeoImportVersions\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESkeletalMeshGeoImportVersions](./uassetapi.unrealtypes.engineenums.eskeletalmeshgeoimportversions.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eskeletalmeshskinningimportversions.md",
    "content": "# ESkeletalMeshSkinningImportVersions\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESkeletalMeshSkinningImportVersions\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESkeletalMeshSkinningImportVersions](./uassetapi.unrealtypes.engineenums.eskeletalmeshskinningimportversions.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eskincachedefaultbehavior.md",
    "content": "# ESkinCacheDefaultBehavior\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESkinCacheDefaultBehavior\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESkinCacheDefaultBehavior](./uassetapi.unrealtypes.engineenums.eskincachedefaultbehavior.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eskincacheusage.md",
    "content": "# ESkinCacheUsage\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESkinCacheUsage\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESkinCacheUsage](./uassetapi.unrealtypes.engineenums.eskincacheusage.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eskyatmospheretransformmode.md",
    "content": "# ESkyAtmosphereTransformMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESkyAtmosphereTransformMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESkyAtmosphereTransformMode](./uassetapi.unrealtypes.engineenums.eskyatmospheretransformmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eskylightsourcetype.md",
    "content": "# ESkyLightSourceType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESkyLightSourceType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESkyLightSourceType](./uassetapi.unrealtypes.engineenums.eskylightsourcetype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eslategesture.md",
    "content": "# ESlateGesture\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESlateGesture\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESlateGesture](./uassetapi.unrealtypes.engineenums.eslategesture.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.esleepfamily.md",
    "content": "# ESleepFamily\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESleepFamily\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESleepFamily](./uassetapi.unrealtypes.engineenums.esleepfamily.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.esounddistancecalc.md",
    "content": "# ESoundDistanceCalc\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESoundDistanceCalc\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESoundDistanceCalc](./uassetapi.unrealtypes.engineenums.esounddistancecalc.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.esoundgroup.md",
    "content": "# ESoundGroup\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESoundGroup\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESoundGroup](./uassetapi.unrealtypes.engineenums.esoundgroup.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.esoundspatializationalgorithm.md",
    "content": "# ESoundSpatializationAlgorithm\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESoundSpatializationAlgorithm\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESoundSpatializationAlgorithm](./uassetapi.unrealtypes.engineenums.esoundspatializationalgorithm.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.esoundwavefftsize.md",
    "content": "# ESoundWaveFFTSize\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESoundWaveFFTSize\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESoundWaveFFTSize](./uassetapi.unrealtypes.engineenums.esoundwavefftsize.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.esoundwaveloadingbehavior.md",
    "content": "# ESoundWaveLoadingBehavior\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESoundWaveLoadingBehavior\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESoundWaveLoadingBehavior](./uassetapi.unrealtypes.engineenums.esoundwaveloadingbehavior.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.esourcebuschannels.md",
    "content": "# ESourceBusChannels\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESourceBusChannels\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESourceBusChannels](./uassetapi.unrealtypes.engineenums.esourcebuschannels.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.esourcebussendlevelcontrolmethod.md",
    "content": "# ESourceBusSendLevelControlMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESourceBusSendLevelControlMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESourceBusSendLevelControlMethod](./uassetapi.unrealtypes.engineenums.esourcebussendlevelcontrolmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.espawnactorcollisionhandlingmethod.md",
    "content": "# ESpawnActorCollisionHandlingMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESpawnActorCollisionHandlingMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESpawnActorCollisionHandlingMethod](./uassetapi.unrealtypes.engineenums.espawnactorcollisionhandlingmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.espeedtreegeometrytype.md",
    "content": "# ESpeedTreeGeometryType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESpeedTreeGeometryType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESpeedTreeGeometryType](./uassetapi.unrealtypes.engineenums.espeedtreegeometrytype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.espeedtreelodtype.md",
    "content": "# ESpeedTreeLODType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESpeedTreeLODType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESpeedTreeLODType](./uassetapi.unrealtypes.engineenums.espeedtreelodtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.espeedtreewindtype.md",
    "content": "# ESpeedTreeWindType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESpeedTreeWindType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESpeedTreeWindType](./uassetapi.unrealtypes.engineenums.espeedtreewindtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.esplinecoordinatespace.md",
    "content": "# ESplineCoordinateSpace\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESplineCoordinateSpace\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESplineCoordinateSpace](./uassetapi.unrealtypes.engineenums.esplinecoordinatespace.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.esplinemeshaxis.md",
    "content": "# ESplineMeshAxis\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESplineMeshAxis\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESplineMeshAxis](./uassetapi.unrealtypes.engineenums.esplinemeshaxis.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.esplinepointtype.md",
    "content": "# ESplinePointType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESplinePointType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESplinePointType](./uassetapi.unrealtypes.engineenums.esplinepointtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.estandbytype.md",
    "content": "# EStandbyType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EStandbyType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EStandbyType](./uassetapi.unrealtypes.engineenums.estandbytype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.estaticmeshreductionterimationcriterion.md",
    "content": "# EStaticMeshReductionTerimationCriterion\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EStaticMeshReductionTerimationCriterion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EStaticMeshReductionTerimationCriterion](./uassetapi.unrealtypes.engineenums.estaticmeshreductionterimationcriterion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.estereolayershape.md",
    "content": "# EStereoLayerShape\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EStereoLayerShape\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EStereoLayerShape](./uassetapi.unrealtypes.engineenums.estereolayershape.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.estereolayertype.md",
    "content": "# EStereoLayerType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EStereoLayerType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EStereoLayerType](./uassetapi.unrealtypes.engineenums.estereolayertype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.estreamingvolumeusage.md",
    "content": "# EStreamingVolumeUsage\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EStreamingVolumeUsage\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EStreamingVolumeUsage](./uassetapi.unrealtypes.engineenums.estreamingvolumeusage.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.esubmixsendmethod.md",
    "content": "# ESubmixSendMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESubmixSendMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESubmixSendMethod](./uassetapi.unrealtypes.engineenums.esubmixsendmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.esubuvboundingvertexcount.md",
    "content": "# ESubUVBoundingVertexCount\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESubUVBoundingVertexCount\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESubUVBoundingVertexCount](./uassetapi.unrealtypes.engineenums.esubuvboundingvertexcount.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.esuggestprojvelocitytraceoption.md",
    "content": "# ESuggestProjVelocityTraceOption\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ESuggestProjVelocityTraceOption\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESuggestProjVelocityTraceOption](./uassetapi.unrealtypes.engineenums.esuggestprojvelocitytraceoption.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eteleporttype.md",
    "content": "# ETeleportType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETeleportType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETeleportType](./uassetapi.unrealtypes.engineenums.eteleporttype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etemperatureseveritytype.md",
    "content": "# ETemperatureSeverityType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETemperatureSeverityType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETemperatureSeverityType](./uassetapi.unrealtypes.engineenums.etemperatureseveritytype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etextgender.md",
    "content": "# ETextGender\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETextGender\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETextGender](./uassetapi.unrealtypes.engineenums.etextgender.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etexturecolorchannel.md",
    "content": "# ETextureColorChannel\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETextureColorChannel\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETextureColorChannel](./uassetapi.unrealtypes.engineenums.etexturecolorchannel.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etexturecompressionquality.md",
    "content": "# ETextureCompressionQuality\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETextureCompressionQuality\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETextureCompressionQuality](./uassetapi.unrealtypes.engineenums.etexturecompressionquality.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etexturelossycompressionamount.md",
    "content": "# ETextureLossyCompressionAmount\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETextureLossyCompressionAmount\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETextureLossyCompressionAmount](./uassetapi.unrealtypes.engineenums.etexturelossycompressionamount.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etexturemipcount.md",
    "content": "# ETextureMipCount\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETextureMipCount\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETextureMipCount](./uassetapi.unrealtypes.engineenums.etexturemipcount.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etexturemiploadoptions.md",
    "content": "# ETextureMipLoadOptions\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETextureMipLoadOptions\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETextureMipLoadOptions](./uassetapi.unrealtypes.engineenums.etexturemiploadoptions.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etexturemipvaluemode.md",
    "content": "# ETextureMipValueMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETextureMipValueMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETextureMipValueMode](./uassetapi.unrealtypes.engineenums.etexturemipvaluemode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etexturepoweroftwosetting.md",
    "content": "# ETexturePowerOfTwoSetting\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETexturePowerOfTwoSetting\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETexturePowerOfTwoSetting](./uassetapi.unrealtypes.engineenums.etexturepoweroftwosetting.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etexturerendertargetformat.md",
    "content": "# ETextureRenderTargetFormat\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETextureRenderTargetFormat\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETextureRenderTargetFormat](./uassetapi.unrealtypes.engineenums.etexturerendertargetformat.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etexturesamplerfilter.md",
    "content": "# ETextureSamplerFilter\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETextureSamplerFilter\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETextureSamplerFilter](./uassetapi.unrealtypes.engineenums.etexturesamplerfilter.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etexturesizingtype.md",
    "content": "# ETextureSizingType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETextureSizingType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETextureSizingType](./uassetapi.unrealtypes.engineenums.etexturesizingtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etexturesourcearttype.md",
    "content": "# ETextureSourceArtType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETextureSourceArtType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETextureSourceArtType](./uassetapi.unrealtypes.engineenums.etexturesourcearttype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etexturesourceformat.md",
    "content": "# ETextureSourceFormat\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETextureSourceFormat\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETextureSourceFormat](./uassetapi.unrealtypes.engineenums.etexturesourceformat.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etickinggroup.md",
    "content": "# ETickingGroup\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETickingGroup\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETickingGroup](./uassetapi.unrealtypes.engineenums.etickinggroup.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etimecodeprovidersynchronizationstate.md",
    "content": "# ETimecodeProviderSynchronizationState\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETimecodeProviderSynchronizationState\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETimecodeProviderSynchronizationState](./uassetapi.unrealtypes.engineenums.etimecodeprovidersynchronizationstate.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etimelinedirection.md",
    "content": "# ETimelineDirection\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETimelineDirection\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETimelineDirection](./uassetapi.unrealtypes.engineenums.etimelinedirection.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etimelinelengthmode.md",
    "content": "# ETimelineLengthMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETimelineLengthMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETimelineLengthMode](./uassetapi.unrealtypes.engineenums.etimelinelengthmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etimelinesigtype.md",
    "content": "# ETimelineSigType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETimelineSigType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETimelineSigType](./uassetapi.unrealtypes.engineenums.etimelinesigtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etimestretchcurvemapping.md",
    "content": "# ETimeStretchCurveMapping\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETimeStretchCurveMapping\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETimeStretchCurveMapping](./uassetapi.unrealtypes.engineenums.etimestretchcurvemapping.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etracetypequery.md",
    "content": "# ETraceTypeQuery\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETraceTypeQuery\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETraceTypeQuery](./uassetapi.unrealtypes.engineenums.etracetypequery.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etrackactivecondition.md",
    "content": "# ETrackActiveCondition\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETrackActiveCondition\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETrackActiveCondition](./uassetapi.unrealtypes.engineenums.etrackactivecondition.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etracktoggleaction.md",
    "content": "# ETrackToggleAction\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETrackToggleAction\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETrackToggleAction](./uassetapi.unrealtypes.engineenums.etracktoggleaction.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etrail2sourcemethod.md",
    "content": "# ETrail2SourceMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETrail2SourceMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETrail2SourceMethod](./uassetapi.unrealtypes.engineenums.etrail2sourcemethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etrailsrenderaxisoption.md",
    "content": "# ETrailsRenderAxisOption\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETrailsRenderAxisOption\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETrailsRenderAxisOption](./uassetapi.unrealtypes.engineenums.etrailsrenderaxisoption.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etrailwidthmode.md",
    "content": "# ETrailWidthMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETrailWidthMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETrailWidthMode](./uassetapi.unrealtypes.engineenums.etrailwidthmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etransitionblendmode.md",
    "content": "# ETransitionBlendMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETransitionBlendMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETransitionBlendMode](./uassetapi.unrealtypes.engineenums.etransitionblendmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etransitionlogictype.md",
    "content": "# ETransitionLogicType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETransitionLogicType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETransitionLogicType](./uassetapi.unrealtypes.engineenums.etransitionlogictype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etransitiontype.md",
    "content": "# ETransitionType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETransitionType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETransitionType](./uassetapi.unrealtypes.engineenums.etransitiontype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etranslucencylightingmode.md",
    "content": "# ETranslucencyLightingMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETranslucencyLightingMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETranslucencyLightingMode](./uassetapi.unrealtypes.engineenums.etranslucencylightingmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etranslucencytype.md",
    "content": "# ETranslucencyType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETranslucencyType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETranslucencyType](./uassetapi.unrealtypes.engineenums.etranslucencytype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etranslucentsortpolicy.md",
    "content": "# ETranslucentSortPolicy\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETranslucentSortPolicy\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETranslucentSortPolicy](./uassetapi.unrealtypes.engineenums.etranslucentsortpolicy.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etravelfailure.md",
    "content": "# ETravelFailure\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETravelFailure\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETravelFailure](./uassetapi.unrealtypes.engineenums.etravelfailure.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etraveltype.md",
    "content": "# ETravelType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETravelType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETravelType](./uassetapi.unrealtypes.engineenums.etraveltype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etwitterintegrationdelegate.md",
    "content": "# ETwitterIntegrationDelegate\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETwitterIntegrationDelegate\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETwitterIntegrationDelegate](./uassetapi.unrealtypes.engineenums.etwitterintegrationdelegate.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etwitterrequestmethod.md",
    "content": "# ETwitterRequestMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETwitterRequestMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETwitterRequestMethod](./uassetapi.unrealtypes.engineenums.etwitterrequestmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.etypeadvanceanim.md",
    "content": "# ETypeAdvanceAnim\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ETypeAdvanceAnim\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ETypeAdvanceAnim](./uassetapi.unrealtypes.engineenums.etypeadvanceanim.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.euiscalingrule.md",
    "content": "# EUIScalingRule\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EUIScalingRule\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EUIScalingRule](./uassetapi.unrealtypes.engineenums.euiscalingrule.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eupdaterateshiftbucket.md",
    "content": "# EUpdateRateShiftBucket\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EUpdateRateShiftBucket\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EUpdateRateShiftBucket](./uassetapi.unrealtypes.engineenums.eupdaterateshiftbucket.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.euserdefinedstructurestatus.md",
    "content": "# EUserDefinedStructureStatus\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EUserDefinedStructureStatus\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EUserDefinedStructureStatus](./uassetapi.unrealtypes.engineenums.euserdefinedstructurestatus.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.euvoutput.md",
    "content": "# EUVOutput\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EUVOutput\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EUVOutput](./uassetapi.unrealtypes.engineenums.euvoutput.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.evectorfieldconstructionop.md",
    "content": "# EVectorFieldConstructionOp\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EVectorFieldConstructionOp\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EVectorFieldConstructionOp](./uassetapi.unrealtypes.engineenums.evectorfieldconstructionop.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.evectornoisefunction.md",
    "content": "# EVectorNoiseFunction\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EVectorNoiseFunction\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EVectorNoiseFunction](./uassetapi.unrealtypes.engineenums.evectornoisefunction.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.evectorquantization.md",
    "content": "# EVectorQuantization\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EVectorQuantization\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EVectorQuantization](./uassetapi.unrealtypes.engineenums.evectorquantization.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.evertexpaintaxis.md",
    "content": "# EVertexPaintAxis\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EVertexPaintAxis\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EVertexPaintAxis](./uassetapi.unrealtypes.engineenums.evertexpaintaxis.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.everticaltextaligment.md",
    "content": "# EVerticalTextAligment\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EVerticalTextAligment\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EVerticalTextAligment](./uassetapi.unrealtypes.engineenums.everticaltextaligment.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eviewmodeindex.md",
    "content": "# EViewModeIndex\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EViewModeIndex\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EViewModeIndex](./uassetapi.unrealtypes.engineenums.eviewmodeindex.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eviewtargetblendfunction.md",
    "content": "# EViewTargetBlendFunction\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EViewTargetBlendFunction\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EViewTargetBlendFunction](./uassetapi.unrealtypes.engineenums.eviewtargetblendfunction.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.evirtualizationmode.md",
    "content": "# EVirtualizationMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EVirtualizationMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EVirtualizationMode](./uassetapi.unrealtypes.engineenums.evirtualizationmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.evisibilityaggressiveness.md",
    "content": "# EVisibilityAggressiveness\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EVisibilityAggressiveness\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EVisibilityAggressiveness](./uassetapi.unrealtypes.engineenums.evisibilityaggressiveness.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.evisibilitybasedanimtickoption.md",
    "content": "# EVisibilityBasedAnimTickOption\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EVisibilityBasedAnimTickOption\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EVisibilityBasedAnimTickOption](./uassetapi.unrealtypes.engineenums.evisibilitybasedanimtickoption.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.evisibilitytrackaction.md",
    "content": "# EVisibilityTrackAction\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EVisibilityTrackAction\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EVisibilityTrackAction](./uassetapi.unrealtypes.engineenums.evisibilitytrackaction.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.evisibilitytrackcondition.md",
    "content": "# EVisibilityTrackCondition\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EVisibilityTrackCondition\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EVisibilityTrackCondition](./uassetapi.unrealtypes.engineenums.evisibilitytrackcondition.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.evoicesamplerate.md",
    "content": "# EVoiceSampleRate\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EVoiceSampleRate\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EVoiceSampleRate](./uassetapi.unrealtypes.engineenums.evoicesamplerate.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.evolumelightingmethod.md",
    "content": "# EVolumeLightingMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EVolumeLightingMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EVolumeLightingMethod](./uassetapi.unrealtypes.engineenums.evolumelightingmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ewalkableslopebehavior.md",
    "content": "# EWalkableSlopeBehavior\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EWalkableSlopeBehavior\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EWalkableSlopeBehavior](./uassetapi.unrealtypes.engineenums.ewalkableslopebehavior.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ewindowmode.md",
    "content": "# EWindowMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EWindowMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EWindowMode](./uassetapi.unrealtypes.engineenums.ewindowmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ewindowtitlebarmode.md",
    "content": "# EWindowTitleBarMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EWindowTitleBarMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EWindowTitleBarMode](./uassetapi.unrealtypes.engineenums.ewindowtitlebarmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.ewindsourcetype.md",
    "content": "# EWindSourceType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EWindSourceType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EWindSourceType](./uassetapi.unrealtypes.engineenums.ewindsourcetype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.eworldpositionincludedoffsets.md",
    "content": "# EWorldPositionIncludedOffsets\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum EWorldPositionIncludedOffsets\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EWorldPositionIncludedOffsets](./uassetapi.unrealtypes.engineenums.eworldpositionincludedoffsets.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.fnavigationsystemrunmode.md",
    "content": "# FNavigationSystemRunMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum FNavigationSystemRunMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [FNavigationSystemRunMode](./uassetapi.unrealtypes.engineenums.fnavigationsystemrunmode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.modulationparammode.md",
    "content": "# ModulationParamMode\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ModulationParamMode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ModulationParamMode](./uassetapi.unrealtypes.engineenums.modulationparammode.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.particlereplaystate.md",
    "content": "# ParticleReplayState\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ParticleReplayState\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ParticleReplayState](./uassetapi.unrealtypes.engineenums.particlereplaystate.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.particlesystemlodmethod.md",
    "content": "# ParticleSystemLODMethod\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ParticleSystemLODMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ParticleSystemLODMethod](./uassetapi.unrealtypes.engineenums.particlesystemlodmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.reverbpreset.md",
    "content": "# ReverbPreset\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum ReverbPreset\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ReverbPreset](./uassetapi.unrealtypes.engineenums.reverbpreset.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.skeletalmeshoptimizationimportance.md",
    "content": "# SkeletalMeshOptimizationImportance\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum SkeletalMeshOptimizationImportance\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [SkeletalMeshOptimizationImportance](./uassetapi.unrealtypes.engineenums.skeletalmeshoptimizationimportance.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.skeletalmeshoptimizationtype.md",
    "content": "# SkeletalMeshOptimizationType\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum SkeletalMeshOptimizationType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [SkeletalMeshOptimizationType](./uassetapi.unrealtypes.engineenums.skeletalmeshoptimizationtype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.skeletalmeshterminationcriterion.md",
    "content": "# SkeletalMeshTerminationCriterion\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum SkeletalMeshTerminationCriterion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [SkeletalMeshTerminationCriterion](./uassetapi.unrealtypes.engineenums.skeletalmeshterminationcriterion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.textureaddress.md",
    "content": "# TextureAddress\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum TextureAddress\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [TextureAddress](./uassetapi.unrealtypes.engineenums.textureaddress.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.texturecompressionsettings.md",
    "content": "# TextureCompressionSettings\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum TextureCompressionSettings\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [TextureCompressionSettings](./uassetapi.unrealtypes.engineenums.texturecompressionsettings.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.texturefilter.md",
    "content": "# TextureFilter\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum TextureFilter\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [TextureFilter](./uassetapi.unrealtypes.engineenums.texturefilter.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.texturegroup.md",
    "content": "# TextureGroup\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum TextureGroup\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [TextureGroup](./uassetapi.unrealtypes.engineenums.texturegroup.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineenums.texturemipgensettings.md",
    "content": "# TextureMipGenSettings\r\n\r\nNamespace: UAssetAPI.UnrealTypes.EngineEnums\r\n\r\n```csharp\r\npublic enum TextureMipGenSettings\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [TextureMipGenSettings](./uassetapi.unrealtypes.engineenums.texturemipgensettings.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.engineversion.md",
    "content": "# EngineVersion\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nAn enum used to represent all retail versions of the Unreal Engine. Each version entry represents a particular [ObjectVersion](./uassetapi.unrealtypes.objectversion.md), a particular [ObjectVersionUE5](./uassetapi.unrealtypes.objectversionue5.md), and the default set of all applicable [CustomVersion](./uassetapi.customversion.md) enum values.\r\n\r\n```csharp\r\npublic enum EngineVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EngineVersion](./uassetapi.unrealtypes.engineversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| VER_UE4_0 | 2 | 4.0 |\r\n| VER_UE4_1 | 3 | 4.1 |\r\n| VER_UE4_2 | 4 | 4.2 |\r\n| VER_UE4_3 | 5 | 4.3 |\r\n| VER_UE4_4 | 6 | 4.4 |\r\n| VER_UE4_5 | 7 | 4.5 |\r\n| VER_UE4_6 | 8 | 4.6 |\r\n| VER_UE4_7 | 9 | 4.7 |\r\n| VER_UE4_8 | 10 | 4.8 |\r\n| VER_UE4_9 | 11 | 4.9 |\r\n| VER_UE4_10 | 12 | 4.10 |\r\n| VER_UE4_11 | 13 | 4.11 |\r\n| VER_UE4_12 | 14 | 4.12 |\r\n| VER_UE4_13 | 15 | 4.13 |\r\n| VER_UE4_14 | 16 | 4.14 |\r\n| VER_UE4_15 | 17 | 4.15 |\r\n| VER_UE4_16 | 18 | 4.16 |\r\n| VER_UE4_17 | 19 | 4.17 |\r\n| VER_UE4_18 | 20 | 4.18 |\r\n| VER_UE4_19 | 21 | 4.19 |\r\n| VER_UE4_20 | 22 | 4.20 |\r\n| VER_UE4_21 | 23 | 4.21 |\r\n| VER_UE4_22 | 24 | 4.22 |\r\n| VER_UE4_23 | 25 | 4.23 |\r\n| VER_UE4_24 | 26 | 4.24 |\r\n| VER_UE4_25 | 27 | 4.25 |\r\n| VER_UE4_26 | 28 | 4.26 |\r\n| VER_UE4_27 | 29 | 4.27 |\r\n| VER_UE5_0EA | 30 | 5.0EA |\r\n| VER_UE5_0 | 31 | 5.0 |\r\n| VER_UE5_1 | 32 | 5.1 |\r\n| VER_UE5_2 | 33 | 5.2 |\r\n| VER_UE5_3 | 34 | 5.3 |\r\n| VER_UE5_4 | 35 | 5.4 |\r\n| VER_UE5_5 | 36 | 5.5 |\r\n| VER_UE5_6 | 37 | 5.6 |\r\n| VER_UE5_7 | 38 | 5.7 |\r\n| VER_UE4_AUTOMATIC_VERSION | 38 | The newest specified version of the Unreal Engine. |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.eobjectdataresourceflags.md",
    "content": "# EObjectDataResourceFlags\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic enum EObjectDataResourceFlags\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EObjectDataResourceFlags](./uassetapi.unrealtypes.eobjectdataresourceflags.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.eobjectdataresourceversion.md",
    "content": "# EObjectDataResourceVersion\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic enum EObjectDataResourceVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EObjectDataResourceVersion](./uassetapi.unrealtypes.eobjectdataresourceversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.eobjectflags.md",
    "content": "# EObjectFlags\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nFlags describing an object instance\r\n\r\n```csharp\r\npublic enum EObjectFlags\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EObjectFlags](./uassetapi.unrealtypes.eobjectflags.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.epackageflags.md",
    "content": "# EPackageFlags\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nPackage flags, passed into UPackage::SetPackageFlags and related functions in the Unreal Engine\r\n\r\n```csharp\r\npublic enum EPackageFlags\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPackageFlags](./uassetapi.unrealtypes.epackageflags.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| PKG_None | 0 | No flags |\r\n| PKG_NewlyCreated | 1 | Newly created package, not saved yet. In editor only. |\r\n| PKG_ClientOptional | 2 | Purely optional for clients. |\r\n| PKG_ServerSideOnly | 4 | Only needed on the server side. |\r\n| PKG_CompiledIn | 16 | This package is from \"compiled in\" classes. |\r\n| PKG_ForDiffing | 32 | This package was loaded just for the purposes of diffing |\r\n| PKG_EditorOnly | 64 | This is editor-only package (for example: editor module script package) |\r\n| PKG_Developer | 128 | Developer module |\r\n| PKG_UncookedOnly | 256 | Loaded only in uncooked builds (i.e. runtime in editor) |\r\n| PKG_Cooked | 512 | Package is cooked |\r\n| PKG_ContainsNoAsset | 1024 | Package doesn't contain any asset object (although asset tags can be present) |\r\n| PKG_UnversionedProperties | 8192 | Uses unversioned property serialization instead of versioned tagged property serialization |\r\n| PKG_ContainsMapData | 16384 | Contains map data (UObjects only referenced by a single ULevel) but is stored in a different package |\r\n| PKG_Compiling | 65536 | package is currently being compiled |\r\n| PKG_ContainsMap | 131072 | Set if the package contains a ULevel/ UWorld object |\r\n| PKG_RequiresLocalizationGather | 262144 | ??? |\r\n| PKG_PlayInEditor | 1048576 | Set if the package was created for the purpose of PIE |\r\n| PKG_ContainsScript | 2097152 | Package is allowed to contain UClass objects |\r\n| PKG_DisallowExport | 4194304 | Editor should not export asset in this package |\r\n| PKG_DynamicImports | 268435456 | This package should resolve dynamic imports from its export at runtime. |\r\n| PKG_RuntimeGenerated | 536870912 | This package contains elements that are runtime generated, and may not follow standard loading order rules |\r\n| PKG_ReloadingForCooker | 1073741824 | This package is reloading in the cooker, try to avoid getting data we will never need. We won't save this package. |\r\n| PKG_FilterEditorOnly | 2147483648 | Package has editor-only data filtered out |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.epropertyflags.md",
    "content": "# EPropertyFlags\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nFlags associated with each property in a class, overriding the property's default behavior.\r\n\r\n```csharp\r\npublic enum EPropertyFlags\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPropertyFlags](./uassetapi.unrealtypes.epropertyflags.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| CPF_Edit | 1 | Property is user-settable in the editor. |\r\n| CPF_ConstParm | 2 | This is a constant function parameter |\r\n| CPF_BlueprintVisible | 4 | This property can be read by blueprint code |\r\n| CPF_ExportObject | 8 | Object can be exported with actor. |\r\n| CPF_BlueprintReadOnly | 16 | This property cannot be modified by blueprint code |\r\n| CPF_Net | 32 | Property is relevant to network replication. |\r\n| CPF_EditFixedSize | 64 | Indicates that elements of an array can be modified, but its size cannot be changed. |\r\n| CPF_Parm | 128 | Function/When call parameter. |\r\n| CPF_OutParm | 256 | Value is copied out after function call. |\r\n| CPF_ZeroConstructor | 512 | memset is fine for construction |\r\n| CPF_ReturnParm | 1024 | Return value. |\r\n| CPF_DisableEditOnTemplate | 2048 | Disable editing of this property on an archetype/sub-blueprint |\r\n| CPF_Transient | 8192 | Property is transient: shouldn't be saved or loaded, except for Blueprint CDOs. |\r\n| CPF_Config | 16384 | Property should be loaded/saved as permanent profile. |\r\n| CPF_DisableEditOnInstance | 65536 | Disable editing on an instance of this class |\r\n| CPF_EditConst | 131072 | Property is uneditable in the editor. |\r\n| CPF_GlobalConfig | 262144 | Load config from base class, not subclass. |\r\n| CPF_InstancedReference | 524288 | Property is a component references. |\r\n| CPF_DuplicateTransient | 2097152 | Property should always be reset to the default value during any type of duplication (copy/paste, binary duplication, etc.) |\r\n| CPF_SaveGame | 16777216 | Property should be serialized for save games, this is only checked for game-specific archives with ArIsSaveGame |\r\n| CPF_NoClear | 33554432 | Hide clear (and browse) button. |\r\n| CPF_ReferenceParm | 134217728 | Value is passed by reference; CPF_OutParam and CPF_Param should also be set. |\r\n| CPF_BlueprintAssignable | 268435456 | MC Delegates only. Property should be exposed for assigning in blueprint code |\r\n| CPF_Deprecated | 536870912 | Property is deprecated. Read it from an archive, but don't save it. |\r\n| CPF_IsPlainOldData | 1073741824 | If this is set, then the property can be memcopied instead of CopyCompleteValue / CopySingleValue |\r\n| CPF_RepSkip | 2147483648 | Not replicated. For non replicated properties in replicated structs |\r\n| CPF_RepNotify | 4294967296 | Notify actors when a property is replicated |\r\n| CPF_Interp | 8589934592 | interpolatable property for use with matinee |\r\n| CPF_NonTransactional | 17179869184 | Property isn't transacted |\r\n| CPF_EditorOnly | 34359738368 | Property should only be loaded in the editor |\r\n| CPF_NoDestructor | 68719476736 | No destructor |\r\n| CPF_AutoWeak | 274877906944 | Only used for weak pointers, means the export type is autoweak |\r\n| CPF_ContainsInstancedReference | 549755813888 | Property contains component references. |\r\n| CPF_AssetRegistrySearchable | 1099511627776 | asset instances will add properties with this flag to the asset registry automatically |\r\n| CPF_SimpleDisplay | 2199023255552 | The property is visible by default in the editor details view |\r\n| CPF_AdvancedDisplay | 4398046511104 | The property is advanced and not visible by default in the editor details view |\r\n| CPF_Protected | 8796093022208 | property is protected from the perspective of script |\r\n| CPF_BlueprintCallable | 17592186044416 | MC Delegates only. Property should be exposed for calling in blueprint code |\r\n| CPF_BlueprintAuthorityOnly | 35184372088832 | MC Delegates only. This delegate accepts (only in blueprint) only events with BlueprintAuthorityOnly. |\r\n| CPF_TextExportTransient | 70368744177664 | Property shouldn't be exported to text format (e.g. copy/paste) |\r\n| CPF_NonPIEDuplicateTransient | 140737488355328 | Property should only be copied in PIE |\r\n| CPF_ExposeOnSpawn | 281474976710656 | Property is exposed on spawn |\r\n| CPF_PersistentInstance | 562949953421312 | A object referenced by the property is duplicated like a component. (Each actor should have an own instance.) |\r\n| CPF_UObjectWrapper | 1125899906842624 | Property was parsed as a wrapper class like TSubclassOf T, FScriptInterface etc., rather than a USomething* |\r\n| CPF_HasGetValueTypeHash | 2251799813685248 | This property can generate a meaningful hash value. |\r\n| CPF_NativeAccessSpecifierPublic | 4503599627370496 | Public native access specifier |\r\n| CPF_NativeAccessSpecifierProtected | 9007199254740992 | Protected native access specifier |\r\n| CPF_NativeAccessSpecifierPrivate | 18014398509481984 | Private native access specifier |\r\n| CPF_SkipSerialization | 36028797018963968 | Property shouldn't be serialized, can still be exported to text |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.erangeboundtypes.md",
    "content": "# ERangeBoundTypes\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic enum ERangeBoundTypes\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ERangeBoundTypes](./uassetapi.unrealtypes.erangeboundtypes.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.ffieldpath.md",
    "content": "# FFieldPath\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic class FFieldPath : UAssetAPI.PropertyTypes.Objects.IStruct`1[[UAssetAPI.UnrealTypes.FFieldPath]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FFieldPath](./uassetapi.unrealtypes.ffieldpath.md)<br>\r\nImplements [IStruct&lt;FFieldPath&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Fields\r\n\r\n### **Path**\r\n\r\nPath to the FField object from the innermost FField to the outermost UObject (UPackage)\r\n\r\n```csharp\r\npublic FName[] Path;\r\n```\r\n\r\n### **ResolvedOwner**\r\n\r\nThe cached owner of this field.\r\n\r\n```csharp\r\npublic FPackageIndex ResolvedOwner;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FFieldPath(FName[], FPackageIndex, Int32)**\r\n\r\n```csharp\r\npublic FFieldPath(FName[] path, FPackageIndex resolvedOwner, int numExports)\r\n```\r\n\r\n#### Parameters\r\n\r\n`path` [FName[]](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`resolvedOwner` [FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\n\r\n`numExports` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FFieldPath()**\r\n\r\n```csharp\r\npublic FFieldPath()\r\n```\r\n\r\n### **FFieldPath(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FFieldPath(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic static FFieldPath Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FFieldPath](./uassetapi.unrealtypes.ffieldpath.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic static FFieldPath FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FFieldPath](./uassetapi.unrealtypes.ffieldpath.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.ffontcharacter.md",
    "content": "# FFontCharacter\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nThis struct is serialized using native serialization so any changes to it require a package version bump.\r\n\r\n```csharp\r\npublic struct FFontCharacter\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FFontCharacter](./uassetapi.unrealtypes.ffontcharacter.md)\r\n\r\n## Fields\r\n\r\n### **StartU**\r\n\r\n```csharp\r\npublic int StartU;\r\n```\r\n\r\n### **StartV**\r\n\r\n```csharp\r\npublic int StartV;\r\n```\r\n\r\n### **USize**\r\n\r\n```csharp\r\npublic int USize;\r\n```\r\n\r\n### **VSize**\r\n\r\n```csharp\r\npublic int VSize;\r\n```\r\n\r\n### **TextureIndex**\r\n\r\n```csharp\r\npublic byte TextureIndex;\r\n```\r\n\r\n### **VerticalOffset**\r\n\r\n```csharp\r\npublic int VerticalOffset;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FFontCharacter(AssetBinaryReader)**\r\n\r\n```csharp\r\nFFontCharacter(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.ffontdata.md",
    "content": "# FFontData\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic class FFontData\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FFontData](./uassetapi.unrealtypes.ffontdata.md)\r\n\r\n## Fields\r\n\r\n### **LocalFontFaceAsset**\r\n\r\n```csharp\r\npublic FPackageIndex LocalFontFaceAsset;\r\n```\r\n\r\n### **FontFilename**\r\n\r\n```csharp\r\npublic FString FontFilename;\r\n```\r\n\r\n### **Hinting**\r\n\r\n```csharp\r\npublic EFontHinting Hinting;\r\n```\r\n\r\n### **LoadingPolicy**\r\n\r\n```csharp\r\npublic EFontLoadingPolicy LoadingPolicy;\r\n```\r\n\r\n### **SubFaceIndex**\r\n\r\n```csharp\r\npublic int SubFaceIndex;\r\n```\r\n\r\n### **bIsCooked**\r\n\r\n```csharp\r\npublic bool bIsCooked;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FFontData()**\r\n\r\n```csharp\r\npublic FFontData()\r\n```\r\n\r\n### **FFontData(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FFontData(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fframenumber.md",
    "content": "# FFrameNumber\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic struct FFrameNumber\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FFrameNumber](./uassetapi.unrealtypes.fframenumber.md)<br>\r\nImplements [IStruct&lt;FFrameNumber&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Fields\r\n\r\n### **Value**\r\n\r\n```csharp\r\npublic int Value;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FFrameNumber()**\r\n\r\n```csharp\r\nFFrameNumber()\r\n```\r\n\r\n### **FFrameNumber(Int32)**\r\n\r\n```csharp\r\nFFrameNumber(int value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FFrameNumber(AssetBinaryReader)**\r\n\r\n```csharp\r\nFFrameNumber(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFFrameNumber Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FFrameNumber](./uassetapi.unrealtypes.fframenumber.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFFrameNumber FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FFrameNumber](./uassetapi.unrealtypes.fframenumber.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fframerate.md",
    "content": "# FFrameRate\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic struct FFrameRate\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FFrameRate](./uassetapi.unrealtypes.fframerate.md)\r\n\r\n## Fields\r\n\r\n### **Numerator**\r\n\r\n```csharp\r\npublic int Numerator;\r\n```\r\n\r\n### **Denominator**\r\n\r\n```csharp\r\npublic int Denominator;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FFrameRate()**\r\n\r\n```csharp\r\nFFrameRate()\r\n```\r\n\r\n### **FFrameRate(Int32, Int32)**\r\n\r\n```csharp\r\nFFrameRate(int numerator, int denominator)\r\n```\r\n\r\n#### Parameters\r\n\r\n`numerator` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`denominator` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FFrameRate(AssetBinaryReader)**\r\n\r\n```csharp\r\nFFrameRate(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nvoid Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\nstring ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **TryParse(String, FFrameRate&)**\r\n\r\n```csharp\r\nbool TryParse(string s, FFrameRate& result)\r\n```\r\n\r\n#### Parameters\r\n\r\n`s` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`result` [FFrameRate&](./uassetapi.unrealtypes.fframerate&.md)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fframetime.md",
    "content": "# FFrameTime\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic struct FFrameTime\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FFrameTime](./uassetapi.unrealtypes.fframetime.md)\r\n\r\n## Fields\r\n\r\n### **FrameNumber**\r\n\r\n```csharp\r\npublic FFrameNumber FrameNumber;\r\n```\r\n\r\n### **SubFrame**\r\n\r\n```csharp\r\npublic float SubFrame;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FFrameTime()**\r\n\r\n```csharp\r\nFFrameTime()\r\n```\r\n\r\n### **FFrameTime(FFrameNumber, Single)**\r\n\r\n```csharp\r\nFFrameTime(FFrameNumber frameNumber, float subFrame)\r\n```\r\n\r\n#### Parameters\r\n\r\n`frameNumber` [FFrameNumber](./uassetapi.unrealtypes.fframenumber.md)<br>\r\n\r\n`subFrame` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **FFrameTime(AssetBinaryReader)**\r\n\r\n```csharp\r\nFFrameTime(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nvoid Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fgatherabletextdata.md",
    "content": "# FGatherableTextData\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nGatherable text data item\r\n\r\n```csharp\r\npublic struct FGatherableTextData\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FGatherableTextData](./uassetapi.unrealtypes.fgatherabletextdata.md)\r\n\r\n## Properties\r\n\r\n### **NamespaceName**\r\n\r\n```csharp\r\npublic FString NamespaceName { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **SourceData**\r\n\r\n```csharp\r\npublic FTextSourceData SourceData { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FTextSourceData](./uassetapi.unrealtypes.ftextsourcedata.md)<br>\r\n\r\n### **SourceSiteContexts**\r\n\r\n```csharp\r\npublic List<FTextSourceSiteContext> SourceSiteContexts { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[List&lt;FTextSourceSiteContext&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fintvector.md",
    "content": "# FIntVector\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nStructure for integer vectors in 3-d space.\r\n\r\n```csharp\r\npublic struct FIntVector\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FIntVector](./uassetapi.unrealtypes.fintvector.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable), [IStruct&lt;FIntVector&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Fields\r\n\r\n### **X**\r\n\r\n```csharp\r\npublic int X;\r\n```\r\n\r\n### **Y**\r\n\r\n```csharp\r\npublic int Y;\r\n```\r\n\r\n### **Z**\r\n\r\n```csharp\r\npublic int Z;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FIntVector(Int32, Int32, Int32)**\r\n\r\n```csharp\r\nFIntVector(int x, int y, int z)\r\n```\r\n\r\n#### Parameters\r\n\r\n`x` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`y` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`z` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FIntVector(AssetBinaryReader)**\r\n\r\n```csharp\r\nFIntVector(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFIntVector Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FIntVector](./uassetapi.unrealtypes.fintvector.md)<br>\r\n\r\n### **Clone()**\r\n\r\n```csharp\r\nobject Clone()\r\n```\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFIntVector FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FIntVector](./uassetapi.unrealtypes.fintvector.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\nstring ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fintvector2.md",
    "content": "# FIntVector2\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nStructure for integer vectors in 2-d space.\r\n\r\n```csharp\r\npublic struct FIntVector2\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FIntVector2](./uassetapi.unrealtypes.fintvector2.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable), [IStruct&lt;FIntVector2&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Fields\r\n\r\n### **X**\r\n\r\n```csharp\r\npublic int X;\r\n```\r\n\r\n### **Y**\r\n\r\n```csharp\r\npublic int Y;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FIntVector2(Int32, Int32)**\r\n\r\n```csharp\r\nFIntVector2(int x, int y)\r\n```\r\n\r\n#### Parameters\r\n\r\n`x` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`y` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FIntVector2(AssetBinaryReader)**\r\n\r\n```csharp\r\nFIntVector2(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFIntVector2 Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FIntVector2](./uassetapi.unrealtypes.fintvector2.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Clone()**\r\n\r\n```csharp\r\nobject Clone()\r\n```\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\nstring ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFIntVector2 FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FIntVector2](./uassetapi.unrealtypes.fintvector2.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.flinearcolor.md",
    "content": "# FLinearColor\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nA linear, 32-bit/component floating point RGBA color.\r\n\r\n```csharp\r\npublic struct FLinearColor\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FLinearColor](./uassetapi.unrealtypes.flinearcolor.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable), [IStruct&lt;FLinearColor&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Fields\r\n\r\n### **R**\r\n\r\n```csharp\r\npublic float R;\r\n```\r\n\r\n### **G**\r\n\r\n```csharp\r\npublic float G;\r\n```\r\n\r\n### **B**\r\n\r\n```csharp\r\npublic float B;\r\n```\r\n\r\n### **A**\r\n\r\n```csharp\r\npublic float A;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FLinearColor(Single, Single, Single, Single)**\r\n\r\n```csharp\r\nFLinearColor(float R, float G, float B, float A)\r\n```\r\n\r\n#### Parameters\r\n\r\n`R` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`G` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`B` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`A` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **FLinearColor(AssetBinaryReader)**\r\n\r\n```csharp\r\nFLinearColor(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Clone()**\r\n\r\n```csharp\r\nobject Clone()\r\n```\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFLinearColor Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FLinearColor](./uassetapi.unrealtypes.flinearcolor.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\nstring ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFLinearColor FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FLinearColor](./uassetapi.unrealtypes.flinearcolor.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.flocmetadataobject.md",
    "content": "# FLocMetadataObject\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic class FLocMetadataObject\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FLocMetadataObject](./uassetapi.unrealtypes.flocmetadataobject.md)\r\n\r\n## Properties\r\n\r\n### **Values**\r\n\r\n```csharp\r\npublic List<FLocMetadataValue> Values { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[List&lt;FLocMetadataValue&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n## Constructors\r\n\r\n### **FLocMetadataObject()**\r\n\r\n```csharp\r\npublic FLocMetadataObject()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fmatrix.md",
    "content": "# FMatrix\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n4x4 matrix of floating point values.\r\n\r\n```csharp\r\npublic struct FMatrix\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FMatrix](./uassetapi.unrealtypes.fmatrix.md)<br>\r\nImplements [IStruct&lt;FMatrix&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Fields\r\n\r\n### **XPlane**\r\n\r\n```csharp\r\npublic FPlane XPlane;\r\n```\r\n\r\n### **YPlane**\r\n\r\n```csharp\r\npublic FPlane YPlane;\r\n```\r\n\r\n### **ZPlane**\r\n\r\n```csharp\r\npublic FPlane ZPlane;\r\n```\r\n\r\n### **WPlane**\r\n\r\n```csharp\r\npublic FPlane WPlane;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FMatrix(FPlane, FPlane, FPlane, FPlane)**\r\n\r\n```csharp\r\nFMatrix(FPlane xPlane, FPlane yPlane, FPlane zPlane, FPlane wPlane)\r\n```\r\n\r\n#### Parameters\r\n\r\n`xPlane` [FPlane](./uassetapi.unrealtypes.fplane.md)<br>\r\n\r\n`yPlane` [FPlane](./uassetapi.unrealtypes.fplane.md)<br>\r\n\r\n`zPlane` [FPlane](./uassetapi.unrealtypes.fplane.md)<br>\r\n\r\n`wPlane` [FPlane](./uassetapi.unrealtypes.fplane.md)<br>\r\n\r\n### **FMatrix(AssetBinaryReader)**\r\n\r\n```csharp\r\nFMatrix(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFMatrix Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FMatrix](./uassetapi.unrealtypes.fmatrix.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFMatrix FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FMatrix](./uassetapi.unrealtypes.fmatrix.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fname.md",
    "content": "# FName\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nUnreal name - consists of an FString (which is serialized as an index in the name map) and an instance number\r\n\r\n```csharp\r\npublic class FName : System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FName](./uassetapi.unrealtypes.fname.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Number**\r\n\r\nInstance number.\r\n\r\n```csharp\r\npublic int Number;\r\n```\r\n\r\n### **Type**\r\n\r\nThe type of this FName; i.e. whether it points to a package-level name table, container-level name table, or global name table. This value is always [EMappedNameType.Package](./uassetapi.unrealtypes.emappednametype.md#package) for non-Zen assets.\r\n\r\n```csharp\r\npublic EMappedNameType Type;\r\n```\r\n\r\n### **Asset**\r\n\r\nThe asset that this FName is bound to.\r\n\r\n```csharp\r\npublic INameMap Asset;\r\n```\r\n\r\n## Properties\r\n\r\n### **Value**\r\n\r\n```csharp\r\npublic FString Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **IsDummy**\r\n\r\n```csharp\r\npublic bool IsDummy { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **IsGlobal**\r\n\r\nDoes this FName point into the global name table? This value is always false for non-Zen assets.\r\n\r\n```csharp\r\npublic bool IsGlobal { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **FName(INameMap, String, Int32)**\r\n\r\nCreates a new FName instance.\r\n\r\n```csharp\r\npublic FName(INameMap asset, string value, int number)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [INameMap](./uassetapi.inamemap.md)<br>\r\nThe asset that this FName is bound to.\r\n\r\n`value` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe string literal that the new FName's value will be, verbatim.\r\n\r\n`number` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe instance number of the new FName.\r\n\r\n### **FName(INameMap, FString, Int32)**\r\n\r\nCreates a new FName instance.\r\n\r\n```csharp\r\npublic FName(INameMap asset, FString value, int number)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [INameMap](./uassetapi.inamemap.md)<br>\r\nThe asset that this FName is bound to.\r\n\r\n`value` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\nThe FString that the FName's value will be, verbatim.\r\n\r\n`number` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe instance number of the new FName.\r\n\r\n### **FName(INameMap, Int32, Int32)**\r\n\r\nCreates a new FName instance.\r\n\r\n```csharp\r\npublic FName(INameMap asset, int index, int number)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [INameMap](./uassetapi.inamemap.md)<br>\r\nThe asset that this FName is bound to.\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe index that this FName's value will be.\r\n\r\n`number` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe instance number of the new FName.\r\n\r\n### **FName(INameMap)**\r\n\r\nCreates a new blank FName instance.\r\n\r\n```csharp\r\npublic FName(INameMap asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [INameMap](./uassetapi.inamemap.md)<br>\r\nThe asset that this FName is bound to.\r\n\r\n### **FName()**\r\n\r\nCreates a new blank FName instance, with no asset bound to it. An asset must be bound to this FName before setting its value.\r\n\r\n```csharp\r\npublic FName()\r\n```\r\n\r\n## Methods\r\n\r\n### **ToString()**\r\n\r\nConverts this FName instance into a human-readable string. This is the inverse of [FName.FromString(INameMap, String)](./uassetapi.unrealtypes.fname.md#fromstringinamemap-string).\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe human-readable string that represents this FName.\r\n\r\n### **FromStringFragments(INameMap, String, String&, Int32&)**\r\n\r\n```csharp\r\ninternal static void FromStringFragments(INameMap asset, string val, String& str, Int32& num)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [INameMap](./uassetapi.inamemap.md)<br>\r\n\r\n`val` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`str` [String&](https://docs.microsoft.com/en-us/dotnet/api/system.string&)<br>\r\n\r\n`num` [Int32&](https://docs.microsoft.com/en-us/dotnet/api/system.int32&)<br>\r\n\r\n### **IsFromStringValid(INameMap, String)**\r\n\r\n```csharp\r\npublic static bool IsFromStringValid(INameMap asset, string val)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [INameMap](./uassetapi.inamemap.md)<br>\r\n\r\n`val` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **FromString(INameMap, String)**\r\n\r\nConverts a human-readable string into an FName instance. This is the inverse of [FName.ToString()](./uassetapi.unrealtypes.fname.md#tostring).\r\n\r\n```csharp\r\npublic static FName FromString(INameMap asset, string val)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [INameMap](./uassetapi.inamemap.md)<br>\r\nThe asset that the new FName will be bound to.\r\n\r\n`val` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe human-readable string to convert into an FName instance.\r\n\r\n#### Returns\r\n\r\n[FName](./uassetapi.unrealtypes.fname.md)<br>\r\nAn FName instance that this string represents.\r\n\r\n### **Transfer(INameMap)**\r\n\r\nCreates a new FName with the same string value and number as the current instance but is bound to a different asset.\r\n\r\n```csharp\r\npublic FName Transfer(INameMap newAsset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`newAsset` [INameMap](./uassetapi.inamemap.md)<br>\r\nThe asset to bound the new FName to.\r\n\r\n#### Returns\r\n\r\n[FName](./uassetapi.unrealtypes.fname.md)<br>\r\nAn equivalent FName bound to a different asset.\r\n\r\n### **DefineDummy(INameMap, FString, Int32)**\r\n\r\nCreates a new dummy FName.\r\n This can be used for cases where a valid FName must be produced without referencing a specific asset's name map.\r\n\r\n\r\n\r\nUSE WITH CAUTION! UAssetAPI must never attempt to serialize a dummy FName to disk.\r\n\r\n```csharp\r\npublic static FName DefineDummy(INameMap asset, FString val, int number)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [INameMap](./uassetapi.inamemap.md)<br>\r\nThe asset that this FName is bound to.\r\n\r\n`val` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\nThe FString that the FName's value will be, verbatim.\r\n\r\n`number` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe instance number of the new FName.\r\n\r\n#### Returns\r\n\r\n[FName](./uassetapi.unrealtypes.fname.md)<br>\r\nA dummy FName instance that represents the string.\r\n\r\n### **DefineDummy(INameMap, String, Int32)**\r\n\r\nCreates a new dummy FName.\r\n This can be used for cases where a valid FName must be produced without referencing a specific asset's name map.\r\n\r\n\r\n\r\nUSE WITH CAUTION! UAssetAPI must never attempt to serialize a dummy FName to disk.\r\n\r\n```csharp\r\npublic static FName DefineDummy(INameMap asset, string val, int number)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [INameMap](./uassetapi.inamemap.md)<br>\r\nThe asset that this FName is bound to.\r\n\r\n`val` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe string literal that the FName's value will be, verbatim.\r\n\r\n`number` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe instance number of the new FName.\r\n\r\n#### Returns\r\n\r\n[FName](./uassetapi.unrealtypes.fname.md)<br>\r\nA dummy FName instance that represents the string.\r\n\r\n### **Equals(Object)**\r\n\r\n```csharp\r\npublic bool Equals(object obj)\r\n```\r\n\r\n#### Parameters\r\n\r\n`obj` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **GetHashCode()**\r\n\r\n```csharp\r\npublic int GetHashCode()\r\n```\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Clone()**\r\n\r\n```csharp\r\npublic object Clone()\r\n```\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fniagaradatainterfacegeneratedfunction.md",
    "content": "# FNiagaraDataInterfaceGeneratedFunction\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic class FNiagaraDataInterfaceGeneratedFunction\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FNiagaraDataInterfaceGeneratedFunction](./uassetapi.unrealtypes.fniagaradatainterfacegeneratedfunction.md)\r\n\r\n## Fields\r\n\r\n### **DefinitionName**\r\n\r\n```csharp\r\npublic FName DefinitionName;\r\n```\r\n\r\n### **InstanceName**\r\n\r\n```csharp\r\npublic FString InstanceName;\r\n```\r\n\r\n### **Specifiers**\r\n\r\n```csharp\r\npublic ValueTuple`2[] Specifiers;\r\n```\r\n\r\n### **VariadicInputs**\r\n\r\n```csharp\r\npublic FNiagaraVariableCommonReference[] VariadicInputs;\r\n```\r\n\r\n### **VariadicOutputs**\r\n\r\n```csharp\r\npublic FNiagaraVariableCommonReference[] VariadicOutputs;\r\n```\r\n\r\n### **MiscUsageBitMask**\r\n\r\n```csharp\r\npublic ushort MiscUsageBitMask;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FNiagaraDataInterfaceGeneratedFunction()**\r\n\r\n```csharp\r\npublic FNiagaraDataInterfaceGeneratedFunction()\r\n```\r\n\r\n### **FNiagaraDataInterfaceGeneratedFunction(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FNiagaraDataInterfaceGeneratedFunction(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fniagaradatainterfacegpuparaminfo.md",
    "content": "# FNiagaraDataInterfaceGPUParamInfo\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic class FNiagaraDataInterfaceGPUParamInfo : UAssetAPI.PropertyTypes.Objects.IStruct`1[[UAssetAPI.UnrealTypes.FNiagaraDataInterfaceGPUParamInfo]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FNiagaraDataInterfaceGPUParamInfo](./uassetapi.unrealtypes.fniagaradatainterfacegpuparaminfo.md)<br>\r\nImplements [IStruct&lt;FNiagaraDataInterfaceGPUParamInfo&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Fields\r\n\r\n### **DataInterfaceHLSLSymbol**\r\n\r\n```csharp\r\npublic FString DataInterfaceHLSLSymbol;\r\n```\r\n\r\n### **DIClassName**\r\n\r\n```csharp\r\npublic FString DIClassName;\r\n```\r\n\r\n### **GeneratedFunctions**\r\n\r\n```csharp\r\npublic FNiagaraDataInterfaceGeneratedFunction[] GeneratedFunctions;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FNiagaraDataInterfaceGPUParamInfo()**\r\n\r\n```csharp\r\npublic FNiagaraDataInterfaceGPUParamInfo()\r\n```\r\n\r\n### **FNiagaraDataInterfaceGPUParamInfo(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FNiagaraDataInterfaceGPUParamInfo(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic static FNiagaraDataInterfaceGPUParamInfo Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FNiagaraDataInterfaceGPUParamInfo](./uassetapi.unrealtypes.fniagaradatainterfacegpuparaminfo.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic static FNiagaraDataInterfaceGPUParamInfo FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FNiagaraDataInterfaceGPUParamInfo](./uassetapi.unrealtypes.fniagaradatainterfacegpuparaminfo.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fniagaravariablecommonreference.md",
    "content": "# FNiagaraVariableCommonReference\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic struct FNiagaraVariableCommonReference\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FNiagaraVariableCommonReference](./uassetapi.unrealtypes.fniagaravariablecommonreference.md)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Type**\r\n\r\n```csharp\r\npublic FPackageIndex Type;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FNiagaraVariableCommonReference(AssetBinaryReader)**\r\n\r\n```csharp\r\nFNiagaraVariableCommonReference(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nvoid Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fobjectdataresource.md",
    "content": "# FObjectDataResource\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nUObject binary/bulk data resource type.\r\n\r\n```csharp\r\npublic struct FObjectDataResource\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FObjectDataResource](./uassetapi.unrealtypes.fobjectdataresource.md)\r\n\r\n## Fields\r\n\r\n### **Flags**\r\n\r\n```csharp\r\npublic EObjectDataResourceFlags Flags;\r\n```\r\n\r\n### **CookedIndex**\r\n\r\n```csharp\r\npublic byte CookedIndex;\r\n```\r\n\r\n### **SerialOffset**\r\n\r\n```csharp\r\npublic long SerialOffset;\r\n```\r\n\r\n### **DuplicateSerialOffset**\r\n\r\n```csharp\r\npublic long DuplicateSerialOffset;\r\n```\r\n\r\n### **SerialSize**\r\n\r\n```csharp\r\npublic long SerialSize;\r\n```\r\n\r\n### **RawSize**\r\n\r\n```csharp\r\npublic long RawSize;\r\n```\r\n\r\n### **OuterIndex**\r\n\r\n```csharp\r\npublic FPackageIndex OuterIndex;\r\n```\r\n\r\n### **LegacyBulkDataFlags**\r\n\r\n```csharp\r\npublic uint LegacyBulkDataFlags;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FObjectDataResource(EObjectDataResourceFlags, Int64, Int64, Int64, Int64, FPackageIndex, UInt32, Byte)**\r\n\r\n```csharp\r\nFObjectDataResource(EObjectDataResourceFlags Flags, long SerialOffset, long DuplicateSerialOffset, long SerialSize, long RawSize, FPackageIndex OuterIndex, uint LegacyBulkDataFlags, byte CookedIndex)\r\n```\r\n\r\n#### Parameters\r\n\r\n`Flags` [EObjectDataResourceFlags](./uassetapi.unrealtypes.eobjectdataresourceflags.md)<br>\r\n\r\n`SerialOffset` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`DuplicateSerialOffset` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`SerialSize` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`RawSize` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`OuterIndex` [FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\n\r\n`LegacyBulkDataFlags` [UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n`CookedIndex` [Byte](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fobjectthumbnail.md",
    "content": "# FObjectThumbnail\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nUnreal Object Thumbnail - Thumbnail image data for an object.\r\n\r\n```csharp\r\npublic class FObjectThumbnail\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FObjectThumbnail](./uassetapi.unrealtypes.fobjectthumbnail.md)\r\n\r\n## Fields\r\n\r\n### **Width**\r\n\r\nThumbnail width\r\n\r\n```csharp\r\npublic int Width;\r\n```\r\n\r\n### **Height**\r\n\r\nThumbnail height\r\n\r\n```csharp\r\npublic int Height;\r\n```\r\n\r\n### **CompressedImageData**\r\n\r\nCompressed image data bytes\r\n\r\n```csharp\r\npublic Byte[] CompressedImageData;\r\n```\r\n\r\n### **ImageData**\r\n\r\nImage data bytes\r\n\r\n```csharp\r\npublic Byte[] ImageData;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FObjectThumbnail()**\r\n\r\n```csharp\r\npublic FObjectThumbnail()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fpackageindex.md",
    "content": "# FPackageIndex\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nWrapper for index into an ImportMap or ExportMap.\r\n \r\n Values greater than zero indicate that this is an index into the ExportMap.\r\n The actual array index will be (FPackageIndex - 1).\r\n \r\n Values less than zero indicate that this is an index into the ImportMap.\r\n The actual array index will be (-FPackageIndex - 1)\r\n\r\n```csharp\r\npublic class FPackageIndex\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)\r\n\r\n## Fields\r\n\r\n### **Index**\r\n\r\nValues greater than zero indicate that this is an index into the ExportMap.\r\n The actual array index will be (FPackageIndex - 1).\r\n \r\n Values less than zero indicate that this is an index into the ImportMap.\r\n The actual array index will be (-FPackageIndex - 1)\r\n\r\n```csharp\r\npublic int Index;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FPackageIndex(Int32)**\r\n\r\n```csharp\r\npublic FPackageIndex(int index)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FPackageIndex(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FPackageIndex(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **FromRawIndex(Int32)**\r\n\r\nReturns an FPackageIndex based off of the index provided. Equivalent to [FPackageIndex.FPackageIndex(Int32)](./uassetapi.unrealtypes.fpackageindex.md#fpackageindexint32).\r\n\r\n```csharp\r\npublic static FPackageIndex FromRawIndex(int index)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe index to create a new FPackageIndex with.\r\n\r\n#### Returns\r\n\r\n[FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\nA new FPackageIndex with the index provided.\r\n\r\n### **IsImport()**\r\n\r\nReturns true if this is an index into the import map.\r\n\r\n```csharp\r\npublic bool IsImport()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\ntrue if this is an index into the import map, false otherwise\r\n\r\n### **IsExport()**\r\n\r\nReturns true if this is an index into the export map.\r\n\r\n```csharp\r\npublic bool IsExport()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\ntrue if this is an index into the export map, false otherwise\r\n\r\n### **IsNull()**\r\n\r\nReturn true if this represents null (i.e. neither an import nor an export)\r\n\r\n```csharp\r\npublic bool IsNull()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\ntrue if this index represents null, false otherwise\r\n\r\n### **FromImport(Int32)**\r\n\r\nCreates a FPackageIndex from an index in the import map.\r\n\r\n```csharp\r\npublic static FPackageIndex FromImport(int importIndex)\r\n```\r\n\r\n#### Parameters\r\n\r\n`importIndex` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nAn import index to create an FPackageIndex from.\r\n\r\n#### Returns\r\n\r\n[FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\nAn FPackageIndex created from the import index.\r\n\r\n#### Exceptions\r\n\r\n[InvalidOperationException](https://docs.microsoft.com/en-us/dotnet/api/system.invalidoperationexception)<br>\r\nThrown when the provided import index is less than zero.\r\n\r\n### **FromExport(Int32)**\r\n\r\nCreates a FPackageIndex from an index in the export map.\r\n\r\n```csharp\r\npublic static FPackageIndex FromExport(int exportIndex)\r\n```\r\n\r\n#### Parameters\r\n\r\n`exportIndex` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nAn export index to create an FPackageIndex from.\r\n\r\n#### Returns\r\n\r\n[FPackageIndex](./uassetapi.unrealtypes.fpackageindex.md)<br>\r\nAn FPackageIndex created from the export index.\r\n\r\n#### Exceptions\r\n\r\n[InvalidOperationException](https://docs.microsoft.com/en-us/dotnet/api/system.invalidoperationexception)<br>\r\nThrown when the provided export index is less than zero.\r\n\r\n### **ToImport(UAsset)**\r\n\r\nCheck that this is an import index and return the corresponding import.\r\n\r\n```csharp\r\npublic Import ToImport(UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\nThe asset that this index is used in.\r\n\r\n#### Returns\r\n\r\n[Import](./uassetapi.import.md)<br>\r\nThe import that this index represents in the import map.\r\n\r\n#### Exceptions\r\n\r\n[InvalidOperationException](https://docs.microsoft.com/en-us/dotnet/api/system.invalidoperationexception)<br>\r\nThrown when this is not an index into the import map.\r\n\r\n### **ToExport(UAsset)**\r\n\r\nCheck that this is an export index and return the corresponding export.\r\n\r\n```csharp\r\npublic Export ToExport(UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\nThe asset that this index is used in.\r\n\r\n#### Returns\r\n\r\n[Export](./uassetapi.exporttypes.export.md)<br>\r\nThe export that this index represents in the the export map.\r\n\r\n#### Exceptions\r\n\r\n[InvalidOperationException](https://docs.microsoft.com/en-us/dotnet/api/system.invalidoperationexception)<br>\r\nThrown when this is not an index into the export map.\r\n\r\n### **ToExport&lt;T&gt;(UAsset)**\r\n\r\n```csharp\r\npublic T ToExport<T>(UAsset asset)\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\nT<br>\r\n\r\n### **Equals(Object)**\r\n\r\n```csharp\r\npublic bool Equals(object obj)\r\n```\r\n\r\n#### Parameters\r\n\r\n`obj` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **GetHashCode()**\r\n\r\n```csharp\r\npublic int GetHashCode()\r\n```\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fplane.md",
    "content": "# FPlane\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nStructure for three dimensional planes.\r\n Stores the coeffecients as Xx+Yy+Zz=W.\r\n This is different from many other Plane classes that use Xx+Yy+Zz+W=0.\r\n\r\n```csharp\r\npublic struct FPlane\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FPlane](./uassetapi.unrealtypes.fplane.md)<br>\r\nImplements [IStruct&lt;FPlane&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Properties\r\n\r\n### **X**\r\n\r\nThe plane's X-component.\r\n\r\n```csharp\r\npublic double X { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **XFloat**\r\n\r\n```csharp\r\npublic float XFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **Y**\r\n\r\nThe plane's Y-component.\r\n\r\n```csharp\r\npublic double Y { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **YFloat**\r\n\r\n```csharp\r\npublic float YFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **Z**\r\n\r\nThe plane's Z-component.\r\n\r\n```csharp\r\npublic double Z { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **ZFloat**\r\n\r\n```csharp\r\npublic float ZFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **W**\r\n\r\nThe plane's W-component.\r\n\r\n```csharp\r\npublic double W { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **WFloat**\r\n\r\n```csharp\r\npublic float WFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n## Constructors\r\n\r\n### **FPlane(Double, Double, Double, Double)**\r\n\r\n```csharp\r\nFPlane(double x, double y, double z, double w)\r\n```\r\n\r\n#### Parameters\r\n\r\n`x` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n`y` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n`z` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n`w` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **FPlane(Single, Single, Single, Single)**\r\n\r\n```csharp\r\nFPlane(float x, float y, float z, float w)\r\n```\r\n\r\n#### Parameters\r\n\r\n`x` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`y` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`z` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`w` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **FPlane(AssetBinaryReader)**\r\n\r\n```csharp\r\nFPlane(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFPlane Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FPlane](./uassetapi.unrealtypes.fplane.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\nstring ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFPlane FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FPlane](./uassetapi.unrealtypes.fplane.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fpropertytypename.md",
    "content": "# FPropertyTypeName\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic class FPropertyTypeName\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FPropertyTypeName](./uassetapi.unrealtypes.fpropertytypename.md)\r\n\r\n## Fields\r\n\r\n### **Nodes**\r\n\r\n```csharp\r\npublic List<FPropertyTypeNameNode> Nodes;\r\n```\r\n\r\n### **ShouldSerializeNodes**\r\n\r\n```csharp\r\npublic bool ShouldSerializeNodes;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FPropertyTypeName(List&lt;FPropertyTypeNameNode&gt;, Boolean)**\r\n\r\n```csharp\r\npublic FPropertyTypeName(List<FPropertyTypeNameNode> list, bool shouldSerialize)\r\n```\r\n\r\n#### Parameters\r\n\r\n`list` [List&lt;FPropertyTypeNameNode&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n`shouldSerialize` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **FPropertyTypeName(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FPropertyTypeName(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n### **GetName()**\r\n\r\n```csharp\r\npublic FName GetName()\r\n```\r\n\r\n#### Returns\r\n\r\n[FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **GetParameter(Int32)**\r\n\r\n```csharp\r\npublic FPropertyTypeName GetParameter(int paramIndex)\r\n```\r\n\r\n#### Parameters\r\n\r\n`paramIndex` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n#### Returns\r\n\r\n[FPropertyTypeName](./uassetapi.unrealtypes.fpropertytypename.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fpropertytypenameconverter.md",
    "content": "# FPropertyTypeNameConverter\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic class FPropertyTypeNameConverter : Newtonsoft.Json.JsonConverter`1[[UAssetAPI.UnrealTypes.FPropertyTypeName]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → JsonConverter → JsonConverter&lt;FPropertyTypeName&gt; → [FPropertyTypeNameConverter](./uassetapi.unrealtypes.fpropertytypenameconverter.md)\r\n\r\n## Properties\r\n\r\n### **CanRead**\r\n\r\n```csharp\r\npublic bool CanRead { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **CanWrite**\r\n\r\n```csharp\r\npublic bool CanWrite { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **FPropertyTypeNameConverter()**\r\n\r\n```csharp\r\npublic FPropertyTypeNameConverter()\r\n```\r\n\r\n## Methods\r\n\r\n### **WriteJson(JsonWriter, FPropertyTypeName, JsonSerializer)**\r\n\r\n```csharp\r\npublic void WriteJson(JsonWriter writer, FPropertyTypeName value, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` JsonWriter<br>\r\n\r\n`value` [FPropertyTypeName](./uassetapi.unrealtypes.fpropertytypename.md)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n\r\n### **ReadJson(JsonReader, Type, FPropertyTypeName, Boolean, JsonSerializer)**\r\n\r\n```csharp\r\npublic FPropertyTypeName ReadJson(JsonReader reader, Type objectType, FPropertyTypeName existingValue, bool hasExistingValue, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` JsonReader<br>\r\n\r\n`objectType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n`existingValue` [FPropertyTypeName](./uassetapi.unrealtypes.fpropertytypename.md)<br>\r\n\r\n`hasExistingValue` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n\r\n#### Returns\r\n\r\n[FPropertyTypeName](./uassetapi.unrealtypes.fpropertytypename.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fpropertytypenamenode.md",
    "content": "# FPropertyTypeNameNode\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic struct FPropertyTypeNameNode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FPropertyTypeNameNode](./uassetapi.unrealtypes.fpropertytypenamenode.md)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **InnerCount**\r\n\r\n```csharp\r\npublic int InnerCount;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FPropertyTypeNameNode(AssetBinaryReader)**\r\n\r\n```csharp\r\nFPropertyTypeNameNode(AssetBinaryReader Ar)\r\n```\r\n\r\n#### Parameters\r\n\r\n`Ar` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fqualifiedframetime.md",
    "content": "# FQualifiedFrameTime\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic struct FQualifiedFrameTime\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FQualifiedFrameTime](./uassetapi.unrealtypes.fqualifiedframetime.md)\r\n\r\n## Fields\r\n\r\n### **Time**\r\n\r\n```csharp\r\npublic FFrameTime Time;\r\n```\r\n\r\n### **Rate**\r\n\r\n```csharp\r\npublic FFrameRate Rate;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FQualifiedFrameTime()**\r\n\r\n```csharp\r\nFQualifiedFrameTime()\r\n```\r\n\r\n### **FQualifiedFrameTime(FFrameTime, FFrameRate)**\r\n\r\n```csharp\r\nFQualifiedFrameTime(FFrameTime time, FFrameRate rate)\r\n```\r\n\r\n#### Parameters\r\n\r\n`time` [FFrameTime](./uassetapi.unrealtypes.fframetime.md)<br>\r\n\r\n`rate` [FFrameRate](./uassetapi.unrealtypes.fframerate.md)<br>\r\n\r\n### **FQualifiedFrameTime(AssetBinaryReader)**\r\n\r\n```csharp\r\nFQualifiedFrameTime(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nvoid Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fquat.md",
    "content": "# FQuat\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nFloating point quaternion that can represent a rotation about an axis in 3-D space.\r\n The X, Y, Z, W components also double as the Axis/Angle format.\r\n\r\n```csharp\r\npublic struct FQuat\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FQuat](./uassetapi.unrealtypes.fquat.md)<br>\r\nImplements [IStruct&lt;FQuat&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Properties\r\n\r\n### **X**\r\n\r\nThe quaternion's X-component.\r\n\r\n```csharp\r\npublic double X { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **XFloat**\r\n\r\n```csharp\r\npublic float XFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **Y**\r\n\r\nThe quaternion's Y-component.\r\n\r\n```csharp\r\npublic double Y { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **YFloat**\r\n\r\n```csharp\r\npublic float YFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **Z**\r\n\r\nThe quaternion's Z-component.\r\n\r\n```csharp\r\npublic double Z { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **ZFloat**\r\n\r\n```csharp\r\npublic float ZFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **W**\r\n\r\nThe quaternion's W-component.\r\n\r\n```csharp\r\npublic double W { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **WFloat**\r\n\r\n```csharp\r\npublic float WFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n## Constructors\r\n\r\n### **FQuat(Double, Double, Double, Double)**\r\n\r\n```csharp\r\nFQuat(double x, double y, double z, double w)\r\n```\r\n\r\n#### Parameters\r\n\r\n`x` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n`y` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n`z` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n`w` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **FQuat(Single, Single, Single, Single)**\r\n\r\n```csharp\r\nFQuat(float x, float y, float z, float w)\r\n```\r\n\r\n#### Parameters\r\n\r\n`x` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`y` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`z` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`w` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **FQuat(AssetBinaryReader)**\r\n\r\n```csharp\r\nFQuat(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFQuat Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FQuat](./uassetapi.unrealtypes.fquat.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\nstring ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFQuat FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FQuat](./uassetapi.unrealtypes.fquat.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.frichcurvekey.md",
    "content": "# FRichCurveKey\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nOne key in a rich, editable float curve\r\n\r\n```csharp\r\npublic struct FRichCurveKey\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FRichCurveKey](./uassetapi.unrealtypes.frichcurvekey.md)<br>\r\nImplements [IStruct&lt;FRichCurveKey&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Fields\r\n\r\n### **InterpMode**\r\n\r\n```csharp\r\npublic ERichCurveInterpMode InterpMode;\r\n```\r\n\r\n### **TangentMode**\r\n\r\n```csharp\r\npublic ERichCurveTangentMode TangentMode;\r\n```\r\n\r\n### **TangentWeightMode**\r\n\r\n```csharp\r\npublic ERichCurveTangentWeightMode TangentWeightMode;\r\n```\r\n\r\n### **Time**\r\n\r\n```csharp\r\npublic float Time;\r\n```\r\n\r\n### **Value**\r\n\r\n```csharp\r\npublic float Value;\r\n```\r\n\r\n### **ArriveTangent**\r\n\r\n```csharp\r\npublic float ArriveTangent;\r\n```\r\n\r\n### **ArriveTangentWeight**\r\n\r\n```csharp\r\npublic float ArriveTangentWeight;\r\n```\r\n\r\n### **LeaveTangent**\r\n\r\n```csharp\r\npublic float LeaveTangent;\r\n```\r\n\r\n### **LeaveTangentWeight**\r\n\r\n```csharp\r\npublic float LeaveTangentWeight;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FRichCurveKey()**\r\n\r\n```csharp\r\nFRichCurveKey()\r\n```\r\n\r\n### **FRichCurveKey(ERichCurveInterpMode, ERichCurveTangentMode, ERichCurveTangentWeightMode, Single, Single, Single, Single, Single, Single)**\r\n\r\n```csharp\r\nFRichCurveKey(ERichCurveInterpMode interpMode, ERichCurveTangentMode tangentMode, ERichCurveTangentWeightMode tangentWeightMode, float time, float value, float arriveTangent, float arriveTangentWeight, float leaveTangent, float leaveTangentWeight)\r\n```\r\n\r\n#### Parameters\r\n\r\n`interpMode` [ERichCurveInterpMode](./uassetapi.unrealtypes.engineenums.erichcurveinterpmode.md)<br>\r\n\r\n`tangentMode` [ERichCurveTangentMode](./uassetapi.unrealtypes.engineenums.erichcurvetangentmode.md)<br>\r\n\r\n`tangentWeightMode` [ERichCurveTangentWeightMode](./uassetapi.unrealtypes.engineenums.erichcurvetangentweightmode.md)<br>\r\n\r\n`time` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`value` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`arriveTangent` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`arriveTangentWeight` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`leaveTangent` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`leaveTangentWeight` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **FRichCurveKey(AssetBinaryReader)**\r\n\r\n```csharp\r\nFRichCurveKey(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFRichCurveKey Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FRichCurveKey](./uassetapi.unrealtypes.frichcurvekey.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\nstring ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFRichCurveKey FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FRichCurveKey](./uassetapi.unrealtypes.frichcurvekey.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.frotator.md",
    "content": "# FRotator\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nImplements a container for rotation information.\r\n All rotation values are stored in degrees.\r\n\r\n```csharp\r\npublic struct FRotator\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FRotator](./uassetapi.unrealtypes.frotator.md)<br>\r\nImplements [IStruct&lt;FRotator&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Properties\r\n\r\n### **Pitch**\r\n\r\nRotation around the right axis (around Y axis), Looking up and down (0=Straight Ahead, +Up, -Down)\r\n\r\n```csharp\r\npublic double Pitch { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **PitchFloat**\r\n\r\n```csharp\r\npublic float PitchFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **Yaw**\r\n\r\nRotation around the up axis (around Z axis), Running in circles 0=East, +North, -South.\r\n\r\n```csharp\r\npublic double Yaw { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **YawFloat**\r\n\r\n```csharp\r\npublic float YawFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **Roll**\r\n\r\nRotation around the forward axis (around X axis), Tilting your head, 0=Straight, +Clockwise, -CCW.\r\n\r\n```csharp\r\npublic double Roll { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **RollFloat**\r\n\r\n```csharp\r\npublic float RollFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n## Constructors\r\n\r\n### **FRotator(Double, Double, Double)**\r\n\r\n```csharp\r\nFRotator(double pitch, double yaw, double roll)\r\n```\r\n\r\n#### Parameters\r\n\r\n`pitch` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n`yaw` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n`roll` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **FRotator(Single, Single, Single)**\r\n\r\n```csharp\r\nFRotator(float pitch, float yaw, float roll)\r\n```\r\n\r\n#### Parameters\r\n\r\n`pitch` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`yaw` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`roll` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **FRotator(AssetBinaryReader)**\r\n\r\n```csharp\r\nFRotator(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFRotator Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FRotator](./uassetapi.unrealtypes.frotator.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\nstring ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFRotator FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FRotator](./uassetapi.unrealtypes.frotator.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fskeletalmeshareaweightedtrianglesampler.md",
    "content": "# FSkeletalMeshAreaWeightedTriangleSampler\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nAllows area weighted sampling of triangles on a skeletal mesh.\r\n\r\n```csharp\r\npublic class FSkeletalMeshAreaWeightedTriangleSampler : FWeightedRandomSampler, System.ICloneable, UAssetAPI.PropertyTypes.Objects.IStruct`1[[UAssetAPI.UnrealTypes.FWeightedRandomSampler]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FWeightedRandomSampler](./uassetapi.unrealtypes.fweightedrandomsampler.md) → [FSkeletalMeshAreaWeightedTriangleSampler](./uassetapi.unrealtypes.fskeletalmeshareaweightedtrianglesampler.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable), [IStruct&lt;FWeightedRandomSampler&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Fields\r\n\r\n### **Prob**\r\n\r\n```csharp\r\npublic Single[] Prob;\r\n```\r\n\r\n### **Alias**\r\n\r\n```csharp\r\npublic Int32[] Alias;\r\n```\r\n\r\n### **TotalWeight**\r\n\r\n```csharp\r\npublic float TotalWeight;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FSkeletalMeshAreaWeightedTriangleSampler(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FSkeletalMeshAreaWeightedTriangleSampler(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **FSkeletalMeshAreaWeightedTriangleSampler()**\r\n\r\n```csharp\r\npublic FSkeletalMeshAreaWeightedTriangleSampler()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fskeletalmeshsamplingregionbuiltdata.md",
    "content": "# FSkeletalMeshSamplingRegionBuiltData\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nBuilt data for sampling a single region of a skeletal mesh\r\n\r\n```csharp\r\npublic class FSkeletalMeshSamplingRegionBuiltData : UAssetAPI.PropertyTypes.Objects.IStruct`1[[UAssetAPI.UnrealTypes.FSkeletalMeshSamplingRegionBuiltData]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FSkeletalMeshSamplingRegionBuiltData](./uassetapi.unrealtypes.fskeletalmeshsamplingregionbuiltdata.md)<br>\r\nImplements [IStruct&lt;FSkeletalMeshSamplingRegionBuiltData&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Fields\r\n\r\n### **TriangleIndices**\r\n\r\n```csharp\r\npublic Int32[] TriangleIndices;\r\n```\r\n\r\n### **Vertices**\r\n\r\n```csharp\r\npublic Int32[] Vertices;\r\n```\r\n\r\n### **BoneIndices**\r\n\r\n```csharp\r\npublic Int32[] BoneIndices;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FSkeletalMeshSamplingRegionBuiltData()**\r\n\r\n```csharp\r\npublic FSkeletalMeshSamplingRegionBuiltData()\r\n```\r\n\r\n### **FSkeletalMeshSamplingRegionBuiltData(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FSkeletalMeshSamplingRegionBuiltData(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic static FSkeletalMeshSamplingRegionBuiltData Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FSkeletalMeshSamplingRegionBuiltData](./uassetapi.unrealtypes.fskeletalmeshsamplingregionbuiltdata.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic static FSkeletalMeshSamplingRegionBuiltData FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FSkeletalMeshSamplingRegionBuiltData](./uassetapi.unrealtypes.fskeletalmeshsamplingregionbuiltdata.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fstring.md",
    "content": "# FString\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nUnreal string - consists of a string and an encoding\r\n\r\n```csharp\r\npublic class FString : System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Value**\r\n\r\n```csharp\r\npublic string Value;\r\n```\r\n\r\n### **Encoding**\r\n\r\n```csharp\r\npublic Encoding Encoding;\r\n```\r\n\r\n### **IsCasePreserving**\r\n\r\nIs this FString case preserving?\r\n\r\n```csharp\r\npublic bool IsCasePreserving;\r\n```\r\n\r\n### **NullCase**\r\n\r\n```csharp\r\npublic static string NullCase;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FString(String, Encoding)**\r\n\r\n```csharp\r\npublic FString(string value, Encoding encoding)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`encoding` [Encoding](https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding)<br>\r\n\r\n### **FString()**\r\n\r\n```csharp\r\npublic FString()\r\n```\r\n\r\n## Methods\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **Equals(Object)**\r\n\r\n```csharp\r\npublic bool Equals(object obj)\r\n```\r\n\r\n#### Parameters\r\n\r\n`obj` [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **GetHashCode()**\r\n\r\n```csharp\r\npublic int GetHashCode()\r\n```\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Clone()**\r\n\r\n```csharp\r\npublic object Clone()\r\n```\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **FromString(String, Encoding)**\r\n\r\n```csharp\r\npublic static FString FromString(string value, Encoding encoding)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`encoding` [Encoding](https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding)<br>\r\n\r\n#### Returns\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.ftextsourcedata.md",
    "content": "# FTextSourceData\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic struct FTextSourceData\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FTextSourceData](./uassetapi.unrealtypes.ftextsourcedata.md)\r\n\r\n## Properties\r\n\r\n### **SourceString**\r\n\r\n```csharp\r\npublic FString SourceString { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **SourceStringMetaData**\r\n\r\n```csharp\r\npublic FLocMetadataObject SourceStringMetaData { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FLocMetadataObject](./uassetapi.unrealtypes.flocmetadataobject.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.ftextsourcesitecontext.md",
    "content": "# FTextSourceSiteContext\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic struct FTextSourceSiteContext\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FTextSourceSiteContext](./uassetapi.unrealtypes.ftextsourcesitecontext.md)\r\n\r\n## Properties\r\n\r\n### **KeyName**\r\n\r\n```csharp\r\npublic FString KeyName { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **SiteDescription**\r\n\r\n```csharp\r\npublic FString SiteDescription { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **IsEditorOnly**\r\n\r\n```csharp\r\npublic bool IsEditorOnly { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **IsOptional**\r\n\r\n```csharp\r\npublic bool IsOptional { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **InfoMetaData**\r\n\r\n```csharp\r\npublic FLocMetadataObject InfoMetaData { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FLocMetadataObject](./uassetapi.unrealtypes.flocmetadataobject.md)<br>\r\n\r\n### **KeyMetaData**\r\n\r\n```csharp\r\npublic FLocMetadataObject KeyMetaData { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FLocMetadataObject](./uassetapi.unrealtypes.flocmetadataobject.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.ftimecode.md",
    "content": "# FTimecode\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic struct FTimecode\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FTimecode](./uassetapi.unrealtypes.ftimecode.md)\r\n\r\n## Fields\r\n\r\n### **Hours**\r\n\r\n```csharp\r\npublic int Hours;\r\n```\r\n\r\n### **Minutes**\r\n\r\n```csharp\r\npublic int Minutes;\r\n```\r\n\r\n### **Seconds**\r\n\r\n```csharp\r\npublic int Seconds;\r\n```\r\n\r\n### **Frames**\r\n\r\n```csharp\r\npublic int Frames;\r\n```\r\n\r\n### **bDropFrameFormat**\r\n\r\n```csharp\r\npublic bool bDropFrameFormat;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FTimecode()**\r\n\r\n```csharp\r\nFTimecode()\r\n```\r\n\r\n### **FTimecode(Int32, Int32, Int32, Int32, Boolean)**\r\n\r\n```csharp\r\nFTimecode(int hours, int minutes, int seconds, int frames, bool bDropFrameFormat)\r\n```\r\n\r\n#### Parameters\r\n\r\n`hours` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`minutes` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`seconds` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`frames` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`bDropFrameFormat` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **FTimecode(AssetBinaryReader)**\r\n\r\n```csharp\r\nFTimecode(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nvoid Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.ftransform.md",
    "content": "# FTransform\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nTransform composed of Scale, Rotation (as a quaternion), and Translation.\r\n Transforms can be used to convert from one space to another, for example by transforming\r\n positions and directions from local space to world space.\r\n \r\n Transformation of position vectors is applied in the order: Scale -&gt; Rotate -&gt; Translate.\r\n Transformation of direction vectors is applied in the order: Scale -&gt; Rotate.\r\n \r\n Order matters when composing transforms: C = A * B will yield a transform C that logically\r\n first applies A then B to any subsequent transformation. Note that this is the opposite order of quaternion (FQuat) multiplication.\r\n \r\n Example: LocalToWorld = (DeltaRotation * LocalToWorld) will change rotation in local space by DeltaRotation.\r\n Example: LocalToWorld = (LocalToWorld * DeltaRotation) will change rotation in world space by DeltaRotation.\r\n\r\n```csharp\r\npublic struct FTransform\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FTransform](./uassetapi.unrealtypes.ftransform.md)\r\n\r\n## Fields\r\n\r\n### **Rotation**\r\n\r\nRotation of this transformation, as a quaternion\r\n\r\n```csharp\r\npublic FQuat Rotation;\r\n```\r\n\r\n### **Translation**\r\n\r\nTranslation of this transformation, as a vector.\r\n\r\n```csharp\r\npublic FVector Translation;\r\n```\r\n\r\n### **Scale3D**\r\n\r\n3D scale (always applied in local space) as a vector.\r\n\r\n```csharp\r\npublic FVector Scale3D;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FTransform(FQuat, FVector, FVector)**\r\n\r\n```csharp\r\nFTransform(FQuat rotation, FVector translation, FVector scale3D)\r\n```\r\n\r\n#### Parameters\r\n\r\n`rotation` [FQuat](./uassetapi.unrealtypes.fquat.md)<br>\r\n\r\n`translation` [FVector](./uassetapi.unrealtypes.fvector.md)<br>\r\n\r\n`scale3D` [FVector](./uassetapi.unrealtypes.fvector.md)<br>\r\n\r\n### **FTransform(AssetBinaryReader)**\r\n\r\n```csharp\r\nFTransform(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.ftwovectors.md",
    "content": "# FTwoVectors\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic struct FTwoVectors\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FTwoVectors](./uassetapi.unrealtypes.ftwovectors.md)<br>\r\nImplements [IStruct&lt;FTwoVectors&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Fields\r\n\r\n### **V1**\r\n\r\n```csharp\r\npublic FVector V1;\r\n```\r\n\r\n### **V2**\r\n\r\n```csharp\r\npublic FVector V2;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FTwoVectors(FVector, FVector)**\r\n\r\n```csharp\r\nFTwoVectors(FVector v1, FVector v2)\r\n```\r\n\r\n#### Parameters\r\n\r\n`v1` [FVector](./uassetapi.unrealtypes.fvector.md)<br>\r\n\r\n`v2` [FVector](./uassetapi.unrealtypes.fvector.md)<br>\r\n\r\n### **FTwoVectors(AssetBinaryReader)**\r\n\r\n```csharp\r\nFTwoVectors(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFTwoVectors Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FTwoVectors](./uassetapi.unrealtypes.ftwovectors.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\nstring ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFTwoVectors FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FTwoVectors](./uassetapi.unrealtypes.ftwovectors.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.funiquenetid.md",
    "content": "# FUniqueNetId\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic class FUniqueNetId\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FUniqueNetId](./uassetapi.unrealtypes.funiquenetid.md)\r\n\r\n## Fields\r\n\r\n### **Type**\r\n\r\n```csharp\r\npublic FName Type;\r\n```\r\n\r\n### **Contents**\r\n\r\n```csharp\r\npublic FString Contents;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FUniqueNetId(FName, FString)**\r\n\r\n```csharp\r\npublic FUniqueNetId(FName type, FString contents)\r\n```\r\n\r\n#### Parameters\r\n\r\n`type` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`contents` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **FUniqueNetId(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FUniqueNetId(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fvector.md",
    "content": "# FVector\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nA vector in 3-D space composed of components (X, Y, Z) with floating/double point precision.\r\n\r\n```csharp\r\npublic struct FVector\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FVector](./uassetapi.unrealtypes.fvector.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable), [IStruct&lt;FVector&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Properties\r\n\r\n### **X**\r\n\r\nThe vector's X-component.\r\n\r\n```csharp\r\npublic double X { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **XFloat**\r\n\r\n```csharp\r\npublic float XFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **Y**\r\n\r\nThe vector's Y-component.\r\n\r\n```csharp\r\npublic double Y { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **YFloat**\r\n\r\n```csharp\r\npublic float YFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **Z**\r\n\r\nThe vector's Z-component.\r\n\r\n```csharp\r\npublic double Z { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **ZFloat**\r\n\r\n```csharp\r\npublic float ZFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n## Constructors\r\n\r\n### **FVector(Double, Double, Double)**\r\n\r\n```csharp\r\nFVector(double x, double y, double z)\r\n```\r\n\r\n#### Parameters\r\n\r\n`x` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n`y` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n`z` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **FVector(Single, Single, Single)**\r\n\r\n```csharp\r\nFVector(float x, float y, float z)\r\n```\r\n\r\n#### Parameters\r\n\r\n`x` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`y` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`z` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **FVector(AssetBinaryReader)**\r\n\r\n```csharp\r\nFVector(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFVector Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FVector](./uassetapi.unrealtypes.fvector.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Clone()**\r\n\r\n```csharp\r\nobject Clone()\r\n```\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFVector FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FVector](./uassetapi.unrealtypes.fvector.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\nstring ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fvector2d.md",
    "content": "# FVector2D\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nA vector in 2-D space composed of components (X, Y) with floating/double point precision.\r\n\r\n```csharp\r\npublic struct FVector2D\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FVector2D](./uassetapi.unrealtypes.fvector2d.md)<br>\r\nImplements [IStruct&lt;FVector2D&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Properties\r\n\r\n### **X**\r\n\r\nThe vector's X-component.\r\n\r\n```csharp\r\npublic double X { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **XFloat**\r\n\r\n```csharp\r\npublic float XFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **Y**\r\n\r\nThe vector's Y-component.\r\n\r\n```csharp\r\npublic double Y { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **YFloat**\r\n\r\n```csharp\r\npublic float YFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n## Constructors\r\n\r\n### **FVector2D(Double, Double)**\r\n\r\n```csharp\r\nFVector2D(double x, double y)\r\n```\r\n\r\n#### Parameters\r\n\r\n`x` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n`y` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **FVector2D(Single, Single, Single)**\r\n\r\n```csharp\r\nFVector2D(float x, float y, float z)\r\n```\r\n\r\n#### Parameters\r\n\r\n`x` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`y` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`z` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **FVector2D(AssetBinaryReader)**\r\n\r\n```csharp\r\nFVector2D(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFVector2D Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FVector2D](./uassetapi.unrealtypes.fvector2d.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\nstring ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFVector2D FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FVector2D](./uassetapi.unrealtypes.fvector2d.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fvector2f.md",
    "content": "# FVector2f\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nA vector in 2-D space composed of components (X, Y) with floating point precision.\r\n\r\n```csharp\r\npublic struct FVector2f\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FVector2f](./uassetapi.unrealtypes.fvector2f.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable), [IStruct&lt;FVector2f&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Fields\r\n\r\n### **X**\r\n\r\n```csharp\r\npublic float X;\r\n```\r\n\r\n### **Y**\r\n\r\n```csharp\r\npublic float Y;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FVector2f(Single, Single)**\r\n\r\n```csharp\r\nFVector2f(float x, float y)\r\n```\r\n\r\n#### Parameters\r\n\r\n`x` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`y` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **FVector2f(AssetBinaryReader)**\r\n\r\n```csharp\r\nFVector2f(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFVector2f Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FVector2f](./uassetapi.unrealtypes.fvector2f.md)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Clone()**\r\n\r\n```csharp\r\nobject Clone()\r\n```\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\nstring ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFVector2f FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FVector2f](./uassetapi.unrealtypes.fvector2f.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fvector3f.md",
    "content": "# FVector3f\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nA vector in 3-D space composed of components (X, Y, Z) with floating point precision.\r\n\r\n```csharp\r\npublic struct FVector3f\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FVector3f](./uassetapi.unrealtypes.fvector3f.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable), [IStruct&lt;FVector3f&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Fields\r\n\r\n### **X**\r\n\r\n```csharp\r\npublic float X;\r\n```\r\n\r\n### **Y**\r\n\r\n```csharp\r\npublic float Y;\r\n```\r\n\r\n### **Z**\r\n\r\n```csharp\r\npublic float Z;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FVector3f(Single, Single, Single)**\r\n\r\n```csharp\r\nFVector3f(float x, float y, float z)\r\n```\r\n\r\n#### Parameters\r\n\r\n`x` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`y` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`z` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **FVector3f(AssetBinaryReader)**\r\n\r\n```csharp\r\nFVector3f(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Clone()**\r\n\r\n```csharp\r\nobject Clone()\r\n```\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFVector3f Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FVector3f](./uassetapi.unrealtypes.fvector3f.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\nstring ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFVector3f FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FVector3f](./uassetapi.unrealtypes.fvector3f.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fvector4.md",
    "content": "# FVector4\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nA vector in 4-D space composed of components (X, Y, Z, W) with floating/double point precision.\r\n\r\n```csharp\r\npublic struct FVector4\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FVector4](./uassetapi.unrealtypes.fvector4.md)<br>\r\nImplements [IStruct&lt;FVector4&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Properties\r\n\r\n### **X**\r\n\r\nThe vector's X-component.\r\n\r\n```csharp\r\npublic double X { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **XFloat**\r\n\r\n```csharp\r\npublic float XFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **Y**\r\n\r\nThe vector's Y-component.\r\n\r\n```csharp\r\npublic double Y { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **YFloat**\r\n\r\n```csharp\r\npublic float YFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **Z**\r\n\r\nThe vector's Z-component.\r\n\r\n```csharp\r\npublic double Z { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **ZFloat**\r\n\r\n```csharp\r\npublic float ZFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **W**\r\n\r\nThe vector's W-component.\r\n\r\n```csharp\r\npublic double W { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **WFloat**\r\n\r\n```csharp\r\npublic float WFloat { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n## Constructors\r\n\r\n### **FVector4(Double, Double, Double, Double)**\r\n\r\n```csharp\r\nFVector4(double x, double y, double z, double w)\r\n```\r\n\r\n#### Parameters\r\n\r\n`x` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n`y` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n`z` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n`w` [Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **FVector4(Single, Single, Single, Single)**\r\n\r\n```csharp\r\nFVector4(float x, float y, float z, float w)\r\n```\r\n\r\n#### Parameters\r\n\r\n`x` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`y` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`z` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`w` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **FVector4(AssetBinaryReader)**\r\n\r\n```csharp\r\nFVector4(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFVector4 Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FVector4](./uassetapi.unrealtypes.fvector4.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\nstring ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFVector4 FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FVector4](./uassetapi.unrealtypes.fvector4.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fvector4f.md",
    "content": "# FVector4f\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nA vector in 4-D space composed of components (X, Y, Z, W) with floating point precision.\r\n\r\n```csharp\r\npublic struct FVector4f\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [FVector4f](./uassetapi.unrealtypes.fvector4f.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable), [IStruct&lt;FVector4f&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Fields\r\n\r\n### **X**\r\n\r\n```csharp\r\npublic float X;\r\n```\r\n\r\n### **Y**\r\n\r\n```csharp\r\npublic float Y;\r\n```\r\n\r\n### **Z**\r\n\r\n```csharp\r\npublic float Z;\r\n```\r\n\r\n### **W**\r\n\r\n```csharp\r\npublic float W;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FVector4f(Single, Single, Single, Single)**\r\n\r\n```csharp\r\nFVector4f(float x, float y, float z, float w)\r\n```\r\n\r\n#### Parameters\r\n\r\n`x` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`y` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`z` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`w` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **FVector4f(AssetBinaryReader)**\r\n\r\n```csharp\r\nFVector4f(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Clone()**\r\n\r\n```csharp\r\nobject Clone()\r\n```\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\nFVector4f Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FVector4f](./uassetapi.unrealtypes.fvector4f.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\nstring ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\nFVector4f FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FVector4f](./uassetapi.unrealtypes.fvector4f.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fweightedrandomsampler.md",
    "content": "# FWeightedRandomSampler\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic class FWeightedRandomSampler : System.ICloneable, UAssetAPI.PropertyTypes.Objects.IStruct`1[[UAssetAPI.UnrealTypes.FWeightedRandomSampler]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FWeightedRandomSampler](./uassetapi.unrealtypes.fweightedrandomsampler.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable), [IStruct&lt;FWeightedRandomSampler&gt;](./uassetapi.propertytypes.objects.istruct-1.md)\r\n\r\n## Fields\r\n\r\n### **Prob**\r\n\r\n```csharp\r\npublic Single[] Prob;\r\n```\r\n\r\n### **Alias**\r\n\r\n```csharp\r\npublic Int32[] Alias;\r\n```\r\n\r\n### **TotalWeight**\r\n\r\n```csharp\r\npublic float TotalWeight;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FWeightedRandomSampler()**\r\n\r\n```csharp\r\npublic FWeightedRandomSampler()\r\n```\r\n\r\n### **FWeightedRandomSampler(Single[], Int32[], Single)**\r\n\r\n```csharp\r\npublic FWeightedRandomSampler(Single[] prob, Int32[] alias, float totalWeight)\r\n```\r\n\r\n#### Parameters\r\n\r\n`prob` [Single[]](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`alias` [Int32[]](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`totalWeight` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **FWeightedRandomSampler(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FWeightedRandomSampler(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Clone()**\r\n\r\n```csharp\r\npublic object Clone()\r\n```\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic static FWeightedRandomSampler Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[FWeightedRandomSampler](./uassetapi.unrealtypes.fweightedrandomsampler.md)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **FromString(String[], UAsset)**\r\n\r\n```csharp\r\npublic static FWeightedRandomSampler FromString(String[] d, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`d` [String[]](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[FWeightedRandomSampler](./uassetapi.unrealtypes.fweightedrandomsampler.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fworldtileinfo.md",
    "content": "# FWorldTileInfo\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nTile information used by WorldComposition.\r\n Defines properties necessary for tile positioning in the world. Stored with package summary\r\n\r\n```csharp\r\npublic class FWorldTileInfo\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FWorldTileInfo](./uassetapi.unrealtypes.fworldtileinfo.md)\r\n\r\n## Fields\r\n\r\n### **Position**\r\n\r\nTile position in the world relative to parent\r\n\r\n```csharp\r\npublic Int32[] Position;\r\n```\r\n\r\n### **AbsolutePosition**\r\n\r\nAbsolute tile position in the world. Calculated in runtime\r\n\r\n```csharp\r\npublic Int32[] AbsolutePosition;\r\n```\r\n\r\n### **Bounds**\r\n\r\nTile bounding box\r\n\r\n```csharp\r\npublic BoxPropertyData Bounds;\r\n```\r\n\r\n### **Layer**\r\n\r\nTile assigned layer\r\n\r\n```csharp\r\npublic FWorldTileLayer Layer;\r\n```\r\n\r\n### **bHideInTileView**\r\n\r\nWhether to hide sub-level tile in tile view\r\n\r\n```csharp\r\npublic bool bHideInTileView;\r\n```\r\n\r\n### **ParentTilePackageName**\r\n\r\nParent tile package name\r\n\r\n```csharp\r\npublic FString ParentTilePackageName;\r\n```\r\n\r\n### **LODList**\r\n\r\nLOD information\r\n\r\n```csharp\r\npublic FWorldTileLODInfo[] LODList;\r\n```\r\n\r\n### **ZOrder**\r\n\r\nSorting order\r\n\r\n```csharp\r\npublic int ZOrder;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FWorldTileInfo(Int32[], Int32[], BoxPropertyData, FWorldTileLayer, Boolean, FString, FWorldTileLODInfo[], Int32)**\r\n\r\n```csharp\r\npublic FWorldTileInfo(Int32[] position, Int32[] absolutePosition, BoxPropertyData bounds, FWorldTileLayer layer, bool bHideInTileView, FString parentTilePackageName, FWorldTileLODInfo[] lODList, int zOrder)\r\n```\r\n\r\n#### Parameters\r\n\r\n`position` [Int32[]](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`absolutePosition` [Int32[]](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`bounds` [BoxPropertyData](./uassetapi.propertytypes.structs.boxpropertydata.md)<br>\r\n\r\n`layer` [FWorldTileLayer](./uassetapi.unrealtypes.fworldtilelayer.md)<br>\r\n\r\n`bHideInTileView` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`parentTilePackageName` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n`lODList` [FWorldTileLODInfo[]](./uassetapi.unrealtypes.fworldtilelodinfo.md)<br>\r\n\r\n`zOrder` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FWorldTileInfo()**\r\n\r\n```csharp\r\npublic FWorldTileInfo()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, UAsset)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **ResolveAncestries(UAsset, AncestryInfo)**\r\n\r\n```csharp\r\npublic void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`ancestrySoFar` [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, UAsset)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fworldtilelayer.md",
    "content": "# FWorldTileLayer\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nWorld layer information for tile tagging\r\n\r\n```csharp\r\npublic class FWorldTileLayer\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FWorldTileLayer](./uassetapi.unrealtypes.fworldtilelayer.md)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nHuman readable name for this layer\r\n\r\n```csharp\r\npublic FString Name;\r\n```\r\n\r\n### **Reserved0**\r\n\r\nReserved for additional options\r\n\r\n```csharp\r\npublic int Reserved0;\r\n```\r\n\r\n### **Reserved1**\r\n\r\nReserved for additional options\r\n\r\n```csharp\r\npublic IntPointPropertyData Reserved1;\r\n```\r\n\r\n### **StreamingDistance**\r\n\r\nDistance starting from where tiles belonging to this layer will be streamed in\r\n\r\n```csharp\r\npublic int StreamingDistance;\r\n```\r\n\r\n### **DistanceStreamingEnabled**\r\n\r\n```csharp\r\npublic bool DistanceStreamingEnabled;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FWorldTileLayer(FString, Int32, IntPointPropertyData, Int32, Boolean)**\r\n\r\n```csharp\r\npublic FWorldTileLayer(FString name, int reserved0, IntPointPropertyData reserved1, int streamingDistance, bool distanceStreamingEnabled)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n`reserved0` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`reserved1` [IntPointPropertyData](./uassetapi.propertytypes.structs.intpointpropertydata.md)<br>\r\n\r\n`streamingDistance` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`distanceStreamingEnabled` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **FWorldTileLayer()**\r\n\r\n```csharp\r\npublic FWorldTileLayer()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, UAsset)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **ResolveAncestries(UAsset, AncestryInfo)**\r\n\r\n```csharp\r\npublic void ResolveAncestries(UAsset asset, AncestryInfo ancestrySoFar)\r\n```\r\n\r\n#### Parameters\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`ancestrySoFar` [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, UAsset)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.fworldtilelodinfo.md",
    "content": "# FWorldTileLODInfo\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nDescribes LOD entry in a world tile\r\n\r\n```csharp\r\npublic class FWorldTileLODInfo\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FWorldTileLODInfo](./uassetapi.unrealtypes.fworldtilelodinfo.md)\r\n\r\n## Fields\r\n\r\n### **RelativeStreamingDistance**\r\n\r\nRelative to LOD0 streaming distance, absolute distance = LOD0 + StreamingDistanceDelta\r\n\r\n```csharp\r\npublic int RelativeStreamingDistance;\r\n```\r\n\r\n### **Reserved0**\r\n\r\nReserved for additional options\r\n\r\n```csharp\r\npublic float Reserved0;\r\n```\r\n\r\n### **Reserved1**\r\n\r\nReserved for additional options\r\n\r\n```csharp\r\npublic float Reserved1;\r\n```\r\n\r\n### **Reserved2**\r\n\r\nReserved for additional options\r\n\r\n```csharp\r\npublic int Reserved2;\r\n```\r\n\r\n### **Reserved3**\r\n\r\nReserved for additional options\r\n\r\n```csharp\r\npublic int Reserved3;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FWorldTileLODInfo(Int32, Single, Single, Int32, Int32)**\r\n\r\n```csharp\r\npublic FWorldTileLODInfo(int relativeStreamingDistance, float reserved0, float reserved1, int reserved2, int reserved3)\r\n```\r\n\r\n#### Parameters\r\n\r\n`relativeStreamingDistance` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`reserved0` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`reserved1` [Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n`reserved2` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`reserved3` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **FWorldTileLODInfo()**\r\n\r\n```csharp\r\npublic FWorldTileLODInfo()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, UAsset)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, UAsset)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.iordereddictionary-2.md",
    "content": "# IOrderedDictionary&lt;TKey, TValue&gt;\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic interface IOrderedDictionary<TKey, TValue> : , , , System.Collections.IEnumerable, System.Collections.Specialized.IOrderedDictionary, System.Collections.IDictionary, System.Collections.ICollection\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`TKey`<br>\r\n\r\n`TValue`<br>\r\n\r\nImplements IDictionary&lt;TKey, TValue&gt;, ICollection&lt;KeyValuePair&lt;TKey, TValue&gt;&gt;, IEnumerable&lt;KeyValuePair&lt;TKey, TValue&gt;&gt;, [IEnumerable](https://docs.microsoft.com/en-us/dotnet/api/system.collections.ienumerable), IOrderedDictionary, [IDictionary](https://docs.microsoft.com/en-us/dotnet/api/system.collections.idictionary), [ICollection](https://docs.microsoft.com/en-us/dotnet/api/system.collections.icollection)\r\n\r\n## Properties\r\n\r\n### **Item**\r\n\r\n```csharp\r\npublic abstract TValue Item { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\nTValue<br>\r\n\r\n### **Item**\r\n\r\n```csharp\r\npublic abstract TValue Item { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\nTValue<br>\r\n\r\n### **Count**\r\n\r\n```csharp\r\npublic abstract int Count { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Keys**\r\n\r\n```csharp\r\npublic abstract ICollection<TKey> Keys { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\nICollection&lt;TKey&gt;<br>\r\n\r\n### **Values**\r\n\r\n```csharp\r\npublic abstract ICollection<TValue> Values { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\nICollection&lt;TValue&gt;<br>\r\n\r\n## Methods\r\n\r\n### **Add(TKey, TValue)**\r\n\r\n```csharp\r\nvoid Add(TKey key, TValue value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`key` TKey<br>\r\n\r\n`value` TValue<br>\r\n\r\n### **Clear()**\r\n\r\n```csharp\r\nvoid Clear()\r\n```\r\n\r\n### **Insert(Int32, TKey, TValue)**\r\n\r\n```csharp\r\nvoid Insert(int index, TKey key, TValue value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`key` TKey<br>\r\n\r\n`value` TValue<br>\r\n\r\n### **IndexOf(TKey)**\r\n\r\n```csharp\r\nint IndexOf(TKey key)\r\n```\r\n\r\n#### Parameters\r\n\r\n`key` TKey<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ContainsValue(TValue)**\r\n\r\n```csharp\r\nbool ContainsValue(TValue value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` TValue<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **ContainsValue(TValue, IEqualityComparer&lt;TValue&gt;)**\r\n\r\n```csharp\r\nbool ContainsValue(TValue value, IEqualityComparer<TValue> comparer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` TValue<br>\r\n\r\n`comparer` IEqualityComparer&lt;TValue&gt;<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **ContainsKey(TKey)**\r\n\r\n```csharp\r\nbool ContainsKey(TKey key)\r\n```\r\n\r\n#### Parameters\r\n\r\n`key` TKey<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **GetEnumerator()**\r\n\r\n```csharp\r\nIEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()\r\n```\r\n\r\n#### Returns\r\n\r\nIEnumerator&lt;KeyValuePair&lt;TKey, TValue&gt;&gt;<br>\r\n\r\n### **Remove(TKey)**\r\n\r\n```csharp\r\nbool Remove(TKey key)\r\n```\r\n\r\n#### Parameters\r\n\r\n`key` TKey<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **RemoveAt(Int32)**\r\n\r\n```csharp\r\nvoid RemoveAt(int index)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **TryGetValue(TKey, TValue&)**\r\n\r\n```csharp\r\nbool TryGetValue(TKey key, TValue& value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`key` TKey<br>\r\n\r\n`value` TValue&<br>\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **GetValue(TKey)**\r\n\r\n```csharp\r\nTValue GetValue(TKey key)\r\n```\r\n\r\n#### Parameters\r\n\r\n`key` TKey<br>\r\n\r\n#### Returns\r\n\r\nTValue<br>\r\n\r\n### **SetValue(TKey, TValue)**\r\n\r\n```csharp\r\nvoid SetValue(TKey key, TValue value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`key` TKey<br>\r\n\r\n`value` TValue<br>\r\n\r\n### **GetItem(Int32)**\r\n\r\n```csharp\r\nKeyValuePair<TKey, TValue> GetItem(int index)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n#### Returns\r\n\r\nKeyValuePair&lt;TKey, TValue&gt;<br>\r\n\r\n### **SetItem(Int32, TValue)**\r\n\r\n```csharp\r\nvoid SetItem(int index, TValue value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`value` TValue<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.linearhelpers.md",
    "content": "# LinearHelpers\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic static class LinearHelpers\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [LinearHelpers](./uassetapi.unrealtypes.linearhelpers.md)\r\n\r\n## Methods\r\n\r\n### **Convert(FLinearColor)**\r\n\r\n```csharp\r\npublic static Color Convert(FLinearColor color)\r\n```\r\n\r\n#### Parameters\r\n\r\n`color` [FLinearColor](./uassetapi.unrealtypes.flinearcolor.md)<br>\r\n\r\n#### Returns\r\n\r\nColor<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.objectversion.md",
    "content": "# ObjectVersion\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nAn enum used to represent the global object version of UE4.\r\n\r\n```csharp\r\npublic enum ObjectVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ObjectVersion](./uassetapi.unrealtypes.objectversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| VER_UE4_BLUEPRINT_VARS_NOT_READ_ONLY | 215 | Removed restriction on blueprint-exposed variables from being read-only |\r\n| VER_UE4_STATIC_MESH_STORE_NAV_COLLISION | 216 | Added manually serialized element to UStaticMesh (precalculated nav collision) |\r\n| VER_UE4_ATMOSPHERIC_FOG_DECAY_NAME_CHANGE | 217 | Changed property name for atmospheric fog |\r\n| VER_UE4_SCENECOMP_TRANSLATION_TO_LOCATION | 218 | Change many properties/functions from Translation to Location |\r\n| VER_UE4_MATERIAL_ATTRIBUTES_REORDERING | 219 | Material attributes reordering |\r\n| VER_UE4_COLLISION_PROFILE_SETTING | 220 | Collision Profile setting has been added, and all components that exists has to be properly upgraded |\r\n| VER_UE4_BLUEPRINT_SKEL_TEMPORARY_TRANSIENT | 221 | Making the blueprint's skeleton class transient |\r\n| VER_UE4_BLUEPRINT_SKEL_SERIALIZED_AGAIN | 222 | Making the blueprint's skeleton class serialized again |\r\n| VER_UE4_BLUEPRINT_SETS_REPLICATION | 223 | Blueprint now controls replication settings again |\r\n| VER_UE4_WORLD_LEVEL_INFO | 224 | Added level info used by World browser |\r\n| VER_UE4_AFTER_CAPSULE_HALF_HEIGHT_CHANGE | 225 | Changed capsule height to capsule half-height (afterwards) |\r\n| VER_UE4_ADDED_NAMESPACE_AND_KEY_DATA_TO_FTEXT | 226 | Added Namepace, GUID (Key) and Flags to FText |\r\n| VER_UE4_ATTENUATION_SHAPES | 227 | Attenuation shapes |\r\n| VER_UE4_LIGHTCOMPONENT_USE_IES_TEXTURE_MULTIPLIER_ON_NON_IES_BRIGHTNESS | 228 | Use IES texture multiplier even when IES brightness is not being used |\r\n| VER_UE4_REMOVE_INPUT_COMPONENTS_FROM_BLUEPRINTS | 229 | Removed InputComponent as a blueprint addable component |\r\n| VER_UE4_VARK2NODE_USE_MEMBERREFSTRUCT | 230 | Use an FMemberReference struct in UK2Node_Variable |\r\n| VER_UE4_REFACTOR_MATERIAL_EXPRESSION_SCENECOLOR_AND_SCENEDEPTH_INPUTS | 231 | Refactored material expression inputs for UMaterialExpressionSceneColor and UMaterialExpressionSceneDepth |\r\n| VER_UE4_SPLINE_MESH_ORIENTATION | 232 | Spline meshes changed from Z forwards to configurable |\r\n| VER_UE4_REVERB_EFFECT_ASSET_TYPE | 233 | Added ReverbEffect asset type |\r\n| VER_UE4_MAX_TEXCOORD_INCREASED | 234 | changed max texcoords from 4 to 8 |\r\n| VER_UE4_SPEEDTREE_STATICMESH | 235 | static meshes changed to support SpeedTrees |\r\n| VER_UE4_LANDSCAPE_COMPONENT_LAZY_REFERENCES | 236 | Landscape component reference between landscape component and collision component |\r\n| VER_UE4_SWITCH_CALL_NODE_TO_USE_MEMBER_REFERENCE | 237 | Refactored UK2Node_CallFunction to use FMemberReference |\r\n| VER_UE4_ADDED_SKELETON_ARCHIVER_REMOVAL | 238 | Added fixup step to remove skeleton class references from blueprint objects |\r\n| VER_UE4_ADDED_SKELETON_ARCHIVER_REMOVAL_SECOND_TIME | 239 | See above, take 2. |\r\n| VER_UE4_BLUEPRINT_SKEL_CLASS_TRANSIENT_AGAIN | 240 | Making the skeleton class on blueprints transient |\r\n| VER_UE4_ADD_COOKED_TO_UCLASS | 241 | UClass knows if it's been cooked |\r\n| VER_UE4_DEPRECATED_STATIC_MESH_THUMBNAIL_PROPERTIES_REMOVED | 242 | Deprecated static mesh thumbnail properties were removed |\r\n| VER_UE4_COLLECTIONS_IN_SHADERMAPID | 243 | Added collections in material shader map ids |\r\n| VER_UE4_REFACTOR_MOVEMENT_COMPONENT_HIERARCHY | 244 | Renamed some Movement Component properties, added PawnMovementComponent |\r\n| VER_UE4_FIX_TERRAIN_LAYER_SWITCH_ORDER | 245 | Swap UMaterialExpressionTerrainLayerSwitch::LayerUsed/LayerNotUsed the correct way round |\r\n| VER_UE4_ALL_PROPS_TO_CONSTRAINTINSTANCE | 246 | Remove URB_ConstraintSetup |\r\n| VER_UE4_LOW_QUALITY_DIRECTIONAL_LIGHTMAPS | 247 | Low quality directional lightmaps |\r\n| VER_UE4_ADDED_NOISE_EMITTER_COMPONENT | 248 | Added NoiseEmitterComponent and removed related Pawn properties. |\r\n| VER_UE4_ADD_TEXT_COMPONENT_VERTICAL_ALIGNMENT | 249 | Add text component vertical alignment |\r\n| VER_UE4_ADDED_FBX_ASSET_IMPORT_DATA | 250 | Added AssetImportData for FBX asset types, deprecating SourceFilePath and SourceFileTimestamp |\r\n| VER_UE4_REMOVE_LEVELBODYSETUP | 251 | Remove LevelBodySetup from ULevel |\r\n| VER_UE4_REFACTOR_CHARACTER_CROUCH | 252 | Refactor character crouching |\r\n| VER_UE4_SMALLER_DEBUG_MATERIALSHADER_UNIFORM_EXPRESSIONS | 253 | Trimmed down material shader debug information. |\r\n| VER_UE4_APEX_CLOTH | 254 | APEX Clothing |\r\n| VER_UE4_SAVE_COLLISIONRESPONSE_PER_CHANNEL | 255 | Change Collision Channel to save only modified ones than all of them. Note!!! Once we pass this CL, we can rename FCollisionResponseContainer enum values. We should rename to match ECollisionChannel |\r\n| VER_UE4_ADDED_LANDSCAPE_SPLINE_EDITOR_MESH | 256 | Added Landscape Spline editor meshes |\r\n| VER_UE4_CHANGED_MATERIAL_REFACTION_TYPE | 257 | Fixup input expressions for reading from refraction material attributes. |\r\n| VER_UE4_REFACTOR_PROJECTILE_MOVEMENT | 258 | Refactor projectile movement, along with some other movement component work. |\r\n| VER_UE4_REMOVE_PHYSICALMATERIALPROPERTY | 259 | Remove PhysicalMaterialProperty and replace with user defined enum |\r\n| VER_UE4_PURGED_FMATERIAL_COMPILE_OUTPUTS | 260 | Removed all compile outputs from FMaterial |\r\n| VER_UE4_ADD_COOKED_TO_LANDSCAPE | 261 | Ability to save cooked PhysX meshes to Landscape |\r\n| VER_UE4_CONSUME_INPUT_PER_BIND | 262 | Change how input component consumption works |\r\n| VER_UE4_SOUND_CLASS_GRAPH_EDITOR | 263 | Added new Graph based SoundClass Editor |\r\n| VER_UE4_FIXUP_TERRAIN_LAYER_NODES | 264 | Fixed terrain layer node guids which was causing artifacts |\r\n| VER_UE4_RETROFIT_CLAMP_EXPRESSIONS_SWAP | 265 | Added clamp min/max swap check to catch older materials |\r\n| VER_UE4_REMOVE_LIGHT_MOBILITY_CLASSES | 266 | Remove static/movable/stationary light classes |\r\n| VER_UE4_REFACTOR_PHYSICS_BLENDING | 267 | Refactor the way physics blending works to allow partial blending |\r\n| VER_UE4_WORLD_LEVEL_INFO_UPDATED | 268 | WorldLevelInfo: Added reference to parent level and streaming distance |\r\n| VER_UE4_STATIC_SKELETAL_MESH_SERIALIZATION_FIX | 269 | Fixed cooking of skeletal/static meshes due to bad serialization logic |\r\n| VER_UE4_REMOVE_STATICMESH_MOBILITY_CLASSES | 270 | Removal of InterpActor and PhysicsActor |\r\n| VER_UE4_REFACTOR_PHYSICS_TRANSFORMS | 271 | Refactor physics transforms |\r\n| VER_UE4_REMOVE_ZERO_TRIANGLE_SECTIONS | 272 | Remove zero triangle sections from static meshes and compact material indices. |\r\n| VER_UE4_CHARACTER_MOVEMENT_DECELERATION | 273 | Add param for deceleration in character movement instead of using acceleration. |\r\n| VER_UE4_CAMERA_ACTOR_USING_CAMERA_COMPONENT | 274 | Made ACameraActor use a UCameraComponent for parameter storage, etc... |\r\n| VER_UE4_CHARACTER_MOVEMENT_DEPRECATE_PITCH_ROLL | 275 | Deprecated some pitch/roll properties in CharacterMovementComponent |\r\n| VER_UE4_REBUILD_TEXTURE_STREAMING_DATA_ON_LOAD | 276 | Rebuild texture streaming data on load for uncooked builds |\r\n| VER_UE4_SUPPORT_32BIT_STATIC_MESH_INDICES | 277 | Add support for 32 bit index buffers for static meshes. |\r\n| VER_UE4_ADDED_CHUNKID_TO_ASSETDATA_AND_UPACKAGE | 278 | Added streaming install ChunkID to AssetData and UPackage |\r\n| VER_UE4_CHARACTER_DEFAULT_MOVEMENT_BINDINGS | 279 | Add flag to control whether Character blueprints receive default movement bindings. |\r\n| VER_UE4_APEX_CLOTH_LOD | 280 | APEX Clothing LOD Info |\r\n| VER_UE4_ATMOSPHERIC_FOG_CACHE_DATA | 281 | Added atmospheric fog texture data to be general |\r\n| VAR_UE4_ARRAY_PROPERTY_INNER_TAGS | 282 | Arrays serialize their inner's tags |\r\n| VER_UE4_KEEP_SKEL_MESH_INDEX_DATA | 283 | Skeletal mesh index data is kept in memory in game to support mesh merging. |\r\n| VER_UE4_BODYSETUP_COLLISION_CONVERSION | 284 | Added compatibility for the body instance collision change |\r\n| VER_UE4_REFLECTION_CAPTURE_COOKING | 285 | Reflection capture cooking |\r\n| VER_UE4_REMOVE_DYNAMIC_VOLUME_CLASSES | 286 | Removal of DynamicTriggerVolume, DynamicBlockingVolume, DynamicPhysicsVolume |\r\n| VER_UE4_STORE_HASCOOKEDDATA_FOR_BODYSETUP | 287 | Store an additional flag in the BodySetup to indicate whether there is any cooked data to load |\r\n| VER_UE4_REFRACTION_BIAS_TO_REFRACTION_DEPTH_BIAS | 288 | Changed name of RefractionBias to RefractionDepthBias. |\r\n| VER_UE4_REMOVE_SKELETALPHYSICSACTOR | 289 | Removal of SkeletalPhysicsActor |\r\n| VER_UE4_PC_ROTATION_INPUT_REFACTOR | 290 | PlayerController rotation input refactor |\r\n| VER_UE4_LANDSCAPE_PLATFORMDATA_COOKING | 291 | Landscape Platform Data cooking |\r\n| VER_UE4_CREATEEXPORTS_CLASS_LINKING_FOR_BLUEPRINTS | 292 | Added call for linking classes in CreateExport to ensure memory is initialized properly |\r\n| VER_UE4_REMOVE_NATIVE_COMPONENTS_FROM_BLUEPRINT_SCS | 293 | Remove native component nodes from the blueprint SimpleConstructionScript |\r\n| VER_UE4_REMOVE_SINGLENODEINSTANCE | 294 | Removal of Single Node Instance |\r\n| VER_UE4_CHARACTER_BRAKING_REFACTOR | 295 | Character movement braking changes |\r\n| VER_UE4_VOLUME_SAMPLE_LOW_QUALITY_SUPPORT | 296 | Supported low quality lightmaps in volume samples |\r\n| VER_UE4_SPLIT_TOUCH_AND_CLICK_ENABLES | 297 | Split bEnableTouchEvents out from bEnableClickEvents |\r\n| VER_UE4_HEALTH_DEATH_REFACTOR | 298 | Health/Death refactor |\r\n| VER_UE4_SOUND_NODE_ENVELOPER_CURVE_CHANGE | 299 | Moving USoundNodeEnveloper from UDistributionFloatConstantCurve to FRichCurve |\r\n| VER_UE4_POINT_LIGHT_SOURCE_RADIUS | 300 | Moved SourceRadius to UPointLightComponent |\r\n| VER_UE4_SCENE_CAPTURE_CAMERA_CHANGE | 301 | Scene capture actors based on camera actors. |\r\n| VER_UE4_MOVE_SKELETALMESH_SHADOWCASTING | 302 | Moving SkeletalMesh shadow casting flag from LoD details to material |\r\n| VER_UE4_CHANGE_SETARRAY_BYTECODE | 303 | Changing bytecode operators for creating arrays |\r\n| VER_UE4_MATERIAL_INSTANCE_BASE_PROPERTY_OVERRIDES | 304 | Material Instances overriding base material properties. |\r\n| VER_UE4_COMBINED_LIGHTMAP_TEXTURES | 305 | Combined top/bottom lightmap textures |\r\n| VER_UE4_BUMPED_MATERIAL_EXPORT_GUIDS | 306 | Forced material lightmass guids to be regenerated |\r\n| VER_UE4_BLUEPRINT_INPUT_BINDING_OVERRIDES | 307 | Allow overriding of parent class input bindings |\r\n| VER_UE4_FIXUP_BODYSETUP_INVALID_CONVEX_TRANSFORM | 308 | Fix up convex invalid transform |\r\n| VER_UE4_FIXUP_STIFFNESS_AND_DAMPING_SCALE | 309 | Fix up scale of physics stiffness and damping value |\r\n| VER_UE4_REFERENCE_SKELETON_REFACTOR | 310 | Convert USkeleton and FBoneContrainer to using FReferenceSkeleton. |\r\n| VER_UE4_K2NODE_REFERENCEGUIDS | 311 | Adding references to variable, function, and macro nodes to be able to update to renamed values |\r\n| VER_UE4_FIXUP_ROOTBONE_PARENT | 312 | Fix up the 0th bone's parent bone index. |\r\n| VER_UE4_MATERIAL_INSTANCE_BASE_PROPERTY_OVERRIDES_PHASE_2 | 314 | Material Instances overriding base material properties #2. |\r\n| VER_UE4_CLASS_NOTPLACEABLE_ADDED | 315 | CLASS_Placeable becomes CLASS_NotPlaceable |\r\n| VER_UE4_WORLD_LEVEL_INFO_LOD_LIST | 316 | Added LOD info list to a world tile description |\r\n| VER_UE4_CHARACTER_MOVEMENT_VARIABLE_RENAMING_1 | 317 | CharacterMovement variable naming refactor |\r\n| VER_UE4_FSLATESOUND_CONVERSION | 318 | FName properties containing sound names converted to FSlateSound properties |\r\n| VER_UE4_WORLD_LEVEL_INFO_ZORDER | 319 | Added ZOrder to a world tile description |\r\n| VER_UE4_PACKAGE_REQUIRES_LOCALIZATION_GATHER_FLAGGING | 320 | Added flagging of localization gather requirement to packages |\r\n| VER_UE4_BP_ACTOR_VARIABLE_DEFAULT_PREVENTING | 321 | Preventing Blueprint Actor variables from having default values |\r\n| VER_UE4_TEST_ANIMCOMP_CHANGE | 322 | Preventing Blueprint Actor variables from having default values |\r\n| VER_UE4_EDITORONLY_BLUEPRINTS | 323 | Class as primary asset, name convention changed |\r\n| VER_UE4_EDGRAPHPINTYPE_SERIALIZATION | 324 | Custom serialization for FEdGraphPinType |\r\n| VER_UE4_NO_MIRROR_BRUSH_MODEL_COLLISION | 325 | Stop generating 'mirrored' cooked mesh for Brush and Model components |\r\n| VER_UE4_CHANGED_CHUNKID_TO_BE_AN_ARRAY_OF_CHUNKIDS | 326 | Changed ChunkID to be an array of IDs. |\r\n| VER_UE4_WORLD_NAMED_AFTER_PACKAGE | 327 | Worlds have been renamed from \"TheWorld\" to be named after the package containing them |\r\n| VER_UE4_SKY_LIGHT_COMPONENT | 328 | Added sky light component |\r\n| VER_UE4_WORLD_LAYER_ENABLE_DISTANCE_STREAMING | 329 | Added Enable distance streaming flag to FWorldTileLayer |\r\n| VER_UE4_REMOVE_ZONES_FROM_MODEL | 330 | Remove visibility/zone information from UModel |\r\n| VER_UE4_FIX_ANIMATIONBASEPOSE_SERIALIZATION | 331 | Fix base pose serialization |\r\n| VER_UE4_SUPPORT_8_BONE_INFLUENCES_SKELETAL_MESHES | 332 | Support for up to 8 skinning influences per vertex on skeletal meshes (on non-gpu vertices) |\r\n| VER_UE4_ADD_OVERRIDE_GRAVITY_FLAG | 333 | Add explicit bOverrideGravity to world settings |\r\n| VER_UE4_SUPPORT_GPUSKINNING_8_BONE_INFLUENCES | 334 | Support for up to 8 skinning influences per vertex on skeletal meshes (on gpu vertices) |\r\n| VER_UE4_ANIM_SUPPORT_NONUNIFORM_SCALE_ANIMATION | 335 | Supporting nonuniform scale animation |\r\n| VER_UE4_ENGINE_VERSION_OBJECT | 336 | Engine version is stored as a FEngineVersion object rather than changelist number |\r\n| VER_UE4_PUBLIC_WORLDS | 337 | World assets now have RF_Public |\r\n| VER_UE4_SKELETON_GUID_SERIALIZATION | 338 | Skeleton Guid |\r\n| VER_UE4_CHARACTER_MOVEMENT_WALKABLE_FLOOR_REFACTOR | 339 | Character movement WalkableFloor refactor |\r\n| VER_UE4_INVERSE_SQUARED_LIGHTS_DEFAULT | 340 | Lights default to inverse squared |\r\n| VER_UE4_DISABLED_SCRIPT_LIMIT_BYTECODE | 341 | Disabled SCRIPT_LIMIT_BYTECODE_TO_64KB |\r\n| VER_UE4_PRIVATE_REMOTE_ROLE | 342 | Made remote role private, exposed bReplicates |\r\n| VER_UE4_FOLIAGE_STATIC_MOBILITY | 343 | Fix up old foliage components to have static mobility (superseded by VER_UE4_FOLIAGE_MOVABLE_MOBILITY) |\r\n| VER_UE4_BUILD_SCALE_VECTOR | 344 | Change BuildScale from a float to a vector |\r\n| VER_UE4_FOLIAGE_COLLISION | 345 | After implementing foliage collision, need to disable collision on old foliage instances |\r\n| VER_UE4_SKY_BENT_NORMAL | 346 | Added sky bent normal to indirect lighting cache |\r\n| VER_UE4_LANDSCAPE_COLLISION_DATA_COOKING | 347 | Added cooking for landscape collision data |\r\n| VER_UE4_MORPHTARGET_CPU_TANGENTZDELTA_FORMATCHANGE | 348 | Convert CPU tangent Z delta to vector from PackedNormal since we don't get any benefit other than memory we still convert all to FVector in CPU time whenever any calculation |\r\n| VER_UE4_SOFT_CONSTRAINTS_USE_MASS | 349 | Soft constraint limits will implicitly use the mass of the bodies |\r\n| VER_UE4_REFLECTION_DATA_IN_PACKAGES | 350 | Reflection capture data saved in packages |\r\n| VER_UE4_FOLIAGE_MOVABLE_MOBILITY | 351 | Fix up old foliage components to have movable mobility (superseded by VER_UE4_FOLIAGE_STATIC_LIGHTING_SUPPORT) |\r\n| VER_UE4_UNDO_BREAK_MATERIALATTRIBUTES_CHANGE | 352 | Undo BreakMaterialAttributes changes as it broke old content |\r\n| VER_UE4_ADD_CUSTOMPROFILENAME_CHANGE | 353 | Now Default custom profile name isn't NONE anymore due to copy/paste not working properly with it |\r\n| VER_UE4_FLIP_MATERIAL_COORDS | 354 | Permanently flip and scale material expression coordinates |\r\n| VER_UE4_MEMBERREFERENCE_IN_PINTYPE | 355 | PinSubCategoryMemberReference added to FEdGraphPinType |\r\n| VER_UE4_VEHICLES_UNIT_CHANGE | 356 | Vehicles use Nm for Torque instead of cm and RPM instead of rad/s |\r\n| VER_UE4_ANIMATION_REMOVE_NANS | 357 | removes NANs from all animations when loaded now importing should detect NaNs, so we should not have NaNs in source data |\r\n| VER_UE4_SKELETON_ASSET_PROPERTY_TYPE_CHANGE | 358 | Change skeleton preview attached assets property type |\r\n| VER_UE4_FIX_BLUEPRINT_VARIABLE_FLAGS | 359 | Fix some blueprint variables that have the CPF_DisableEditOnTemplate flag set when they shouldn't |\r\n| VER_UE4_VEHICLES_UNIT_CHANGE2 | 360 | Vehicles use Nm for Torque instead of cm and RPM instead of rad/s part two (missed conversion for some variables |\r\n| VER_UE4_UCLASS_SERIALIZE_INTERFACES_AFTER_LINKING | 361 | Changed order of interface class serialization |\r\n| VER_UE4_STATIC_MESH_SCREEN_SIZE_LODS | 362 | Change from LOD distances to display factors |\r\n| VER_UE4_FIX_MATERIAL_COORDS | 363 | Requires test of material coords to ensure they're saved correctly |\r\n| VER_UE4_SPEEDTREE_WIND_V7 | 364 | Changed SpeedTree wind presets to v7 |\r\n| VER_UE4_LOAD_FOR_EDITOR_GAME | 365 | NeedsLoadForEditorGame added |\r\n| VER_UE4_SERIALIZE_RICH_CURVE_KEY | 366 | Manual serialization of FRichCurveKey to save space |\r\n| VER_UE4_MOVE_LANDSCAPE_MICS_AND_TEXTURES_WITHIN_LEVEL | 367 | Change the outer of ULandscapeMaterialInstanceConstants and Landscape-related textures to the level in which they reside |\r\n| VER_UE4_FTEXT_HISTORY | 368 | FTexts have creation history data, removed Key, Namespaces, and SourceString |\r\n| VER_UE4_FIX_MATERIAL_COMMENTS | 369 | Shift comments to the left to contain expressions properly |\r\n| VER_UE4_STORE_BONE_EXPORT_NAMES | 370 | Bone names stored as FName means that we can't guarantee the correct case on export, now we store a separate string for export purposes only |\r\n| VER_UE4_MESH_EMITTER_INITIAL_ORIENTATION_DISTRIBUTION | 371 | changed mesh emitter initial orientation to distribution |\r\n| VER_UE4_DISALLOW_FOLIAGE_ON_BLUEPRINTS | 372 | Foliage on blueprints causes crashes |\r\n| VER_UE4_FIXUP_MOTOR_UNITS | 373 | change motors to use revolutions per second instead of rads/second |\r\n| VER_UE4_DEPRECATED_MOVEMENTCOMPONENT_MODIFIED_SPEEDS | 374 | deprecated MovementComponent functions including \"ModifiedMaxSpeed\" et al |\r\n| VER_UE4_RENAME_CANBECHARACTERBASE | 375 | rename CanBeCharacterBase |\r\n| VER_UE4_GAMEPLAY_TAG_CONTAINER_TAG_TYPE_CHANGE | 376 | Change GameplayTagContainers to have FGameplayTags instead of FNames; Required to fix-up native serialization |\r\n| VER_UE4_FOLIAGE_SETTINGS_TYPE | 377 | Change from UInstancedFoliageSettings to UFoliageType, and change the api from being keyed on UStaticMesh* to UFoliageType* |\r\n| VER_UE4_STATIC_SHADOW_DEPTH_MAPS | 378 | Lights serialize static shadow depth maps |\r\n| VER_UE4_ADD_TRANSACTIONAL_TO_DATA_ASSETS | 379 | Add RF_Transactional to data assets, fixing undo problems when editing them |\r\n| VER_UE4_ADD_LB_WEIGHTBLEND | 380 | Change LB_AlphaBlend to LB_WeightBlend in ELandscapeLayerBlendType |\r\n| VER_UE4_ADD_ROOTCOMPONENT_TO_FOLIAGEACTOR | 381 | Add root component to an foliage actor, all foliage cluster components will be attached to a root |\r\n| VER_UE4_FIX_MATERIAL_PROPERTY_OVERRIDE_SERIALIZE | 382 | FMaterialInstanceBasePropertyOverrides didn't use proper UObject serialize |\r\n| VER_UE4_ADD_LINEAR_COLOR_SAMPLER | 383 | Addition of linear color sampler. color sample type is changed to linear sampler if source texture !sRGB |\r\n| VER_UE4_ADD_STRING_ASSET_REFERENCES_MAP | 384 | Added StringAssetReferencesMap to support renames of FStringAssetReference properties. |\r\n| VER_UE4_BLUEPRINT_USE_SCS_ROOTCOMPONENT_SCALE | 385 | Apply scale from SCS RootComponent details in the Blueprint Editor to new actor instances at construction time |\r\n| VER_UE4_LEVEL_STREAMING_DRAW_COLOR_TYPE_CHANGE | 386 | Changed level streaming to have a linear color since the visualization doesn't gamma correct. |\r\n| VER_UE4_CLEAR_NOTIFY_TRIGGERS | 387 | Cleared end triggers from non-state anim notifies |\r\n| VER_UE4_SKELETON_ADD_SMARTNAMES | 388 | Convert old curve names stored in anim assets into skeleton smartnames |\r\n| VER_UE4_ADDED_CURRENCY_CODE_TO_FTEXT | 389 | Added the currency code field to FTextHistory_AsCurrency |\r\n| VER_UE4_ENUM_CLASS_SUPPORT | 390 | Added support for C++11 enum classes |\r\n| VER_UE4_FIXUP_WIDGET_ANIMATION_CLASS | 391 | Fixup widget animation class |\r\n| VER_UE4_SOUND_COMPRESSION_TYPE_ADDED | 392 | USoundWave objects now contain details about compression scheme used. |\r\n| VER_UE4_AUTO_WELDING | 393 | Bodies will automatically weld when attached |\r\n| VER_UE4_RENAME_CROUCHMOVESCHARACTERDOWN | 394 | Rename UCharacterMovementComponent::bCrouchMovesCharacterDown |\r\n| VER_UE4_LIGHTMAP_MESH_BUILD_SETTINGS | 395 | Lightmap parameters in FMeshBuildSettings |\r\n| VER_UE4_RENAME_SM3_TO_ES3_1 | 396 | Rename SM3 to ES3_1 and updates featurelevel material node selector |\r\n| VER_UE4_DEPRECATE_UMG_STYLE_ASSETS | 397 | Deprecated separate style assets for use in UMG |\r\n| VER_UE4_POST_DUPLICATE_NODE_GUID | 398 | Duplicating Blueprints will regenerate NodeGuids after this version |\r\n| VER_UE4_RENAME_CAMERA_COMPONENT_VIEW_ROTATION | 399 | Rename USpringArmComponent::bUseControllerViewRotation to bUsePawnViewRotation, Rename UCameraComponent::bUseControllerViewRotation to bUsePawnViewRotation (and change the default value) |\r\n| VER_UE4_CASE_PRESERVING_FNAME | 400 | Changed FName to be case preserving |\r\n| VER_UE4_RENAME_CAMERA_COMPONENT_CONTROL_ROTATION | 401 | Rename USpringArmComponent::bUsePawnViewRotation to bUsePawnControlRotation, Rename UCameraComponent::bUsePawnViewRotation to bUsePawnControlRotation |\r\n| VER_UE4_FIX_REFRACTION_INPUT_MASKING | 402 | Fix bad refraction material attribute masks |\r\n| VER_UE4_GLOBAL_EMITTER_SPAWN_RATE_SCALE | 403 | A global spawn rate for emitters. |\r\n| VER_UE4_CLEAN_DESTRUCTIBLE_SETTINGS | 404 | Cleanup destructible mesh settings |\r\n| VER_UE4_CHARACTER_MOVEMENT_UPPER_IMPACT_BEHAVIOR | 405 | CharacterMovementComponent refactor of AdjustUpperHemisphereImpact and deprecation of some associated vars. |\r\n| VER_UE4_BP_MATH_VECTOR_EQUALITY_USES_EPSILON | 406 | Changed Blueprint math equality functions for vectors and rotators to operate as a \"nearly\" equals rather than \"exact\" |\r\n| VER_UE4_FOLIAGE_STATIC_LIGHTING_SUPPORT | 407 | Static lighting support was re-added to foliage, and mobility was returned to static |\r\n| VER_UE4_SLATE_COMPOSITE_FONTS | 408 | Added composite fonts to Slate font info |\r\n| VER_UE4_REMOVE_SAVEGAMESUMMARY | 409 | Remove UDEPRECATED_SaveGameSummary, required for UWorld::Serialize |\r\n| VER_UE4_REMOVE_SKELETALMESH_COMPONENT_BODYSETUP_SERIALIZATION | 410 | Remove bodyseutp serialization from skeletal mesh component |\r\n| VER_UE4_SLATE_BULK_FONT_DATA | 411 | Made Slate font data use bulk data to store the embedded font data |\r\n| VER_UE4_ADD_PROJECTILE_FRICTION_BEHAVIOR | 412 | Add new friction behavior in ProjectileMovementComponent. |\r\n| VER_UE4_MOVEMENTCOMPONENT_AXIS_SETTINGS | 413 | Add axis settings enum to MovementComponent. |\r\n| VER_UE4_GRAPH_INTERACTIVE_COMMENTBUBBLES | 414 | Switch to new interactive comments, requires boundry conversion to preserve previous states |\r\n| VER_UE4_LANDSCAPE_SERIALIZE_PHYSICS_MATERIALS | 415 | Landscape serializes physical materials for collision objects |\r\n| VER_UE4_RENAME_WIDGET_VISIBILITY | 416 | Rename Visiblity on widgets to Visibility |\r\n| VER_UE4_ANIMATION_ADD_TRACKCURVES | 417 | add track curves for animation |\r\n| VER_UE4_MONTAGE_BRANCHING_POINT_REMOVAL | 418 | Removed BranchingPoints from AnimMontages and converted them to regular AnimNotifies. |\r\n| VER_UE4_BLUEPRINT_ENFORCE_CONST_IN_FUNCTION_OVERRIDES | 419 | Enforce const-correctness in Blueprint implementations of native C++ const class methods |\r\n| VER_UE4_ADD_PIVOT_TO_WIDGET_COMPONENT | 420 | Added pivot to widget components, need to load old versions as a 0,0 pivot, new default is 0.5,0.5 |\r\n| VER_UE4_PAWN_AUTO_POSSESS_AI | 421 | Added finer control over when AI Pawns are automatically possessed. Also renamed Pawn.AutoPossess to Pawn.AutoPossessPlayer indicate this was a setting for players and not AI. |\r\n| VER_UE4_FTEXT_HISTORY_DATE_TIMEZONE | 422 | Added serialization of timezone to FTextHistory for AsDate operations. |\r\n| VER_UE4_SORT_ACTIVE_BONE_INDICES | 423 | Sort ActiveBoneIndices on lods so that we can avoid doing it at run time |\r\n| VER_UE4_PERFRAME_MATERIAL_UNIFORM_EXPRESSIONS | 424 | Added per-frame material uniform expressions |\r\n| VER_UE4_MIKKTSPACE_IS_DEFAULT | 425 | Make MikkTSpace the default tangent space calculation method for static meshes. |\r\n| VER_UE4_LANDSCAPE_GRASS_COOKING | 426 | Only applies to cooked files, grass cooking support. |\r\n| VER_UE4_FIX_SKEL_VERT_ORIENT_MESH_PARTICLES | 427 | Fixed code for using the bOrientMeshEmitters property. |\r\n| VER_UE4_LANDSCAPE_STATIC_SECTION_OFFSET | 428 | Do not change landscape section offset on load under world composition |\r\n| VER_UE4_ADD_MODIFIERS_RUNTIME_GENERATION | 429 | New options for navigation data runtime generation (static, modifiers only, dynamic) |\r\n| VER_UE4_MATERIAL_MASKED_BLENDMODE_TIDY | 430 | Tidied up material's handling of masked blend mode. |\r\n| VER_UE4_MERGED_ADD_MODIFIERS_RUNTIME_GENERATION_TO_4_7_DEPRECATED | 431 | Original version of VER_UE4_MERGED_ADD_MODIFIERS_RUNTIME_GENERATION_TO_4_7; renumbered to prevent blocking promotion in main. |\r\n| VER_UE4_AFTER_MERGED_ADD_MODIFIERS_RUNTIME_GENERATION_TO_4_7_DEPRECATED | 432 | Original version of VER_UE4_AFTER_MERGED_ADD_MODIFIERS_RUNTIME_GENERATION_TO_4_7; renumbered to prevent blocking promotion in main. |\r\n| VER_UE4_MERGED_ADD_MODIFIERS_RUNTIME_GENERATION_TO_4_7 | 433 | After merging VER_UE4_ADD_MODIFIERS_RUNTIME_GENERATION into 4.7 branch |\r\n| VER_UE4_AFTER_MERGING_ADD_MODIFIERS_RUNTIME_GENERATION_TO_4_7 | 434 | After merging VER_UE4_ADD_MODIFIERS_RUNTIME_GENERATION into 4.7 branch |\r\n| VER_UE4_SERIALIZE_LANDSCAPE_GRASS_DATA | 435 | Landscape grass weightmap data is now generated in the editor and serialized. |\r\n| VER_UE4_OPTIONALLY_CLEAR_GPU_EMITTERS_ON_INIT | 436 | New property to optionally prevent gpu emitters clearing existing particles on Init(). |\r\n| VER_UE4_SERIALIZE_LANDSCAPE_GRASS_DATA_MATERIAL_GUID | 437 | Also store the Material guid with the landscape grass data |\r\n| VER_UE4_BLUEPRINT_GENERATED_CLASS_COMPONENT_TEMPLATES_PUBLIC | 438 | Make sure that all template components from blueprint generated classes are flagged as public |\r\n| VER_UE4_ACTOR_COMPONENT_CREATION_METHOD | 439 | Split out creation method on ActorComponents to distinguish between native, instance, and simple or user construction script |\r\n| VER_UE4_K2NODE_EVENT_MEMBER_REFERENCE | 440 | K2Node_Event now uses FMemberReference for handling references |\r\n| VER_UE4_STRUCT_GUID_IN_PROPERTY_TAG | 441 | FPropertyTag stores GUID of struct |\r\n| VER_UE4_REMOVE_UNUSED_UPOLYS_FROM_UMODEL | 442 | Remove unused UPolys from UModel cooked content |\r\n| VER_UE4_REBUILD_HIERARCHICAL_INSTANCE_TREES | 443 | This doesn't do anything except trigger a rebuild on HISMC cluster trees, in this case to get a good \"occlusion query\" level |\r\n| VER_UE4_PACKAGE_SUMMARY_HAS_COMPATIBLE_ENGINE_VERSION | 444 | Package summary includes an CompatibleWithEngineVersion field, separately to the version it's saved with |\r\n| VER_UE4_TRACK_UCS_MODIFIED_PROPERTIES | 445 | Track UCS modified properties on Actor Components |\r\n| VER_UE4_LANDSCAPE_SPLINE_CROSS_LEVEL_MESHES | 446 | Allowed landscape spline meshes to be stored into landscape streaming levels rather than the spline's level |\r\n| VER_UE4_DEPRECATE_USER_WIDGET_DESIGN_SIZE | 447 | Deprecate the variables used for sizing in the designer on UUserWidget |\r\n| VER_UE4_ADD_EDITOR_VIEWS | 448 | Make the editor views array dynamically sized |\r\n| VER_UE4_FOLIAGE_WITH_ASSET_OR_CLASS | 449 | Updated foliage to work with either FoliageType assets or blueprint classes |\r\n| VER_UE4_BODYINSTANCE_BINARY_SERIALIZATION | 450 | Allows PhysicsSerializer to serialize shapes and actors for faster load times |\r\n| VER_UE4_SERIALIZE_BLUEPRINT_EVENTGRAPH_FASTCALLS_IN_UFUNCTION | 451 | Added fastcall data serialization directly in UFunction |\r\n| VER_UE4_INTERPCURVE_SUPPORTS_LOOPING | 452 | Changes to USplineComponent and FInterpCurve |\r\n| VER_UE4_MATERIAL_INSTANCE_BASE_PROPERTY_OVERRIDES_DITHERED_LOD_TRANSITION | 453 | Material Instances overriding base material LOD transitions |\r\n| VER_UE4_SERIALIZE_LANDSCAPE_ES2_TEXTURES | 454 | Serialize ES2 textures separately rather than overwriting the properties used on other platforms |\r\n| VER_UE4_CONSTRAINT_INSTANCE_MOTOR_FLAGS | 455 | Constraint motor velocity is broken into per-component |\r\n| VER_UE4_SERIALIZE_PINTYPE_CONST | 456 | Serialize bIsConst in FEdGraphPinType |\r\n| VER_UE4_LIBRARY_CATEGORIES_AS_FTEXT | 457 | Change UMaterialFunction::LibraryCategories to LibraryCategoriesText (old assets were saved before auto-conversion of FArrayProperty was possible) |\r\n| VER_UE4_SKIP_DUPLICATE_EXPORTS_ON_SAVE_PACKAGE | 458 | Check for duplicate exports while saving packages. |\r\n| VER_UE4_SERIALIZE_TEXT_IN_PACKAGES | 459 | Pre-gathering of gatherable, localizable text in packages to optimize text gathering operation times |\r\n| VER_UE4_ADD_BLEND_MODE_TO_WIDGET_COMPONENT | 460 | Added pivot to widget components, need to load old versions as a 0,0 pivot, new default is 0.5,0.5 |\r\n| VER_UE4_NEW_LIGHTMASS_PRIMITIVE_SETTING | 461 | Added lightmass primitive setting |\r\n| VER_UE4_REPLACE_SPRING_NOZ_PROPERTY | 462 | Deprecate NoZSpring property on spring nodes to be replaced with TranslateZ property |\r\n| VER_UE4_TIGHTLY_PACKED_ENUMS | 463 | Keep enums tight and serialize their values as pairs of FName and value. Don't insert dummy values. |\r\n| VER_UE4_ASSET_IMPORT_DATA_AS_JSON | 464 | Changed Asset import data to serialize file meta data as JSON |\r\n| VER_UE4_TEXTURE_LEGACY_GAMMA | 465 | Legacy gamma support for textures. |\r\n| VER_UE4_ADDED_NATIVE_SERIALIZATION_FOR_IMMUTABLE_STRUCTURES | 466 | Added WithSerializer for basic native structures like FVector, FColor etc to improve serialization performance |\r\n| VER_UE4_DEPRECATE_UMG_STYLE_OVERRIDES | 467 | Deprecated attributes that override the style on UMG widgets |\r\n| VER_UE4_STATIC_SHADOWMAP_PENUMBRA_SIZE | 468 | Shadowmap penumbra size stored |\r\n| VER_UE4_NIAGARA_DATA_OBJECT_DEV_UI_FIX | 469 | Fix BC on Niagara effects from the data object and dev UI changes. |\r\n| VER_UE4_FIXED_DEFAULT_ORIENTATION_OF_WIDGET_COMPONENT | 470 | Fixed the default orientation of widget component so it faces down +x |\r\n| VER_UE4_REMOVED_MATERIAL_USED_WITH_UI_FLAG | 471 | Removed bUsedWithUI flag from UMaterial and replaced it with a new material domain for UI |\r\n| VER_UE4_CHARACTER_MOVEMENT_ADD_BRAKING_FRICTION | 472 | Added braking friction separate from turning friction. |\r\n| VER_UE4_BSP_UNDO_FIX | 473 | Removed TTransArrays from UModel |\r\n| VER_UE4_DYNAMIC_PARAMETER_DEFAULT_VALUE | 474 | Added default value to dynamic parameter. |\r\n| VER_UE4_STATIC_MESH_EXTENDED_BOUNDS | 475 | Added ExtendedBounds to StaticMesh |\r\n| VER_UE4_ADDED_NON_LINEAR_TRANSITION_BLENDS | 476 | Added non-linear blending to anim transitions, deprecating old types |\r\n| VER_UE4_AO_MATERIAL_MASK | 477 | AO Material Mask texture |\r\n| VER_UE4_NAVIGATION_AGENT_SELECTOR | 478 | Replaced navigation agents selection with single structure |\r\n| VER_UE4_MESH_PARTICLE_COLLISIONS_CONSIDER_PARTICLE_SIZE | 479 | Mesh particle collisions consider particle size. |\r\n| VER_UE4_BUILD_MESH_ADJ_BUFFER_FLAG_EXPOSED | 480 | Adjacency buffer building no longer automatically handled based on triangle count, user-controlled |\r\n| VER_UE4_MAX_ANGULAR_VELOCITY_DEFAULT | 481 | Change the default max angular velocity |\r\n| VER_UE4_APEX_CLOTH_TESSELLATION | 482 | Build Adjacency index buffer for clothing tessellation |\r\n| VER_UE4_DECAL_SIZE | 483 | Added DecalSize member, solved backward compatibility |\r\n| VER_UE4_KEEP_ONLY_PACKAGE_NAMES_IN_STRING_ASSET_REFERENCES_MAP | 484 | Keep only package names in StringAssetReferencesMap |\r\n| VER_UE4_COOKED_ASSETS_IN_EDITOR_SUPPORT | 485 | Support sound cue not saving out editor only data |\r\n| VER_UE4_DIALOGUE_WAVE_NAMESPACE_AND_CONTEXT_CHANGES | 486 | Updated dialogue wave localization gathering logic. |\r\n| VER_UE4_MAKE_ROT_RENAME_AND_REORDER | 487 | Renamed MakeRot MakeRotator and rearranged parameters. |\r\n| VER_UE4_K2NODE_VAR_REFERENCEGUIDS | 488 | K2Node_Variable will properly have the VariableReference Guid set if available |\r\n| VER_UE4_SOUND_CONCURRENCY_PACKAGE | 489 | Added support for sound concurrency settings structure and overrides |\r\n| VER_UE4_USERWIDGET_DEFAULT_FOCUSABLE_FALSE | 490 | Changing the default value for focusable user widgets to false |\r\n| VER_UE4_BLUEPRINT_CUSTOM_EVENT_CONST_INPUT | 491 | Custom event nodes implicitly set 'const' on array and non-array pass-by-reference input params |\r\n| VER_UE4_USE_LOW_PASS_FILTER_FREQ | 492 | Renamed HighFrequencyGain to LowPassFilterFrequency |\r\n| VER_UE4_NO_ANIM_BP_CLASS_IN_GAMEPLAY_CODE | 493 | UAnimBlueprintGeneratedClass can be replaced by a dynamic class. Use TSubclassOf UAnimInstance instead. |\r\n| VER_UE4_SCS_STORES_ALLNODES_ARRAY | 494 | The SCS keeps a list of all nodes in its hierarchy rather than recursively building it each time it is requested |\r\n| VER_UE4_FBX_IMPORT_DATA_RANGE_ENCAPSULATION | 495 | Moved StartRange and EndRange in UFbxAnimSequenceImportData to use FInt32Interval |\r\n| VER_UE4_CAMERA_COMPONENT_ATTACH_TO_ROOT | 496 | Adding a new root scene component to camera component |\r\n| VER_UE4_INSTANCED_STEREO_UNIFORM_UPDATE | 497 | Updating custom material expression nodes for instanced stereo implementation |\r\n| VER_UE4_STREAMABLE_TEXTURE_MIN_MAX_DISTANCE | 498 | Texture streaming min and max distance to handle HLOD |\r\n| VER_UE4_INJECT_BLUEPRINT_STRUCT_PIN_CONVERSION_NODES | 499 | Fixing up invalid struct-to-struct pin connections by injecting available conversion nodes |\r\n| VER_UE4_INNER_ARRAY_TAG_INFO | 500 | Saving tag data for Array Property's inner property |\r\n| VER_UE4_FIX_SLOT_NAME_DUPLICATION | 501 | Fixed duplicating slot node names in skeleton due to skeleton preload on compile |\r\n| VER_UE4_STREAMABLE_TEXTURE_AABB | 502 | Texture streaming using AABBs instead of Spheres |\r\n| VER_UE4_PROPERTY_GUID_IN_PROPERTY_TAG | 503 | FPropertyTag stores GUID of property |\r\n| VER_UE4_NAME_HASHES_SERIALIZED | 504 | Name table hashes are calculated and saved out rather than at load time |\r\n| VER_UE4_INSTANCED_STEREO_UNIFORM_REFACTOR | 505 | Updating custom material expression nodes for instanced stereo implementation refactor |\r\n| VER_UE4_COMPRESSED_SHADER_RESOURCES | 506 | Added compression to the shader resource for memory savings |\r\n| VER_UE4_PRELOAD_DEPENDENCIES_IN_COOKED_EXPORTS | 507 | Cooked files contain the dependency graph for the event driven loader (the serialization is largely independent of the use of the new loader) |\r\n| VER_UE4_TemplateIndex_IN_COOKED_EXPORTS | 508 | Cooked files contain the TemplateIndex used by the event driven loader (the serialization is largely independent of the use of the new loader, i.e. this will be null if cooking for the old loader) |\r\n| VER_UE4_PROPERTY_TAG_SET_MAP_SUPPORT | 509 | FPropertyTag includes contained type(s) for Set and Map properties |\r\n| VER_UE4_ADDED_SEARCHABLE_NAMES | 510 | Added SearchableNames to the package summary and asset registry |\r\n| VER_UE4_64BIT_EXPORTMAP_SERIALSIZES | 511 | Increased size of SerialSize and SerialOffset in export map entries to 64 bit, allow support for bigger files |\r\n| VER_UE4_SKYLIGHT_MOBILE_IRRADIANCE_MAP | 512 | Sky light stores IrradianceMap for mobile renderer. |\r\n| VER_UE4_ADDED_SWEEP_WHILE_WALKING_FLAG | 513 | Added flag to control sweep behavior while walking in UCharacterMovementComponent. |\r\n| VER_UE4_ADDED_SOFT_OBJECT_PATH | 514 | StringAssetReference changed to SoftObjectPath and swapped to serialize as a name+string instead of a string |\r\n| VER_UE4_POINTLIGHT_SOURCE_ORIENTATION | 515 | Changed the source orientation of point lights to match spot lights (z axis) |\r\n| VER_UE4_ADDED_PACKAGE_SUMMARY_LOCALIZATION_ID | 516 | LocalizationId has been added to the package summary (editor-only) |\r\n| VER_UE4_FIX_WIDE_STRING_CRC | 517 | Fixed case insensitive hashes of wide strings containing character values from 128-255 |\r\n| VER_UE4_ADDED_PACKAGE_OWNER | 518 | Added package owner to allow private references |\r\n| VER_UE4_SKINWEIGHT_PROFILE_DATA_LAYOUT_CHANGES | 519 | Changed the data layout for skin weight profile data |\r\n| VER_UE4_NON_OUTER_PACKAGE_IMPORT | 520 | Added import that can have package different than their outer |\r\n| VER_UE4_ASSETREGISTRY_DEPENDENCYFLAGS | 521 | Added DependencyFlags to AssetRegistry |\r\n| VER_UE4_CORRECT_LICENSEE_FLAG | 522 | Fixed corrupt licensee flag in 4.26 assets |\r\n| VER_UE4_AUTOMATIC_VERSION | 522 | The newest specified version of the Unreal Engine. |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.objectversionue5.md",
    "content": "# ObjectVersionUE5\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nAn enum used to represent the global object version of UE5.\r\n\r\n```csharp\r\npublic enum ObjectVersionUE5\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ObjectVersionUE5](./uassetapi.unrealtypes.objectversionue5.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.tbox-1.md",
    "content": "# TBox&lt;T&gt;\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nAxis-aligned box collision geometry. Consists of a core AABB with a margin.\r\n The margin should be considered physically part of the * box - it pads the faces and rounds the corners.\r\n\r\n```csharp\r\npublic struct TBox<T>\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [TBox&lt;T&gt;](./uassetapi.unrealtypes.tbox-1.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Min**\r\n\r\n```csharp\r\npublic T Min;\r\n```\r\n\r\n### **Max**\r\n\r\n```csharp\r\npublic T Max;\r\n```\r\n\r\n### **IsValid**\r\n\r\n```csharp\r\npublic byte IsValid;\r\n```\r\n\r\n## Constructors\r\n\r\n### **TBox(T, T, Byte)**\r\n\r\n```csharp\r\nTBox(T min, T max, byte isValid)\r\n```\r\n\r\n#### Parameters\r\n\r\n`min` T<br>\r\n\r\n`max` T<br>\r\n\r\n`isValid` [Byte](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **TBox(AssetBinaryReader, Func&lt;T&gt;)**\r\n\r\n```csharp\r\nTBox(AssetBinaryReader reader, Func<T> valueReader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`valueReader` Func&lt;T&gt;<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter, Action&lt;T&gt;)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer, Action<T> valueWriter)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`valueWriter` Action&lt;T&gt;<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Clone()**\r\n\r\n```csharp\r\nobject Clone()\r\n```\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.tmap-2.md",
    "content": "# TMap&lt;TKey, TValue&gt;\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nA dictionary object that allows rapid hash lookups using keys, but also\r\n maintains the key insertion order so that values can be retrieved by\r\n key index.\r\n\r\n```csharp\r\npublic class TMap<TKey, TValue> : IOrderedDictionary`2, , , , System.Collections.IEnumerable, System.Collections.Specialized.IOrderedDictionary, System.Collections.IDictionary, System.Collections.ICollection\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`TKey`<br>\r\n\r\n`TValue`<br>\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [TMap&lt;TKey, TValue&gt;](./uassetapi.unrealtypes.tmap-2.md)<br>\r\nImplements IOrderedDictionary&lt;TKey, TValue&gt;, IDictionary&lt;TKey, TValue&gt;, ICollection&lt;KeyValuePair&lt;TKey, TValue&gt;&gt;, IEnumerable&lt;KeyValuePair&lt;TKey, TValue&gt;&gt;, [IEnumerable](https://docs.microsoft.com/en-us/dotnet/api/system.collections.ienumerable), IOrderedDictionary, [IDictionary](https://docs.microsoft.com/en-us/dotnet/api/system.collections.idictionary), [ICollection](https://docs.microsoft.com/en-us/dotnet/api/system.collections.icollection)\r\n\r\n## Properties\r\n\r\n### **Item**\r\n\r\n```csharp\r\npublic TValue Item { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\nTValue<br>\r\n\r\n### **Item**\r\n\r\n```csharp\r\npublic TValue Item { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\nTValue<br>\r\n\r\n### **Count**\r\n\r\nGets the number of items in the dictionary\r\n\r\n```csharp\r\npublic int Count { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **Keys**\r\n\r\nGets all the keys in the ordered dictionary in their proper order.\r\n\r\n```csharp\r\npublic ICollection<TKey> Keys { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\nICollection&lt;TKey&gt;<br>\r\n\r\n### **Values**\r\n\r\nGets all the values in the ordered dictionary in their proper order.\r\n\r\n```csharp\r\npublic ICollection<TValue> Values { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\nICollection&lt;TValue&gt;<br>\r\n\r\n### **Comparer**\r\n\r\nGets the key comparer for this dictionary\r\n\r\n```csharp\r\npublic IEqualityComparer<TKey> Comparer { get; private set; }\r\n```\r\n\r\n#### Property Value\r\n\r\nIEqualityComparer&lt;TKey&gt;<br>\r\n\r\n## Constructors\r\n\r\n### **TMap()**\r\n\r\n```csharp\r\npublic TMap()\r\n```\r\n\r\n### **TMap(IEqualityComparer&lt;TKey&gt;)**\r\n\r\n```csharp\r\npublic TMap(IEqualityComparer<TKey> comparer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`comparer` IEqualityComparer&lt;TKey&gt;<br>\r\n\r\n### **TMap(IOrderedDictionary&lt;TKey, TValue&gt;)**\r\n\r\n```csharp\r\npublic TMap(IOrderedDictionary<TKey, TValue> dictionary)\r\n```\r\n\r\n#### Parameters\r\n\r\n`dictionary` IOrderedDictionary&lt;TKey, TValue&gt;<br>\r\n\r\n### **TMap(IOrderedDictionary&lt;TKey, TValue&gt;, IEqualityComparer&lt;TKey&gt;)**\r\n\r\n```csharp\r\npublic TMap(IOrderedDictionary<TKey, TValue> dictionary, IEqualityComparer<TKey> comparer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`dictionary` IOrderedDictionary&lt;TKey, TValue&gt;<br>\r\n\r\n`comparer` IEqualityComparer&lt;TKey&gt;<br>\r\n\r\n### **TMap(IEnumerable&lt;KeyValuePair&lt;TKey, TValue&gt;&gt;)**\r\n\r\n```csharp\r\npublic TMap(IEnumerable<KeyValuePair<TKey, TValue>> items)\r\n```\r\n\r\n#### Parameters\r\n\r\n`items` IEnumerable&lt;KeyValuePair&lt;TKey, TValue&gt;&gt;<br>\r\n\r\n### **TMap(IEnumerable&lt;KeyValuePair&lt;TKey, TValue&gt;&gt;, IEqualityComparer&lt;TKey&gt;)**\r\n\r\n```csharp\r\npublic TMap(IEnumerable<KeyValuePair<TKey, TValue>> items, IEqualityComparer<TKey> comparer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`items` IEnumerable&lt;KeyValuePair&lt;TKey, TValue&gt;&gt;<br>\r\n\r\n`comparer` IEqualityComparer&lt;TKey&gt;<br>\r\n\r\n## Methods\r\n\r\n### **Add(TKey, TValue)**\r\n\r\nAdds the specified key and value to the dictionary.\r\n\r\n```csharp\r\npublic void Add(TKey key, TValue value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`key` TKey<br>\r\nThe key of the element to add.\r\n\r\n`value` TValue<br>\r\nThe value of the element to add. The value can be null for reference types.\r\n\r\n### **Clear()**\r\n\r\nRemoves all keys and values from this object.\r\n\r\n```csharp\r\npublic void Clear()\r\n```\r\n\r\n### **Insert(Int32, TKey, TValue)**\r\n\r\nInserts a new key-value pair at the index specified.\r\n\r\n```csharp\r\npublic void Insert(int index, TKey key, TValue value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe insertion index. This value must be between 0 and the count of items in this object.\r\n\r\n`key` TKey<br>\r\nA unique key for the element to add\r\n\r\n`value` TValue<br>\r\nThe value of the element to add. Can be null for reference types.\r\n\r\n### **IndexOf(TKey)**\r\n\r\nGets the index of the key specified.\r\n\r\n```csharp\r\npublic int IndexOf(TKey key)\r\n```\r\n\r\n#### Parameters\r\n\r\n`key` TKey<br>\r\nThe key whose index will be located\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nReturns the index of the key specified if found. Returns -1 if the key could not be located.\r\n\r\n### **ContainsValue(TValue)**\r\n\r\nDetermines whether this object contains the specified value.\r\n\r\n```csharp\r\npublic bool ContainsValue(TValue value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` TValue<br>\r\nThe value to locate in this object.\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nTrue if the value is found. False otherwise.\r\n\r\n### **ContainsValue(TValue, IEqualityComparer&lt;TValue&gt;)**\r\n\r\nDetermines whether this object contains the specified value.\r\n\r\n```csharp\r\npublic bool ContainsValue(TValue value, IEqualityComparer<TValue> comparer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`value` TValue<br>\r\nThe value to locate in this object.\r\n\r\n`comparer` IEqualityComparer&lt;TValue&gt;<br>\r\nThe equality comparer used to locate the specified value in this object.\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nTrue if the value is found. False otherwise.\r\n\r\n### **ContainsKey(TKey)**\r\n\r\nDetermines whether this object contains the specified key.\r\n\r\n```csharp\r\npublic bool ContainsKey(TKey key)\r\n```\r\n\r\n#### Parameters\r\n\r\n`key` TKey<br>\r\nThe key to locate in this object.\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nTrue if the key is found. False otherwise.\r\n\r\n### **GetItem(Int32)**\r\n\r\nReturns the KeyValuePair at the index specified.\r\n\r\n```csharp\r\npublic KeyValuePair<TKey, TValue> GetItem(int index)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe index of the KeyValuePair desired\r\n\r\n#### Returns\r\n\r\nKeyValuePair&lt;TKey, TValue&gt;<br>\r\n\r\n#### Exceptions\r\n\r\n[ArgumentOutOfRangeException](https://docs.microsoft.com/en-us/dotnet/api/system.argumentoutofrangeexception)<br>\r\nThrown when the index specified does not refer to a KeyValuePair in this object\r\n\r\n### **SetItem(Int32, TValue)**\r\n\r\nSets the value at the index specified.\r\n\r\n```csharp\r\npublic void SetItem(int index, TValue value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe index of the value desired\r\n\r\n`value` TValue<br>\r\nThe value to set\r\n\r\n#### Exceptions\r\n\r\n[ArgumentOutOfRangeException](https://docs.microsoft.com/en-us/dotnet/api/system.argumentoutofrangeexception)<br>\r\nThrown when the index specified does not refer to a KeyValuePair in this object\r\n\r\n### **GetEnumerator()**\r\n\r\nReturns an enumerator that iterates through all the KeyValuePairs in this object.\r\n\r\n```csharp\r\npublic IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()\r\n```\r\n\r\n#### Returns\r\n\r\nIEnumerator&lt;KeyValuePair&lt;TKey, TValue&gt;&gt;<br>\r\n\r\n### **Remove(TKey)**\r\n\r\nRemoves the key-value pair for the specified key.\r\n\r\n```csharp\r\npublic bool Remove(TKey key)\r\n```\r\n\r\n#### Parameters\r\n\r\n`key` TKey<br>\r\nThe key to remove from the dictionary.\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nTrue if the item specified existed and the removal was successful. False otherwise.\r\n\r\n### **RemoveAt(Int32)**\r\n\r\nRemoves the key-value pair at the specified index.\r\n\r\n```csharp\r\npublic void RemoveAt(int index)\r\n```\r\n\r\n#### Parameters\r\n\r\n`index` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe index of the key-value pair to remove from the dictionary.\r\n\r\n### **GetValue(TKey)**\r\n\r\nGets the value associated with the specified key.\r\n\r\n```csharp\r\npublic TValue GetValue(TKey key)\r\n```\r\n\r\n#### Parameters\r\n\r\n`key` TKey<br>\r\nThe key associated with the value to get.\r\n\r\n#### Returns\r\n\r\nTValue<br>\r\n\r\n### **SetValue(TKey, TValue)**\r\n\r\nSets the value associated with the specified key.\r\n\r\n```csharp\r\npublic void SetValue(TKey key, TValue value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`key` TKey<br>\r\nThe key associated with the value to set.\r\n\r\n`value` TValue<br>\r\nThe the value to set.\r\n\r\n### **TryGetValue(TKey, TValue&)**\r\n\r\nTries to get the value associated with the specified key.\r\n\r\n```csharp\r\npublic bool TryGetValue(TKey key, TValue& value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`key` TKey<br>\r\nThe key of the desired element.\r\n\r\n`value` TValue&<br>\r\nWhen this method returns, contains the value associated with the specified key if\r\n that key was found. Otherwise it will contain the default value for parameter's type.\r\n This parameter should be provided uninitialized.\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nTrue if the value was found. False otherwise.\r\n\r\n**Remarks:**\r\n\r\n\r\n\r\n### **SortKeys()**\r\n\r\n```csharp\r\npublic void SortKeys()\r\n```\r\n\r\n### **SortKeys(IComparer&lt;TKey&gt;)**\r\n\r\n```csharp\r\npublic void SortKeys(IComparer<TKey> comparer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`comparer` IComparer&lt;TKey&gt;<br>\r\n\r\n### **SortKeys(Comparison&lt;TKey&gt;)**\r\n\r\n```csharp\r\npublic void SortKeys(Comparison<TKey> comparison)\r\n```\r\n\r\n#### Parameters\r\n\r\n`comparison` Comparison&lt;TKey&gt;<br>\r\n\r\n### **SortValues()**\r\n\r\n```csharp\r\npublic void SortValues()\r\n```\r\n\r\n### **SortValues(IComparer&lt;TValue&gt;)**\r\n\r\n```csharp\r\npublic void SortValues(IComparer<TValue> comparer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`comparer` IComparer&lt;TValue&gt;<br>\r\n\r\n### **SortValues(Comparison&lt;TValue&gt;)**\r\n\r\n```csharp\r\npublic void SortValues(Comparison<TValue> comparison)\r\n```\r\n\r\n#### Parameters\r\n\r\n`comparison` Comparison&lt;TValue&gt;<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.tperqualitylevel-1.md",
    "content": "# TPerQualityLevel&lt;T&gt;\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic struct TPerQualityLevel<T>\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [TPerQualityLevel&lt;T&gt;](./uassetapi.unrealtypes.tperqualitylevel-1.md)\r\n\r\n## Fields\r\n\r\n### **bCooked**\r\n\r\n```csharp\r\npublic bool bCooked;\r\n```\r\n\r\n### **Default**\r\n\r\n```csharp\r\npublic T Default;\r\n```\r\n\r\n### **PerQuality**\r\n\r\n```csharp\r\npublic Dictionary<int, T> PerQuality;\r\n```\r\n\r\n## Constructors\r\n\r\n### **TPerQualityLevel(Boolean, T, Dictionary&lt;Int32, T&gt;)**\r\n\r\n```csharp\r\nTPerQualityLevel(bool _bCooked, T _default, Dictionary<int, T> perQuality)\r\n```\r\n\r\n#### Parameters\r\n\r\n`_bCooked` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`_default` T<br>\r\n\r\n`perQuality` Dictionary&lt;Int32, T&gt;<br>\r\n\r\n### **TPerQualityLevel(AssetBinaryReader, Func&lt;T&gt;)**\r\n\r\n```csharp\r\nTPerQualityLevel(AssetBinaryReader reader, Func<T> valueReader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`valueReader` Func&lt;T&gt;<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter, Action&lt;T&gt;)**\r\n\r\n```csharp\r\nint Write(AssetBinaryWriter writer, Action<T> valueWriter)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`valueWriter` Action&lt;T&gt;<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.trange-1.md",
    "content": "# TRange&lt;T&gt;\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic struct TRange<T>\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [TRange&lt;T&gt;](./uassetapi.unrealtypes.trange-1.md)\r\n\r\n## Fields\r\n\r\n### **LowerBound**\r\n\r\n```csharp\r\npublic TRangeBound<T> LowerBound;\r\n```\r\n\r\n### **UpperBound**\r\n\r\n```csharp\r\npublic TRangeBound<T> UpperBound;\r\n```\r\n\r\n## Constructors\r\n\r\n### **TRange(TRangeBound&lt;T&gt;, TRangeBound&lt;T&gt;)**\r\n\r\n```csharp\r\nTRange(TRangeBound<T> lowerBound, TRangeBound<T> upperBound)\r\n```\r\n\r\n#### Parameters\r\n\r\n`lowerBound` TRangeBound&lt;T&gt;<br>\r\n\r\n`upperBound` TRangeBound&lt;T&gt;<br>\r\n\r\n### **TRange(AssetBinaryReader, Func&lt;T&gt;)**\r\n\r\n```csharp\r\nTRange(AssetBinaryReader reader, Func<T> valueReader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`valueReader` Func&lt;T&gt;<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter, Action&lt;T&gt;)**\r\n\r\n```csharp\r\nvoid Write(AssetBinaryWriter writer, Action<T> valueWriter)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`valueWriter` Action&lt;T&gt;<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.trangebound-1.md",
    "content": "# TRangeBound&lt;T&gt;\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\nTemplate for range bounds.\r\n\r\n```csharp\r\npublic struct TRangeBound<T>\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [TRangeBound&lt;T&gt;](./uassetapi.unrealtypes.trangebound-1.md)\r\n\r\n## Fields\r\n\r\n### **Type**\r\n\r\n```csharp\r\npublic ERangeBoundTypes Type;\r\n```\r\n\r\n### **Value**\r\n\r\n```csharp\r\npublic T Value;\r\n```\r\n\r\n## Constructors\r\n\r\n### **TRangeBound()**\r\n\r\n```csharp\r\nTRangeBound()\r\n```\r\n\r\n### **TRangeBound(ERangeBoundTypes, T)**\r\n\r\n```csharp\r\nTRangeBound(ERangeBoundTypes type, T value)\r\n```\r\n\r\n#### Parameters\r\n\r\n`type` [ERangeBoundTypes](./uassetapi.unrealtypes.erangeboundtypes.md)<br>\r\n\r\n`value` T<br>\r\n\r\n### **TRangeBound(AssetBinaryReader, Func&lt;T&gt;)**\r\n\r\n```csharp\r\nTRangeBound(AssetBinaryReader reader, Func<T> valueReader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`valueReader` Func&lt;T&gt;<br>\r\n\r\n## Methods\r\n\r\n### **Write(AssetBinaryWriter, Action&lt;T&gt;)**\r\n\r\n```csharp\r\nvoid Write(AssetBinaryWriter writer, Action<T> valueWriter)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`valueWriter` Action&lt;T&gt;<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.ue4versiontoobjectversion.md",
    "content": "# UE4VersionToObjectVersion\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic enum UE4VersionToObjectVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [UE4VersionToObjectVersion](./uassetapi.unrealtypes.ue4versiontoobjectversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.ue5versiontoobjectversion.md",
    "content": "# UE5VersionToObjectVersion\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic enum UE5VersionToObjectVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [UE5VersionToObjectVersion](./uassetapi.unrealtypes.ue5versiontoobjectversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.uniquenetidreplpropertydata.md",
    "content": "# UniqueNetIdReplPropertyData\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic class UniqueNetIdReplPropertyData : UAssetAPI.PropertyTypes.Objects.PropertyData`1[[UAssetAPI.UnrealTypes.FUniqueNetId]], System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;FUniqueNetId&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [UniqueNetIdReplPropertyData](./uassetapi.unrealtypes.uniquenetidreplpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic FUniqueNetId Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FUniqueNetId](./uassetapi.unrealtypes.funiquenetid.md)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **UniqueNetIdReplPropertyData(FName)**\r\n\r\n```csharp\r\npublic UniqueNetIdReplPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **UniqueNetIdReplPropertyData()**\r\n\r\n```csharp\r\npublic UniqueNetIdReplPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unrealtypes.universalobjectlocatorfragmentpropertydata.md",
    "content": "# UniversalObjectLocatorFragmentPropertyData\r\n\r\nNamespace: UAssetAPI.UnrealTypes\r\n\r\n```csharp\r\npublic class UniversalObjectLocatorFragmentPropertyData : UAssetAPI.PropertyTypes.Structs.StructPropertyData, System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [PropertyData](./uassetapi.propertytypes.objects.propertydata.md) → [PropertyData&lt;List&lt;PropertyData&gt;&gt;](./uassetapi.propertytypes.objects.propertydata-1.md) → [StructPropertyData](./uassetapi.propertytypes.structs.structpropertydata.md) → [UniversalObjectLocatorFragmentPropertyData](./uassetapi.unrealtypes.universalobjectlocatorfragmentpropertydata.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **FragmentTypeID**\r\n\r\n```csharp\r\npublic FName FragmentTypeID;\r\n```\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic FName StructType;\r\n```\r\n\r\n### **SerializeNone**\r\n\r\n```csharp\r\npublic bool SerializeNone;\r\n```\r\n\r\n### **StructGUID**\r\n\r\n```csharp\r\npublic Guid StructGUID;\r\n```\r\n\r\n### **SerializationControl**\r\n\r\n```csharp\r\npublic EClassSerializationControlExtension SerializationControl;\r\n```\r\n\r\n### **Operation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation Operation;\r\n```\r\n\r\n### **Name**\r\n\r\nThe name of this property.\r\n\r\n```csharp\r\npublic FName Name;\r\n```\r\n\r\n### **Ancestry**\r\n\r\nThe ancestry of this property. Contains information about all the classes/structs that this property is contained within. Not serialized.\r\n\r\n```csharp\r\npublic AncestryInfo Ancestry;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\nThe array index of this property. Used to distinguish properties with the same name in the same struct.\r\n\r\n```csharp\r\npublic int ArrayIndex;\r\n```\r\n\r\n### **PropertyGuid**\r\n\r\nAn optional property GUID. Nearly always null.\r\n\r\n```csharp\r\npublic Nullable<Guid> PropertyGuid;\r\n```\r\n\r\n### **IsZero**\r\n\r\nWhether or not this property is \"zero,\" meaning that its body can be skipped during unversioned property serialization because it consists solely of null bytes.\r\n\r\n\r\n\r\nThis field will always be treated as if it is false if [PropertyData.CanBeZero(UAsset)](./uassetapi.propertytypes.objects.propertydata.md#canbezerouasset) does not return true.\r\n\r\n```csharp\r\npublic bool IsZero;\r\n```\r\n\r\n### **PropertyTagFlags**\r\n\r\n```csharp\r\npublic EPropertyTagFlags PropertyTagFlags;\r\n```\r\n\r\n### **PropertyTypeName**\r\n\r\n```csharp\r\npublic FPropertyTypeName PropertyTypeName;\r\n```\r\n\r\n### **PropertyTagExtensions**\r\n\r\nOptional extensions to serialize with this property.\r\n\r\n```csharp\r\npublic EPropertyTagExtension PropertyTagExtensions;\r\n```\r\n\r\n### **OverrideOperation**\r\n\r\n```csharp\r\npublic EOverriddenPropertyOperation OverrideOperation;\r\n```\r\n\r\n### **bExperimentalOverridableLogic**\r\n\r\n```csharp\r\npublic bool bExperimentalOverridableLogic;\r\n```\r\n\r\n### **Offset**\r\n\r\nThe offset of this property on disk. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic long Offset;\r\n```\r\n\r\n### **Tag**\r\n\r\nAn optional tag which can be set on any property in memory. This is for the user only, and has no bearing in the API itself.\r\n\r\n```csharp\r\npublic object Tag;\r\n```\r\n\r\n## Properties\r\n\r\n### **HasCustomStructSerialization**\r\n\r\n```csharp\r\npublic bool HasCustomStructSerialization { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **PropertyType**\r\n\r\n```csharp\r\npublic FString PropertyType { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[FString](./uassetapi.unrealtypes.fstring.md)<br>\r\n\r\n### **Value**\r\n\r\nThe \"main value\" of this property, if such a concept is applicable to the property in question. Properties may contain other values as well, in which case they will be present as other fields in the child class.\r\n\r\n```csharp\r\npublic List<PropertyData> Value { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[List&lt;PropertyData&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n### **RawValue**\r\n\r\n```csharp\r\npublic object RawValue { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ShouldBeRegistered**\r\n\r\nDetermines whether or not this particular property should be registered in the property registry and automatically used when parsing assets.\r\n\r\n```csharp\r\npublic bool ShouldBeRegistered { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **DefaultValue**\r\n\r\nThe default value of this property, used as a fallback when no value is defined. Null by default.\r\n\r\n```csharp\r\npublic object DefaultValue { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n## Constructors\r\n\r\n### **UniversalObjectLocatorFragmentPropertyData(FName, FName)**\r\n\r\n```csharp\r\npublic UniversalObjectLocatorFragmentPropertyData(FName name, FName forcedType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n`forcedType` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **UniversalObjectLocatorFragmentPropertyData(FName)**\r\n\r\n```csharp\r\npublic UniversalObjectLocatorFragmentPropertyData(FName name)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\n\r\n### **UniversalObjectLocatorFragmentPropertyData()**\r\n\r\n```csharp\r\npublic UniversalObjectLocatorFragmentPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader, Boolean, Int64, Int64, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader, bool includeHeader, long leng1, long leng2, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`leng1` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`leng2` [Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n### **Write(AssetBinaryWriter, Boolean, PropertySerializationContext)**\r\n\r\n```csharp\r\npublic int Write(AssetBinaryWriter writer, bool includeHeader, PropertySerializationContext serializationContext)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n`includeHeader` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializationContext` [PropertySerializationContext](./uassetapi.propertytypes.objects.propertyserializationcontext.md)<br>\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.ecompressionmethod.md",
    "content": "# ECompressionMethod\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\n```csharp\r\npublic enum ECompressionMethod\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECompressionMethod](./uassetapi.unversioned.ecompressionmethod.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.ecustomversionserializationformat.md",
    "content": "# ECustomVersionSerializationFormat\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\n```csharp\r\npublic enum ECustomVersionSerializationFormat\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ECustomVersionSerializationFormat](./uassetapi.unversioned.ecustomversionserializationformat.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.epropertytype.md",
    "content": "# EPropertyType\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\n```csharp\r\npublic enum EPropertyType\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [EPropertyType](./uassetapi.unversioned.epropertytype.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.esavegamefileversion.md",
    "content": "# ESaveGameFileVersion\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\n```csharp\r\npublic enum ESaveGameFileVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [ESaveGameFileVersion](./uassetapi.unversioned.esavegamefileversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.ffragment.md",
    "content": "# FFragment\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\nUnversioned header fragment.\r\n\r\n```csharp\r\npublic class FFragment\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FFragment](./uassetapi.unversioned.ffragment.md)\r\n\r\n## Fields\r\n\r\n### **SkipNum**\r\n\r\nNumber of properties to skip before values.\r\n\r\n```csharp\r\npublic int SkipNum;\r\n```\r\n\r\n### **ValueNum**\r\n\r\nNumber of subsequent property values stored.\r\n\r\n```csharp\r\npublic int ValueNum;\r\n```\r\n\r\n### **bIsLast**\r\n\r\nIs this the last fragment of the header?\r\n\r\n```csharp\r\npublic bool bIsLast;\r\n```\r\n\r\n### **FirstNum**\r\n\r\n```csharp\r\npublic int FirstNum;\r\n```\r\n\r\n### **bHasAnyZeroes**\r\n\r\n```csharp\r\npublic bool bHasAnyZeroes;\r\n```\r\n\r\n## Properties\r\n\r\n### **LastNum**\r\n\r\n```csharp\r\npublic int LastNum { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n## Constructors\r\n\r\n### **FFragment()**\r\n\r\n```csharp\r\npublic FFragment()\r\n```\r\n\r\n### **FFragment(Int32, Int32, Boolean, Boolean, Int32)**\r\n\r\n```csharp\r\npublic FFragment(int skipNum, int valueNum, bool bIsLast, bool bHasAnyZeroes, int firstNum)\r\n```\r\n\r\n#### Parameters\r\n\r\n`skipNum` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`valueNum` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`bIsLast` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`bHasAnyZeroes` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`firstNum` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n## Methods\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **Pack()**\r\n\r\n```csharp\r\npublic ushort Pack()\r\n```\r\n\r\n#### Returns\r\n\r\n[UInt16](https://docs.microsoft.com/en-us/dotnet/api/system.uint16)<br>\r\n\r\n### **Unpack(UInt16)**\r\n\r\n```csharp\r\npublic static FFragment Unpack(ushort Int)\r\n```\r\n\r\n#### Parameters\r\n\r\n`Int` [UInt16](https://docs.microsoft.com/en-us/dotnet/api/system.uint16)<br>\r\n\r\n#### Returns\r\n\r\n[FFragment](./uassetapi.unversioned.ffragment.md)<br>\r\n\r\n### **GetFromBounds(Int32, Int32, Int32, Boolean, Boolean)**\r\n\r\n```csharp\r\npublic static FFragment GetFromBounds(int LastNumBefore, int FirstNum, int LastNum, bool hasAnyZeros, bool isLast)\r\n```\r\n\r\n#### Parameters\r\n\r\n`LastNumBefore` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`FirstNum` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`LastNum` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`hasAnyZeros` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`isLast` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n#### Returns\r\n\r\n[FFragment](./uassetapi.unversioned.ffragment.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.funversionedheader.md",
    "content": "# FUnversionedHeader\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\nList of serialized property indices and which of them are non-zero.\r\n Serialized as a stream of 16-bit skip-x keep-y fragments and a zero bitmask.\r\n\r\n```csharp\r\npublic class FUnversionedHeader\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [FUnversionedHeader](./uassetapi.unversioned.funversionedheader.md)\r\n\r\n## Fields\r\n\r\n### **Fragments**\r\n\r\n```csharp\r\npublic LinkedList<FFragment> Fragments;\r\n```\r\n\r\n### **CurrentFragment**\r\n\r\n```csharp\r\npublic LinkedListNode<FFragment> CurrentFragment;\r\n```\r\n\r\n### **UnversionedPropertyIndex**\r\n\r\n```csharp\r\npublic int UnversionedPropertyIndex;\r\n```\r\n\r\n### **ZeroMaskIndex**\r\n\r\n```csharp\r\npublic int ZeroMaskIndex;\r\n```\r\n\r\n### **ZeroMaskNum**\r\n\r\n```csharp\r\npublic uint ZeroMaskNum;\r\n```\r\n\r\n### **ZeroMask**\r\n\r\n```csharp\r\npublic BitArray ZeroMask;\r\n```\r\n\r\n### **bHasNonZeroValues**\r\n\r\n```csharp\r\npublic bool bHasNonZeroValues;\r\n```\r\n\r\n## Constructors\r\n\r\n### **FUnversionedHeader(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic FUnversionedHeader(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **FUnversionedHeader()**\r\n\r\n```csharp\r\npublic FUnversionedHeader()\r\n```\r\n\r\n## Methods\r\n\r\n### **Read(AssetBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(AssetBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n### **LoadZeroMaskData(AssetBinaryReader, UInt32)**\r\n\r\n```csharp\r\npublic void LoadZeroMaskData(AssetBinaryReader reader, uint NumBits)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [AssetBinaryReader](./uassetapi.assetbinaryreader.md)<br>\r\n\r\n`NumBits` [UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n### **SaveZeroMaskData()**\r\n\r\n```csharp\r\npublic Byte[] SaveZeroMaskData()\r\n```\r\n\r\n#### Returns\r\n\r\n[Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n### **CheckIfZeroMaskIsAllOnes()**\r\n\r\n```csharp\r\npublic bool CheckIfZeroMaskIsAllOnes()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **Write(AssetBinaryWriter)**\r\n\r\n```csharp\r\npublic void Write(AssetBinaryWriter writer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` [AssetBinaryWriter](./uassetapi.assetbinarywriter.md)<br>\r\n\r\n### **HasValues()**\r\n\r\n```csharp\r\npublic bool HasValues()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **HasNonZeroValues()**\r\n\r\n```csharp\r\npublic bool HasNonZeroValues()\r\n```\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.oodle.md",
    "content": "# Oodle\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\n```csharp\r\npublic class Oodle\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Oodle](./uassetapi.unversioned.oodle.md)\r\n\r\n## Fields\r\n\r\n### **OODLE_DOWNLOAD_LINK**\r\n\r\n```csharp\r\npublic static string OODLE_DOWNLOAD_LINK;\r\n```\r\n\r\n### **OODLE_DLL_NAME**\r\n\r\n```csharp\r\npublic static string OODLE_DLL_NAME;\r\n```\r\n\r\n## Constructors\r\n\r\n### **Oodle()**\r\n\r\n```csharp\r\npublic Oodle()\r\n```\r\n\r\n## Methods\r\n\r\n### **Decompress(Byte[], Int32, Int32)**\r\n\r\n```csharp\r\npublic static Byte[] Decompress(Byte[] buffer, int size, int uncompressedSize)\r\n```\r\n\r\n#### Parameters\r\n\r\n`buffer` [Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n`size` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n`uncompressedSize` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n#### Returns\r\n\r\n[Byte[]](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.savegame.md",
    "content": "# SaveGame\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\nRepresents an Unreal save game file. Parsing is only implemented for engine and custom version data.\r\n\r\n```csharp\r\npublic class SaveGame\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [SaveGame](./uassetapi.unversioned.savegame.md)\r\n\r\n## Fields\r\n\r\n### **FilePath**\r\n\r\nThe path of the file on disk.\r\n\r\n```csharp\r\npublic string FilePath;\r\n```\r\n\r\n### **SaveGameFileVersion**\r\n\r\n```csharp\r\npublic ESaveGameFileVersion SaveGameFileVersion;\r\n```\r\n\r\n### **ObjectVersion**\r\n\r\n```csharp\r\npublic ObjectVersion ObjectVersion;\r\n```\r\n\r\n### **ObjectVersionUE5**\r\n\r\n```csharp\r\npublic ObjectVersionUE5 ObjectVersionUE5;\r\n```\r\n\r\n### **EngineVersion**\r\n\r\n```csharp\r\npublic FEngineVersion EngineVersion;\r\n```\r\n\r\n### **CustomVersionSerializationFormat**\r\n\r\n```csharp\r\npublic ECustomVersionSerializationFormat CustomVersionSerializationFormat;\r\n```\r\n\r\n### **CustomVersionContainer**\r\n\r\nAll the custom versions stored in the archive.\r\n\r\n```csharp\r\npublic List<CustomVersion> CustomVersionContainer;\r\n```\r\n\r\n### **SAVE_MAGIC**\r\n\r\n```csharp\r\npublic static Byte[] SAVE_MAGIC;\r\n```\r\n\r\n## Constructors\r\n\r\n### **SaveGame(String)**\r\n\r\nReads a save game from disk and initializes a new instance of the [SaveGame](./uassetapi.unversioned.savegame.md) class to store its data in memory.\r\n\r\n\r\n\r\nParsing is only implemented for engine and custom version data.\r\n\r\n```csharp\r\npublic SaveGame(string path)\r\n```\r\n\r\n#### Parameters\r\n\r\n`path` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe path of the .sav file on disk that this instance will read from.\r\n\r\n#### Exceptions\r\n\r\n[FormatException](https://docs.microsoft.com/en-us/dotnet/api/system.formatexception)<br>\r\nThrow when the asset cannot be parsed correctly.\r\n\r\n### **SaveGame()**\r\n\r\nInitializes a new instance of the [SaveGame](./uassetapi.unversioned.savegame.md) class. This instance will store no file data and does not represent any file in particular until the [SaveGame.Read(UnrealBinaryReader)](./uassetapi.unversioned.savegame.md#readunrealbinaryreader) method is manually called.\r\n\r\n```csharp\r\npublic SaveGame()\r\n```\r\n\r\n## Methods\r\n\r\n### **PathToStream(String)**\r\n\r\nCreates a MemoryStream from an asset path.\r\n\r\n```csharp\r\npublic MemoryStream PathToStream(string p)\r\n```\r\n\r\n#### Parameters\r\n\r\n`p` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe path to the input file.\r\n\r\n#### Returns\r\n\r\n[MemoryStream](https://docs.microsoft.com/en-us/dotnet/api/system.io.memorystream)<br>\r\nA new MemoryStream that stores the binary data of the input file.\r\n\r\n### **PathToReader(String)**\r\n\r\nCreates a BinaryReader from an asset path.\r\n\r\n```csharp\r\npublic UnrealBinaryReader PathToReader(string p)\r\n```\r\n\r\n#### Parameters\r\n\r\n`p` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe path to the input file.\r\n\r\n#### Returns\r\n\r\n[UnrealBinaryReader](./uassetapi.unrealbinaryreader.md)<br>\r\nA new BinaryReader that stores the binary data of the input file.\r\n\r\n### **Read(UnrealBinaryReader)**\r\n\r\nReads a save game from disk.\r\n\r\n\r\n\r\nParsing is only implemented for engine and custom version data.\r\n\r\n```csharp\r\npublic void Read(UnrealBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [UnrealBinaryReader](./uassetapi.unrealbinaryreader.md)<br>\r\nThe binary reader to use.\r\n\r\n### **PatchUsmap(String)**\r\n\r\nPatches a .usmap file to contain the versioning info within this save file.\r\n\r\n```csharp\r\npublic void PatchUsmap(string usmapPath)\r\n```\r\n\r\n#### Parameters\r\n\r\n`usmapPath` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe path to the .usmap file to patch.\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.usmap.md",
    "content": "# Usmap\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\n```csharp\r\npublic class Usmap\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [Usmap](./uassetapi.unversioned.usmap.md)\r\n\r\n## Fields\r\n\r\n### **FilePath**\r\n\r\nThe path of the file on disk. This does not need to be specified for regular parsing.\r\n\r\n```csharp\r\npublic string FilePath;\r\n```\r\n\r\n### **Version**\r\n\r\n.usmap file version\r\n\r\n```csharp\r\npublic UsmapVersion Version;\r\n```\r\n\r\n### **FileVersionUE4**\r\n\r\nGame UE4 object version\r\n\r\n```csharp\r\npublic ObjectVersion FileVersionUE4;\r\n```\r\n\r\n### **FileVersionUE5**\r\n\r\nGame UE5 object version\r\n\r\n```csharp\r\npublic ObjectVersionUE5 FileVersionUE5;\r\n```\r\n\r\n### **CustomVersionContainer**\r\n\r\nAll the custom versions stored in the archive.\r\n\r\n```csharp\r\npublic List<CustomVersion> CustomVersionContainer;\r\n```\r\n\r\n### **NetCL**\r\n\r\n```csharp\r\npublic uint NetCL;\r\n```\r\n\r\n### **SkipBlueprintSchemas**\r\n\r\nWhether or not to skip blueprint schemas serialized in this mappings file. Only useful for testing.\r\n\r\n```csharp\r\npublic bool SkipBlueprintSchemas;\r\n```\r\n\r\n### **NameMap**\r\n\r\n.usmap name map\r\n\r\n```csharp\r\npublic List<string> NameMap;\r\n```\r\n\r\n### **EnumMap**\r\n\r\n.usmap enum map\r\n\r\n```csharp\r\npublic IDictionary<string, UsmapEnum> EnumMap;\r\n```\r\n\r\n### **Schemas**\r\n\r\n.usmap schema map\r\n\r\n```csharp\r\npublic IDictionary<string, UsmapSchema> Schemas;\r\n```\r\n\r\n### **FailedExtensions**\r\n\r\nList of extensions that failed to parse.\r\n\r\n```csharp\r\npublic List<string> FailedExtensions;\r\n```\r\n\r\n### **PathsAlreadyProcessedForSchemas**\r\n\r\n```csharp\r\npublic ConcurrentDictionary<string, byte> PathsAlreadyProcessedForSchemas;\r\n```\r\n\r\n### **USMAP_MAGIC**\r\n\r\nMagic number for the .usmap format\r\n\r\n```csharp\r\npublic static ushort USMAP_MAGIC;\r\n```\r\n\r\n## Properties\r\n\r\n### **AreFNamesCaseInsensitive**\r\n\r\nWhether or not FNames are case insensitive. Modifying this property is an expensive operation, and will re-construct several dictionaries.\r\n\r\n```csharp\r\npublic bool AreFNamesCaseInsensitive { get; set; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **Usmap(String)**\r\n\r\nReads a .usmap file from disk and initializes a new instance of the [Usmap](./uassetapi.unversioned.usmap.md) class to store its data in memory.\r\n\r\n```csharp\r\npublic Usmap(string path)\r\n```\r\n\r\n#### Parameters\r\n\r\n`path` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe path of the file file on disk that this instance will read from.\r\n\r\n#### Exceptions\r\n\r\n[FormatException](https://docs.microsoft.com/en-us/dotnet/api/system.formatexception)<br>\r\nThrow when the file cannot be parsed correctly.\r\n\r\n### **Usmap(UsmapBinaryReader)**\r\n\r\nReads a .usmap file from a UsmapBinaryReader and initializes a new instance of the [Usmap](./uassetapi.unversioned.usmap.md) class to store its data in memory.\r\n\r\n```csharp\r\npublic Usmap(UsmapBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [UsmapBinaryReader](./uassetapi.usmapbinaryreader.md)<br>\r\nThe file's UsmapBinaryReader that this instance will read from.\r\n\r\n#### Exceptions\r\n\r\n[FormatException](https://docs.microsoft.com/en-us/dotnet/api/system.formatexception)<br>\r\nThrow when the asset cannot be parsed correctly.\r\n\r\n### **Usmap()**\r\n\r\nInitializes a new instance of the [Usmap](./uassetapi.unversioned.usmap.md) class. This instance will store no data and does not represent any file in particular until the [Usmap.ReadHeader(UsmapBinaryReader)](./uassetapi.unversioned.usmap.md#readheaderusmapbinaryreader) method is manually called.\r\n\r\n```csharp\r\npublic Usmap()\r\n```\r\n\r\n## Methods\r\n\r\n### **SerializeJSON(Formatting)**\r\n\r\nSerialize this usmap as JSON. This should only be used for debugging or visualization.\r\n\r\n\r\n\r\nThe serialized JSON is lossy and cannot be converted back into a complete .usmap file.\r\n\r\n```csharp\r\npublic string SerializeJSON(Formatting jsonFormatting)\r\n```\r\n\r\n#### Parameters\r\n\r\n`jsonFormatting` Formatting<br>\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe serialized JSON as a string.\r\n\r\n### **GetSchemaFromStructExport(String, UAsset)**\r\n\r\n```csharp\r\npublic static UsmapSchema GetSchemaFromStructExport(string exportName, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`exportName` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n#### Returns\r\n\r\n[UsmapSchema](./uassetapi.unversioned.usmapschema.md)<br>\r\n\r\n### **GetSchemaFromStructExport(StructExport, Boolean)**\r\n\r\n```csharp\r\npublic static UsmapSchema GetSchemaFromStructExport(StructExport exp, bool isCaseInsensitive)\r\n```\r\n\r\n#### Parameters\r\n\r\n`exp` [StructExport](./uassetapi.exporttypes.structexport.md)<br>\r\n\r\n`isCaseInsensitive` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n#### Returns\r\n\r\n[UsmapSchema](./uassetapi.unversioned.usmapschema.md)<br>\r\n\r\n### **GetAllProperties(String, String, UAsset)**\r\n\r\nRetrieve all the properties that a particular schema can reference.\r\n\r\n```csharp\r\npublic IList<UsmapProperty> GetAllProperties(string schemaName, string modulePath, UAsset asset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`schemaName` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe name of the schema of interest.\r\n\r\n`modulePath` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nModule path of the schema of interest.\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\nAn asset to also search for schemas within.\r\n\r\n#### Returns\r\n\r\n[IList&lt;UsmapProperty&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.ilist-1)<br>\r\nAll the properties that the schema can reference.\r\n\r\n### **GetAllPropertiesAnnotated(String, UAsset, IDictionary&lt;String, String&gt;, Boolean, String, String)**\r\n\r\nRetrieve all the properties that a particular schema can reference as an annotated, human-readable text file.\r\n\r\n```csharp\r\npublic string GetAllPropertiesAnnotated(string schemaName, UAsset asset, IDictionary<string, string> customAnnotations, bool recursive, string headerPrefix, string headerSuffix)\r\n```\r\n\r\n#### Parameters\r\n\r\n`schemaName` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe name of the schema of interest.\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\nAn asset to also search for schemas within.\r\n\r\n`customAnnotations` [IDictionary&lt;String, String&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.idictionary-2)<br>\r\nA map of strings to give custom annotations.\r\n\r\n`recursive` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nWhether or not to dump data for parent schemas as well.\r\n\r\n`headerPrefix` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe prefix of the subheader for each relevant schema.\r\n\r\n`headerSuffix` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe suffix of the subheader for each relevant schema.\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nAn annotated, human-readable text file containing the properties that the schema can reference.\r\n\r\n### **GetSchemaFromName(String, UAsset, String, Boolean)**\r\n\r\n```csharp\r\npublic UsmapSchema GetSchemaFromName(string nm, UAsset asset, string modulePath, bool throwExceptions)\r\n```\r\n\r\n#### Parameters\r\n\r\n`nm` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\n\r\n`modulePath` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`throwExceptions` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n#### Returns\r\n\r\n[UsmapSchema](./uassetapi.unversioned.usmapschema.md)<br>\r\n\r\n### **TryGetProperty&lt;T&gt;(FName, AncestryInfo, Int32, UAsset, T&, Int32&)**\r\n\r\nAttempts to retrieve the corresponding .usmap property, given its ancestry.\r\n\r\n```csharp\r\npublic bool TryGetProperty<T>(FName propertyName, AncestryInfo ancestry, int dupIndex, UAsset asset, T& propDat, Int32& idx)\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\nThe type of property to output.\r\n\r\n#### Parameters\r\n\r\n`propertyName` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\nThe name of the property to search for.\r\n\r\n`ancestry` [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\nThe ancestry of the property to search for.\r\n\r\n`dupIndex` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\nThe duplication index of the property to search for. If unknown, set to 0.\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\nAn asset to also search for schemas within.\r\n\r\n`propDat` T&<br>\r\nThe property.\r\n\r\n`idx` [Int32&](https://docs.microsoft.com/en-us/dotnet/api/system.int32&)<br>\r\nThe index of the property.\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nWhether or not the property was successfully found.\r\n\r\n### **TryGetPropertyData&lt;T&gt;(FName, AncestryInfo, UAsset, T&)**\r\n\r\nAttempts to retrieve the corresponding .usmap property data corresponding to a specific property, given its ancestry.\r\n\r\n```csharp\r\npublic bool TryGetPropertyData<T>(FName propertyName, AncestryInfo ancestry, UAsset asset, T& propDat)\r\n```\r\n\r\n#### Type Parameters\r\n\r\n`T`<br>\r\nThe type of property data to output.\r\n\r\n#### Parameters\r\n\r\n`propertyName` [FName](./uassetapi.unrealtypes.fname.md)<br>\r\nThe name of the property to search for.\r\n\r\n`ancestry` [AncestryInfo](./uassetapi.propertytypes.objects.ancestryinfo.md)<br>\r\nThe ancestry of the property to search for.\r\n\r\n`asset` [UAsset](./uassetapi.uasset.md)<br>\r\nAn asset to also search for schemas within.\r\n\r\n`propDat` T&<br>\r\nThe property data.\r\n\r\n#### Returns\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\nWhether or not the property data was successfully found.\r\n\r\n### **PathToStream(String)**\r\n\r\nCreates a MemoryStream from an asset path.\r\n\r\n```csharp\r\npublic static MemoryStream PathToStream(string p)\r\n```\r\n\r\n#### Parameters\r\n\r\n`p` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe path to the input file.\r\n\r\n#### Returns\r\n\r\n[MemoryStream](https://docs.microsoft.com/en-us/dotnet/api/system.io.memorystream)<br>\r\nA new MemoryStream that stores the binary data of the input file.\r\n\r\n### **PathToReader(String)**\r\n\r\nCreates a BinaryReader from an asset path.\r\n\r\n```csharp\r\npublic UsmapBinaryReader PathToReader(string p)\r\n```\r\n\r\n#### Parameters\r\n\r\n`p` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\nThe path to the input file.\r\n\r\n#### Returns\r\n\r\n[UsmapBinaryReader](./uassetapi.usmapbinaryreader.md)<br>\r\nA new BinaryReader that stores the binary data of the input file.\r\n\r\n### **ReadHeader(UsmapBinaryReader)**\r\n\r\n```csharp\r\npublic UsmapBinaryReader ReadHeader(UsmapBinaryReader reader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` [UsmapBinaryReader](./uassetapi.usmapbinaryreader.md)<br>\r\n\r\n#### Returns\r\n\r\n[UsmapBinaryReader](./uassetapi.usmapbinaryreader.md)<br>\r\n\r\n### **Read(UsmapBinaryReader)**\r\n\r\n```csharp\r\npublic void Read(UsmapBinaryReader compressedReader)\r\n```\r\n\r\n#### Parameters\r\n\r\n`compressedReader` [UsmapBinaryReader](./uassetapi.usmapbinaryreader.md)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.usmaparraydata.md",
    "content": "# UsmapArrayData\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\n```csharp\r\npublic class UsmapArrayData : UsmapPropertyData\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UsmapPropertyData](./uassetapi.unversioned.usmappropertydata.md) → [UsmapArrayData](./uassetapi.unversioned.usmaparraydata.md)\r\n\r\n## Fields\r\n\r\n### **InnerType**\r\n\r\n```csharp\r\npublic UsmapPropertyData InnerType;\r\n```\r\n\r\n### **Type**\r\n\r\n```csharp\r\npublic EPropertyType Type;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UsmapArrayData(EPropertyType)**\r\n\r\n```csharp\r\npublic UsmapArrayData(EPropertyType type)\r\n```\r\n\r\n#### Parameters\r\n\r\n`type` [EPropertyType](./uassetapi.unversioned.epropertytype.md)<br>\r\n\r\n## Methods\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.usmapenum.md",
    "content": "# UsmapEnum\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\n```csharp\r\npublic class UsmapEnum\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UsmapEnum](./uassetapi.unversioned.usmapenum.md)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic string Name;\r\n```\r\n\r\n### **ModulePath**\r\n\r\n```csharp\r\npublic string ModulePath;\r\n```\r\n\r\n### **EnumFlags**\r\n\r\n```csharp\r\npublic int EnumFlags;\r\n```\r\n\r\n### **Values**\r\n\r\n```csharp\r\npublic ConcurrentDictionary<long, string> Values;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UsmapEnum(String, ConcurrentDictionary&lt;Int64, String&gt;)**\r\n\r\n```csharp\r\npublic UsmapEnum(string name, ConcurrentDictionary<long, string> values)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`values` ConcurrentDictionary&lt;Int64, String&gt;<br>\r\n\r\n### **UsmapEnum()**\r\n\r\n```csharp\r\npublic UsmapEnum()\r\n```\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.usmapenumdata.md",
    "content": "# UsmapEnumData\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\n```csharp\r\npublic class UsmapEnumData : UsmapPropertyData\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UsmapPropertyData](./uassetapi.unversioned.usmappropertydata.md) → [UsmapEnumData](./uassetapi.unversioned.usmapenumdata.md)\r\n\r\n## Fields\r\n\r\n### **InnerType**\r\n\r\n```csharp\r\npublic UsmapPropertyData InnerType;\r\n```\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic string Name;\r\n```\r\n\r\n### **Values**\r\n\r\n```csharp\r\npublic List<string> Values;\r\n```\r\n\r\n### **Type**\r\n\r\n```csharp\r\npublic EPropertyType Type;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UsmapEnumData(String, List&lt;String&gt;)**\r\n\r\n```csharp\r\npublic UsmapEnumData(string name, List<string> values)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`values` [List&lt;String&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1)<br>\r\n\r\n### **UsmapEnumData()**\r\n\r\n```csharp\r\npublic UsmapEnumData()\r\n```\r\n\r\n## Methods\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.usmapextensionlayoutversion.md",
    "content": "# UsmapExtensionLayoutVersion\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\n```csharp\r\npublic enum UsmapExtensionLayoutVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [UsmapExtensionLayoutVersion](./uassetapi.unversioned.usmapextensionlayoutversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| Initial | 0 | Initial format. |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.usmapmapdata.md",
    "content": "# UsmapMapData\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\n```csharp\r\npublic class UsmapMapData : UsmapPropertyData\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UsmapPropertyData](./uassetapi.unversioned.usmappropertydata.md) → [UsmapMapData](./uassetapi.unversioned.usmapmapdata.md)\r\n\r\n## Fields\r\n\r\n### **InnerType**\r\n\r\n```csharp\r\npublic UsmapPropertyData InnerType;\r\n```\r\n\r\n### **ValueType**\r\n\r\n```csharp\r\npublic UsmapPropertyData ValueType;\r\n```\r\n\r\n### **Type**\r\n\r\n```csharp\r\npublic EPropertyType Type;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UsmapMapData()**\r\n\r\n```csharp\r\npublic UsmapMapData()\r\n```\r\n\r\n## Methods\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.usmapproperty.md",
    "content": "# UsmapProperty\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\n```csharp\r\npublic class UsmapProperty : System.ICloneable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UsmapProperty](./uassetapi.unversioned.usmapproperty.md)<br>\r\nImplements [ICloneable](https://docs.microsoft.com/en-us/dotnet/api/system.icloneable)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic string Name;\r\n```\r\n\r\n### **SchemaIndex**\r\n\r\n```csharp\r\npublic ushort SchemaIndex;\r\n```\r\n\r\n### **ArrayIndex**\r\n\r\n```csharp\r\npublic ushort ArrayIndex;\r\n```\r\n\r\n### **ArraySize**\r\n\r\n```csharp\r\npublic byte ArraySize;\r\n```\r\n\r\n### **PropertyFlags**\r\n\r\n```csharp\r\npublic EPropertyFlags PropertyFlags;\r\n```\r\n\r\n### **PropertyData**\r\n\r\n```csharp\r\npublic UsmapPropertyData PropertyData;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UsmapProperty(String, UInt16, UInt16, Byte, UsmapPropertyData)**\r\n\r\n```csharp\r\npublic UsmapProperty(string name, ushort schemaIndex, ushort arrayIndex, byte arraySize, UsmapPropertyData propertyData)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`schemaIndex` [UInt16](https://docs.microsoft.com/en-us/dotnet/api/system.uint16)<br>\r\n\r\n`arrayIndex` [UInt16](https://docs.microsoft.com/en-us/dotnet/api/system.uint16)<br>\r\n\r\n`arraySize` [Byte](https://docs.microsoft.com/en-us/dotnet/api/system.byte)<br>\r\n\r\n`propertyData` [UsmapPropertyData](./uassetapi.unversioned.usmappropertydata.md)<br>\r\n\r\n## Methods\r\n\r\n### **Clone()**\r\n\r\n```csharp\r\npublic object Clone()\r\n```\r\n\r\n#### Returns\r\n\r\n[Object](https://docs.microsoft.com/en-us/dotnet/api/system.object)<br>\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.usmappropertydata.md",
    "content": "# UsmapPropertyData\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\n```csharp\r\npublic class UsmapPropertyData\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UsmapPropertyData](./uassetapi.unversioned.usmappropertydata.md)\r\n\r\n## Fields\r\n\r\n### **Type**\r\n\r\n```csharp\r\npublic EPropertyType Type;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UsmapPropertyData(EPropertyType)**\r\n\r\n```csharp\r\npublic UsmapPropertyData(EPropertyType type)\r\n```\r\n\r\n#### Parameters\r\n\r\n`type` [EPropertyType](./uassetapi.unversioned.epropertytype.md)<br>\r\n\r\n### **UsmapPropertyData()**\r\n\r\n```csharp\r\npublic UsmapPropertyData()\r\n```\r\n\r\n## Methods\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.usmapschema.md",
    "content": "# UsmapSchema\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\n```csharp\r\npublic class UsmapSchema\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UsmapSchema](./uassetapi.unversioned.usmapschema.md)\r\n\r\n## Fields\r\n\r\n### **Name**\r\n\r\n```csharp\r\npublic string Name;\r\n```\r\n\r\n### **SuperType**\r\n\r\n```csharp\r\npublic string SuperType;\r\n```\r\n\r\n### **SuperTypeModulePath**\r\n\r\n```csharp\r\npublic string SuperTypeModulePath;\r\n```\r\n\r\n### **PropCount**\r\n\r\n```csharp\r\npublic ushort PropCount;\r\n```\r\n\r\n### **ModulePath**\r\n\r\n```csharp\r\npublic string ModulePath;\r\n```\r\n\r\n### **FromAsset**\r\n\r\nWhether or not this schema was retrieved from a .uasset file.\r\n\r\n```csharp\r\npublic bool FromAsset;\r\n```\r\n\r\n### **StructKind**\r\n\r\n```csharp\r\npublic UsmapStructKind StructKind;\r\n```\r\n\r\n### **StructOrClassFlags**\r\n\r\n```csharp\r\npublic int StructOrClassFlags;\r\n```\r\n\r\n## Properties\r\n\r\n### **Properties**\r\n\r\n```csharp\r\npublic IReadOnlyDictionary<int, UsmapProperty> Properties { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[IReadOnlyDictionary&lt;Int32, UsmapProperty&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlydictionary-2)<br>\r\n\r\n## Constructors\r\n\r\n### **UsmapSchema(String, String, UInt16, ConcurrentDictionary&lt;Int32, UsmapProperty&gt;, Boolean, String, Boolean)**\r\n\r\n```csharp\r\npublic UsmapSchema(string name, string superType, ushort propCount, ConcurrentDictionary<int, UsmapProperty> props, bool isCaseInsensitive, string superTypeModulePath, bool fromAsset)\r\n```\r\n\r\n#### Parameters\r\n\r\n`name` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`superType` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`propCount` [UInt16](https://docs.microsoft.com/en-us/dotnet/api/system.uint16)<br>\r\n\r\n`props` ConcurrentDictionary&lt;Int32, UsmapProperty&gt;<br>\r\n\r\n`isCaseInsensitive` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`superTypeModulePath` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`fromAsset` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **UsmapSchema()**\r\n\r\n```csharp\r\npublic UsmapSchema()\r\n```\r\n\r\n## Methods\r\n\r\n### **GetProperty(String, Int32)**\r\n\r\n```csharp\r\npublic UsmapProperty GetProperty(string key, int dupIndex)\r\n```\r\n\r\n#### Parameters\r\n\r\n`key` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n`dupIndex` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n#### Returns\r\n\r\n[UsmapProperty](./uassetapi.unversioned.usmapproperty.md)<br>\r\n\r\n### **ConstructPropertiesMap(Boolean)**\r\n\r\n```csharp\r\npublic void ConstructPropertiesMap(bool isCaseInsensitive)\r\n```\r\n\r\n#### Parameters\r\n\r\n`isCaseInsensitive` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.usmapschemapropertiesjsonconverter.md",
    "content": "# UsmapSchemaPropertiesJsonConverter\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\n```csharp\r\npublic class UsmapSchemaPropertiesJsonConverter : Newtonsoft.Json.JsonConverter`1[[System.Collections.Generic.IReadOnlyDictionary`2[[System.Int32],[UAssetAPI.Unversioned.UsmapProperty]]]]\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → JsonConverter → JsonConverter&lt;IReadOnlyDictionary&lt;Int32, UsmapProperty&gt;&gt; → [UsmapSchemaPropertiesJsonConverter](./uassetapi.unversioned.usmapschemapropertiesjsonconverter.md)\r\n\r\n## Properties\r\n\r\n### **CanRead**\r\n\r\n```csharp\r\npublic bool CanRead { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n### **CanWrite**\r\n\r\n```csharp\r\npublic bool CanWrite { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n## Constructors\r\n\r\n### **UsmapSchemaPropertiesJsonConverter()**\r\n\r\n```csharp\r\npublic UsmapSchemaPropertiesJsonConverter()\r\n```\r\n\r\n## Methods\r\n\r\n### **ReadJson(JsonReader, Type, IReadOnlyDictionary&lt;Int32, UsmapProperty&gt;, Boolean, JsonSerializer)**\r\n\r\n```csharp\r\npublic IReadOnlyDictionary<int, UsmapProperty> ReadJson(JsonReader reader, Type objectType, IReadOnlyDictionary<int, UsmapProperty> existingValue, bool hasExistingValue, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`reader` JsonReader<br>\r\n\r\n`objectType` [Type](https://docs.microsoft.com/en-us/dotnet/api/system.type)<br>\r\n\r\n`existingValue` [IReadOnlyDictionary&lt;Int32, UsmapProperty&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlydictionary-2)<br>\r\n\r\n`hasExistingValue` [Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n\r\n#### Returns\r\n\r\n[IReadOnlyDictionary&lt;Int32, UsmapProperty&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlydictionary-2)<br>\r\n\r\n### **WriteJson(JsonWriter, IReadOnlyDictionary&lt;Int32, UsmapProperty&gt;, JsonSerializer)**\r\n\r\n```csharp\r\npublic void WriteJson(JsonWriter writer, IReadOnlyDictionary<int, UsmapProperty> value, JsonSerializer serializer)\r\n```\r\n\r\n#### Parameters\r\n\r\n`writer` JsonWriter<br>\r\n\r\n`value` [IReadOnlyDictionary&lt;Int32, UsmapProperty&gt;](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlydictionary-2)<br>\r\n\r\n`serializer` JsonSerializer<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.usmapstructdata.md",
    "content": "# UsmapStructData\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\n```csharp\r\npublic class UsmapStructData : UsmapPropertyData\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [UsmapPropertyData](./uassetapi.unversioned.usmappropertydata.md) → [UsmapStructData](./uassetapi.unversioned.usmapstructdata.md)\r\n\r\n## Fields\r\n\r\n### **StructType**\r\n\r\n```csharp\r\npublic string StructType;\r\n```\r\n\r\n### **Type**\r\n\r\n```csharp\r\npublic EPropertyType Type;\r\n```\r\n\r\n## Constructors\r\n\r\n### **UsmapStructData(String)**\r\n\r\n```csharp\r\npublic UsmapStructData(string structType)\r\n```\r\n\r\n#### Parameters\r\n\r\n`structType` [String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **UsmapStructData()**\r\n\r\n```csharp\r\npublic UsmapStructData()\r\n```\r\n\r\n## Methods\r\n\r\n### **ToString()**\r\n\r\n```csharp\r\npublic string ToString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.usmapstructkind.md",
    "content": "# UsmapStructKind\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\n```csharp\r\npublic enum UsmapStructKind\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [UsmapStructKind](./uassetapi.unversioned.usmapstructkind.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.unversioned.usmapversion.md",
    "content": "# UsmapVersion\r\n\r\nNamespace: UAssetAPI.Unversioned\r\n\r\n```csharp\r\npublic enum UsmapVersion\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ValueType](https://docs.microsoft.com/en-us/dotnet/api/system.valuetype) → [Enum](https://docs.microsoft.com/en-us/dotnet/api/system.enum) → [UsmapVersion](./uassetapi.unversioned.usmapversion.md)<br>\r\nImplements [IComparable](https://docs.microsoft.com/en-us/dotnet/api/system.icomparable), [ISpanFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.ispanformattable), [IFormattable](https://docs.microsoft.com/en-us/dotnet/api/system.iformattable), [IConvertible](https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible)\r\n\r\n## Fields\r\n\r\n| Name | Value | Description |\r\n| --- | --: | --- |\r\n| Initial | 0 | Initial format. |\r\n| PackageVersioning | 1 | Adds optional asset package versioning |\r\n| LongFName | 2 | 16-bit wide names in name map |\r\n| LargeEnums | 3 | 16-bit enum entry count |\r\n| ExplicitEnumValues | 4 | Adds enum values (instead of assuming ordinal) |\r\n"
  },
  {
    "path": "docs/src/api/uassetapi.usmapbinaryreader.md",
    "content": "# UsmapBinaryReader\r\n\r\nNamespace: UAssetAPI\r\n\r\nReads primitive data types from .usmap files.\r\n\r\n```csharp\r\npublic class UsmapBinaryReader : System.IO.BinaryReader, System.IDisposable\r\n```\r\n\r\nInheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [BinaryReader](https://docs.microsoft.com/en-us/dotnet/api/system.io.binaryreader) → [UsmapBinaryReader](./uassetapi.usmapbinaryreader.md)<br>\r\nImplements [IDisposable](https://docs.microsoft.com/en-us/dotnet/api/system.idisposable)\r\n\r\n## Fields\r\n\r\n### **File**\r\n\r\n```csharp\r\npublic Usmap File;\r\n```\r\n\r\n## Properties\r\n\r\n### **BaseStream**\r\n\r\n```csharp\r\npublic Stream BaseStream { get; }\r\n```\r\n\r\n#### Property Value\r\n\r\n[Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n## Constructors\r\n\r\n### **UsmapBinaryReader(Stream, Usmap)**\r\n\r\n```csharp\r\npublic UsmapBinaryReader(Stream stream, Usmap file)\r\n```\r\n\r\n#### Parameters\r\n\r\n`stream` [Stream](https://docs.microsoft.com/en-us/dotnet/api/system.io.stream)<br>\r\n\r\n`file` [Usmap](./uassetapi.unversioned.usmap.md)<br>\r\n\r\n## Methods\r\n\r\n### **ReadInt16()**\r\n\r\n```csharp\r\npublic short ReadInt16()\r\n```\r\n\r\n#### Returns\r\n\r\n[Int16](https://docs.microsoft.com/en-us/dotnet/api/system.int16)<br>\r\n\r\n### **ReadUInt16()**\r\n\r\n```csharp\r\npublic ushort ReadUInt16()\r\n```\r\n\r\n#### Returns\r\n\r\n[UInt16](https://docs.microsoft.com/en-us/dotnet/api/system.uint16)<br>\r\n\r\n### **ReadInt32()**\r\n\r\n```csharp\r\npublic int ReadInt32()\r\n```\r\n\r\n#### Returns\r\n\r\n[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n### **ReadUInt32()**\r\n\r\n```csharp\r\npublic uint ReadUInt32()\r\n```\r\n\r\n#### Returns\r\n\r\n[UInt32](https://docs.microsoft.com/en-us/dotnet/api/system.uint32)<br>\r\n\r\n### **ReadInt64()**\r\n\r\n```csharp\r\npublic long ReadInt64()\r\n```\r\n\r\n#### Returns\r\n\r\n[Int64](https://docs.microsoft.com/en-us/dotnet/api/system.int64)<br>\r\n\r\n### **ReadUInt64()**\r\n\r\n```csharp\r\npublic ulong ReadUInt64()\r\n```\r\n\r\n#### Returns\r\n\r\n[UInt64](https://docs.microsoft.com/en-us/dotnet/api/system.uint64)<br>\r\n\r\n### **ReadSingle()**\r\n\r\n```csharp\r\npublic float ReadSingle()\r\n```\r\n\r\n#### Returns\r\n\r\n[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)<br>\r\n\r\n### **ReadDouble()**\r\n\r\n```csharp\r\npublic double ReadDouble()\r\n```\r\n\r\n#### Returns\r\n\r\n[Double](https://docs.microsoft.com/en-us/dotnet/api/system.double)<br>\r\n\r\n### **ReadString()**\r\n\r\n```csharp\r\npublic string ReadString()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **ReadString(Int32)**\r\n\r\n```csharp\r\npublic string ReadString(int fixedLength)\r\n```\r\n\r\n#### Parameters\r\n\r\n`fixedLength` [Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)<br>\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n\r\n### **ReadName()**\r\n\r\n```csharp\r\npublic string ReadName()\r\n```\r\n\r\n#### Returns\r\n\r\n[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)<br>\r\n"
  },
  {
    "path": "docs/src/guide/basic.md",
    "content": "# Basic Usage\n\n### Prerequisites\n* Basic C# knowledge\n* Visual Studio 2022 or later, with .NET 8.0 SDK\n* [A copy of UAssetAPI](./build.md)\n\n### Basic Project Setup\nIn this short guide, we will go over the very basics of parsing assets through UAssetAPI.\n\nUAssetAPI targets [.NET 8.0](https://dotnet.microsoft.com/en-us/download/dotnet/8.0), which means you will need the .NET 8.0 SDK to use UAssetAPI. We will start off in this specific guide by creating a new C# Console App project in Visual Studio, making sure we specifically target .NET 8.0:\n\n![](./img/basic1.png)\n![](./img/basic2.png)\n![](./img/basic2_1.png)\n\nOnce we have entered Visual Studio, we must add a new reference to our UAssetAPI.dll file. This can be done by right-clicking under \"References,\" clicking \"Add Reference,\" clicking \"Browse\" in the bottom right of the Reference Manager window, browsing to your UAssetAPI.dll file on disk, and clicking \"OK\".\n\n![](./img/basic3.png)\n![](./img/basic4.png)\n\nOnce you've referenced the UAssetAPI assembly in your project, you're ready to start parsing assets!\n\n## Using UAssetAPI with Unreal Assets\n### Modifying a specific property\n\nEvery Unreal Engine 4 asset parsed with UAssetAPI is represented by the [UAsset](../api/uassetapi.uasset.md#constructors) class. The simplest way to construct a UAsset is to initialize it with the path to the asset on disk (note that if your asset has a paired .uexp file, both files must be located in the same directory, and the path should point to the .uasset file) and an [EngineVersion](../api/uassetapi.unrealtypes.engineversion.html#fields).\n\nI will be analyzing a small asset from the video game [Ace Combat 7](https://www.bandainamcoent.com/games/ace-combat-7) (4.18) for this demonstration, which can be downloaded here:\n- [plwp_6aam_a0.uasset](../samples/plwp_6aam_a0.uasset) &rarr; `C:\\plwp_6aam_a0.uasset`\n- [plwp_6aam_a0.uexp](../samples/plwp_6aam_a0.uexp) &rarr; `C:\\plwp_6aam_a0.uasset`\n\nSave these files to those respective locations.\n\nIf you are familiar with UAssetGUI or other tools for reverse-engineering Unreal Engine 4 assets, you will likely be aware that there are generally at least five major sections to any asset, each of which can be read and modified through UAssetAPI.\n\nFor now, let's simply modify an integer. If we open the asset in UAssetGUI and look under \"Export Data,\" we can see all the exports that we can access; for our demonstration here, we're interested in Export 2, and we'll be modifying the \"MaxRotationAngle\" float.\n\n![](./img/basic5.png)\n\nLet's start programming! Head to the `Program.cs` file and use the following pre-written code, placed in `static void Main(string[] args)` (feel free to copy and paste):\n```cs\n// Instantiate the asset with the path and the engine version (4.18).\n// This reads the entire asset to memory at once; use a different constructor with an AssetBinaryReader if you don't want that\nUAsset myAsset = new UAsset(\"C:\\\\plwp_6aam_a0.uasset\", EngineVersion.VER_UE4_18);\n\n// We want the 2nd export, so we reference the export at index 1.\n// There are many types, but any export that has regular \"tagged\" data like you see as properties in UAssetGUI can be cast to a NormalExport, like this one.\nNormalExport myExport = (NormalExport)myAsset.Exports[1];\n// Alternatively, we can reference exports by ObjectName:\n// NormalExport myExport = (NormalExport)myAsset.Exports[\"Default__plwp_6aam_a0_C\"];\n// we implement the general algorithm used by UAssetAPI here later in the guide\n\n// myExport.Data will give us a List<PropertyData> which you can enumerate if you like, but we can reference a property by name or index with the export directly.\n// We know this is a FloatPropertyData because it is serialized as a FloatProperty. BoolPropertyData is a BoolProperty, ObjectPropertyData is an ObjectProperty, etc.\nFloatPropertyData myFloat = (FloatPropertyData)myExport[\"MaxRotationAngle\"];\nConsole.WriteLine(myFloat.Value);\n\n// All we have to do to change this value is to set myFloat.Value, and we'll be ready to re-save the asset.\nmyFloat.Value = 1337;\n\n// Save the asset back to disk with UAsset.Write and a path.\nmyAsset.Write(\"NEW.uasset\");\n\nConsole.WriteLine(\"All done!\");\nConsole.ReadLine();\n```\n\nThe above code is an example on how we can pinpoint and modify a specific asset; running it will output a `NEW.uasset` file in the current working directory (which you can access by right-clicking your project in the Solution Explorer, clicking \"Open Folder in File Explorer\", and navigating to \"bin/Debug\") with the modified float. You can verify the change for yourself in UAssetGUI.\n\n### More advanced modification\n\nWhat if we don't know where the property is? If we don't know the exact contents of the asset before we load it, we may have to perform more advanced modification techniques based on what information we do know.\n\nLet's say we want to modify a specific NameProperty called `InternalVariableName` in an export with the ObjectName `SCS_Node_1` (you can see this in UAssetGUI under the Export Information tab). Using the same file as above, we'll need to iterate through our exports until we find the appropriate property:\n\n```cs\n// Instantiate the asset with the path and the engine version (4.18).\n// This reads the entire asset to memory at once; use a different constructor with an AssetBinaryReader if you don't want that\nUAsset myAsset = new UAsset(\"C:\\\\plwp_6aam_a0.uasset\", EngineVersion.VER_UE4_18);\n\n// Iterate through all the exports\nforeach (Export export in myAsset.Exports)\n{\n    if (!(export is NormalExport normalExport)) continue; // We know our export is a NormalExport, so if this export isn't one, it's useless to us\n    if (export.ObjectName.ToString() == \"SCS_Node_1\") // Check; do we have the right name?\n    {\n        // Create a new NamePropertyData with our desired value\n        normalExport[\"InternalVariableName\"].RawValue = FName.FromString(myAsset, \"Howdy!\");\n        break;\n    }\n}\n\n// Save the asset back to disk with UAsset.Write and a path.\nmyAsset.Write(\"NEW.uasset\");\n\nConsole.WriteLine(\"All done!\");\nConsole.ReadLine();\n```\n\nUnder the scene, we're actually doing quite a lot here:\n- First, we iterate through every export.\n- For every export, if it's a NormalExport, we access its ObjectName field, which is an FName object. FName objects consist of two integers, an INDEX and a VALUE. When we convert it to a string, we access the name map with the INDEX to retrieve `SCS_Node`, and suffix it with the VALUE as `_1`.\n- We access the InternalVariableName property, and set its `RawValue` property. `RawValue` is a property present on all `PropertyData` objects which simply allows you to access the object's `Value` field as an `object`. We could also do `(NamePropertyData)(normalExport[\"InternalVariableName\"]).Value` here instead.\n- We create a new FName object with `FName.FromString`, which performs the inverse operation of `.ToString()`. This method will automatically add an entry at the end of the name map.\n\nAt the end of the day, we have made no assumptions about the ordering of the exports or properties, and have still performed the operation.\n\n### Final Notes\n\nUAssetAPI is only one layer of abstraction above the raw binary format, which means that it essentially gives you full access to every single aspect of a .uasset file. This means that performing very complex operations can be quite a challenge, so keep experimenting!\n\nYou may find it useful while learning to export assets into JSON through the `.SerializeJSON()` method or through UAssetGUI, as the JSON format very closely mirrors the way that assets are laid out in UAssetAPI. You can also find some more examples for UAssetAPI syntax and usage under the [More Examples](extras.md) page, and even more examples in the [unit tests](https://github.com/atenfyr/UAssetAPI/blob/master/UAssetAPI.Tests/AssetUnitTests.cs).\n"
  },
  {
    "path": "docs/src/guide/build.md",
    "content": "# Build Instructions\n\n### Prerequisites\n* Visual Studio 2022 or later, with .NET 8.0 SDK\n* Git\n\n### Initial Setup\n1. Clone the UAssetAPI repository:\n\n```sh\ngit clone https://github.com/atenfyr/UAssetAPI.git\n```\n\n2. Open the `UAssetAPI.sln` solution file within the newly-created UAssetAPI directory in Visual Studio, right-click on the solution name in the Solution Explorer, and press \"Restore Nuget Packages.\"\n\n3. Press F6 or right-click the solution name in the Solution Explorer and press \"Build Solution\" to compile UAssetAPI, which will be written as a .dll file to the `bin` directory. Note that this solution does not include UAssetGUI."
  },
  {
    "path": "docs/src/guide/extras.md",
    "content": "# More Examples\r\n\r\nThis page contains several more examples of UAssetAPI usage for completing specific tasks.\r\n\r\n### A simple, complete example\r\n```cs\r\nUAsset myAsset = new UAsset(\"C:\\\\plwp_6aam_a0.uasset\", EngineVersion.VER_UE4_18);\r\n\r\n// Find the export with the name \"Default__plwp_6aam_a0_C\"\r\nNormalExport cdoExport = (NormalExport)myAsset[\"Default__plwp_6aam_a0_C\"];\r\n// Add/replace a property called SpeedMaximum\r\ncdoExport[\"SpeedMaximum\"] = new FloatPropertyData() { Value = 999999 };\r\n// or, modify it directly\r\nFloatPropertyData SpeedMaximum = (FloatPropertyData)cdoExport[\"SpeedMaximum\"];\r\nSpeedMaximum.Value = 999999;\r\n\r\nmyAsset.Write(\"C:\\\\NEW.uasset\");\r\n```\r\n\r\n### Finding specific exports\r\n```cs\r\nUAsset myAsset = new UAsset(\"C:\\\\plwp_6aam_a0.uasset\", EngineVersion.VER_UE4_18);\r\n\r\n// We can find specific exports by index:\r\nExport cdo = myAsset.Exports[1]; // Export 2; here, indexing from 0\r\n// or like this:\r\ncdo = new FPackageIndex(2).ToExport(myAsset); // also Export 2; FPackageIndex uses negative numbers for imports, 0 for null, and positive numbers for exports\r\n// or, by ObjectName:\r\ncdo = myAsset[\"Default__plwp_6aam_a0_C\"]; // you can find this string value e.g. in UAssetGUI\r\ncdo = myAsset[new FName(myAsset, \"Default__plwp_6aam_a0_C\")];\r\n// or, to locate the ClassDefaultObject:\r\nforeach (Export exp in myAsset.Exports)\r\n{\r\n    if (exp.ObjectFlags.HasFlag(EObjectFlags.RF_ClassDefaultObject))\r\n    {\r\n        cdo = exp;\r\n        break;\r\n    }\r\n}\r\n// or, based on any property; maybe by SerialSize (length on disk):\r\nlong maxSerialSize = -1;\r\nforeach (Export exp in myAsset.Exports)\r\n{\r\n    if (exp.SerialSize > maxSerialSize)\r\n    {\r\n        maxSerialSize = exp.SerialSize;\r\n        cdo = exp;\r\n    }\r\n}\r\n```\r\n\r\n### Accessing basic export types and property types\r\n```cs\r\nUAsset myAsset = new UAsset(\"C:\\\\plwp_6aam_a0.uasset\", EngineVersion.VER_UE4_18);\r\nExport exp = myAsset[\"Default__plwp_6aam_a0_C\"];\r\n\r\n// Export contains all fields contained within UAssetGUI's \"Export Information\"\r\n// to manipulate data under \"Export Data,\" you generally need to cast it to a child type\r\n\r\n// NormalExport contains most all \"normal\" data, i.e. standard tagged properties\r\nif (exp is NormalExport normalExport)\r\n{\r\n    for (int i = 0; i < normalExport.Data.Count; i++)\r\n    {\r\n        PropertyData prop = normalExport.Data[i];\r\n        Console.WriteLine(prop.Name.ToString() + \": \" + prop.PropertyType.ToString());\r\n\r\n        // you can access prop.Value for many types, but for other types, you can cast to a child type and access other fields\r\n        if (prop is FloatPropertyData floatProp) floatProp.Value = 60; // change all floats to = 60\r\n\r\n        // ArrayPropertyData.Value is a PropertyData[] array, entries referenced by index\r\n        // StructPropertyData.Value is a List<PropertyData>, or you can index StructPropertyData directly\r\n        if (prop is ArrayPropertyData arrProp)\r\n        {\r\n            for (int j = 0; j < arrProp.Value.Length; j++)\r\n            {\r\n                PropertyData prop2 = arrProp.Value[j];\r\n                Console.WriteLine(prop2.Name.ToString() + \": \" + prop2.PropertyType.ToString());\r\n                // etc.\r\n                // note that arrays and structs can contain arrays and structs too...\r\n            }\r\n        }\r\n\r\n        if (prop is StructPropertyData structProp)\r\n        {\r\n            for (int j = 0; j < structProp.Value.Count; j++)\r\n            {\r\n                PropertyData prop2 = structProp.Value[j];\r\n                Console.WriteLine(prop2.Name.ToString() + \": \" + prop2.PropertyType.ToString());\r\n                // etc.\r\n                // note that arrays and structs can contain arrays and structs too...\r\n            }\r\n\r\n            // or:\r\n            // PropertyData prop2 = structProp[\"PropertyNameHere\"];\r\n        }\r\n    }\r\n}\r\n\r\n// DataTableExport is a NormalExport, but also contains entries in DataTables\r\nif (exp is DataTableExport dtExport)\r\n{\r\n    // dtExport.Data exists, but it typically only contains struct type information\r\n    // to access other entries, use:\r\n    List<StructPropertyData> entries = dtExport.Table.Data;\r\n\r\n    // etc.\r\n}\r\n\r\n// RawExport is an export that failed to parse for some reason, but you can still access and modify its binary data\r\nif (exp is RawExport rawExport)\r\n{\r\n    byte[] rawData = rawExport.Data;\r\n\r\n    // etc.\r\n}\r\n\r\n// see other examples for more advanced export types!\r\n```\r\n\r\n### Duplicating properties\r\n```cs\r\nUAsset myAsset = new UAsset(\"C:\\\\plwp_6aam_a0.uasset\", EngineVersion.VER_UE4_18);\r\nNormalExport cdoExport = (NormalExport)myAsset[\"Default__plwp_6aam_a0_C\"];\r\n\r\nFloatPropertyData targetProp = (FloatPropertyData)cdoExport[\"SpeedMaximum\"];\r\n\r\n// if we try something like:\r\n\r\n/*\r\nFloatPropertyData newProp = targetProp;\r\nnewProp.Value = 999999;\r\n*/\r\n\r\n// we'll accidentally change the value of targetProp too!\r\n// we can duplicate this property using .Clone() instead:\r\n\r\nFloatPropertyData newProp = (FloatPropertyData)targetProp.Clone();\r\nnewProp.Value = 999999;\r\ncdoExport[\"SpeedMaximum2\"] = newProp;\r\n\r\n// .Clone() performs a deep copy, so you can e.g. clone a StructProperty and modify child properties freely\r\n// .Clone() on an Export directly, however, is not implemented properly for child export types (e.g. the .Data list of a NormalExport is not cloned)\r\n```\r\n\r\n### Read assets that use unversioned properties\r\n```cs\r\n// to read an asset that uses unversioned properties, you must first source a .usmap mappings file for the game the asset is from, e.g. with UE4SS\r\n// you can read a mappings file with the Usmap class, and pass it into the UAsset constructor\r\nUsmap mappings = new Usmap(\"C:\\\\MyGame.usmap\");\r\nUAsset myAsset = new UAsset(\"C:\\\\my_asset.uasset\", EngineVersion.VER_UE5_3, mappings);\r\n\r\n// then, read and write data as normal\r\n// myAsset.HasUnversionedProperties will return true\r\n\r\n// notes for the curious:\r\n// * using the FName constructor adds new entries to the name map, which is often frivolous with unversioned properties; if you care, use FName.DefineDummy instead, but if UAssetAPI tries to write a dummy FName to disk it will throw an exception\r\n// * UAssetAPI only supports reading .usmap files, not writing\r\n// * UAssetAPI supports .usmap versions 0 through 3, uncompressed and zstandard-compressed files, and PPTH/EATR/ENVP extensions\r\n```\r\n\r\n### Interface with JSON\r\n```cs\r\nUAsset myAsset = new UAsset(\"C:\\\\plwp_6aam_a0.uasset\", EngineVersion.VER_UE4_18);\r\n\r\n// write asset to JSON\r\nstring jsonSerializedAsset = tester.SerializeJson();\r\nFile.WriteAllText(\"C:\\\\plwp_6aam_a0.json\", jsonSerializedAsset);\r\n\r\n// read asset back from JSON\r\nUAsset myAsset2 = UAsset.DeserializeJson(\"C:\\\\plwp_6aam_a0.json\");\r\n// myAsset2 should contain the same information as myAsset\r\n\r\n// write asset to binary format\r\nmyAsset2.Write(\"C:\\\\plwp_6aam_a0_NEW.uasset\");\r\n```\r\n\r\n### Read and modify blueprint bytecode\r\n```cs\r\nUAsset myAsset = new UAsset(\"C:\\\\my_asset.uasset\", EngineVersion.VER_UE4_18);\r\n\r\n// all StructExport exports can contain blueprint bytecode, let's pretend Export 1 is a StructExport\r\nStructExport myStructExport = (StructExport)myAsset.Exports[0];\r\n\r\nKismetExpression[] bytecode = myStructExport.ScriptBytecode;\r\nif (bytecode != null) // bytecode may fail to parse, in which case it will be null and stored raw in ScriptBytecodeRaw\r\n{\r\n    // KismetExpression has many child classes, one child class for each type of instruction\r\n    // as with PropertyData, you can access .RawValue for many instruction types, but you'll need to cast for other kinds of instructions to access specific fields\r\n    foreach (KismetExpression instruction in bytecode)\r\n    {\r\n        Console.WriteLine(instruction.Token.ToString() + \": \" + instruction.RawValue.ToString());\r\n    }\r\n}\r\n```"
  }
]