Full Code of CHollingworth/Lampray for AI

master 29d92967452f cached
167 files
31.6 MB
1.4M tokens
2678 symbols
1 requests
Download .txt
Showing preview only (5,663K chars total). Download the full file or copy to clipboard to get everything.
Repository: CHollingworth/Lampray
Branch: master
Commit: 29d92967452f
Files: 167
Total size: 31.6 MB

Directory structure:
gitextract_o302_dsd/

├── .actrc
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── -game--bug-report.md
│   │   └── feature_request.md
│   ├── actions/
│   │   ├── setup-os/
│   │   │   └── action.yml
│   │   └── setup-tooling/
│   │       ├── README.md
│   │       └── action.yml
│   └── workflows/
│       ├── pr-title.yml
│       └── release.yml
├── .gitignore
├── .tool-versions
├── CHANGELOG.md
├── CMakeLists.txt
├── CONTRIBUTING.md
├── Doxyfile
├── LICENSE
├── Lampray/
│   ├── Base/
│   │   └── lampBase.h
│   ├── Control/
│   │   ├── lampConfig.cpp
│   │   ├── lampConfig.h
│   │   ├── lampControl.cpp
│   │   ├── lampControl.h
│   │   ├── lampGames.h
│   │   └── lampNotification.h
│   ├── Filesystem/
│   │   ├── lampExtract.cpp
│   │   ├── lampFS.h
│   │   ├── lampIO.cpp
│   │   ├── lampShare.cpp
│   │   ├── lampTrack.cpp
│   │   └── lampUpdate.cpp
│   ├── Lang/
│   │   └── lampLang.h
│   ├── Menu/
│   │   ├── lampCustomise.h
│   │   ├── lampMenu.cpp
│   │   └── lampMenu.h
│   └── Parse/
│       └── lampParse.h
├── README.md
├── VERSION
├── build.sh
├── docs/
│   ├── building-from-source.md
│   ├── customizing-lampray.md
│   ├── directory-structure.md
│   ├── frequently-asked-questions.md
│   ├── lampray-docs.md
│   ├── managing-mods.md
│   └── mod-types/
│       ├── baldurs-gate-3.md
│       ├── cyberpunk-2077.md
│       └── supported-games.md
├── game-data/
│   ├── BG3/
│   │   ├── BG3.cpp
│   │   └── BG3.h
│   ├── C77/
│   │   ├── C77.cpp
│   │   └── C77.h
│   ├── LHL/
│   │   ├── LHL.cpp
│   │   └── LHL.h
│   └── gameControl.h
├── main.cpp
├── setup.sh
└── third-party/
    ├── bit7z/
    │   ├── BUILD.txt
    │   ├── LICENSE
    │   ├── README.md
    │   ├── include/
    │   │   └── include/
    │   │       └── bit7z/
    │   │           ├── bit7z.hpp
    │   │           ├── bit7zlibrary.hpp
    │   │           ├── bitabstractarchivecreator.hpp
    │   │           ├── bitabstractarchivehandler.hpp
    │   │           ├── bitabstractarchiveopener.hpp
    │   │           ├── bitarchiveeditor.hpp
    │   │           ├── bitarchiveitem.hpp
    │   │           ├── bitarchiveiteminfo.hpp
    │   │           ├── bitarchiveitemoffset.hpp
    │   │           ├── bitarchivereader.hpp
    │   │           ├── bitarchivewriter.hpp
    │   │           ├── bitcompressionlevel.hpp
    │   │           ├── bitcompressionmethod.hpp
    │   │           ├── bitcompressor.hpp
    │   │           ├── bitdefines.hpp
    │   │           ├── biterror.hpp
    │   │           ├── bitexception.hpp
    │   │           ├── bitextractor.hpp
    │   │           ├── bitfilecompressor.hpp
    │   │           ├── bitfileextractor.hpp
    │   │           ├── bitformat.hpp
    │   │           ├── bitfs.hpp
    │   │           ├── bitgenericitem.hpp
    │   │           ├── bitinputarchive.hpp
    │   │           ├── bititemsvector.hpp
    │   │           ├── bitmemcompressor.hpp
    │   │           ├── bitmemextractor.hpp
    │   │           ├── bitoutputarchive.hpp
    │   │           ├── bitpropvariant.hpp
    │   │           ├── bitstreamcompressor.hpp
    │   │           ├── bitstreamextractor.hpp
    │   │           ├── bittypes.hpp
    │   │           └── bitwindows.hpp
    │   └── lib/
    │       └── x64/
    │           ├── libbit7z64.a
    │           └── libbit7z64_d.a
    ├── imgui/
    │   ├── LICENSE.txt
    │   ├── imconfig.h
    │   ├── imgui.cpp
    │   ├── imgui.h
    │   ├── imgui_demo.cpp
    │   ├── imgui_draw.cpp
    │   ├── imgui_impl_sdl2.cpp
    │   ├── imgui_impl_sdl2.h
    │   ├── imgui_impl_sdlrenderer2.cpp
    │   ├── imgui_impl_sdlrenderer2.h
    │   ├── imgui_internal.h
    │   ├── imgui_tables.cpp
    │   ├── imgui_widgets.cpp
    │   ├── imstb_rectpack.h
    │   ├── imstb_textedit.h
    │   └── imstb_truetype.h
    ├── json/
    │   ├── LICENSE.MIT
    │   └── json.hpp
    ├── l4z/
    │   ├── LICENSE
    │   ├── liblz4.a
    │   ├── liblz4.pc
    │   ├── liblz4.pc.in
    │   ├── lz4.c
    │   ├── lz4.h
    │   ├── lz4file.c
    │   ├── lz4file.h
    │   ├── lz4frame.c
    │   ├── lz4frame.h
    │   ├── lz4frame_static.h
    │   ├── lz4hc.c
    │   ├── lz4hc.h
    │   ├── xxhash.c
    │   └── xxhash.h
    ├── nfd/
    │   ├── .circleci/
    │   │   └── config.yml
    │   ├── .clang-format
    │   ├── .github/
    │   │   └── workflows/
    │   │       └── cmake.yml
    │   ├── .gitignore
    │   ├── include/
    │   │   └── nfd.h
    │   └── lib/
    │       └── libnfd.a
    └── pugixml/
        ├── CMakeLists.txt
        ├── LICENSE.md
        ├── readme.txt
        ├── scripts/
        │   ├── cocoapods_push.sh
        │   ├── natvis/
        │   │   ├── pugixml.natvis
        │   │   └── pugixml_compact.natvis
        │   ├── nuget/
        │   │   └── pugixml.nuspec
        │   ├── nuget_build.ps1
        │   ├── premake4.lua
        │   ├── pugixml-config.cmake.in
        │   ├── pugixml.pc.in
        │   ├── pugixml.podspec
        │   ├── pugixml.xcodeproj/
        │   │   └── project.pbxproj
        │   ├── pugixml_airplay.mkf
        │   ├── pugixml_codeblocks.cbp
        │   ├── pugixml_codelite.project
        │   ├── pugixml_dll.rc
        │   ├── pugixml_vs2005.vcproj
        │   ├── pugixml_vs2005_static.vcproj
        │   ├── pugixml_vs2008.vcproj
        │   ├── pugixml_vs2008_static.vcproj
        │   ├── pugixml_vs2010.vcxproj
        │   ├── pugixml_vs2010_static.vcxproj
        │   ├── pugixml_vs2013.vcxproj
        │   ├── pugixml_vs2013_static.vcxproj
        │   ├── pugixml_vs2015.vcxproj
        │   ├── pugixml_vs2015_static.vcxproj
        │   ├── pugixml_vs2017.vcxproj
        │   ├── pugixml_vs2017_static.vcxproj
        │   ├── pugixml_vs2019.vcxproj
        │   ├── pugixml_vs2019_static.vcxproj
        │   ├── pugixml_vs2022.vcxproj
        │   └── pugixml_vs2022_static.vcxproj
        └── src/
            ├── pugiconfig.hpp
            ├── pugixml.cpp
            └── pugixml.hpp

================================================
FILE CONTENTS
================================================

================================================
FILE: .actrc
================================================
--bind
--artifact-server-path=./artifacts
-P ubuntu-22.04=ghcr.io/catthehacker/ubuntu:act-22.04

================================================
FILE: .github/ISSUE_TEMPLATE/-game--bug-report.md
================================================
---
name: "[GAME] Bug report"
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''

---

**Describe the bug**

A clear and concise description of what the bug is.

**Error message**

A lamp error message from the logs, or the one on screen.

**To Reproduce**

Steps to reproduce the behaviour:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Expected behaviour**

A clear and concise description of what you expected to happen.

**Screenshots**

If applicable, add screenshots to help explain your problem.

**System Info (please complete the following information):**
 - Linux Flavour: Ubuntu / Steam OS / Arch
 - Window Manager: i3 / Qtile
 - Lamp Version: 1.0.0

**Additional context**
Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: ''

---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.


================================================
FILE: .github/actions/setup-os/action.yml
================================================
name: Setup Os

description: Provisions OS deps

runs:
  using: "composite"

  steps:

    - name: Update System 
      shell: bash
      run: |
        sudo apt update -y -qq
    #
    # was getting this error when trying to build with libpugixml-dev
    # [release-please/release-please]   🐳  docker exec cmd=[bash --noprofile --norc -e -o pipefail /var/run/act/workflow/5] user= workdir=
    #     | -- The C compiler identification is GNU 9.4.0
    #     | -- The CXX compiler identification is GNU 9.4.0
    #     | -- Detecting C compiler ABI info
    #     | -- Detecting C compiler ABI info - done
    #     | -- Check for working C compiler: /usr/bin/cc - skipped
    #     | -- Detecting C compile features
    #     | -- Detecting C compile features - done
    #     | -- Detecting CXX compiler ABI info
    #     | -- Detecting CXX compiler ABI info - done
    #     | -- Check for working CXX compiler: /usr/bin/c++ - skipped
    #     | -- Detecting CXX compile features
    #     | -- Detecting CXX compile features - done
    #     | -- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") 
    #     | -- Checking for one of the modules 'glfw3'
    #     | -- Found Vulkan: /usr/lib/x86_64-linux-gnu/libvulkan.so (found version "131")  missing components: glslc glslangValidator
    #     | -- Found CURL: /usr/lib/x86_64-linux-gnu/libcurl.so (found version "7.68.0")  
    #     | -- Configuring done (0.9s)
    #     | CMake Error at CMakeLists.txt:72 (target_link_libraries):
    #     |   Target "Lampray" links to:
    #     | 
    #     |     pugixml::pugixml
    #     | 
    #     |   but the target was not found.  Possible reasons include:
    #     | 
    #     |     * There is a typo in the target name.
    #     |     * A find_package call is missing for an IMPORTED target.
    #     |     * An ALIAS target is missing.
    #     | 
    #     | 
    #     | 
    #     | -- Generating done (0.0s)
    #     | CMake Generate step failed.  Build files cannot be regenerated correctly.
    #
    # so on advice from : https://stackoverflow.com/a/68752679
    # we install with vcpkg instead 
    - name: Install Dev Dependencies
      shell: bash
      run: |
        sudo apt install  -y -qq \
          libsdl2-dev \
          libcurl4-openssl-dev \
          libpugixml-dev \
          pkg-config \
          g++ \
          gcc

    - name: Install Runtime Dependencies
      shell: bash
      run: |
        sudo apt install  -y -qq \
          zenity


================================================
FILE: .github/actions/setup-tooling/README.md
================================================
# setup-tooling

Installs ASDF with plugins

## Requirements

- a `.tool-versions` file in the root of the repo

## Usage

```yml
  Release:

    runs-on: ubuntu-latest

    permissions:
      contents: write
      deployments: write

    steps:

      - uses: actions/checkout@v3

      - name: Setup tooling
        uses: ./.github/actions/setup-tooling
        env:
          # if you use an asdf plugin called "something" and its not in the shortname repo: https://github.com/asdf-vm/asdf-plugins
          # then it gets listed here as `ASDF_PLUGIN_URL_<pluginname>: the plugin repo`
          ASDF_PLUGIN_URL_something: https://get.thething/asdf-plugin
```

- installs asdf plugins for each item listed in your `.tools-version`
- if one of your plugins isn't on the official asdf list, then provide the
  install url by defining an ENVVAR of `ASDF_PLUGIN_URL_pluginname=url`

### Custom ASDF Setup command

Normally you'd have a `setup.sh` in the root of the repo. If it's somewhere else, 
then specify with your own version of the setup command:

```yml
  Release:

    runs-on: ubuntu-latest

    steps:

      - uses: actions/checkout@v3

      - name: Setup tooling
        uses: ./.github/actions/setup-tooling
        with:
          SetupCommand: ./your/path/to/your/asdf/setup.sh
```


================================================
FILE: .github/actions/setup-tooling/action.yml
================================================
name: Setup Asdf

description: provisions tooling

inputs:
  SetupCommand:
    description: "Command to run"
    required: false
    default: ./setup.bash

runs:
  using: "composite"

  steps:
    - name: Ensure setup command available
      shell: bash
      env:
        SETUP_COMMAND: ${{inputs.SetupCommand}}
      run: |
        if [ ! -f ${SETUP_COMMAND} ]; then
          echo "🛑 Missing action input SetupCommand."
          exit 1
        fi

    - uses: actions/cache@v3
      id: online-asdf-cache
      if: ${{ !env.ACT }}
      with:
        path: ~/.asdf
        key: ${{ runner.os }}-asdf-${{ hashFiles('**/.tool-versions') }}
        restore-keys: |
          ${{ runner.os }}-asdf-
    #
    # This step serves as an interop layer between the online and offline
    # when online, we use github cache and this step will report if the cache was hit
    # when offline, we use act and this step will report that the cache was not hit
    - name: act cache interop
      shell: bash
      id: cache
      run: |
        if [ "${{ env.ACT }}" = "true" ]; then 
          echo "OFFLINE: no cache"
          echo "cache-hit=false" >> $GITHUB_OUTPUT
        elif [ "${{ steps.online-asdf-cache.outputs.cache-hit }}" = "true" ]; then 
          echo "ONLINE: cache available"
          echo "cache-hit=${{ steps.online-asdf-cache.outputs.cache-hit }}" >> $GITHUB_OUTPUT
        fi

    - run: echo "${{ github.action_path }}" >> $GITHUB_PATH
      if: steps.cache.outputs.cache-hit != 'true'
      shell: bash

    - name: asdf install
      if: steps.cache.outputs.cache-hit != 'true'
      shell: bash
      env:
        SETUP_COMMAND: ${{inputs.SetupCommand}}
      run: ${SETUP_COMMAND}

    - name: set asdf path
      shell: bash
      run: |
        echo "$HOME/.asdf/bin" >> $GITHUB_PATH
        echo "$HOME/.asdf/shims" >> $GITHUB_PATH


================================================
FILE: .github/workflows/pr-title.yml
================================================
name: Check PR title

on:
  pull_request_target:
    types:
      - opened
      - reopened
      - edited
      - synchronize

jobs:
  LintPrTitle:
    runs-on: ubuntu-latest
    permissions:
      statuses: write
    steps:
      - uses: aslafy-z/conventional-pr-title-action@v3
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

================================================
FILE: .github/workflows/release.yml
================================================
on:
  push:
    branches:
      - master

permissions:
  contents: write
  pull-requests: write

name: Release Management

jobs:
  ReleaseAutomation:
    
    runs-on: ubuntu-22.04

    steps:

      - uses: google-github-actions/release-please-action@v3
        id: release-please
        # skip during local actions testing
        if: ${{ !env.ACT }}
        with:
          release-type: simple
          extra-files: |
            VERSION
            Lampray/Filesystem/lampFS.h
      #
      # This step serves as an interop layer between the online and offline
      # when online, we use release-please and further execution is gated by the releases_created output
      # when offline, we skip release-please and set releases_created to true to test creating a release build
      - name: Declare Release Created
        id: release
        env:
            RELEASE_PLEASE_TAGNAME: ${{ steps.release-please.outputs.tag_name }}
            RELEASE_PLEASE_RELEASES_CREATED: ${{ steps.release-please.outputs.releases_created }}
        run: |
          if [ "${{ env.ACT }}" = "true" ]; then
            echo "OFFLINE: release created"
            echo "releases_created=true" >> $GITHUB_OUTPUT
            echo "release_tag=$(git describe --tags --abbrev=1)" >> $GITHUB_OUTPUT

          elif [ "${RELEASE_PLEASE_RELEASES_CREATED}" = "true" ]; then
            echo "ONLINE: release created"
            echo "releases_created=true" >> $GITHUB_OUTPUT
            echo "release_tag=${RELEASE_PLEASE_TAGNAME}" >> $GITHUB_OUTPUT

          else 
            echo "ONLINE: release not created"

          fi

      - name: Checkout
        if: ${{ steps.release.outputs.releases_created == 'true' }}
        uses: actions/checkout@v3

      - name: OS Deps
        if: ${{ steps.release.outputs.releases_created == 'true' }}
        uses: ./.github/actions/setup-os
      
      # Just let ASDF do its thing. It's far easier and more reliable than trying to do it ourselves.
      - name: Tooling
        if: ${{ steps.release.outputs.releases_created == 'true' }}
        uses: ./.github/actions/setup-tooling
        with:
          SetupCommand: ./setup.sh
      
      - name: Build
        if: ${{ steps.release.outputs.releases_created == 'true' }}
        run: |
          ./build.sh Debug

      # only upload the release artifact if we're online and not testing
      - name: Upload Release Artifact
        if: ${{ steps.release.outputs.releases_created == 'true' }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          RELEASE_TAG: ${{ steps.release.outputs.release_tag }}
        run: |
          if [ "${{ env.ACT }}" = "true" ]; then
            echo "OFFLINE: skipping upload"
            cp -r ./build/Lamp ./build/Lampray-${RELEASE_TAG}
          else
            gh release upload ${RELEASE_TAG} ./build/Lampray#lamp-${RELEASE_TAG}
          fi
          


================================================
FILE: .gitignore
================================================
## OSX artifacts
.DS_Store

## Dear ImGui artifacts
imgui.ini

## General build artifacts
*.o
*.obj
*.exe
examples/*/Debug/*
examples/*/Release/*
examples/*/x64/*

## Visual Studio artifacts
.vs
ipch
*.opensdf
*.log
*.pdb
*.ilk
*.user
*.sdf
*.suo
*.VC.db
*.VC.VC.opendb

## Commonly used CMake directories
build*/

## Xcode artifacts
project.xcworkspace
xcuserdata

## Emscripten artifacts
examples/*.o.tmp
examples/*.out.js
examples/*.out.wasm
examples/example_glfw_opengl3/web/*
examples/example_sdl2_opengl3/web/*
examples/example_emscripten_wgpu/web/*

## JetBrains IDE artifacts
.idea
cmake-build-*

## Unix executables from our example Makefiles
examples/example_glfw_metal/example_glfw_metal
examples/example_glfw_opengl2/example_glfw_opengl2
examples/example_glfw_opengl3/example_glfw_opengl3
examples/example_glut_opengl2/example_glut_opengl2
examples/example_null/example_null
examples/example_sdl2_metal/example_sdl2_metal
examples/example_sdl2_opengl2/example_sdl2_opengl2
examples/example_sdl2_opengl3/example_sdl2_opengl3
examples/example_sdl2_sdlrenderer/example_sdl2_sdlrenderer


================================================
FILE: .tool-versions
================================================
cmake 3.27.0
ninja 1.11.1
act 0.2.52


================================================
FILE: CHANGELOG.md
================================================
# Changelog

## [1.3.2](https://github.com/CHollingworth/Lampray/compare/v1.3.1...v1.3.2) (2023-12-18)


### Bug Fixes

* Hotfix. Fixed update detection. ([b61e276](https://github.com/CHollingworth/Lampray/commit/b61e27658b866d350cfcaa009e3e507d278adf44))

## [1.3.1](https://github.com/CHollingworth/Lampray/compare/v1.3.0...v1.3.1) (2023-12-16)


### Bug Fixes

* Sepeators are able to be removed ([45faaad](https://github.com/CHollingworth/Lampray/commit/45faaad64562b394ec908f85f8f6996cba917428))

## [1.3.0](https://github.com/CHollingworth/Lampray/compare/v1.2.0...v1.3.0) (2023-12-16)


### Features

* Add confirmation before deleting mods ([#89](https://github.com/CHollingworth/Lampray/issues/89)) ([ab3e358](https://github.com/CHollingworth/Lampray/commit/ab3e358db686f7b00db9b1e236c54432294c60d4))
* Add confirmation before deleting mods ([#98](https://github.com/CHollingworth/Lampray/issues/98)) ([fd72f1a](https://github.com/CHollingworth/Lampray/commit/fd72f1a0bd065afc406f51503e7e863afecdd654))
* Add context menu for moving mods to top or bottom ([#93](https://github.com/CHollingworth/Lampray/issues/93)) ([e5303d3](https://github.com/CHollingworth/Lampray/commit/e5303d3b55620b155d9e05ef9049257c12e2e6a4))
* Add mod separators ([#94](https://github.com/CHollingworth/Lampray/issues/94)) ([79e8d55](https://github.com/CHollingworth/Lampray/commit/79e8d55c6855419ca1d018915041a62e0929ef8d))
* Add quit button to the menu ([#99](https://github.com/CHollingworth/Lampray/issues/99)) ([62d778c](https://github.com/CHollingworth/Lampray/commit/62d778cd448f853240b134e7544e185e5f21da65))


### Bug Fixes

* Added proper credit to contributors, they do amazing work please give em love. ([9c30861](https://github.com/CHollingworth/Lampray/commit/9c308616b8b60b0b16ade8615450b76b5e82eedf))
* BG3 now functions. (First Push of LHL) ([a7b1848](https://github.com/CHollingworth/Lampray/commit/a7b1848dbbabe1202ca33a460386956bf257e6e9))
* Cyberpunk deployment will now deploy all files. ([188c44f](https://github.com/CHollingworth/Lampray/commit/188c44f0b75c0b2900bbad72964f478b606f8db5))
* Fix installing REDMod into the /mods directory ([#100](https://github.com/CHollingworth/Lampray/issues/100)) ([0b20181](https://github.com/CHollingworth/Lampray/commit/0b201817682fadfeacc958300b63472d032688c5))

## [1.2.0](https://github.com/CHollingworth/Lampray/compare/v1.1.0...v1.2.0) (2023-12-04)


### Features

* Add configuration for disabling automatic update check and add a a button for manual checks ([#82](https://github.com/CHollingworth/Lampray/issues/82)) ([5c17701](https://github.com/CHollingworth/Lampray/commit/5c177011040327899543c63894152af7ba96a7d6))
* Add mod filename checks to prevent adding duplicate mods ([#86](https://github.com/CHollingworth/Lampray/issues/86)) ([a5dd76f](https://github.com/CHollingworth/Lampray/commit/a5dd76f8287173112753690e1ea5d589103d6437))
* Added a hint to the search bar. ([a1f4236](https://github.com/CHollingworth/Lampray/commit/a1f4236f27a818e0b620f164432b211cd116b7ba))
* added tabs to the customise menu, renamed class. ([c78f8a3](https://github.com/CHollingworth/Lampray/commit/c78f8a3ba15cfd678d029e992d6063450fbaab00))
* Added the ability to drop .pak files directly into lampray. ([bc01e96](https://github.com/CHollingworth/Lampray/commit/bc01e96f6d272e9addbf624ac158e71074b4b3d8))
* Configurable alternate button color ([#80](https://github.com/CHollingworth/Lampray/issues/80)) ([163338b](https://github.com/CHollingworth/Lampray/commit/163338b4d1b95bd28e466b6545eb83566b0346cb))
* Enable hiding table columns ([#79](https://github.com/CHollingworth/Lampray/issues/79)) ([bc094b8](https://github.com/CHollingworth/Lampray/commit/bc094b8a1c5b645536f35e0f39fdbd4a31b62737))
* Highlight mods on hover ([#83](https://github.com/CHollingworth/Lampray/issues/83)) ([61c7be6](https://github.com/CHollingworth/Lampray/commit/61c7be6df4c17a06b92cd7c970f3f10b9b25c6d8))
* Lampray will now open on the previous game modified instead of BG3. ([8a67d37](https://github.com/CHollingworth/Lampray/commit/8a67d3748b241c5b687b3344f784202d65e4cf61))


### Bug Fixes

* a crash that can happen when deleting mods ([#85](https://github.com/CHollingworth/Lampray/issues/85)) ([b0f3c22](https://github.com/CHollingworth/Lampray/commit/b0f3c2214273ce76d4e56f119b01ab7f116ab287))
* Add missing return statements in lampConfig init ([#77](https://github.com/CHollingworth/Lampray/issues/77)) ([ce14529](https://github.com/CHollingworth/Lampray/commit/ce1452949fb82171b20592336c69aac6d742cd82))
* Cyberpunk will now deploy archive and archivexl files correctly. ([5b49bad](https://github.com/CHollingworth/Lampray/commit/5b49bad47a335266f26335abad8000d49dbbff1c))
* Fixed inconsistent colors between init and reset ([#84](https://github.com/CHollingworth/Lampray/issues/84)) ([91fe13c](https://github.com/CHollingworth/Lampray/commit/91fe13c670dc36d2f1b2cb164676cb135f0c7b00))
* Modified b589dab so the delete button is faded out instead of replaced. ([65c0c42](https://github.com/CHollingworth/Lampray/commit/65c0c4241a4906884b1fb1265b7bebf0d96da6a8))
* Rar support dropped. ([f1a09eb](https://github.com/CHollingworth/Lampray/commit/f1a09ebb1fba9d6dd1cc38b8d86e5d474e3c3366))
* Re-enable deleting mod files with delete button and hide button on enabled mods ([#81](https://github.com/CHollingworth/Lampray/issues/81)) ([b589dab](https://github.com/CHollingworth/Lampray/commit/b589dabfce242b44f6bf1c40fd45164f7a924308))
* Removed update checks in occordance with [#78](https://github.com/CHollingworth/Lampray/issues/78) ([6b5a8f2](https://github.com/CHollingworth/Lampray/commit/6b5a8f233a00ee5ccfb2f77c4208a4d60d1279eb))
* Resolve minor compile warnings ([#90](https://github.com/CHollingworth/Lampray/issues/90)) ([454ec02](https://github.com/CHollingworth/Lampray/commit/454ec02a8bf408809a843819748a47ca8a9cdc62))

## [1.1.0](https://github.com/CHollingworth/Lampray/compare/v1.0.12...v1.1.0) (2023-11-18)


### Features

* Configurable font size/scale ([#72](https://github.com/CHollingworth/Lampray/issues/72)) ([b9594d8](https://github.com/CHollingworth/Lampray/commit/b9594d8bba595d616acbd98b1d076efcba669cc8))
* Mod Drag and Drop Reordering ([#71](https://github.com/CHollingworth/Lampray/issues/71)) ([fd0be98](https://github.com/CHollingworth/Lampray/commit/fd0be9812af3be7f3c452392db6389728e8010a7))


### Bug Fixes

* [#43](https://github.com/CHollingworth/Lampray/issues/43) Levenshtein Distance function expected strings of identical lengths. ([51e6e86](https://github.com/CHollingworth/Lampray/commit/51e6e860c953041bd421cfc6862c7399d30df948))
* Added License information for third-party code. ([bc66c8b](https://github.com/CHollingworth/Lampray/commit/bc66c8bfc0b20957e40831b29719988b2ab920dd))

## [1.0.12](https://github.com/CHollingworth/Lamp/compare/v1.0.11...v1.0.12) (2023-11-18)


### Bug Fixes

* Lamp has been renamed to Lampray! Deployment has changed resulting in slower deployment times but hiegher accuracy in load order. ([8ca573a](https://github.com/CHollingworth/Lamp/commit/8ca573ad83dd3e3f41cf326cee2b607cf735ad78))

## [1.0.11](https://github.com/CHollingworth/Lamp/compare/v1.0.10...v1.0.11) (2023-11-06)


### Bug Fixes

* Update lampFS.h ([#68](https://github.com/CHollingworth/Lamp/issues/68)) ([e942810](https://github.com/CHollingworth/Lamp/commit/e9428107c4ad7927278f1f80491dcdaec0b713a0))

## [1.0.10](https://github.com/CHollingworth/Lamp/compare/v1.0.9...v1.0.10) (2023-11-06)


### Bug Fixes

* Update main.cpp ([#66](https://github.com/CHollingworth/Lamp/issues/66)) ([7224e80](https://github.com/CHollingworth/Lamp/commit/7224e809b0d93a4e2ab3d2f48a37e06f15df56fd))

## [1.0.9](https://github.com/CHollingworth/Lamp/compare/v1.0.8...v1.0.9) (2023-11-06)


### Features

* 1.0.9 ([#64](https://github.com/CHollingworth/Lamp/issues/64)) ([2d0657b](https://github.com/CHollingworth/Lamp/commit/2d0657b5e3acfeca87945fb471402b277a25a620))
* Merge 1.0.9 into master ([#51](https://github.com/CHollingworth/Lamp/issues/51)) ([105595f](https://github.com/CHollingworth/Lamp/commit/105595f6eee4e3a7c5e3bee2ea604e984d87fc06))


================================================
FILE: CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.26)
project(Lampray)

set(CMAKE_CXX_STANDARD 17)


option(USE_XDG_DIRECTORY "Use XDG directory to store data instead of the working directory" ON)

add_executable(${PROJECT_NAME} main.cpp
        third-party/imgui/imconfig.h
        third-party/imgui/imgui.cpp
        third-party/imgui/imgui.h
        third-party/imgui/imgui_demo.cpp
        third-party/imgui/imgui_draw.cpp
        third-party/imgui/imgui_internal.h
        third-party/imgui/imgui_tables.cpp
        third-party/imgui/imgui_widgets.cpp
        third-party/imgui/imstb_rectpack.h
        third-party/imgui/imstb_textedit.h
        third-party/imgui/imstb_truetype.h
        third-party/json/json.hpp
        game-data/gameControl.h
        third-party/l4z/lz4.c
        third-party/l4z/lz4.h
        VERSION
        Lampray/Base/lampBase.h
        Lampray/Filesystem/lampFS.h
        Lampray/Control/lampControl.h
        Lampray/Control/lampControl.cpp
        Lampray/Parse/lampParse.h
        game-data/BG3/BG3.cpp
        game-data/BG3/BG3.h
        Lampray/Control/lampConfig.h
        Lampray/Control/lampConfig.cpp
        Lampray/Filesystem/lampExtract.cpp
        Lampray/Filesystem/lampIO.cpp
        Lampray/Menu/lampMenu.h
        Lampray/Menu/lampMenu.cpp
        Lampray/Filesystem/lampUpdate.cpp
        Lampray/Control/lampGames.h
        Lampray/Filesystem/lampShare.cpp
        Lampray/Menu/lampCustomise.h
        Lampray/Filesystem/lampTrack.cpp
        game-data/C77/C77.cpp
        game-data/C77/C77.h
        third-party/imgui/imgui_impl_sdl2.cpp
        third-party/imgui/imgui_impl_sdlrenderer2.cpp
        game-data/LHL/LHL.cpp
        game-data/LHL/LHL.h
        Lampray/Lang/lampLang.h
)

if(USE_XDG_DIRECTORY) 
  target_compile_definitions(${PROJECT_NAME} PUBLIC USE_XDG)
endif(USE_XDG_DIRECTORY)



find_package(PkgConfig REQUIRED)

target_link_libraries(${PROJECT_NAME} ${CMAKE_SOURCE_DIR}/third-party/bit7z/lib/x64/libbit7z64.a )
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/third-party/bit7z/include/include/bit7z )

target_link_libraries(${PROJECT_NAME} ${CMAKE_SOURCE_DIR}/third-party/nfd/lib/libnfd.a )
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/third-party/nfd/include/include/nfd.h )


# Find the SDL2 package
find_package(SDL2 REQUIRED)

# Include SDL2 headers
include_directories(${SDL2_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})

#add_subdirectory(third-party/SDL2)
#target_link_libraries(${PROJECT_NAME} SDL)

#find_package(pugixml REQUIRED)
#target_link_libraries(${PROJECT_NAME} pugixml::pugixml)

add_subdirectory(third-party/pugixml)
target_link_libraries(${PROJECT_NAME} pugixml::pugixml)

find_package(CURL REQUIRED)
include_directories(${CURL_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${CURL_LIBRARIES})


target_link_libraries(${PROJECT_NAME} ${CMAKE_SOURCE_DIR}/third-party/l4z/liblz4.so)
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/third-party/l4z/)



================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to Lampray

> Thanks for helping make Lampray better! Follow this guide to learn how to contribute to Lampray.

## 1. Fork the Repository

Start by forking this repository to your GitHub account using the "Fork" button at the top right.

## 2. Clone the Repository

Clone your forked repository to your local machine.

## 3. Create a New Branch

Create a new branch for your work with a descriptive name.

## 4. Make Changes

Make your desired changes or improvements to the codebase.

## 5. Test

Ensure that your changes work as expected and that they don't introduce any new issues.

## 6. Commit

Commit your changes with a clear and concise commit message.

## 7. Push 

Push your changes to your forked repository.

## 8. Create a Pull Request

1. Go to the original repository and click on the "New Pull Request" button.
2. Fill in the pull request title with the following format
    1. for new features, `feat: your feature oneliner name`
    2. for bugfixes or minor changes: `fix: your bugfix oneline name`
    3. for other kinds, see https://www.conventionalcommits.org/en/v1.0.0/#summary
3. Follow the pull request template and fill in detailed description of your changes.

## 9.  Discuss and Review

💬 Engage in discussions with the maintainers and the community about your pull request.

🤔 Be prepared to make any necessary adjustments based on feedback.

## 10. Merge

🎉 Once your pull request is reviewed and approved, it will be merged into the main branch.

================================================
FILE: Doxyfile
================================================
# Doxyfile 1.9.8

# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project.
#
# All text after a double hash (##) is considered a comment and is placed in
# front of the TAG it is preceding.
#
# All text after a single hash (#) is considered a comment and will be ignored.
# The format is:
# TAG = value [value, ...]
# For lists, items can also be appended using:
# TAG += value [value, ...]
# Values that contain spaces should be placed between quotes (\" \").
#
# Note:
#
# Use doxygen to compare the used configuration file with the template
# configuration file:
# doxygen -x [configFile]
# Use doxygen to compare the used configuration file with the template
# configuration file without replacing the environment variables or CMake type
# replacement variables:
# doxygen -x_noenv [configFile]

#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------

# This tag specifies the encoding used for all characters in the configuration
# file that follow. The default is UTF-8 which is also the encoding used for all
# text before the first occurrence of this tag. Doxygen uses libiconv (or the
# iconv built into libc) for the transcoding. See
# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
# The default value is: UTF-8.

DOXYFILE_ENCODING      = UTF-8

# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
# double-quotes, unless you are using Doxywizard) that should identify the
# project for which the documentation is generated. This name is used in the
# title of most generated pages and in a few other places.
# The default value is: My Project.

PROJECT_NAME           = Lamp

# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
# could be handy for archiving the generated documentation or if some version
# control system is used.

PROJECT_NUMBER         = 1.0.8

# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
# quick idea about the purpose of the project. Keep the description short.

PROJECT_BRIEF          = "A linux Mod Manager for Multiple games"

# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
# in the documentation. The maximum height of the logo should not exceed 55
# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
# the logo to the output directory.

PROJECT_LOGO           = /home/charles/Desktop/LampRE/Lamp/logo/LMP-256.png

# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
# into which the generated documentation will be written. If a relative path is
# entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used.

OUTPUT_DIRECTORY       = docs

# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096
# sub-directories (in 2 levels) under the output directory of each output format
# and will distribute the generated files over these directories. Enabling this
# option can be useful when feeding doxygen a huge amount of source files, where
# putting all generated files in the same directory would otherwise causes
# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to
# control the number of sub-directories.
# The default value is: NO.

CREATE_SUBDIRS         = YES

# Controls the number of sub-directories that will be created when
# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every
# level increment doubles the number of directories, resulting in 4096
# directories at level 8 which is the default and also the maximum value. The
# sub-directories are organized in 2 levels, the first level always has a fixed
# number of 16 directories.
# Minimum value: 0, maximum value: 8, default value: 8.
# This tag requires that the tag CREATE_SUBDIRS is set to YES.

CREATE_SUBDIRS_LEVEL   = 8

# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
# characters to appear in the names of generated files. If set to NO, non-ASCII
# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
# U+3044.
# The default value is: NO.

ALLOW_UNICODE_NAMES    = NO

# The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this
# information to generate all constant output in the proper language.
# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian,
# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English
# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek,
# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with
# English messages), Korean, Korean-en (Korean with English messages), Latvian,
# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese,
# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish,
# Swedish, Turkish, Ukrainian and Vietnamese.
# The default value is: English.

OUTPUT_LANGUAGE        = English

# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
# descriptions after the members that are listed in the file and class
# documentation (similar to Javadoc). Set to NO to disable this.
# The default value is: YES.

BRIEF_MEMBER_DESC      = YES

# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
# description of a member or function before the detailed description
#
# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
# brief descriptions will be completely suppressed.
# The default value is: YES.

REPEAT_BRIEF           = YES

# This tag implements a quasi-intelligent brief description abbreviator that is
# used to form the text in various listings. Each string in this list, if found
# as the leading text of the brief description, will be stripped from the text
# and the result, after processing the whole list, is used as the annotated
# text. Otherwise, the brief description is used as-is. If left blank, the
# following values are used ($name is automatically replaced with the name of
# the entity):The $name class, The $name widget, The $name file, is, provides,
# specifies, contains, represents, a, an and the.

ABBREVIATE_BRIEF       = "The $name class" \
                         "The $name widget" \
                         "The $name file" \
                         is \
                         provides \
                         specifies \
                         contains \
                         represents \
                         a \
                         an \
                         the

# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
# doxygen will generate a detailed section even if there is only a brief
# description.
# The default value is: NO.

ALWAYS_DETAILED_SEC    = NO

# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
# inherited members of a class in the documentation of that class as if those
# members were ordinary class members. Constructors, destructors and assignment
# operators of the base classes will not be shown.
# The default value is: NO.

INLINE_INHERITED_MEMB  = NO

# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
# before files name in the file list and in the header files. If set to NO the
# shortest path that makes the file name unique will be used
# The default value is: YES.

FULL_PATH_NAMES        = YES

# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
# Stripping is only done if one of the specified strings matches the left-hand
# part of the path. The tag can be used to show relative paths in the file list.
# If left blank the directory from which doxygen is run is used as the path to
# strip.
#
# Note that you can specify absolute paths here, but also relative paths, which
# will be relative from the directory where doxygen is started.
# This tag requires that the tag FULL_PATH_NAMES is set to YES.

STRIP_FROM_PATH        =

# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
# path mentioned in the documentation of a class, which tells the reader which
# header file to include in order to use a class. If left blank only the name of
# the header file containing the class definition is used. Otherwise one should
# specify the list of include paths that are normally passed to the compiler
# using the -I flag.

STRIP_FROM_INC_PATH    =

# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
# less readable) file names. This can be useful is your file systems doesn't
# support long names like on DOS, Mac, or CD-ROM.
# The default value is: NO.

SHORT_NAMES            = NO

# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
# first line (until the first dot) of a Javadoc-style comment as the brief
# description. If set to NO, the Javadoc-style will behave just like regular Qt-
# style comments (thus requiring an explicit @brief command for a brief
# description.)
# The default value is: NO.

JAVADOC_AUTOBRIEF      = NO

# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line
# such as
# /***************
# as being the beginning of a Javadoc-style comment "banner". If set to NO, the
# Javadoc-style will behave just like regular comments and it will not be
# interpreted by doxygen.
# The default value is: NO.

JAVADOC_BANNER         = NO

# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
# line (until the first dot) of a Qt-style comment as the brief description. If
# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
# requiring an explicit \brief command for a brief description.)
# The default value is: NO.

QT_AUTOBRIEF           = NO

# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
# a brief description. This used to be the default behavior. The new default is
# to treat a multi-line C++ comment block as a detailed description. Set this
# tag to YES if you prefer the old behavior instead.
#
# Note that setting this tag to YES also means that rational rose comments are
# not recognized any more.
# The default value is: NO.

MULTILINE_CPP_IS_BRIEF = NO

# By default Python docstrings are displayed as preformatted text and doxygen's
# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the
# doxygen's special commands can be used and the contents of the docstring
# documentation blocks is shown as doxygen documentation.
# The default value is: YES.

PYTHON_DOCSTRING       = YES

# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
# documentation from any documented member that it re-implements.
# The default value is: YES.

INHERIT_DOCS           = YES

# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
# page for each member. If set to NO, the documentation of a member will be part
# of the file/class/namespace that contains it.
# The default value is: NO.

SEPARATE_MEMBER_PAGES  = NO

# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
# uses this value to replace tabs by spaces in code fragments.
# Minimum value: 1, maximum value: 16, default value: 4.

TAB_SIZE               = 4

# This tag can be used to specify a number of aliases that act as commands in
# the documentation. An alias has the form:
# name=value
# For example adding
# "sideeffect=@par Side Effects:^^"
# will allow you to put the command \sideeffect (or @sideeffect) in the
# documentation, which will result in a user-defined paragraph with heading
# "Side Effects:". Note that you cannot put \n's in the value part of an alias
# to insert newlines (in the resulting output). You can put ^^ in the value part
# of an alias to insert a newline as if a physical newline was in the original
# file. When you need a literal { or } or , in the value part of an alias you
# have to escape them by means of a backslash (\), this can lead to conflicts
# with the commands \{ and \} for these it is advised to use the version @{ and
# @} or use a double escape (\\{ and \\})

ALIASES                =

# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
# only. Doxygen will then generate output that is more tailored for C. For
# instance, some of the names that are used will be different. The list of all
# members will be omitted, etc.
# The default value is: NO.

OPTIMIZE_OUTPUT_FOR_C  = NO

# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
# Python sources only. Doxygen will then generate output that is more tailored
# for that language. For instance, namespaces will be presented as packages,
# qualified scopes will look different, etc.
# The default value is: NO.

OPTIMIZE_OUTPUT_JAVA   = NO

# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
# sources. Doxygen will then generate output that is tailored for Fortran.
# The default value is: NO.

OPTIMIZE_FOR_FORTRAN   = NO

# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
# sources. Doxygen will then generate output that is tailored for VHDL.
# The default value is: NO.

OPTIMIZE_OUTPUT_VHDL   = NO

# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice
# sources only. Doxygen will then generate output that is more tailored for that
# language. For instance, namespaces will be presented as modules, types will be
# separated into more groups, etc.
# The default value is: NO.

OPTIMIZE_OUTPUT_SLICE  = NO

# Doxygen selects the parser to use depending on the extension of the files it
# parses. With this tag you can assign which parser to use for a given
# extension. Doxygen has a built-in mapping, but you can override or extend it
# using this tag. The format is ext=language, where ext is a file extension, and
# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,
# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice,
# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
# tries to guess whether the code is fixed or free formatted code, this is the
# default for Fortran type files). For instance to make doxygen treat .inc files
# as Fortran files (default is PHP), and .f files as C (default is Fortran),
# use: inc=Fortran f=C.
#
# Note: For files without extension you can use no_extension as a placeholder.
#
# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
# the files are not read by doxygen. When specifying no_extension you should add
# * to the FILE_PATTERNS.
#
# Note see also the list of default file extension mappings.

EXTENSION_MAPPING      =

# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
# according to the Markdown format, which allows for more readable
# documentation. See https://daringfireball.net/projects/markdown/ for details.
# The output of markdown processing is further processed by doxygen, so you can
# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
# case of backward compatibilities issues.
# The default value is: YES.

MARKDOWN_SUPPORT       = YES

# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
# to that level are automatically included in the table of contents, even if
# they do not have an id attribute.
# Note: This feature currently applies only to Markdown headings.
# Minimum value: 0, maximum value: 99, default value: 5.
# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.

TOC_INCLUDE_HEADINGS   = 5

# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to
# generate identifiers for the Markdown headings. Note: Every identifier is
# unique.
# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a
# sequence number starting at 0 and GITHUB use the lower case version of title
# with any whitespace replaced by '-' and punctuation characters removed.
# The default value is: DOXYGEN.
# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.

MARKDOWN_ID_STYLE      = DOXYGEN

# When enabled doxygen tries to link words that correspond to documented
# classes, or namespaces to their corresponding documentation. Such a link can
# be prevented in individual cases by putting a % sign in front of the word or
# globally by setting AUTOLINK_SUPPORT to NO.
# The default value is: YES.

AUTOLINK_SUPPORT       = YES

# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
# to include (a tag file for) the STL sources as input, then you should set this
# tag to YES in order to let doxygen match functions declarations and
# definitions whose arguments contain STL classes (e.g. func(std::string);
# versus func(std::string) {}). This also make the inheritance and collaboration
# diagrams that involve STL classes more complete and accurate.
# The default value is: NO.

BUILTIN_STL_SUPPORT    = NO

# If you use Microsoft's C++/CLI language, you should set this option to YES to
# enable parsing support.
# The default value is: NO.

CPP_CLI_SUPPORT        = NO

# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
# will parse them like normal C++ but will assume all classes use public instead
# of private inheritance when no explicit protection keyword is present.
# The default value is: NO.

SIP_SUPPORT            = NO

# For Microsoft's IDL there are propget and propput attributes to indicate
# getter and setter methods for a property. Setting this option to YES will make
# doxygen to replace the get and set methods by a property in the documentation.
# This will only work if the methods are indeed getting or setting a simple
# type. If this is not the case, or you want to show the methods anyway, you
# should set this option to NO.
# The default value is: YES.

IDL_PROPERTY_SUPPORT   = YES

# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
# tag is set to YES then doxygen will reuse the documentation of the first
# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
# The default value is: NO.

DISTRIBUTE_GROUP_DOC   = NO

# If one adds a struct or class to a group and this option is enabled, then also
# any nested class or struct is added to the same group. By default this option
# is disabled and one has to add nested compounds explicitly via \ingroup.
# The default value is: NO.

GROUP_NESTED_COMPOUNDS = NO

# Set the SUBGROUPING tag to YES to allow class member groups of the same type
# (for instance a group of public functions) to be put as a subgroup of that
# type (e.g. under the Public Functions section). Set it to NO to prevent
# subgrouping. Alternatively, this can be done per class using the
# \nosubgrouping command.
# The default value is: YES.

SUBGROUPING            = YES

# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
# are shown inside the group in which they are included (e.g. using \ingroup)
# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
# and RTF).
#
# Note that this feature does not work in combination with
# SEPARATE_MEMBER_PAGES.
# The default value is: NO.

INLINE_GROUPED_CLASSES = NO

# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
# with only public data fields or simple typedef fields will be shown inline in
# the documentation of the scope in which they are defined (i.e. file,
# namespace, or group documentation), provided this scope is documented. If set
# to NO, structs, classes, and unions are shown on a separate page (for HTML and
# Man pages) or section (for LaTeX and RTF).
# The default value is: NO.

INLINE_SIMPLE_STRUCTS  = NO

# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
# enum is documented as struct, union, or enum with the name of the typedef. So
# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
# with name TypeT. When disabled the typedef will appear as a member of a file,
# namespace, or class. And the struct will be named TypeS. This can typically be
# useful for C code in case the coding convention dictates that all compound
# types are typedef'ed and only the typedef is referenced, never the tag name.
# The default value is: NO.

TYPEDEF_HIDES_STRUCT   = NO

# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
# cache is used to resolve symbols given their name and scope. Since this can be
# an expensive process and often the same symbol appears multiple times in the
# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
# doxygen will become slower. If the cache is too large, memory is wasted. The
# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
# symbols. At the end of a run doxygen will report the cache usage and suggest
# the optimal cache size from a speed point of view.
# Minimum value: 0, maximum value: 9, default value: 0.

LOOKUP_CACHE_SIZE      = 0

# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use
# during processing. When set to 0 doxygen will based this on the number of
# cores available in the system. You can set it explicitly to a value larger
# than 0 to get more control over the balance between CPU load and processing
# speed. At this moment only the input processing can be done using multiple
# threads. Since this is still an experimental feature the default is set to 1,
# which effectively disables parallel processing. Please report any issues you
# encounter. Generating dot graphs in parallel is controlled by the
# DOT_NUM_THREADS setting.
# Minimum value: 0, maximum value: 32, default value: 1.

NUM_PROC_THREADS       = 1

# If the TIMESTAMP tag is set different from NO then each generated page will
# contain the date or date and time when the page was generated. Setting this to
# NO can help when comparing the output of multiple runs.
# Possible values are: YES, NO, DATETIME and DATE.
# The default value is: NO.

TIMESTAMP              = NO

#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------

# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
# documentation are documented, even if no documentation was available. Private
# class members and static file members will be hidden unless the
# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
# Note: This will also disable the warnings about undocumented members that are
# normally produced when WARNINGS is set to YES.
# The default value is: NO.

EXTRACT_ALL            = YES

# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
# be included in the documentation.
# The default value is: NO.

EXTRACT_PRIVATE        = NO

# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual
# methods of a class will be included in the documentation.
# The default value is: NO.

EXTRACT_PRIV_VIRTUAL   = NO

# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
# scope will be included in the documentation.
# The default value is: NO.

EXTRACT_PACKAGE        = NO

# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
# included in the documentation.
# The default value is: NO.

EXTRACT_STATIC         = NO

# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
# locally in source files will be included in the documentation. If set to NO,
# only classes defined in header files are included. Does not have any effect
# for Java sources.
# The default value is: YES.

EXTRACT_LOCAL_CLASSES  = YES

# This flag is only useful for Objective-C code. If set to YES, local methods,
# which are defined in the implementation section but not in the interface are
# included in the documentation. If set to NO, only methods in the interface are
# included.
# The default value is: NO.

EXTRACT_LOCAL_METHODS  = NO

# If this flag is set to YES, the members of anonymous namespaces will be
# extracted and appear in the documentation as a namespace called
# 'anonymous_namespace{file}', where file will be replaced with the base name of
# the file that contains the anonymous namespace. By default anonymous namespace
# are hidden.
# The default value is: NO.

EXTRACT_ANON_NSPACES   = NO

# If this flag is set to YES, the name of an unnamed parameter in a declaration
# will be determined by the corresponding definition. By default unnamed
# parameters remain unnamed in the output.
# The default value is: YES.

RESOLVE_UNNAMED_PARAMS = YES

# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
# undocumented members inside documented classes or files. If set to NO these
# members will be included in the various overviews, but no documentation
# section is generated. This option has no effect if EXTRACT_ALL is enabled.
# The default value is: NO.

HIDE_UNDOC_MEMBERS     = NO

# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy. If set
# to NO, these classes will be included in the various overviews. This option
# will also hide undocumented C++ concepts if enabled. This option has no effect
# if EXTRACT_ALL is enabled.
# The default value is: NO.

HIDE_UNDOC_CLASSES     = NO

# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
# declarations. If set to NO, these declarations will be included in the
# documentation.
# The default value is: NO.

HIDE_FRIEND_COMPOUNDS  = NO

# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
# documentation blocks found inside the body of a function. If set to NO, these
# blocks will be appended to the function's detailed documentation block.
# The default value is: NO.

HIDE_IN_BODY_DOCS      = NO

# The INTERNAL_DOCS tag determines if documentation that is typed after a
# \internal command is included. If the tag is set to NO then the documentation
# will be excluded. Set it to YES to include the internal documentation.
# The default value is: NO.

INTERNAL_DOCS          = NO

# With the correct setting of option CASE_SENSE_NAMES doxygen will better be
# able to match the capabilities of the underlying filesystem. In case the
# filesystem is case sensitive (i.e. it supports files in the same directory
# whose names only differ in casing), the option must be set to YES to properly
# deal with such files in case they appear in the input. For filesystems that
# are not case sensitive the option should be set to NO to properly deal with
# output files written for symbols that only differ in casing, such as for two
# classes, one named CLASS and the other named Class, and to also support
# references to files without having to specify the exact matching casing. On
# Windows (including Cygwin) and MacOS, users should typically set this option
# to NO, whereas on Linux or other Unix flavors it should typically be set to
# YES.
# Possible values are: SYSTEM, NO and YES.
# The default value is: SYSTEM.

CASE_SENSE_NAMES       = SYSTEM

# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
# their full class and namespace scopes in the documentation. If set to YES, the
# scope will be hidden.
# The default value is: NO.

HIDE_SCOPE_NAMES       = NO

# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
# append additional text to a page's title, such as Class Reference. If set to
# YES the compound reference will be hidden.
# The default value is: NO.

HIDE_COMPOUND_REFERENCE= NO

# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class
# will show which file needs to be included to use the class.
# The default value is: YES.

SHOW_HEADERFILE        = YES

# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
# the files that are included by a file in the documentation of that file.
# The default value is: YES.

SHOW_INCLUDE_FILES     = YES

# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
# grouped member an include statement to the documentation, telling the reader
# which file to include in order to use the member.
# The default value is: NO.

SHOW_GROUPED_MEMB_INC  = NO

# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
# files with double quotes in the documentation rather than with sharp brackets.
# The default value is: NO.

FORCE_LOCAL_INCLUDES   = NO

# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
# documentation for inline members.
# The default value is: YES.

INLINE_INFO            = YES

# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
# (detailed) documentation of file and class members alphabetically by member
# name. If set to NO, the members will appear in declaration order.
# The default value is: YES.

SORT_MEMBER_DOCS       = YES

# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
# descriptions of file, namespace and class members alphabetically by member
# name. If set to NO, the members will appear in declaration order. Note that
# this will also influence the order of the classes in the class list.
# The default value is: NO.

SORT_BRIEF_DOCS        = NO

# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
# (brief and detailed) documentation of class members so that constructors and
# destructors are listed first. If set to NO the constructors will appear in the
# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
# member documentation.
# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
# detailed member documentation.
# The default value is: NO.

SORT_MEMBERS_CTORS_1ST = NO

# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
# of group names into alphabetical order. If set to NO the group names will
# appear in their defined order.
# The default value is: NO.

SORT_GROUP_NAMES       = NO

# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
# fully-qualified names, including namespaces. If set to NO, the class list will
# be sorted only by class name, not including the namespace part.
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
# Note: This option applies only to the class list, not to the alphabetical
# list.
# The default value is: NO.

SORT_BY_SCOPE_NAME     = NO

# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
# type resolution of all parameters of a function it will reject a match between
# the prototype and the implementation of a member function even if there is
# only one candidate or it is obvious which candidate to choose by doing a
# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
# accept a match between prototype and implementation in such cases.
# The default value is: NO.

STRICT_PROTO_MATCHING  = NO

# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
# list. This list is created by putting \todo commands in the documentation.
# The default value is: YES.

GENERATE_TODOLIST      = YES

# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
# list. This list is created by putting \test commands in the documentation.
# The default value is: YES.

GENERATE_TESTLIST      = YES

# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
# list. This list is created by putting \bug commands in the documentation.
# The default value is: YES.

GENERATE_BUGLIST       = YES

# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
# the deprecated list. This list is created by putting \deprecated commands in
# the documentation.
# The default value is: YES.

GENERATE_DEPRECATEDLIST= YES

# The ENABLED_SECTIONS tag can be used to enable conditional documentation
# sections, marked by \if <section_label> ... \endif and \cond <section_label>
# ... \endcond blocks.

ENABLED_SECTIONS       =

# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
# initial value of a variable or macro / define can have for it to appear in the
# documentation. If the initializer consists of more lines than specified here
# it will be hidden. Use a value of 0 to hide initializers completely. The
# appearance of the value of individual variables and macros / defines can be
# controlled using \showinitializer or \hideinitializer command in the
# documentation regardless of this setting.
# Minimum value: 0, maximum value: 10000, default value: 30.

MAX_INITIALIZER_LINES  = 30

# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
# the bottom of the documentation of classes and structs. If set to YES, the
# list will mention the files that were used to generate the documentation.
# The default value is: YES.

SHOW_USED_FILES        = YES

# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
# will remove the Files entry from the Quick Index and from the Folder Tree View
# (if specified).
# The default value is: YES.

SHOW_FILES             = YES

# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
# page. This will remove the Namespaces entry from the Quick Index and from the
# Folder Tree View (if specified).
# The default value is: YES.

SHOW_NAMESPACES        = YES

# The FILE_VERSION_FILTER tag can be used to specify a program or script that
# doxygen should invoke to get the current version for each file (typically from
# the version control system). Doxygen will invoke the program by executing (via
# popen()) the command command input-file, where command is the value of the
# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
# by doxygen. Whatever the program writes to standard output is used as the file
# version. For an example see the documentation.

FILE_VERSION_FILTER    =

# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
# by doxygen. The layout file controls the global structure of the generated
# output files in an output format independent way. To create the layout file
# that represents doxygen's defaults, run doxygen with the -l option. You can
# optionally specify a file name after the option, if omitted DoxygenLayout.xml
# will be used as the name of the layout file. See also section "Changing the
# layout of pages" for information.
#
# Note that if you run doxygen from a directory containing a file called
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
# tag is left empty.

LAYOUT_FILE            =

# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
# the reference definitions. This must be a list of .bib files. The .bib
# extension is automatically appended if omitted. This requires the bibtex tool
# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
# For LaTeX the style of the bibliography can be controlled using
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
# search path. See also \cite for info how to create references.

CITE_BIB_FILES         =

#---------------------------------------------------------------------------
# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------

# The QUIET tag can be used to turn on/off the messages that are generated to
# standard output by doxygen. If QUIET is set to YES this implies that the
# messages are off.
# The default value is: NO.

QUIET                  = NO

# The WARNINGS tag can be used to turn on/off the warning messages that are
# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
# this implies that the warnings are on.
#
# Tip: Turn warnings on while writing the documentation.
# The default value is: YES.

WARNINGS               = YES

# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
# will automatically be disabled.
# The default value is: YES.

WARN_IF_UNDOCUMENTED   = YES

# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
# potential errors in the documentation, such as documenting some parameters in
# a documented function twice, or documenting parameters that don't exist or
# using markup commands wrongly.
# The default value is: YES.

WARN_IF_DOC_ERROR      = YES

# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete
# function parameter documentation. If set to NO, doxygen will accept that some
# parameters have no documentation without warning.
# The default value is: YES.

WARN_IF_INCOMPLETE_DOC = YES

# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
# are documented, but have no documentation for their parameters or return
# value. If set to NO, doxygen will only warn about wrong parameter
# documentation, but not about the absence of documentation. If EXTRACT_ALL is
# set to YES then this flag will automatically be disabled. See also
# WARN_IF_INCOMPLETE_DOC
# The default value is: NO.

WARN_NO_PARAMDOC       = NO

# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about
# undocumented enumeration values. If set to NO, doxygen will accept
# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag
# will automatically be disabled.
# The default value is: NO.

WARN_IF_UNDOC_ENUM_VAL = NO

# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS
# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but
# at the end of the doxygen process doxygen will return with a non-zero status.
# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then doxygen behaves
# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined doxygen will not
# write the warning messages in between other messages but write them at the end
# of a run, in case a WARN_LOGFILE is defined the warning messages will be
# besides being in the defined file also be shown at the end of a run, unless
# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case
# the behavior will remain as with the setting FAIL_ON_WARNINGS.
# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT.
# The default value is: NO.

WARN_AS_ERROR          = NO

# The WARN_FORMAT tag determines the format of the warning messages that doxygen
# can produce. The string should contain the $file, $line, and $text tags, which
# will be replaced by the file and line number from which the warning originated
# and the warning text. Optionally the format may contain $version, which will
# be replaced by the version of the file (if it could be obtained via
# FILE_VERSION_FILTER)
# See also: WARN_LINE_FORMAT
# The default value is: $file:$line: $text.

WARN_FORMAT            = "$file:$line: $text"

# In the $text part of the WARN_FORMAT command it is possible that a reference
# to a more specific place is given. To make it easier to jump to this place
# (outside of doxygen) the user can define a custom "cut" / "paste" string.
# Example:
# WARN_LINE_FORMAT = "'vi $file +$line'"
# See also: WARN_FORMAT
# The default value is: at line $line of file $file.

WARN_LINE_FORMAT       = "at line $line of file $file"

# The WARN_LOGFILE tag can be used to specify a file to which warning and error
# messages should be written. If left blank the output is written to standard
# error (stderr). In case the file specified cannot be opened for writing the
# warning and error messages are written to standard error. When as file - is
# specified the warning and error messages are written to standard output
# (stdout).

WARN_LOGFILE           =

#---------------------------------------------------------------------------
# Configuration options related to the input files
#---------------------------------------------------------------------------

# The INPUT tag is used to specify the files and/or directories that contain
# documented source files. You may enter file names like myfile.cpp or
# directories like /usr/src/myproject. Separate the files or directories with
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
# Note: If this tag is empty the current directory is searched.

INPUT                  = Lamp

# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
# documentation (see:
# https://www.gnu.org/software/libiconv/) for the list of possible encodings.
# See also: INPUT_FILE_ENCODING
# The default value is: UTF-8.

INPUT_ENCODING         = UTF-8

# This tag can be used to specify the character encoding of the source files
# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify
# character encoding on a per file pattern basis. Doxygen will compare the file
# name with each pattern and apply the encoding instead of the default
# INPUT_ENCODING) if there is a match. The character encodings are a list of the
# form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding
# "INPUT_ENCODING" for further information on supported encodings.

INPUT_FILE_ENCODING    =

# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
# *.h) to filter out the source-files in the directories.
#
# Note that for custom extensions or not directly supported extensions you also
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
# read by doxygen.
#
# Note the list of default checked file patterns might differ from the list of
# default file extension mappings.
#
# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm,
# *.cpp, *.cppm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl,
# *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, *.php,
# *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be
# provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice.

FILE_PATTERNS          = *.c \
                         *.cc \
                         *.cxx \
                         *.cxxm \
                         *.cpp \
                         *.cppm \
                         *.c++ \
                         *.c++m \
                         *.java \
                         *.ii \
                         *.ixx \
                         *.ipp \
                         *.i++ \
                         *.inl \
                         *.idl \
                         *.ddl \
                         *.odl \
                         *.h \
                         *.hh \
                         *.hxx \
                         *.hpp \
                         *.h++ \
                         *.ixx \
                         *.l \
                         *.cs \
                         *.d \
                         *.php \
                         *.php4 \
                         *.php5 \
                         *.phtml \
                         *.inc \
                         *.m \
                         *.markdown \
                         *.md \
                         *.mm \
                         *.dox \
                         *.py \
                         *.pyw \
                         *.f90 \
                         *.f95 \
                         *.f03 \
                         *.f08 \
                         *.f18 \
                         *.f \
                         *.for \
                         *.vhd \
                         *.vhdl \
                         *.ucf \
                         *.qsf \
                         *.ice

# The RECURSIVE tag can be used to specify whether or not subdirectories should
# be searched for input files as well.
# The default value is: NO.

RECURSIVE              = YES

# The EXCLUDE tag can be used to specify files and/or directories that should be
# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.
#
# Note that relative paths are relative to the directory from which doxygen is
# run.

EXCLUDE                =

# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
# from the input.
# The default value is: NO.

EXCLUDE_SYMLINKS       = NO

# If the value of the INPUT tag contains directories, you can use the
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
# certain files from those directories.
#
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories for example use the pattern */test/*

EXCLUDE_PATTERNS       =

# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
# output. The symbol name can be a fully qualified name, a word, or if the
# wildcard * is used, a substring. Examples: ANamespace, AClass,
# ANamespace::AClass, ANamespace::*Test

EXCLUDE_SYMBOLS        =

# The EXAMPLE_PATH tag can be used to specify one or more files or directories
# that contain example code fragments that are included (see the \include
# command).

EXAMPLE_PATH           =

# If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
# *.h) to filter out the source-files in the directories. If left blank all
# files are included.

EXAMPLE_PATTERNS       = *

# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
# searched for input files to be used with the \include or \dontinclude commands
# irrespective of the value of the RECURSIVE tag.
# The default value is: NO.

EXAMPLE_RECURSIVE      = NO

# The IMAGE_PATH tag can be used to specify one or more files or directories
# that contain images that are to be included in the documentation (see the
# \image command).

IMAGE_PATH             =

# The INPUT_FILTER tag can be used to specify a program that doxygen should
# invoke to filter for each input file. Doxygen will invoke the filter program
# by executing (via popen()) the command:
#
# <filter> <input-file>
#
# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
# name of an input file. Doxygen will then use the output that the filter
# program writes to standard output. If FILTER_PATTERNS is specified, this tag
# will be ignored.
#
# Note that the filter must not add or remove lines; it is applied before the
# code is scanned, but not when the output code is generated. If lines are added
# or removed, the anchors will not be placed correctly.
#
# Note that doxygen will use the data processed and written to standard output
# for further processing, therefore nothing else, like debug statements or used
# commands (so in case of a Windows batch file always use @echo OFF), should be
# written to standard output.
#
# Note that for custom extensions or not directly supported extensions you also
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
# properly processed by doxygen.

INPUT_FILTER           =

# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
# basis. Doxygen will compare the file name with each pattern and apply the
# filter if there is a match. The filters are a list of the form: pattern=filter
# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
# patterns match the file name, INPUT_FILTER is applied.
#
# Note that for custom extensions or not directly supported extensions you also
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
# properly processed by doxygen.

FILTER_PATTERNS        =

# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
# INPUT_FILTER) will also be used to filter the input files that are used for
# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
# The default value is: NO.

FILTER_SOURCE_FILES    = NO

# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
# it is also possible to disable source filtering for a specific pattern using
# *.ext= (so without naming a filter).
# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.

FILTER_SOURCE_PATTERNS =

# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
# is part of the input, its contents will be placed on the main page
# (index.html). This can be useful if you have a project on for instance GitHub
# and want to reuse the introduction page also for the doxygen output.

USE_MDFILE_AS_MAINPAGE =

# The Fortran standard specifies that for fixed formatted Fortran code all
# characters from position 72 are to be considered as comment. A common
# extension is to allow longer lines before the automatic comment starts. The
# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can
# be processed before the automatic comment starts.
# Minimum value: 7, maximum value: 10000, default value: 72.

FORTRAN_COMMENT_AFTER  = 72

#---------------------------------------------------------------------------
# Configuration options related to source browsing
#---------------------------------------------------------------------------

# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
# generated. Documented entities will be cross-referenced with these sources.
#
# Note: To get rid of all source code in the generated output, make sure that
# also VERBATIM_HEADERS is set to NO.
# The default value is: NO.

SOURCE_BROWSER         = YES

# Setting the INLINE_SOURCES tag to YES will include the body of functions,
# classes and enums directly into the documentation.
# The default value is: NO.

INLINE_SOURCES         = NO

# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
# special comment blocks from generated source code fragments. Normal C, C++ and
# Fortran comments will always remain visible.
# The default value is: YES.

STRIP_CODE_COMMENTS    = YES

# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
# entity all documented functions referencing it will be listed.
# The default value is: NO.

REFERENCED_BY_RELATION = NO

# If the REFERENCES_RELATION tag is set to YES then for each documented function
# all documented entities called/used by that function will be listed.
# The default value is: NO.

REFERENCES_RELATION    = NO

# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
# to YES then the hyperlinks from functions in REFERENCES_RELATION and
# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
# link to the documentation.
# The default value is: YES.

REFERENCES_LINK_SOURCE = YES

# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
# source code will show a tooltip with additional information such as prototype,
# brief description and links to the definition and documentation. Since this
# will make the HTML file larger and loading of large files a bit slower, you
# can opt to disable this feature.
# The default value is: YES.
# This tag requires that the tag SOURCE_BROWSER is set to YES.

SOURCE_TOOLTIPS        = YES

# If the USE_HTAGS tag is set to YES then the references to source code will
# point to the HTML generated by the htags(1) tool instead of doxygen built-in
# source browser. The htags tool is part of GNU's global source tagging system
# (see https://www.gnu.org/software/global/global.html). You will need version
# 4.8.6 or higher.
#
# To use it do the following:
# - Install the latest version of global
# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file
# - Make sure the INPUT points to the root of the source tree
# - Run doxygen as normal
#
# Doxygen will invoke htags (and that will in turn invoke gtags), so these
# tools must be available from the command line (i.e. in the search path).
#
# The result: instead of the source browser generated by doxygen, the links to
# source code will now point to the output of htags.
# The default value is: NO.
# This tag requires that the tag SOURCE_BROWSER is set to YES.

USE_HTAGS              = NO

# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
# verbatim copy of the header file for each class for which an include is
# specified. Set to NO to disable this.
# See also: Section \class.
# The default value is: YES.

VERBATIM_HEADERS       = YES

# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
# clang parser (see:
# http://clang.llvm.org/) for more accurate parsing at the cost of reduced
# performance. This can be particularly helpful with template rich C++ code for
# which doxygen's built-in parser lacks the necessary type information.
# Note: The availability of this option depends on whether or not doxygen was
# generated with the -Duse_libclang=ON option for CMake.
# The default value is: NO.

CLANG_ASSISTED_PARSING = NO

# If the CLANG_ASSISTED_PARSING tag is set to YES and the CLANG_ADD_INC_PATHS
# tag is set to YES then doxygen will add the directory of each input to the
# include path.
# The default value is: YES.
# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.

CLANG_ADD_INC_PATHS    = YES

# If clang assisted parsing is enabled you can provide the compiler with command
# line options that you would normally use when invoking the compiler. Note that
# the include paths will already be set by doxygen for the files and directories
# specified with INPUT and INCLUDE_PATH.
# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.

CLANG_OPTIONS          =

# If clang assisted parsing is enabled you can provide the clang parser with the
# path to the directory containing a file called compile_commands.json. This
# file is the compilation database (see:
# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the
# options used when the source files were built. This is equivalent to
# specifying the -p option to a clang tool, such as clang-check. These options
# will then be passed to the parser. Any options specified with CLANG_OPTIONS
# will be added as well.
# Note: The availability of this option depends on whether or not doxygen was
# generated with the -Duse_libclang=ON option for CMake.

CLANG_DATABASE_PATH    =

#---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------

# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
# compounds will be generated. Enable this if the project contains a lot of
# classes, structs, unions or interfaces.
# The default value is: YES.

ALPHABETICAL_INDEX     = YES

# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes)
# that should be ignored while generating the index headers. The IGNORE_PREFIX
# tag works for classes, function and member names. The entity will be placed in
# the alphabetical list under the first letter of the entity name that remains
# after removing the prefix.
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.

IGNORE_PREFIX          =

#---------------------------------------------------------------------------
# Configuration options related to the HTML output
#---------------------------------------------------------------------------

# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
# The default value is: YES.

GENERATE_HTML          = YES

# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: html.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_OUTPUT            = html

# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
# generated HTML page (for example: .htm, .php, .asp).
# The default value is: .html.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_FILE_EXTENSION    = .html

# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
# each generated HTML page. If the tag is left blank doxygen will generate a
# standard header.
#
# To get valid HTML the header file that includes any scripts and style sheets
# that doxygen needs, which is dependent on the configuration options used (e.g.
# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
# default header using
# doxygen -w html new_header.html new_footer.html new_stylesheet.css
# YourConfigFile
# and then modify the file new_header.html. See also section "Doxygen usage"
# for information on how to generate the default header that doxygen normally
# uses.
# Note: The header is subject to change so you typically have to regenerate the
# default header when upgrading to a newer version of doxygen. For a description
# of the possible markers and block names see the documentation.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_HEADER            =

# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
# generated HTML page. If the tag is left blank doxygen will generate a standard
# footer. See HTML_HEADER for more information on how to generate a default
# footer and what special commands can be used inside the footer. See also
# section "Doxygen usage" for information on how to generate the default footer
# that doxygen normally uses.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_FOOTER            =

# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
# sheet that is used by each HTML page. It can be used to fine-tune the look of
# the HTML output. If left blank doxygen will generate a default style sheet.
# See also section "Doxygen usage" for information on how to generate the style
# sheet that doxygen normally uses.
# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
# it is more robust and this tag (HTML_STYLESHEET) will in the future become
# obsolete.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_STYLESHEET        =

# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
# cascading style sheets that are included after the standard style sheets
# created by doxygen. Using this option one can overrule certain style aspects.
# This is preferred over using HTML_STYLESHEET since it does not replace the
# standard style sheet and is therefore more robust against future updates.
# Doxygen will copy the style sheet files to the output directory.
# Note: The order of the extra style sheet files is of importance (e.g. the last
# style sheet in the list overrules the setting of the previous ones in the
# list).
# Note: Since the styling of scrollbars can currently not be overruled in
# Webkit/Chromium, the styling will be left out of the default doxygen.css if
# one or more extra stylesheets have been specified. So if scrollbar
# customization is desired it has to be added explicitly. For an example see the
# documentation.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_EXTRA_STYLESHEET  =

# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the HTML output directory. Note
# that these files will be copied to the base HTML output directory. Use the
# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
# files will be copied as-is; there are no commands or markers available.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_EXTRA_FILES       =

# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output
# should be rendered with a dark or light theme.
# Possible values are: LIGHT always generate light mode output, DARK always
# generate dark mode output, AUTO_LIGHT automatically set the mode according to
# the user preference, use light mode if no preference is set (the default),
# AUTO_DARK automatically set the mode according to the user preference, use
# dark mode if no preference is set and TOGGLE allow to user to switch between
# light and dark mode via a button.
# The default value is: AUTO_LIGHT.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_COLORSTYLE        = AUTO_LIGHT

# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
# will adjust the colors in the style sheet and background images according to
# this color. Hue is specified as an angle on a color-wheel, see
# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
# purple, and 360 is red again.
# Minimum value: 0, maximum value: 359, default value: 220.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_COLORSTYLE_HUE    = 220

# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
# in the HTML output. For a value of 0 the output will use gray-scales only. A
# value of 255 will produce the most vivid colors.
# Minimum value: 0, maximum value: 255, default value: 100.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_COLORSTYLE_SAT    = 100

# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
# luminance component of the colors in the HTML output. Values below 100
# gradually make the output lighter, whereas values above 100 make the output
# darker. The value divided by 100 is the actual gamma applied, so 80 represents
# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
# change the gamma.
# Minimum value: 40, maximum value: 240, default value: 80.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_COLORSTYLE_GAMMA  = 80

# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
# documentation will contain a main index with vertical navigation menus that
# are dynamically created via JavaScript. If disabled, the navigation index will
# consists of multiple levels of tabs that are statically embedded in every HTML
# page. Disable this option to support browsers that do not have JavaScript,
# like the Qt help browser.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_DYNAMIC_MENUS     = YES

# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
# documentation will contain sections that can be hidden and shown after the
# page has loaded.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_DYNAMIC_SECTIONS  = NO

# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be
# dynamically folded and expanded in the generated HTML source code.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_CODE_FOLDING      = YES

# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
# shown in the various tree structured indices initially; the user can expand
# and collapse entries dynamically later on. Doxygen will expand the tree to
# such a level that at most the specified number of entries are visible (unless
# a fully collapsed tree already exceeds this amount). So setting the number of
# entries 1 will produce a full collapsed tree by default. 0 is a special value
# representing an infinite number of entries and will result in a full expanded
# tree by default.
# Minimum value: 0, maximum value: 9999, default value: 100.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_INDEX_NUM_ENTRIES = 100

# If the GENERATE_DOCSET tag is set to YES, additional index files will be
# generated that can be used as input for Apple's Xcode 3 integrated development
# environment (see:
# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To
# create a documentation set, doxygen will generate a Makefile in the HTML
# output directory. Running make will produce the docset in that directory and
# running make install will install the docset in
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
# genXcode/_index.html for more information.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

GENERATE_DOCSET        = NO

# This tag determines the name of the docset feed. A documentation feed provides
# an umbrella under which multiple documentation sets from a single provider
# (such as a company or product suite) can be grouped.
# The default value is: Doxygen generated docs.
# This tag requires that the tag GENERATE_DOCSET is set to YES.

DOCSET_FEEDNAME        = "Doxygen generated docs"

# This tag determines the URL of the docset feed. A documentation feed provides
# an umbrella under which multiple documentation sets from a single provider
# (such as a company or product suite) can be grouped.
# This tag requires that the tag GENERATE_DOCSET is set to YES.

DOCSET_FEEDURL         =

# This tag specifies a string that should uniquely identify the documentation
# set bundle. This should be a reverse domain-name style string, e.g.
# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_DOCSET is set to YES.

DOCSET_BUNDLE_ID       = org.doxygen.Project

# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
# the documentation publisher. This should be a reverse domain-name style
# string, e.g. com.mycompany.MyDocSet.documentation.
# The default value is: org.doxygen.Publisher.
# This tag requires that the tag GENERATE_DOCSET is set to YES.

DOCSET_PUBLISHER_ID    = org.doxygen.Publisher

# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
# The default value is: Publisher.
# This tag requires that the tag GENERATE_DOCSET is set to YES.

DOCSET_PUBLISHER_NAME  = Publisher

# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
# on Windows. In the beginning of 2021 Microsoft took the original page, with
# a.o. the download links, offline the HTML help workshop was already many years
# in maintenance mode). You can download the HTML help workshop from the web
# archives at Installation executable (see:
# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo
# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe).
#
# The HTML Help Workshop contains a compiler that can convert all HTML output
# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
# files are now used as the Windows 98 help format, and will replace the old
# Windows help format (.hlp) on all Windows platforms in the future. Compressed
# HTML files also contain an index, a table of contents, and you can search for
# words in the documentation. The HTML workshop also contains a viewer for
# compressed HTML files.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

GENERATE_HTMLHELP      = NO

# The CHM_FILE tag can be used to specify the file name of the resulting .chm
# file. You can add a path in front of the file if the result should not be
# written to the html output directory.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.

CHM_FILE               =

# The HHC_LOCATION tag can be used to specify the location (absolute path
# including file name) of the HTML help compiler (hhc.exe). If non-empty,
# doxygen will try to run the HTML help compiler on the generated index.hhp.
# The file has to be specified with full path.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.

HHC_LOCATION           =

# The GENERATE_CHI flag controls if a separate .chi index file is generated
# (YES) or that it should be included in the main .chm file (NO).
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.

GENERATE_CHI           = NO

# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
# and project file content.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.

CHM_INDEX_ENCODING     =

# The BINARY_TOC flag controls whether a binary table of contents is generated
# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
# enables the Previous and Next buttons.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.

BINARY_TOC             = NO

# The TOC_EXPAND flag can be set to YES to add extra items for group members to
# the table of contents of the HTML help documentation and to the tree view.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.

TOC_EXPAND             = NO

# The SITEMAP_URL tag is used to specify the full URL of the place where the
# generated documentation will be placed on the server by the user during the
# deployment of the documentation. The generated sitemap is called sitemap.xml
# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL
# is specified no sitemap is generated. For information about the sitemap
# protocol see https://www.sitemaps.org
# This tag requires that the tag GENERATE_HTML is set to YES.

SITEMAP_URL            =

# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
# (.qch) of the generated HTML documentation.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

GENERATE_QHP           = NO

# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
# the file name of the resulting .qch file. The path specified is relative to
# the HTML output folder.
# This tag requires that the tag GENERATE_QHP is set to YES.

QCH_FILE               =

# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
# Project output. For more information please see Qt Help Project / Namespace
# (see:
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_QHP is set to YES.

QHP_NAMESPACE          = org.doxygen.Project

# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
# Help Project output. For more information please see Qt Help Project / Virtual
# Folders (see:
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders).
# The default value is: doc.
# This tag requires that the tag GENERATE_QHP is set to YES.

QHP_VIRTUAL_FOLDER     = doc

# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
# filter to add. For more information please see Qt Help Project / Custom
# Filters (see:
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
# This tag requires that the tag GENERATE_QHP is set to YES.

QHP_CUST_FILTER_NAME   =

# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
# custom filter to add. For more information please see Qt Help Project / Custom
# Filters (see:
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
# This tag requires that the tag GENERATE_QHP is set to YES.

QHP_CUST_FILTER_ATTRS  =

# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
# project's filter section matches. Qt Help Project / Filter Attributes (see:
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
# This tag requires that the tag GENERATE_QHP is set to YES.

QHP_SECT_FILTER_ATTRS  =

# The QHG_LOCATION tag can be used to specify the location (absolute path
# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to
# run qhelpgenerator on the generated .qhp file.
# This tag requires that the tag GENERATE_QHP is set to YES.

QHG_LOCATION           =

# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
# generated, together with the HTML files, they form an Eclipse help plugin. To
# install this plugin and make it available under the help contents menu in
# Eclipse, the contents of the directory containing the HTML and XML files needs
# to be copied into the plugins directory of eclipse. The name of the directory
# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
# After copying Eclipse needs to be restarted before the help appears.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

GENERATE_ECLIPSEHELP   = NO

# A unique identifier for the Eclipse help plugin. When installing the plugin
# the directory name containing the HTML and XML files should also have this
# name. Each documentation set should have its own identifier.
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.

ECLIPSE_DOC_ID         = org.doxygen.Project

# If you want full control over the layout of the generated HTML pages it might
# be necessary to disable the index and replace it with your own. The
# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
# of each HTML page. A value of NO enables the index and the value YES disables
# it. Since the tabs in the index contain the same information as the navigation
# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

DISABLE_INDEX          = NO

# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
# structure should be generated to display hierarchical information. If the tag
# value is set to YES, a side panel will be generated containing a tree-like
# index structure (just like the one that is generated for HTML Help). For this
# to work a browser that supports JavaScript, DHTML, CSS and frames is required
# (i.e. any modern browser). Windows users are probably better off using the
# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
# further fine tune the look of the index (see "Fine-tuning the output"). As an
# example, the default style sheet generated by doxygen has an example that
# shows how to put an image at the root of the tree instead of the PROJECT_NAME.
# Since the tree basically has the same information as the tab index, you could
# consider setting DISABLE_INDEX to YES when enabling this option.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

GENERATE_TREEVIEW      = NO

# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the
# FULL_SIDEBAR option determines if the side bar is limited to only the treeview
# area (value NO) or if it should extend to the full height of the window (value
# YES). Setting this to YES gives a layout similar to
# https://docs.readthedocs.io with more room for contents, but less room for the
# project logo, title, and description. If either GENERATE_TREEVIEW or
# DISABLE_INDEX is set to NO, this option has no effect.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

FULL_SIDEBAR           = NO

# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
# doxygen will group on one line in the generated HTML documentation.
#
# Note that a value of 0 will completely suppress the enum values from appearing
# in the overview section.
# Minimum value: 0, maximum value: 20, default value: 4.
# This tag requires that the tag GENERATE_HTML is set to YES.

ENUM_VALUES_PER_LINE   = 4

# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
# to set the initial width (in pixels) of the frame in which the tree is shown.
# Minimum value: 0, maximum value: 1500, default value: 250.
# This tag requires that the tag GENERATE_HTML is set to YES.

TREEVIEW_WIDTH         = 250

# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
# external symbols imported via tag files in a separate window.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

EXT_LINKS_IN_WINDOW    = NO

# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email
# addresses.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.

OBFUSCATE_EMAILS       = YES

# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg
# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see
# https://inkscape.org) to generate formulas as SVG images instead of PNGs for
# the HTML output. These images will generally look nicer at scaled resolutions.
# Possible values are: png (the default) and svg (looks nicer but requires the
# pdf2svg or inkscape tool).
# The default value is: png.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_FORMULA_FORMAT    = png

# Use this tag to change the font size of LaTeX formulas included as images in
# the HTML documentation. When you change the font size after a successful
# doxygen run you need to manually remove any form_*.png images from the HTML
# output directory to force them to be regenerated.
# Minimum value: 8, maximum value: 50, default value: 10.
# This tag requires that the tag GENERATE_HTML is set to YES.

FORMULA_FONTSIZE       = 10

# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands
# to create new LaTeX commands to be used in formulas as building blocks. See
# the section "Including formulas" for details.

FORMULA_MACROFILE      =

# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
# https://www.mathjax.org) which uses client side JavaScript for the rendering
# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
# installed or if you want to formulas look prettier in the HTML output. When
# enabled you may also need to install MathJax separately and configure the path
# to it using the MATHJAX_RELPATH option.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

USE_MATHJAX            = NO

# With MATHJAX_VERSION it is possible to specify the MathJax version to be used.
# Note that the different versions of MathJax have different requirements with
# regards to the different settings, so it is possible that also other MathJax
# settings have to be changed when switching between the different MathJax
# versions.
# Possible values are: MathJax_2 and MathJax_3.
# The default value is: MathJax_2.
# This tag requires that the tag USE_MATHJAX is set to YES.

MATHJAX_VERSION        = MathJax_2

# When MathJax is enabled you can set the default output format to be used for
# the MathJax output. For more details about the output format see MathJax
# version 2 (see:
# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3
# (see:
# http://docs.mathjax.org/en/latest/web/components/output.html).
# Possible values are: HTML-CSS (which is slower, but has the best
# compatibility. This is the name for Mathjax version 2, for MathJax version 3
# this will be translated into chtml), NativeMML (i.e. MathML. Only supported
# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This
# is the name for Mathjax version 3, for MathJax version 2 this will be
# translated into HTML-CSS) and SVG.
# The default value is: HTML-CSS.
# This tag requires that the tag USE_MATHJAX is set to YES.

MATHJAX_FORMAT         = HTML-CSS

# When MathJax is enabled you need to specify the location relative to the HTML
# output directory using the MATHJAX_RELPATH option. The destination directory
# should contain the MathJax.js script. For instance, if the mathjax directory
# is located at the same level as the HTML output directory, then
# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
# Content Delivery Network so you can quickly see the result without installing
# MathJax. However, it is strongly recommended to install a local copy of
# MathJax from https://www.mathjax.org before deployment. The default value is:
# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2
# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3
# This tag requires that the tag USE_MATHJAX is set to YES.

MATHJAX_RELPATH        =

# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
# extension names that should be enabled during MathJax rendering. For example
# for MathJax version 2 (see
# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions):
# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
# For example for MathJax version 3 (see
# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html):
# MATHJAX_EXTENSIONS = ams
# This tag requires that the tag USE_MATHJAX is set to YES.

MATHJAX_EXTENSIONS     =

# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
# of code that will be used on startup of the MathJax code. See the MathJax site
# (see:
# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an
# example see the documentation.
# This tag requires that the tag USE_MATHJAX is set to YES.

MATHJAX_CODEFILE       =

# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
# the HTML output. The underlying search engine uses javascript and DHTML and
# should work on any modern browser. Note that when using HTML help
# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
# there is already a search function so this one should typically be disabled.
# For large projects the javascript based search engine can be slow, then
# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
# search using the keyboard; to jump to the search box use <access key> + S
# (what the <access key> is depends on the OS and browser, but it is typically
# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
# key> to jump into the search results window, the results can be navigated
# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
# the search. The filter options can be selected when the cursor is inside the
# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
# to select a filter and <Enter> or <escape> to activate or cancel the filter
# option.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.

SEARCHENGINE           = YES

# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
# implemented using a web server instead of a web client using JavaScript. There
# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
# setting. When disabled, doxygen will generate a PHP script for searching and
# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
# and searching needs to be provided by external tools. See the section
# "External Indexing and Searching" for details.
# The default value is: NO.
# This tag requires that the tag SEARCHENGINE is set to YES.

SERVER_BASED_SEARCH    = NO

# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
# script for searching. Instead the search results are written to an XML file
# which needs to be processed by an external indexer. Doxygen will invoke an
# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
# search results.
#
# Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see:
# https://xapian.org/).
#
# See the section "External Indexing and Searching" for details.
# The default value is: NO.
# This tag requires that the tag SEARCHENGINE is set to YES.

EXTERNAL_SEARCH        = NO

# The SEARCHENGINE_URL should point to a search engine hosted by a web server
# which will return the search results when EXTERNAL_SEARCH is enabled.
#
# Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see:
# https://xapian.org/). See the section "External Indexing and Searching" for
# details.
# This tag requires that the tag SEARCHENGINE is set to YES.

SEARCHENGINE_URL       =

# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
# search data is written to a file for indexing by an external tool. With the
# SEARCHDATA_FILE tag the name of this file can be specified.
# The default file is: searchdata.xml.
# This tag requires that the tag SEARCHENGINE is set to YES.

SEARCHDATA_FILE        = searchdata.xml

# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
# projects and redirect the results back to the right project.
# This tag requires that the tag SEARCHENGINE is set to YES.

EXTERNAL_SEARCH_ID     =

# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
# projects other than the one defined by this configuration file, but that are
# all added to the same external search index. Each project needs to have a
# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
# to a relative location where the documentation can be found. The format is:
# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
# This tag requires that the tag SEARCHENGINE is set to YES.

EXTRA_SEARCH_MAPPINGS  =

#---------------------------------------------------------------------------
# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------

# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
# The default value is: YES.

GENERATE_LATEX         = NO

# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: latex.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_OUTPUT           = latex

# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
# invoked.
#
# Note that when not enabling USE_PDFLATEX the default is latex when enabling
# USE_PDFLATEX the default is pdflatex and when in the later case latex is
# chosen this is overwritten by pdflatex. For specific output languages the
# default can have been set differently, this depends on the implementation of
# the output language.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_CMD_NAME         =

# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
# index for LaTeX.
# Note: This tag is used in the Makefile / make.bat.
# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file
# (.tex).
# The default file is: makeindex.
# This tag requires that the tag GENERATE_LATEX is set to YES.

MAKEINDEX_CMD_NAME     = makeindex

# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to
# generate index for LaTeX. In case there is no backslash (\) as first character
# it will be automatically added in the LaTeX code.
# Note: This tag is used in the generated output file (.tex).
# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.
# The default value is: makeindex.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_MAKEINDEX_CMD    = makeindex

# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
# documents. This may be useful for small projects and may help to save some
# trees in general.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.

COMPACT_LATEX          = NO

# The PAPER_TYPE tag can be used to set the paper type that is used by the
# printer.
# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
# 14 inches) and executive (7.25 x 10.5 inches).
# The default value is: a4.
# This tag requires that the tag GENERATE_LATEX is set to YES.

PAPER_TYPE             = a4

# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
# that should be included in the LaTeX output. The package can be specified just
# by its name or with the correct syntax as to be used with the LaTeX
# \usepackage command. To get the times font for instance you can specify :
# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
# To use the option intlimits with the amsmath package you can specify:
# EXTRA_PACKAGES=[intlimits]{amsmath}
# If left blank no extra packages will be included.
# This tag requires that the tag GENERATE_LATEX is set to YES.

EXTRA_PACKAGES         =

# The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for
# the generated LaTeX document. The header should contain everything until the
# first chapter. If it is left blank doxygen will generate a standard header. It
# is highly recommended to start with a default header using
# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty
# and then modify the file new_header.tex. See also section "Doxygen usage" for
# information on how to generate the default header that doxygen normally uses.
#
# Note: Only use a user-defined header if you know what you are doing!
# Note: The header is subject to change so you typically have to regenerate the
# default header when upgrading to a newer version of doxygen. The following
# commands have a special meaning inside the header (and footer): For a
# description of the possible markers and block names see the documentation.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_HEADER           =

# The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for
# the generated LaTeX document. The footer should contain everything after the
# last chapter. If it is left blank doxygen will generate a standard footer. See
# LATEX_HEADER for more information on how to generate a default footer and what
# special commands can be used inside the footer. See also section "Doxygen
# usage" for information on how to generate the default footer that doxygen
# normally uses. Note: Only use a user-defined footer if you know what you are
# doing!
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_FOOTER           =

# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
# LaTeX style sheets that are included after the standard style sheets created
# by doxygen. Using this option one can overrule certain style aspects. Doxygen
# will copy the style sheet files to the output directory.
# Note: The order of the extra style sheet files is of importance (e.g. the last
# style sheet in the list overrules the setting of the previous ones in the
# list).
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_EXTRA_STYLESHEET =

# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the LATEX_OUTPUT output
# directory. Note that the files will be copied as-is; there are no commands or
# markers available.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_EXTRA_FILES      =

# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
# contain links (just like the HTML output) instead of page references. This
# makes the output suitable for online browsing using a PDF viewer.
# The default value is: YES.
# This tag requires that the tag GENERATE_LATEX is set to YES.

PDF_HYPERLINKS         = YES

# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as
# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX
# files. Set this option to YES, to get a higher quality PDF documentation.
#
# See also section LATEX_CMD_NAME for selecting the engine.
# The default value is: YES.
# This tag requires that the tag GENERATE_LATEX is set to YES.

USE_PDFLATEX           = YES

# The LATEX_BATCHMODE tag signals the behavior of LaTeX in case of an error.
# Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch
# mode nothing is printed on the terminal, errors are scrolled as if <return> is
# hit at every error; missing files that TeX tries to input or request from
# keyboard input (\read on a not open input stream) cause the job to abort,
# NON_STOP In nonstop mode the diagnostic message will appear on the terminal,
# but there is no possibility of user interaction just like in batch mode,
# SCROLL In scroll mode, TeX will stop only for missing files to input or if
# keyboard input is necessary and ERROR_STOP In errorstop mode, TeX will stop at
# each error, asking for user intervention.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_BATCHMODE        = NO

# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
# index chapters (such as File Index, Compound Index, etc.) in the output.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_HIDE_INDICES     = NO

# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
# bibliography, e.g. plainnat, or ieeetr. See
# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
# The default value is: plain.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_BIB_STYLE        = plain

# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
# path from which the emoji images will be read. If a relative path is entered,
# it will be relative to the LATEX_OUTPUT directory. If left blank the
# LATEX_OUTPUT directory will be used.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_EMOJI_DIRECTORY  =

#---------------------------------------------------------------------------
# Configuration options related to the RTF output
#---------------------------------------------------------------------------

# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
# RTF output is optimized for Word 97 and may not look too pretty with other RTF
# readers/editors.
# The default value is: NO.

GENERATE_RTF           = NO

# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: rtf.
# This tag requires that the tag GENERATE_RTF is set to YES.

RTF_OUTPUT             = rtf

# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
# documents. This may be useful for small projects and may help to save some
# trees in general.
# The default value is: NO.
# This tag requires that the tag GENERATE_RTF is set to YES.

COMPACT_RTF            = NO

# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
# contain hyperlink fields. The RTF file will contain links (just like the HTML
# output) instead of page references. This makes the output suitable for online
# browsing using Word or some other Word compatible readers that support those
# fields.
#
# Note: WordPad (write) and others do not support links.
# The default value is: NO.
# This tag requires that the tag GENERATE_RTF is set to YES.

RTF_HYPERLINKS         = NO

# Load stylesheet definitions from file. Syntax is similar to doxygen's
# configuration file, i.e. a series of assignments. You only have to provide
# replacements, missing definitions are set to their default value.
#
# See also section "Doxygen usage" for information on how to generate the
# default style sheet that doxygen normally uses.
# This tag requires that the tag GENERATE_RTF is set to YES.

RTF_STYLESHEET_FILE    =

# Set optional variables used in the generation of an RTF document. Syntax is
# similar to doxygen's configuration file. A template extensions file can be
# generated using doxygen -e rtf extensionFile.
# This tag requires that the tag GENERATE_RTF is set to YES.

RTF_EXTENSIONS_FILE    =

#---------------------------------------------------------------------------
# Configuration options related to the man page output
#---------------------------------------------------------------------------

# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
# classes and files.
# The default value is: NO.

GENERATE_MAN           = NO

# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it. A directory man3 will be created inside the directory specified by
# MAN_OUTPUT.
# The default directory is: man.
# This tag requires that the tag GENERATE_MAN is set to YES.

MAN_OUTPUT             = man

# The MAN_EXTENSION tag determines the extension that is added to the generated
# man pages. In case the manual section does not start with a number, the number
# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
# optional.
# The default value is: .3.
# This tag requires that the tag GENERATE_MAN is set to YES.

MAN_EXTENSION          = .3

# The MAN_SUBDIR tag determines the name of the directory created within
# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
# MAN_EXTENSION with the initial . removed.
# This tag requires that the tag GENERATE_MAN is set to YES.

MAN_SUBDIR             =

# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
# will generate one additional man file for each entity documented in the real
# man page(s). These additional files only source the real man page, but without
# them the man command would be unable to find the correct page.
# The default value is: NO.
# This tag requires that the tag GENERATE_MAN is set to YES.

MAN_LINKS              = NO

#---------------------------------------------------------------------------
# Configuration options related to the XML output
#---------------------------------------------------------------------------

# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
# captures the structure of the code including all documentation.
# The default value is: NO.

GENERATE_XML           = YES

# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: xml.
# This tag requires that the tag GENERATE_XML is set to YES.

XML_OUTPUT             = xml

# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
# listings (including syntax highlighting and cross-referencing information) to
# the XML output. Note that enabling this will significantly increase the size
# of the XML output.
# The default value is: YES.
# This tag requires that the tag GENERATE_XML is set to YES.

XML_PROGRAMLISTING     = YES

# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include
# namespace members in file scope as well, matching the HTML output.
# The default value is: NO.
# This tag requires that the tag GENERATE_XML is set to YES.

XML_NS_MEMB_FILE_SCOPE = NO

#---------------------------------------------------------------------------
# Configuration options related to the DOCBOOK output
#---------------------------------------------------------------------------

# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
# that can be used to generate PDF.
# The default value is: NO.

GENERATE_DOCBOOK       = NO

# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
# front of it.
# The default directory is: docbook.
# This tag requires that the tag GENERATE_DOCBOOK is set to YES.

DOCBOOK_OUTPUT         = docbook

#---------------------------------------------------------------------------
# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------

# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
# AutoGen Definitions (see https://autogen.sourceforge.net/) file that captures
# the structure of the code including all documentation. Note that this feature
# is still experimental and incomplete at the moment.
# The default value is: NO.

GENERATE_AUTOGEN_DEF   = NO

#---------------------------------------------------------------------------
# Configuration options related to Sqlite3 output
#---------------------------------------------------------------------------

# If the GENERATE_SQLITE3 tag is set to YES doxygen will generate a Sqlite3
# database with symbols found by doxygen stored in tables.
# The default value is: NO.

GENERATE_SQLITE3       = NO

# The SQLITE3_OUTPUT tag is used to specify where the Sqlite3 database will be
# put. If a relative path is entered the value of OUTPUT_DIRECTORY will be put
# in front of it.
# The default directory is: sqlite3.
# This tag requires that the tag GENERATE_SQLITE3 is set to YES.

SQLITE3_OUTPUT         = sqlite3

# The SQLITE3_OVERWRITE_DB tag is set to YES, the existing doxygen_sqlite3.db
# database file will be recreated with each doxygen run. If set to NO, doxygen
# will warn if an a database file is already found and not modify it.
# The default value is: YES.
# This tag requires that the tag GENERATE_SQLITE3 is set to YES.

SQLITE3_RECREATE_DB    = YES

#---------------------------------------------------------------------------
# Configuration options related to the Perl module output
#---------------------------------------------------------------------------

# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
# file that captures the structure of the code including all documentation.
#
# Note that this feature is still experimental and incomplete at the moment.
# The default value is: NO.

GENERATE_PERLMOD       = NO

# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
# output from the Perl module output.
# The default value is: NO.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.

PERLMOD_LATEX          = NO

# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
# formatted so it can be parsed by a human reader. This is useful if you want to
# understand what is going on. On the other hand, if this tag is set to NO, the
# size of the Perl module output will be much smaller and Perl will parse it
# just the same.
# The default value is: YES.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.

PERLMOD_PRETTY         = YES

# The names of the make variables in the generated doxyrules.make file are
# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
# so different doxyrules.make files included by the same Makefile don't
# overwrite each other's variables.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.

PERLMOD_MAKEVAR_PREFIX =

#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------

# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
# C-preprocessor directives found in the sources and include files.
# The default value is: YES.

ENABLE_PREPROCESSING   = YES

# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
# in the source code. If set to NO, only conditional compilation will be
# performed. Macro expansion can be done in a controlled way by setting
# EXPAND_ONLY_PREDEF to YES.
# The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.

MACRO_EXPANSION        = NO

# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
# the macro expansion is limited to the macros specified with the PREDEFINED and
# EXPAND_AS_DEFINED tags.
# The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.

EXPAND_ONLY_PREDEF     = NO

# If the SEARCH_INCLUDES tag is set to YES, the include files in the
# INCLUDE_PATH will be searched if a #include is found.
# The default value is: YES.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.

SEARCH_INCLUDES        = YES

# The INCLUDE_PATH tag can be used to specify one or more directories that
# contain include files that are not input files but should be processed by the
# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of
# RECURSIVE has no effect here.
# This tag requires that the tag SEARCH_INCLUDES is set to YES.

INCLUDE_PATH           =

# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
# patterns (like *.h and *.hpp) to filter out the header-files in the
# directories. If left blank, the patterns specified with FILE_PATTERNS will be
# used.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.

INCLUDE_FILE_PATTERNS  =

# The PREDEFINED tag can be used to specify one or more macro names that are
# defined before the preprocessor is started (similar to the -D option of e.g.
# gcc). The argument of the tag is a list of macros of the form: name or
# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
# is assumed. To prevent a macro definition from being undefined via #undef or
# recursively expanded use the := operator instead of the = operator.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.

PREDEFINED             =

# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
# tag can be used to specify a list of macro names that should be expanded. The
# macro definition that is found in the sources will be used. Use the PREDEFINED
# tag if you want to use a different macro definition that overrules the
# definition found in the source code.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.

EXPAND_AS_DEFINED      =

# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
# remove all references to function-like macros that are alone on a line, have
# an all uppercase name, and do not end with a semicolon. Such function macros
# are typically used for boiler-plate code, and will confuse the parser if not
# removed.
# The default value is: YES.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.

SKIP_FUNCTION_MACROS   = YES

#---------------------------------------------------------------------------
# Configuration options related to external references
#---------------------------------------------------------------------------

# The TAGFILES tag can be used to specify one or more tag files. For each tag
# file the location of the external documentation should be added. The format of
# a tag file without this location is as follows:
# TAGFILES = file1 file2 ...
# Adding location for the tag files is done as follows:
# TAGFILES = file1=loc1 "file2 = loc2" ...
# where loc1 and loc2 can be relative or absolute paths or URLs. See the
# section "Linking to external documentation" for more information about the use
# of tag files.
# Note: Each tag file must have a unique name (where the name does NOT include
# the path). If a tag file is not located in the directory in which doxygen is
# run, you must also specify the path to the tagfile here.

TAGFILES               =

# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
# tag file that is based on the input files it reads. See section "Linking to
# external documentation" for more information about the usage of tag files.

GENERATE_TAGFILE       =

# If the ALLEXTERNALS tag is set to YES, all external classes and namespaces
# will be listed in the class and namespace index. If set to NO, only the
# inherited external classes will be listed.
# The default value is: NO.

ALLEXTERNALS           = NO

# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
# in the topic index. If set to NO, only the current project's groups will be
# listed.
# The default value is: YES.

EXTERNAL_GROUPS        = YES

# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
# the related pages index. If set to NO, only the current project's pages will
# be listed.
# The default value is: YES.

EXTERNAL_PAGES         = YES

#---------------------------------------------------------------------------
# Configuration options related to diagram generator tools
#---------------------------------------------------------------------------

# If set to YES the inheritance and collaboration graphs will hide inheritance
# and usage relations if the target is undocumented or is not a class.
# The default value is: YES.

HIDE_UNDOC_RELATIONS   = YES

# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
# available from the path. This tool is part of Graphviz (see:
# https://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
# Bell Labs. The other options in this section have no effect if this option is
# set to NO
# The default value is: NO.

HAVE_DOT               = NO

# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
# to run in parallel. When set to 0 doxygen will base this on the number of
# processors available in the system. You can set it explicitly to a value
# larger than 0 to get control over the balance between CPU load and processing
# speed.
# Minimum value: 0, maximum value: 32, default value: 0.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_NUM_THREADS        = 0

# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of
# subgraphs. When you want a differently looking font in the dot files that
# doxygen generates you can specify fontname, fontcolor and fontsize attributes.
# For details please see <a href=https://graphviz.org/doc/info/attrs.html>Node,
# Edge and Graph Attributes specification</a> You need to make sure dot is able
# to find the font, which can be done by putting it in a standard location or by
# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
# directory containing the font. Default graphviz fontsize is 14.
# The default value is: fontname=Helvetica,fontsize=10.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_COMMON_ATTR        = "fontname=Helvetica,fontsize=10"

# DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can
# add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. <a
# href=https://graphviz.org/doc/info/arrows.html>Complete documentation about
# arrows shapes.</a>
# The default value is: labelfontname=Helvetica,labelfontsize=10.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_EDGE_ATTR          = "labelfontname=Helvetica,labelfontsize=10"

# DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes
# around nodes set 'shape=plain' or 'shape=plaintext' <a
# href=https://www.graphviz.org/doc/info/shapes.html>Shapes specification</a>
# The default value is: shape=box,height=0.2,width=0.4.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_NODE_ATTR          = "shape=box,height=0.2,width=0.4"

# You can set the path where dot can find font specified with fontname in
# DOT_COMMON_ATTR and others dot attributes.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_FONTPATH           =

# If the CLASS_GRAPH tag is set to YES or GRAPH or BUILTIN then doxygen will
# generate a graph for each documented class showing the direct and indirect
# inheritance relations. In case the CLASS_GRAPH tag is set to YES or GRAPH and
# HAVE_DOT is enabled as well, then dot will be used to draw the graph. In case
# the CLASS_GRAPH tag is set to YES and HAVE_DOT is disabled or if the
# CLASS_GRAPH tag is set to BUILTIN, then the built-in generator will be used.
# If the CLASS_GRAPH tag is set to TEXT the direct and indirect inheritance
# relations will be shown as texts / links.
# Possible values are: NO, YES, TEXT, GRAPH and BUILTIN.
# The default value is: YES.

CLASS_GRAPH            = YES

# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
# graph for each documented class showing the direct and indirect implementation
# dependencies (inheritance, containment, and class references variables) of the
# class with other documented classes. Explicit enabling a collaboration graph,
# when COLLABORATION_GRAPH is set to NO, can be accomplished by means of the
# command \collaborationgraph. Disabling a collaboration graph can be
# accomplished by means of the command \hidecollaborationgraph.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.

COLLABORATION_GRAPH    = YES

# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
# groups, showing the direct groups dependencies. Explicit enabling a group
# dependency graph, when GROUP_GRAPHS is set to NO, can be accomplished by means
# of the command \groupgraph. Disabling a directory graph can be accomplished by
# means of the command \hidegroupgraph. See also the chapter Grouping in the
# manual.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.

GROUP_GRAPHS           = YES

# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
# collaboration diagrams in a style similar to the OMG's Unified Modeling
# Language.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.

UML_LOOK               = NO

# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
# class node. If there are many fields or methods and many nodes the graph may
# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
# number of items for each type to make the size more manageable. Set this to 0
# for no limit. Note that the threshold may be exceeded by 50% before the limit
# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
# but if the number exceeds 15, the total amount of fields shown is limited to
# 10.
# Minimum value: 0, maximum value: 100, default value: 10.
# This tag requires that the tag UML_LOOK is set to YES.

UML_LIMIT_NUM_FIELDS   = 10

# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and
# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS
# tag is set to YES, doxygen will add type and arguments for attributes and
# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen
# will not generate fields with class member information in the UML graphs. The
# class diagrams will look similar to the default class diagrams but using UML
# notation for the relationships.
# Possible values are: NO, YES and NONE.
# The default value is: NO.
# This tag requires that the tag UML_LOOK is set to YES.

DOT_UML_DETAILS        = NO

# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters
# to display on a single line. If the actual line length exceeds this threshold
# significantly it will wrapped across multiple lines. Some heuristics are apply
# to avoid ugly line breaks.
# Minimum value: 0, maximum value: 1000, default value: 17.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_WRAP_THRESHOLD     = 17

# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
# collaboration graphs will show the relations between templates and their
# instances.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.

TEMPLATE_RELATIONS     = NO

# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
# YES then doxygen will generate a graph for each documented file showing the
# direct and indirect include dependencies of the file with other documented
# files. Explicit enabling an include graph, when INCLUDE_GRAPH is is set to NO,
# can be accomplished by means of the command \includegraph. Disabling an
# include graph can be accomplished by means of the command \hideincludegraph.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.

INCLUDE_GRAPH          = YES

# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
# set to YES then doxygen will generate a graph for each documented file showing
# the direct and indirect include dependencies of the file with other documented
# files. Explicit enabling an included by graph, when INCLUDED_BY_GRAPH is set
# to NO, can be accomplished by means of the command \includedbygraph. Disabling
# an included by graph can be accomplished by means of the command
# \hideincludedbygraph.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.

INCLUDED_BY_GRAPH      = YES

# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
# dependency graph for every global function or class method.
#
# Note that enabling this option will significantly increase the time of a run.
# So in most cases it will be better to enable call graphs for selected
# functions only using the \callgraph command. Disabling a call graph can be
# accomplished by means of the command \hidecallgraph.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.

CALL_GRAPH             = NO

# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
# dependency graph for every global function or class method.
#
# Note that enabling this option will significantly increase the time of a run.
# So in most cases it will be better to enable caller graphs for selected
# functions only using the \callergraph command. Disabling a caller graph can be
# accomplished by means of the command \hidecallergraph.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.

CALLER_GRAPH           = NO

# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
# hierarchy of all classes instead of a textual one.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.

GRAPHICAL_HIERARCHY    = YES

# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
# dependencies a directory has on other directories in a graphical way. The
# dependency relations are determined by the #include relations between the
# files in the directories. Explicit enabling a directory graph, when
# DIRECTORY_GRAPH is set to NO, can be accomplished by means of the command
# \directorygraph. Disabling a directory graph can be accomplished by means of
# the command \hidedirectorygraph.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.

DIRECTORY_GRAPH        = YES

# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels
# of child directories generated in directory dependency graphs by dot.
# Minimum value: 1, maximum value: 25, default value: 1.
# This tag requires that the tag DIRECTORY_GRAPH is set to YES.

DIR_GRAPH_MAX_DEPTH    = 1

# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
# generated by dot. For an explanation of the image formats see the section
# output formats in the documentation of the dot tool (Graphviz (see:
# https://www.graphviz.org/)).
# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
# to make the SVG files visible in IE 9+ (other browsers do not have this
# requirement).
# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
# png:gdiplus:gdiplus.
# The default value is: png.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_IMAGE_FORMAT       = png

# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
# enable generation of interactive SVG images that allow zooming and panning.
#
# Note that this requires a modern browser other than Internet Explorer. Tested
# and working are Firefox, Chrome, Safari, and Opera.
# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
# the SVG files visible. Older versions of IE do not have SVG support.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.

INTERACTIVE_SVG        = NO

# The DOT_PATH tag can be used to specify the path where the dot tool can be
# found. If left blank, it is assumed the dot tool can be found in the path.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_PATH               =

# The DOTFILE_DIRS tag can be used to specify one or more directories that
# contain dot files that are included in the documentation (see the \dotfile
# command).
# This tag requires that the tag HAVE_DOT is set to YES.

DOTFILE_DIRS           =

# You can include diagrams made with dia in doxygen documentation. Doxygen will
# then run dia to produce the diagram and insert it in the documentation. The
# DIA_PATH tag allows you to specify the directory where the dia binary resides.
# If left empty dia is assumed to be found in the default search path.

DIA_PATH               =

# The DIAFILE_DIRS tag can be used to specify one or more directories that
# contain dia files that are included in the documentation (see the \diafile
# command).

DIAFILE_DIRS           =

# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
# path where java can find the plantuml.jar file or to the filename of jar file
# to be used. If left blank, it is assumed PlantUML is not used or called during
# a preprocessing step. Doxygen will generate a warning when it encounters a
# \startuml command in this case and will not generate output for the diagram.

PLANTUML_JAR_PATH      =

# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
# configuration file for plantuml.

PLANTUML_CFG_FILE      =

# When using plantuml, the specified paths are searched for files specified by
# the !include statement in a plantuml block.

PLANTUML_INCLUDE_PATH  =

# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
# that will be shown in the graph. If the number of nodes in a graph becomes
# larger than this value, doxygen will truncate the graph, which is visualized
# by representing a node as a red box. Note that doxygen if the number of direct
# children of the root node in a graph is already larger than
# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
# Minimum value: 0, maximum value: 10000, default value: 50.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_GRAPH_MAX_NODES    = 50

# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
# generated by dot. A depth value of 3 means that only nodes reachable from the
# root by following a path via at most 3 edges will be shown. Nodes that lay
# further from the root node will be omitted. Note that setting this option to 1
# or 2 may greatly reduce the computation time needed for large code bases. Also
# note that the size of a graph can be further restricted by
# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
# Minimum value: 0, maximum value: 1000, default value: 0.
# This tag requires that the tag HAVE_DOT is set to YES.

MAX_DOT_GRAPH_DEPTH    = 0

# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
# files in one run (i.e. multiple -o and -T options on the command line). This
# makes dot run faster, but since only newer versions of dot (>1.8.10) support
# this, this feature is disabled by default.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_MULTI_TARGETS      = NO

# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
# explaining the meaning of the various boxes and arrows in the dot generated
# graphs.
# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal
# graphical representation for inheritance and collaboration diagrams is used.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.

GENERATE_LEGEND        = YES

# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate
# files that are used to generate the various graphs.
#
# Note: This setting is not only used for dot files but also for msc temporary
# files.
# The default value is: YES.

DOT_CLEANUP            = YES

# You can define message sequence charts within doxygen comments using the \msc
# command. If the MSCGEN_TOOL tag is left empty (the default), then doxygen will
# use a built-in version of mscgen tool to produce the charts. Alternatively,
# the MSCGEN_TOOL tag can also specify the name an external tool. For instance,
# specifying prog as the value, doxygen will call the tool as prog -T
# <outfile_format> -o <outputfile> <inputfile>. The external tool should support
# output file formats "png", "eps", "svg", and "ismap".

MSCGEN_TOOL            =

# The MSCFILE_DIRS tag can be used to specify one or more directories that
# contain msc files that are included in the documentation (see the \mscfile
# command).

MSCFILE_DIRS           =


================================================
FILE: LICENSE
================================================
This is free and unencumbered software released into the public domain.

Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.

In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

For more information, please refer to <https://unlicense.org>


================================================
FILE: Lampray/Base/lampBase.h
================================================
//
// Created by charles on 27/09/23.
//

#ifndef LAMP_LAMPBASE_H
#define LAMP_LAMPBASE_H

#include <string>
#include <pugixml.hpp>
#include <utility>
#include <vector>
#include <sstream>
#include "../../third-party/imgui/imgui.h"
#include "../Control/lampNotification.h"
#include <iomanip>
#include <functional>
#include <vector>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <iostream>
#include <filesystem>
#include <cstring>
#include <list>
#include <queue>
#include <fstream>

namespace Lamp::Core::Base{
    /**
     * @brief A holding class for some of the Lampray framework's core types.
     *
     */
    class lampTypes{
    public:
        /**
        * @brief A custom string class designed for use in the Lampray framework.
        *
        * This class provides custom functionality for string manipulation and conversion.
        */
        class lampString {
        private:
            std::string data; ///< The underlying std::string data.

        public:
            /**
             * @brief Constructs a lampString from a std::string.
             *
             * @param str The std::string to initialize the lampString with.
             */
            lampString(std::string str) : data(std::move(str)) {}

            /**
             * @brief Constructs a lampString from a C-style string (const char*).
             *
             * @param str The C-style string to initialize the lampString with.
             */
            lampString(const char* str) : data(str) {}

            /**
             * @brief Constructs an empty lampString.
             */
            lampString() : data("") {}

            /**
             * @brief Custom operator to concatenate a lampString with a C-style string (const char*).
             *
             * @param other The C-style string to concatenate with.
             * @return A new lampString containing the concatenated result.
             */
            lampString operator+(const char* other) const {
                return {data + other};
            }

            /**
             * @brief Custom operator to concatenate two lampStrings.
             *
             * @param other The lampString to concatenate with.
             * @return A new lampString containing the concatenated result.
             */
            lampString operator+(const lampString& other) const {
                return {data + other.data};
            }

            /**
             * @brief Custom operator to concatenate a std::string with a lampString.
             *
             * @param str1 The std::string to concatenate with.
             * @param str2 The lampString to concatenate to the end.
             * @return A new lampString containing the concatenated result.
             */
            friend lampString operator+(const std::string& str1, const lampString& str2) {
                return {str1 + str2.data};
            }

            /**
             * @brief Custom operator to concatenate a lampString with a std::string.
             *
             * @param other The std::string to concatenate with.
             * @return A new lampString containing the concatenated result.
             */
            lampString operator+(const std::string& other) const {
                return {data + other};
            }

            /**
             * @brief Custom operator to assign a C-style string (const char*) to a lampString.
             *
             * @param other The C-style string to assign.
             * @return A reference to the modified lampString.
             */
            lampString& operator=(const char* other) {
                data = other;
                return *this;
            }

            /**
             * @brief Custom operator to assign a std::string to a lampString.
             *
             * @param other The std::string to assign.
             * @return A reference to the modified lampString.
             */
            lampString& operator=(const std::string& other) {
                data = other;
                return *this;
            }

            /**
             * @brief Custom comparison operator for lampStrings (less than).
             *
             * @param other The lampString to compare with.
             * @return true if this lampString is less than the other, false otherwise.
             */
            bool operator<(const lampString& other) const {
                return data < other.data;
            }


            /**
             *  brief Custom equality operator for lampStrings
             *
             * @param other The lampString to compare with
             * @return true if the contents of the strings are the same, false otherwise.
             */
            bool operator==(const lampString& other) const {
              return data == other.data;
            }

            /**
             * @brief Custom equality operator for C-style strings
             *
             * @param the string to compare to
             * @return true if the contents of the strings are the same, fale otherwise.
             */
            bool operator==(const char* other) const {
              return data == other;
            }

            /**
             * @brief Custom operator to convert a lampString to a C-style string (const char*).
             *
             * @return A C-style string representing the content of the lampString.
             */
            operator const char*() const {
                return data.c_str();
            }

            /**
             * @brief Custom operator to convert a lampString to a std::string.
             *
             * @return A std::string representing the content of the lampString.
             */
            operator std::string() const {
                return data;
            }

            /**
             * @brief Custom operator to convert a lampString to a std::filesystem::path.
             *
             * @return A std::filesystem::path representing the content of the lampString.
             */
            operator std::filesystem::path() const {
                return std::filesystem::path(data);
            };

            /**
             * @brief Converts the lampString to a boolean value.
             *
             * This function interprets "1" or "true" as `true`, and anything else as `false`.
             *
             * @return true if the string is "1" or "true," false otherwise.
             */
            bool as_bool() {
                return (data == "1" || data == "true");
            }

            /**
             * @brief Get C string equivalent
             *
             * @return  A pointer to the c-string representation of the lampString object's value.
             */
            const char *c_str() const {
                return static_cast<const char*>(*this);
            }
        };

        /**
        * @brief A custom color class designed for use in the Lampray framework, representing a color with alpha (RGB-A).
        *
        * This class provides functionality to work with colors in RGBA format and supports conversion to/from hex strings.
        */
        class lampHexAlpha {
        public:
            /**
             * @brief Constructs a lampHexAlpha with the default color (black with full alpha).
             */
            lampHexAlpha() : color_(0.0f, 0.0f, 0.0f, 1.0f) {}

            /**
             * @brief Constructs a lampHexAlpha from an ImVec4 color.
             *
             * @param color The ImVec4 color to initialize the lampHexAlpha with.
             */
            lampHexAlpha(const ImVec4& color) : color_(color) {}

            /**
             * @brief Constructs a lampHexAlpha from a hex color string.
             *
             * @param hexColor The hex color string (e.g., "RRGGBB-AA") to initialize the lampHexAlpha with.
             */
            lampHexAlpha(const std::string& hexColor) {
                color_ = HexStringToImVec4(hexColor);
            }

            /**
             * @brief Implicit conversion operator to ImVec4.
             *
             * @return An ImVec4 representing the color.
             */
            operator ImVec4() const {
                return color_;
            }

            /**
             * @brief Implicit conversion operator to ImU32 (ImGui color format).
             *
             * @return An ImU32 representing the color.
             */
            operator ImU32() const {
                return ImGui::ColorConvertFloat4ToU32(color_);
            }

            /**
             * @brief Implicit conversion operator to hex color string.
             *
             * @return A hex color string (e.g., "RRGGBB-AA").
             */
            operator std::string() const {
                return ImVec4ToHexString(color_);
            }

        private:
            ImVec4 color_; ///< The RGBA color represented by ImVec4.

            /**
             * @brief Converts an ImVec4 color to a hex color string.
             *
             * @param color The ImVec4 color to convert.
             * @return A hex color string in the format "RRGGBB-AA".
             */
            std::string ImVec4ToHexString(const ImVec4& color) const {
                int r = static_cast<int>(color.x * 255.0f);
                int g = static_cast<int>(color.y * 255.0f);
                int b = static_cast<int>(color.z * 255.0f);
                int a = static_cast<int>(color.w * 255.0f);

                std::stringstream stream;
                stream << std::hex << std::setw(2) << std::setfill('0') << r
                       << std::setw(2) << std::setfill('0') << g
                       << std::setw(2) << std::setfill('0') << b
                       << '-' << std::setw(2) << std::setfill('0') << a;

                return stream.str();
            }

            /**
             * @brief Converts a hex color string to an ImVec4 color.
             *
             * @param hexColor The hex color string in the format "RRGGBB-AA" to convert.
             * @return An ImVec4 color.
             */
            ImVec4 HexStringToImVec4(const std::string& hexColor) const {
                ImVec4 color = ImVec4(0.0f, 0.0f, 0.0f, 1.0f);
                if (hexColor.size() >= 8) {
                    // Split the hex string at the '-' delimiter
                    std::string rgbHex = hexColor.substr(0, 6);
                    std::string alphaHex = hexColor.substr(7, 2);

                    // Convert RGB components from hex
                    int r, g, b, a;
                    std::istringstream(rgbHex.substr(0, 2)) >> std::hex >> r;
                    std::istringstream(rgbHex.substr(2, 2)) >> std::hex >> g;
                    std::istringstream(rgbHex.substr(4, 2)) >> std::hex >> b;
                    std::istringstream(alphaHex) >> std::hex >> a;

                    // Convert to ImVec4
                    color.x = static_cast<float>(r) / 255.0f;
                    color.y = static_cast<float>(g) / 255.0f;
                    color.z = static_cast<float>(b) / 255.0f;
                    color.w = static_cast<float>(a) / 255.0f;
                }
                return color;
            }
        };

        /**
        * @brief A custom class for representing return values with an associated reason.
        *
        * This class is designed for use in the Lampray framework to encapsulate return values along with an optional reason.
        */
        class lampReturn {
        public:
            int returnClause;      ///< The return clause indicating the outcome of an operation.
            lampString returnReason = ""; ///< The optional return reason.

            /**
             * @brief Constructs a lampReturn with a return clause and an optional return reason.
             *
             * @param returnClause The return clause indicating the outcome of an operation.
             * @param returnReason The optional return reason as a lampString.
             */
            lampReturn(int returnClause, lampString returnReason)
                    : returnClause(returnClause), returnReason(returnReason) {}

            /**
             * @brief Constructs a lampReturn with a return clause and no return reason.
             *
             * @param returnClause The return clause indicating the outcome of an operation.
             */
            lampReturn(int returnClause) : returnClause(returnClause) {}

            /**
             * @brief Default constructor for a lampReturn with no return clause and no return reason.
             */
            lampReturn() {}

            /**
             * @brief Conversion operator to bool.
             *
             * @return true if the return clause is equal to 1, false otherwise.
             */
            operator bool() const {
                return returnClause == 1;
            }

            /**
             * @brief Conversion operator to int.
             *
             * @return The return clause as an integer.
             */
            operator int() const {
                return returnClause;
            }

            /**
             * @brief Conversion operator to lampString.
             *
             * @return The return reason as a lampString.
             */
            operator lampString() const {
                return returnReason;
            }

            /**
             * @brief Conversion operator to std::string.
             *
             * @return The return reason as a std::string.
             */
            operator std::string() const {
                return static_cast<std::string>(returnReason);
            }
        };

        /**
        * @brief A structure representing identification information for game control.
        *
        * This structure is used to provide readable and shorthand names for game identification purposes.
        */
        struct lampIdent {
            lampTypes::lampString ReadableName; ///< A human-readable name for the game.
            lampTypes::lampString ShortHand;    ///< A shorthand or abbreviated name for the game.

            /**
             * @brief Constructs a lampIdent with a readable name and a shorthand name.
             *
             * @param readableName The human-readable name for the game.
             * @param shortHand The shorthand or abbreviated name for the game.
             */
            lampIdent(lampTypes::lampString readableName, lampTypes::lampString shortHand)
                    : ReadableName(readableName), ShortHand(shortHand) {}
        };
    };

    /**
    * @brief A class for managing game mods in the Lampray framework.
    *
    * This class provides functionality for managing and serializing game mods.
    */
    class lampMod {
    public:
        /**
         * @brief The Mod struct represents information about a mod.
         */
        struct Mod {
        public:
            /**
             * @brief The path to the mod's archive.
             */
            lampTypes::lampString ArchivePath;

            /**
             * @brief The type of the mod.
             */
            int modType;

            /**
             * @brief Indicates whether the mod is enabled.
             */
            bool enabled;

            /**
             * @brief Stores a string of the last time the file updated.
             */
            lampTypes::lampString timeOfUpdate = "Unknown";

            /**
             * @brief Serialize the Mod struct to an XML node.
             *
             * @param doc The parent XML node to which this Mod will be serialized.
             * @return The serialized XML node.
             */
            pugi::xml_node serialize(pugi::xml_node doc) const {
                pugi::xml_node modNode = doc.append_child("Mod");

                modNode.append_attribute("ArchivePath").set_value(ArchivePath);
                modNode.append_attribute("modType").set_value(modType);
                modNode.append_attribute("enabled").set_value(enabled);
                modNode.append_attribute("timeOfUpdate").set_value(timeOfUpdate);

                return modNode;
            }

            /**
             * @brief Construct a new Mod object.
             *
             * @param archivePath The path to the mod's archive.
             * @param modType The type of the mod.
             * @param enabled Indicates whether the mod is enabled.
             */
            Mod(lampTypes::lampString archivePath, int modType, bool enabled)
                    : ArchivePath(archivePath), modType(modType), enabled(enabled) {
            }
        };

        /**
         * @brief The Profile helper struct for managing profile-related operations.
         */
        class Profile {
        public:
            /**
             * @brief Adds a value to an input string, separated by a tilde (~) delimiter.
             *
             * @param inputString The input string to which the value will be added.
             * @param newValue The value to add to the input string.
             */
            static void addValue(std::string& inputString, const std::string& newValue) {
                if (!inputString.empty()) {
                    inputString += "~";
                }
                inputString += newValue;
            }

            /**
             * @brief Removes a specified value from an input string.
             *
             * @param inputString The input string from which the value will be removed.
             * @param valueToRemove The value to remove from the input string.
             */
            static void removeValue(std::string& inputString, const std::string& valueToRemove) {
                size_t pos = inputString.find(valueToRemove);
                if (pos != std::string::npos) {
                    // Remove the value and the preceding tilde
                    inputString.erase(pos - 1, valueToRemove.length() + 1);
                }
            }

            /**
             * @brief Splits a delimited input string into a vector of strings.
             *
             * @param inputString The input string to split.
             * @return A vector of strings containing the split values.
             */
            static std::vector<std::string> splitString(const std::string& inputString) {
                std::vector<std::string> values;
                std::istringstream iss(inputString);
                std::string token;

                while (std::getline(iss, token, '~')) {
                    values.push_back(token);
                }

                return values;
            }
        };
    };

    /**
    * @brief A singleton class for logging messages and displaying warnings in the Lampray framework.
    *
    * This class provides a centralized logging system and a mechanism to display warning messages.
    * It is implemented as a singleton to ensure a single instance throughout the application.
    */
    class lampLog {
    public:
        /**
         * @brief Returns the singleton instance of the lampLog class.
         *
         * @return A reference to the singleton instance of the lampLog class.
         */
        static lampLog& getInstance()
        {
            static lampLog instance;
            return instance;
        }

        lampLog(lampLog const&) = delete;
        void operator=(lampLog const&) = delete;

        /**
         * @brief Enumeration representing different warning levels for log messages.
         */
        enum warningLevel {
            LOG,     ///< Log message.
            WARNING, ///< Warning message.
            ERROR    ///< Error message.
        };

        /**
         * @brief Enumeration representing error codes for log messages.
         */
        enum errorCode {
            LMP_UNK = 0,           ///< Unknown error.
            LMP_NODIRCREATION,     ///< Failed to create a directory.
            LMP_NO7ZP,             ///< 7-Zip executable not found.
            LMP_NOFILEDROP,        ///< File drop failed.
            LMP_CLEANUPFAILED,     ///< Pre-cleanup failed.
            LMP_PREDEPLOYFAILED,   ///< Pre-deployment tasks failed.
            LMP_DEOPLYMENTFAILED,  ///< Deployment failed.
            LMP_MODLISTSAVEFAILED, ///< Failed to save the mod list.
            LMP_KEYSAVEFAILED,     ///< Failed to save a key.
            LMP_KEYLOADFAILED,     ///< Failed to load a key.
            LMP_EXTRACTIONFALED,   ///< Archive extraction failed.
            LMP_NOCONFIG           ///< Configuration file not found.
        };

        std::list<std::string> poplist = {};
        // Passthrough log.
        lampTypes::lampReturn pLog(lampTypes::lampReturn data,warningLevel warningLevel = warningLevel::LOG,bool pop = false, errorCode errorCode = errorCode::LMP_UNK){
            log(data.returnReason,warningLevel,pop,errorCode);
            return data;
        }

        /**
         * @brief Logs a message with the specified warning level and error code.
         *
         * @param data The message to log.
         * @param warningLevel The warning level (LOG, WARNING, or ERROR).
         * @param pop Indicates whether the message should be displayed as a pop-up.
         * @param errorCode The error code associated with the message.
         */
        void log(lampTypes::lampString data, warningLevel warningLevel = warningLevel::LOG, bool pop = false, errorCode errorCode = errorCode::LMP_UNK) {
            lampTypes::lampString ping;
            switch (warningLevel) {
                case LOG:
                    ping = "[LAMP:LOG:" + std::to_string(errorCode) + "] " + data;
                    break;
                case WARNING:
                    ping = "[LAMP:WARNING:" + std::to_string(errorCode) + "] " + data;
                    break;
                case ERROR:
                    ping = "[LAMP:ERROR:" + std::to_string(errorCode) + "] " + data;
                    break;
            }
            std::cout << ping << std::endl;

            std::ofstream outputFile("lamp.log", std::ios::app);
            if (outputFile) {
                std::string lineToAdd = "This is a new line.";
                outputFile << ping << std::endl;
                outputFile.close();
            }

            if (pop) {
                switch (warningLevel) {
                    case WARNING:
                        Lamp::Core::lampNotification::getInstance().pushWarningNotification(ping);
                        break;
                    case ERROR:
                        Lamp::Core::lampNotification::getInstance().pushErrorNotification(ping);
                        break;
                }
                //  if(!lampConfig::getInstance().ShowIntroMenu) {
                //poplist.push_front(ping);
                //    }
            }
        }

        /**
         * @brief Displays warning pop-up messages from the poplist.
         *
         * @return true if there are warnings to display, false otherwise.
         */
        [[maybe_unused]] bool showWarns() {
            for (auto it = poplist.begin(); it != poplist.end();) {
                if (!poplist.empty()) {
                    lampTypes::lampString x = *it;
                    ImGuiIO &io = ImGui::GetIO();
                    ImGui::SetNextWindowSize(io.DisplaySize, 0);
                    ImGui::SetNextWindowPos(ImVec2(0, 0));

                    ImGuiWindowFlags windowFlags = 0;
                    windowFlags += ImGuiWindowFlags_NoMove;
                    windowFlags += ImGuiWindowFlags_NoResize;
                    windowFlags += ImGuiWindowFlags_NoCollapse;
                    windowFlags += ImGuiWindowFlags_NoTitleBar;
                    windowFlags += ImGuiWindowFlags_MenuBar;

                    ImGui::Begin(x, NULL, windowFlags);

                    ImGui::Text("%s", x.c_str());
                    ImGui::Separator();

                    ImGui::Text("If an error persists please create an issue on GitHub.");
                    if (ImGui::Button("Okay")) {
                        poplist.erase(it);
                    } else {
                        ++it; // Move to the next element
                    }

                    ImGui::End();
                }
                break;
            }
            return true;
        }

    private:
        /**
         * @brief Private constructor for the lampLog class to enforce singleton pattern.
         */
        lampLog() {}
    };

    /**
    * @brief A class for asynchronously executing code on a list of mods.
    *
    * The `lampExecutor` class allows you to execute a provided code function asynchronously on a list of mods.
    * It keeps track of the total number of items and the count of finished items.
    */
    class lampExecutor {
    public:
        /**
         * @brief Constructs a `lampExecutor` object with the provided code function.
         *
         * @param code The code function to execute on each mod.
         */
        lampExecutor(std::function<void(const lampMod::Mod *)> code) : code_(code), itemCount(0), finishedCount(0) {}

        int itemCount;          ///< The total number of items to execute.
        int finishedCount;      ///< The count of items that have finished execution.

        /**
         * @brief Executes the provided code function on a list of mods asynchronously.
         *
         * This method creates a separate thread for each mod in the list and executes the provided code function on it.
         * It also keeps track of the number of finished executions.
         *
         * @param data The vector of mod pointers on which to execute the code.
         */
        void execute(const std::vector<lampMod::Mod *>& data, bool detach) {
            lampLog::getInstance().log("ModList Executor: Starting", lampLog::warningLevel::LOG);
            itemCount = data.size();
                for (const lampMod::Mod *item: data) {
                    std::thread t([this, item]() {
                        if (code_) {
                            code_(item);
                        }
                        {
                            std::unique_lock<std::mutex> lock(mutex_);
                            finishedCount++;
                        }
                        condition_.notify_all();
                    });
                    if(detach) {
                        t.detach();
                    }else{
                        t.join();
                    }
                }
            waitForCompletion();
        }

        /**
         * @brief Waits for the completion of all asynchronous executions.
         *
         * This method blocks until all asynchronous executions have finished.
         */
        void waitForCompletion() {
            std::unique_lock<std::mutex> lock(mutex_);
            condition_.wait(lock, [this]() {
                return finishedCount == itemCount;
            });
        }

    private:
        std::function<void(const lampMod::Mod *)> code_;  ///< The code function to execute.
        std::mutex mutex_;                                ///< Mutex for thread synchronization.
        std::condition_variable condition_;               ///< Condition variable for thread synchronization.
    };

    /**
    * @brief A utility class for sequencing and executing lambda expressions in named queues.
    *
    * The `LampSequencer` class allows you to add lambda expressions to named queues and execute them sequentially.
    * It logs the results of the execution, including success, failure, and critical failure.
    */
    class LampSequencer {
    public:
        /**
         * @brief Adds a lambda expression to the specified queue.
         *
         * @param queueName The name of the queue to which the lambda should be added.
         * @param lambda The lambda expression to be added to the queue.
         */
        static void add(const std::string& queueName, std::function<lampTypes::lampReturn()> lambda) {
            getQueue(queueName).push(lambda);
        }

        /**
         * @brief Runs all lambda expressions in the specified queue sequentially.
         *
         * This method executes lambda expressions in the specified queue one by one and logs the results.
         * Execution stops on critical failure (returnClause == -1) to prevent further execution.
         *
         * @param queueName The name of the queue to run.
         * @return A lampReturn object indicating the overall result of the execution.
         */
        static lampTypes::lampReturn run(const std::string& queueName) {
            lampLog::getInstance().log("Queue '"+queueName+"': Starting", lampLog::warningLevel::LOG);
            lampTypes::lampReturn result;
            while (!getQueue(queueName).empty()) {
                std::function<lampTypes::lampReturn()> lambda = getQueue(queueName).front();
                getQueue(queueName).pop();
                result = lambda();
                logResult(queueName, result);
                if (result.returnClause == -1 || result.returnClause == 0) {
                    break;  // Stop execution on critical failure
                }
            }
            return result;
        }

    private:
        /**
         * @brief Retrieves the queue associated with the specified name.
         *
         * This method returns the queue associated with the provided name or creates a new one if it doesn't exist.
         *
         * @param queueName The name of the queue to retrieve.
         * @return A reference to the queue associated with the provided name.
         */
        static std::queue<std::function<lampTypes::lampReturn()>>& getQueue(const std::string& queueName) {
            static std::unordered_map<std::string, std::queue<std::function<lampTypes::lampReturn()>>> queues;
            return queues[queueName];
        }

        /**
         * @brief Logs the result of lambda execution for the specified queue.
         *
         * This method logs the result of lambda execution in the specified queue, indicating success, failure, or critical failure.
         *
         * @param queueName The name of the queue.
         * @param result The result of lambda execution.
         */
        static void logResult(const std::string& queueName, const lampTypes::lampReturn& result) {
            std::string logMessage = "Queue '" + queueName + "': ";
            if (result.returnClause == 0) {
                logMessage += "Failed - " + (std::string)result.returnReason;
                lampLog::getInstance().log(logMessage, lampLog::warningLevel::ERROR, true);
            } else if (result.returnClause == 1) {
                logMessage += "Success";
                lampLog::getInstance().log(logMessage, lampLog::warningLevel::LOG);
            } else if (result.returnClause == -1) {
                logMessage += "Critically Failed - " + (std::string)result.returnReason;
                lampLog::getInstance().log(logMessage, lampLog::warningLevel::ERROR, true);
            }
        }
    };

    class OverlayBuilder{
        std::vector<std::string> lowerPaths;
        std::string configPath;
        std::string gameTargetPath;

        std::string removeCommand;
        std::string buildCommand;
    public:
        lampTypes::lampReturn addPath(std::string path){
            std::filesystem::path p(path);
            if(std::filesystem::is_directory(p)){
                lowerPaths.push_back(p);
                return{1, "Added path."};
            }else{
                return{0, "Path is not a valid directory"};
            }

        }

        lampTypes::lampReturn create(std::string gameTarget, std::string configTarget, std::string workingTarget){
                std::filesystem::path gamePath(gameTarget);
                std::filesystem::path configPath(configTarget);
                if(std::filesystem::exists(workingTarget) && std::filesystem::is_directory(workingTarget) && std::filesystem::exists(gamePath) && std::filesystem::is_directory(gamePath) && std::filesystem::exists(configPath) && std::filesystem::is_directory(configPath) ){
                    // Rename the games folder and store a copy of the original name to be used for the merge.
                    std::string managedString = std::string("Lampray Managed - ") + gamePath.filename().string();
                    std::filesystem::path MergedPath = gamePath.parent_path() / managedString;
                    std::filesystem::rename(gamePath, MergedPath);
                    std::filesystem::create_directories(gamePath);

                    // Build the command
                    std::string command;
                    command+= "pkexec mount -t overlay overlay -o ";
                    command+= "lowerdir=\""+MergedPath.string()+":";
                    // build the lowerdir
                    if(!lowerPaths.empty()){
                        command += lowerPaths[0];
                        for(size_t i = 1; i < lowerPaths.size(); i++){
                            command+=":"+lowerPaths[i];
                        }
                    }else{
                        return{0, "No mod paths have been added."};
                    }
                    command+="\",upperdir=\""+configTarget;
                    command+="\",workdir=\""+workingTarget;
                    command+="\" \""+gameTarget+"\"";
                   // return {1, command};
                    // Execute it

                    int result = system(command.c_str());
                    if(result == 0){
                        return {1, "Command successfully executed"};
                    }else{
                        return {0, "Command aborted"};
                    }
                }else{
                    return{0, "Unable to create overlay, Targets Invalid."};
                }
        }

    };
}
#endif //LAMP_LAMPBASE_H


================================================
FILE: Lampray/Control/lampConfig.cpp
================================================
//
// Created by charles on 27/09/23.
//
#include "lampConfig.h"
#include "../Filesystem/lampFS.h"

bool Lamp::Core::lampConfig::init() {
        Base::lampLog::getInstance().log("Initializing Lampray");

        if((std::string)bit7zLibraryLocation == "") {
            Base::lampLog::getInstance().log("Searching for 7z.so");
            std::filesystem::path f{"/usr/libexec/p7zip/7z.so"};
            if (std::filesystem::exists(f)) {
                bit7zLibraryLocation = "/usr/libexec/p7zip/7z.so";
            } else if (exists(std::filesystem::path{"/usr/lib/p7zip/7z.so"})) {
                bit7zLibraryLocation = "/usr/lib/p7zip/7z.so";
            } else if (exists(std::filesystem::path{"/usr/lib64/p7zip/7z.so"})) {
                bit7zLibraryLocation = "/usr/lib64/p7zip/7z.so";
            } else if (exists(std::filesystem::path{"/usr/libexec/7z.so"})) {
                bit7zLibraryLocation = "/usr/libexec/7z.so";
            } else {
                Base::lampLog::getInstance().log("Fatal. Cannot locate 7z.so", Base::lampLog::ERROR, true,
                                                 Base::lampLog::LMP_NO7ZP);
                return false;
            }
        }

    return true;
}

ImGuiWindowFlags Lamp::Core::lampConfig::DefaultWindowFlags() {
    ImGuiWindowFlags windowFlags = 0;
    windowFlags += ImGuiWindowFlags_NoMove;
    windowFlags += ImGuiWindowFlags_NoResize;
    windowFlags += ImGuiWindowFlags_NoCollapse;
    windowFlags += ImGuiWindowFlags_NoTitleBar;
    windowFlags += ImGuiWindowFlags_MenuBar;
    return windowFlags;
}



================================================
FILE: Lampray/Control/lampConfig.h
================================================
//
// Created by charles on 27/09/23.
//

#ifndef LAMP_LAMPCONFIG_H
#define LAMP_LAMPCONFIG_H

#include <list>
#include <filesystem>
#include <variant>
#include "../../game-data/gameControl.h"
#include "../Base/lampBase.h"

namespace Lamp::Core {
    typedef Core::Base::lampTypes::lampString lampString;
    typedef Core::Base::lampTypes::lampHexAlpha lampHex;
    typedef Core::Base::lampTypes::lampReturn lampReturn;

/**
 * @brief The `lampConfig` class manages configuration settings and data paths for Lampray.
 *
 * The `lampConfig` class provides access to Lampray's configuration settings, data paths, and other
 * configuration-related functionality.
 */
    class lampConfig {
    public:
        /**
         * @brief Gets the singleton instance of the `lampConfig` class.
         *
         * @return The reference to the singleton instance.
         */
        static lampConfig& getInstance()
        {
            static lampConfig instance;
            return instance;
        }

        lampConfig(lampConfig const&) = delete;
        void operator=(lampConfig const&) = delete;
    
        const lampString baseDataPath = getBaseDataPath();
        const lampString saveDataPath = baseDataPath + "Mod_Lists/";
        const lampString archiveDataPath = baseDataPath + "Archives/";
        const lampString ConfigDataPath = baseDataPath + "Config/";
        const lampString DeploymentDataPath = baseDataPath + "Deployment/";
        const lampString workingPaths = baseDataPath + "WorkingDirectories/";

        lampString bit7zLibraryLocation = "";

        const bool defaultCheckForUpdateAtStart = true;
        bool checkForUpdatesAtStartup = true;

        int listHighlight = -1;
        char searchBuffer[250]{};

        std::map<lampString, lampString> lampFlags = {
                {"showIntroMenu", "1"},
        };

        /**
         * @brief Gets the default ImGui window flags for Lampray windows.
         *
         * @return The ImGui window flags.
         */
        ImGuiWindowFlags DefaultWindowFlags();

        /**
         * @brief Initializes the `lampConfig` instance.
         *
         * @return `true` if initialization was successful; otherwise, `false`.
         */
        bool init();

    private:
        /**
         * @brief Private constructor for the `lampConfig` class.
         *
         * The constructor is private to ensure that only one instance of `lampConfig` can exist.
         */
        lampConfig(){};

        static lampString getBaseDataPath() {
          std::string ret = "";
#ifdef USE_XDG
          char *xdg_data_home = std::getenv("XDG_DATA_HOME");

          if (!xdg_data_home) {
            ret += std::getenv("HOME"); 
            ret += "/.local/share";
          }
          
          ret += "/lampray/";
#else 
          ret = "Lamp_Data/";
#endif
          return lampString(ret);
        }
    };
};
#endif //LAMP_LAMPCONFIG_H


================================================
FILE: Lampray/Control/lampControl.cpp
================================================
//
// Created by charles on 27/09/23.
//
#include "lampControl.h"

Lamp::Core::lampString Lamp::Core::lampControl::getFormattedTimeAndDate() {
    std::time_t unixTimestamp = std::time(nullptr);
    std::tm timeInfo;
    localtime_r(&unixTimestamp, &timeInfo);
    std::ostringstream oss;
    oss << std::setfill('0');
    oss << std::setw(2) << timeInfo.tm_mday << '/' << std::setw(2) << (timeInfo.tm_mon + 1) << '/'
        << (timeInfo.tm_year + 1900) << ' ';
    oss << std::setw(2) << timeInfo.tm_hour << ':' << std::setw(2) << timeInfo.tm_min;
    return oss.str();
}



Lamp::Core::lampControl::lampGameSettingsDisplayHelper::lampGameSettingsDisplayHelper(
        std::string displayString, std::string stringTarget, std::string toolTip, std::string keyPath)
        : displayString(displayString), stringTarget(stringTarget), toolTip(toolTip), keyPath(keyPath) {


}


================================================
FILE: Lampray/Control/lampControl.h
================================================
//
// Created by charles on 27/09/23.
//

#ifndef LAMP_LAMPCONTROL_H
#define LAMP_LAMPCONTROL_H

#include <list>
#include <filesystem>
#include "../../game-data/gameControl.h"
#include "../Base/lampBase.h"
#include "../Filesystem/lampFS.h"
#include "lampGames.h"
#include "../../third-party/nfd/include/nfd.h"
#include "../Lang/lampLang.h"

namespace Lamp::Core{
    typedef Core::Base::lampTypes::lampString lampString;
    typedef Core::Base::lampTypes::lampHexAlpha lampHex;
    typedef Core::Base::lampTypes::lampReturn lampReturn;
    /**
    * @brief The `lampControl` class manages Lampray's control and user interface.
    *
    * The `lampControl` class provides access to various control and user interface-related functionalities in Lampray.
    */
    class lampControl{
    public:
        /**
         * @brief Gets the singleton instance of the `lampControl` class.
         *
         * @return The reference to the singleton instance.
         */
        static lampControl& getInstance()
        {
            static lampControl instance;
            return instance;
        }

        lampControl(lampControl const&) = delete;
        void operator=(lampControl const&)  = delete;

        /**
         * @brief Gets the current formatted time and date as a string.
         *
         * @return The formatted time and date string.
         */
        static lampString getFormattedTimeAndDate();

        lampHex Colour_SearchHighlight = ImVec4(0.3f, 0.f, 0.3f, 1);
        lampHex Colour_ButtonAlt = ImVec4(0.1f, 0.6f, 0.3f, 1);

        // an index outside of the loop/object recreation that we can reference for the delete modal (otherwise modal options display for every mod in the ModList)
        int deletePos = -1;
        /**
        * @brief The `lampArchiveDisplayHelper` struct provides helper methods for displaying archives.
        */
        struct lampArchiveDisplayHelper{
        private:
            std::list<std::string> columnNames{lampLang::LS("LAMPRAY_MODLIST_TITLE_ENABLED"),lampLang::LS("LAMPRAY_MODLIST_TITLE_MODNAME"), lampLang::LS("LAMPRAY_MODLIST_TITLE_MODTYPE"), lampLang::LS("LAMPRAY_MODLIST_TITLE_ORDER"),lampLang::LS("LAMPRAY_MODLIST_TITLE_LASTUPDATE") ,lampLang::LS("LAMPRAY_MODLIST_TITLE_REMOVEMOD")};
            std::vector<Base::lampMod::Mod *>& ModList;
            std::list<std::pair<std::string,bool *>> ExtraOptions;
            std::string temp{"0"};

            bool collapsUntilNextSeparator = false;
            std::string modSeparatorDefaultText = "====================================================";

            /**
            * @brief Calculates the Levenshtein distance between two strings.
            *
            * @param s1 The first string.
            * @param s2 The second string.
            * @return The Levenshtein distance between the two strings.
             */
            int calculateLevenshteinDistance(const std::string& s1, const std::string& s2) {
                int len1 = s1.length();
                int len2 = s2.length();

                std::vector<std::vector<int>> dp(len1 + 1, std::vector<int>(len2 + 1, 0));

                for (int i = 1; i <= len1; ++i) {
                    dp[i][0] = i;
                }

                for (int j = 1; j <= len2; ++j) {
                    dp[0][j] = j;
                }

                for (int i = 1; i <= len1; ++i) {
                    for (int j = 1; j <= len2; ++j) {
                        int cost = (s1[i - 1] == s2[j - 1]) ? 0 : 1;
                        dp[i][j] = std::min({ dp[i - 1][j] + 1, dp[i][j - 1] + 1, dp[i - 1][j - 1] + cost });
                    }
                }

                return dp[len1][len2];
            }


            int findClosestMatchPosition() {

                if(std::strlen(lampConfig::getInstance().searchBuffer) <= 1 ){
                    return -1;
                }

                int closestMatchPosition = -1;
                int minDistance = std::numeric_limits<int>::max();

                for (auto it = ModList.begin(); it != ModList.end(); ++it) {
                    std::filesystem::path path((*it)->ArchivePath);
                    std::string cutname = path.filename().c_str();

                    while (cutname.length() < 100) {
                        cutname += '-';
                    }

                    int distance = calculateLe
Download .txt
gitextract_o302_dsd/

├── .actrc
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── -game--bug-report.md
│   │   └── feature_request.md
│   ├── actions/
│   │   ├── setup-os/
│   │   │   └── action.yml
│   │   └── setup-tooling/
│   │       ├── README.md
│   │       └── action.yml
│   └── workflows/
│       ├── pr-title.yml
│       └── release.yml
├── .gitignore
├── .tool-versions
├── CHANGELOG.md
├── CMakeLists.txt
├── CONTRIBUTING.md
├── Doxyfile
├── LICENSE
├── Lampray/
│   ├── Base/
│   │   └── lampBase.h
│   ├── Control/
│   │   ├── lampConfig.cpp
│   │   ├── lampConfig.h
│   │   ├── lampControl.cpp
│   │   ├── lampControl.h
│   │   ├── lampGames.h
│   │   └── lampNotification.h
│   ├── Filesystem/
│   │   ├── lampExtract.cpp
│   │   ├── lampFS.h
│   │   ├── lampIO.cpp
│   │   ├── lampShare.cpp
│   │   ├── lampTrack.cpp
│   │   └── lampUpdate.cpp
│   ├── Lang/
│   │   └── lampLang.h
│   ├── Menu/
│   │   ├── lampCustomise.h
│   │   ├── lampMenu.cpp
│   │   └── lampMenu.h
│   └── Parse/
│       └── lampParse.h
├── README.md
├── VERSION
├── build.sh
├── docs/
│   ├── building-from-source.md
│   ├── customizing-lampray.md
│   ├── directory-structure.md
│   ├── frequently-asked-questions.md
│   ├── lampray-docs.md
│   ├── managing-mods.md
│   └── mod-types/
│       ├── baldurs-gate-3.md
│       ├── cyberpunk-2077.md
│       └── supported-games.md
├── game-data/
│   ├── BG3/
│   │   ├── BG3.cpp
│   │   └── BG3.h
│   ├── C77/
│   │   ├── C77.cpp
│   │   └── C77.h
│   ├── LHL/
│   │   ├── LHL.cpp
│   │   └── LHL.h
│   └── gameControl.h
├── main.cpp
├── setup.sh
└── third-party/
    ├── bit7z/
    │   ├── BUILD.txt
    │   ├── LICENSE
    │   ├── README.md
    │   ├── include/
    │   │   └── include/
    │   │       └── bit7z/
    │   │           ├── bit7z.hpp
    │   │           ├── bit7zlibrary.hpp
    │   │           ├── bitabstractarchivecreator.hpp
    │   │           ├── bitabstractarchivehandler.hpp
    │   │           ├── bitabstractarchiveopener.hpp
    │   │           ├── bitarchiveeditor.hpp
    │   │           ├── bitarchiveitem.hpp
    │   │           ├── bitarchiveiteminfo.hpp
    │   │           ├── bitarchiveitemoffset.hpp
    │   │           ├── bitarchivereader.hpp
    │   │           ├── bitarchivewriter.hpp
    │   │           ├── bitcompressionlevel.hpp
    │   │           ├── bitcompressionmethod.hpp
    │   │           ├── bitcompressor.hpp
    │   │           ├── bitdefines.hpp
    │   │           ├── biterror.hpp
    │   │           ├── bitexception.hpp
    │   │           ├── bitextractor.hpp
    │   │           ├── bitfilecompressor.hpp
    │   │           ├── bitfileextractor.hpp
    │   │           ├── bitformat.hpp
    │   │           ├── bitfs.hpp
    │   │           ├── bitgenericitem.hpp
    │   │           ├── bitinputarchive.hpp
    │   │           ├── bititemsvector.hpp
    │   │           ├── bitmemcompressor.hpp
    │   │           ├── bitmemextractor.hpp
    │   │           ├── bitoutputarchive.hpp
    │   │           ├── bitpropvariant.hpp
    │   │           ├── bitstreamcompressor.hpp
    │   │           ├── bitstreamextractor.hpp
    │   │           ├── bittypes.hpp
    │   │           └── bitwindows.hpp
    │   └── lib/
    │       └── x64/
    │           ├── libbit7z64.a
    │           └── libbit7z64_d.a
    ├── imgui/
    │   ├── LICENSE.txt
    │   ├── imconfig.h
    │   ├── imgui.cpp
    │   ├── imgui.h
    │   ├── imgui_demo.cpp
    │   ├── imgui_draw.cpp
    │   ├── imgui_impl_sdl2.cpp
    │   ├── imgui_impl_sdl2.h
    │   ├── imgui_impl_sdlrenderer2.cpp
    │   ├── imgui_impl_sdlrenderer2.h
    │   ├── imgui_internal.h
    │   ├── imgui_tables.cpp
    │   ├── imgui_widgets.cpp
    │   ├── imstb_rectpack.h
    │   ├── imstb_textedit.h
    │   └── imstb_truetype.h
    ├── json/
    │   ├── LICENSE.MIT
    │   └── json.hpp
    ├── l4z/
    │   ├── LICENSE
    │   ├── liblz4.a
    │   ├── liblz4.pc
    │   ├── liblz4.pc.in
    │   ├── lz4.c
    │   ├── lz4.h
    │   ├── lz4file.c
    │   ├── lz4file.h
    │   ├── lz4frame.c
    │   ├── lz4frame.h
    │   ├── lz4frame_static.h
    │   ├── lz4hc.c
    │   ├── lz4hc.h
    │   ├── xxhash.c
    │   └── xxhash.h
    ├── nfd/
    │   ├── .circleci/
    │   │   └── config.yml
    │   ├── .clang-format
    │   ├── .github/
    │   │   └── workflows/
    │   │       └── cmake.yml
    │   ├── .gitignore
    │   ├── include/
    │   │   └── nfd.h
    │   └── lib/
    │       └── libnfd.a
    └── pugixml/
        ├── CMakeLists.txt
        ├── LICENSE.md
        ├── readme.txt
        ├── scripts/
        │   ├── cocoapods_push.sh
        │   ├── natvis/
        │   │   ├── pugixml.natvis
        │   │   └── pugixml_compact.natvis
        │   ├── nuget/
        │   │   └── pugixml.nuspec
        │   ├── nuget_build.ps1
        │   ├── premake4.lua
        │   ├── pugixml-config.cmake.in
        │   ├── pugixml.pc.in
        │   ├── pugixml.podspec
        │   ├── pugixml.xcodeproj/
        │   │   └── project.pbxproj
        │   ├── pugixml_airplay.mkf
        │   ├── pugixml_codeblocks.cbp
        │   ├── pugixml_codelite.project
        │   ├── pugixml_dll.rc
        │   ├── pugixml_vs2005.vcproj
        │   ├── pugixml_vs2005_static.vcproj
        │   ├── pugixml_vs2008.vcproj
        │   ├── pugixml_vs2008_static.vcproj
        │   ├── pugixml_vs2010.vcxproj
        │   ├── pugixml_vs2010_static.vcxproj
        │   ├── pugixml_vs2013.vcxproj
        │   ├── pugixml_vs2013_static.vcxproj
        │   ├── pugixml_vs2015.vcxproj
        │   ├── pugixml_vs2015_static.vcxproj
        │   ├── pugixml_vs2017.vcxproj
        │   ├── pugixml_vs2017_static.vcxproj
        │   ├── pugixml_vs2019.vcxproj
        │   ├── pugixml_vs2019_static.vcxproj
        │   ├── pugixml_vs2022.vcxproj
        │   └── pugixml_vs2022_static.vcxproj
        └── src/
            ├── pugiconfig.hpp
            ├── pugixml.cpp
            └── pugixml.hpp
Download .txt
Showing preview only (252K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2678 symbols across 77 files)

FILE: Lampray/Base/lampBase.h
  function namespace (line 28) | namespace Lamp::Core::Base{
  function as_bool (line 192) | bool as_bool() {
  function class (line 211) | class lampHexAlpha {
  function class (line 320) | class lampReturn {
  type lampIdent (line 388) | struct lampIdent {
  function class (line 408) | class lampMod {
  function class (line 522) | class lampLog {
  function class (line 669) | class lampExecutor {
  function waitForCompletion (line 717) | void waitForCompletion() {
  function class (line 736) | class LampSequencer {
  function logResult (line 794) | static void logResult(const std::string& queueName, const lampTypes::lam...
  function class (line 809) | class OverlayBuilder{

FILE: Lampray/Control/lampConfig.cpp
  function ImGuiWindowFlags (line 31) | ImGuiWindowFlags Lamp::Core::lampConfig::DefaultWindowFlags() {

FILE: Lampray/Control/lampConfig.h
  type Core (line 15) | typedef Core::Base::lampTypes::lampString lampString;
  type Core (line 16) | typedef Core::Base::lampTypes::lampHexAlpha lampHex;
  type Core (line 17) | typedef Core::Base::lampTypes::lampReturn lampReturn;
  function lampString (line 82) | static lampString getBaseDataPath() {

FILE: Lampray/Control/lampControl.h
  function namespace (line 17) | namespace Lamp::Core{

FILE: Lampray/Control/lampGames.h
  function namespace (line 11) | namespace Lamp {

FILE: Lampray/Control/lampNotification.h
  function namespace (line 16) | namespace Lamp::Core{
  type NotificationTypes (line 126) | enum NotificationTypes{
  function clearNotification (line 165) | void clearNotification(int notiftype, std::vector<std::string>::iterator...
  function NotificationColors (line 173) | NotificationColors getNotificationColors(int notificationType){

FILE: Lampray/Filesystem/lampFS.h
  type Base (line 14) | typedef Base::lampTypes::lampString lampString;
  type Base (line 15) | typedef Base::lampTypes::lampReturn lampReturn;
  function class (line 19) | class lampExtract {
  function class (line 77) | class lampIO {
  function class (line 155) | class lampShare {
  function class (line 224) | class lampUpdate {
  function class (line 286) | class lampTrack{

FILE: Lampray/Lang/lampLang.h
  function namespace (line 16) | namespace Lamp {

FILE: Lampray/Menu/lampCustomise.h
  function namespace (line 14) | namespace Core {

FILE: Lampray/Menu/lampMenu.h
  function namespace (line 12) | namespace Lamp::Core{

FILE: Lampray/Parse/lampParse.h
  function namespace (line 15) | namespace Lamp::Core::Parse{

FILE: game-data/BG3/BG3.h
  function namespace (line 10) | namespace Lamp::Game {
  function SeparatorModType (line 59) | int SeparatorModType(){
  function unmount (line 71) | void unmount() override{
  function installPathSet (line 79) | bool installPathSet() override{
  type ModType (line 90) | enum ModType{

FILE: game-data/C77/C77.cpp
  type Lamp (line 7) | namespace Lamp {
    type Game (line 8) | namespace Game {
      function lampReturn (line 9) | lampReturn C77::registerArchive(lampString Path, int ArchiveModType) {
      function lampReturn (line 51) | lampReturn C77::ConfigMenu() {
      function lampReturn (line 59) | lampReturn C77::startDeployment() {
      function lampReturn (line 92) | lampReturn C77::preCleanUp() {
      function lampReturn (line 118) | lampReturn C77::preDeployment() {
      function lampReturn (line 147) | lampReturn C77::deployment() {
      function lampReturn (line 165) | lampReturn C77::postDeploymentTasks() {

FILE: game-data/C77/C77.h
  function namespace (line 12) | namespace Lamp::Game {
  function unmount (line 61) | void unmount() override{
  function SeparatorModType (line 65) | int SeparatorModType(){
  function installPathSet (line 77) | bool installPathSet() override{
  type ModType (line 86) | enum ModType{

FILE: game-data/LHL/LHL.cpp
  type Lamp (line 7) | namespace Lamp {
    type Game (line 8) | namespace Game {

FILE: game-data/LHL/LHL.h
  function namespace (line 8) | namespace Lamp {

FILE: game-data/gameControl.h
  function namespace (line 14) | namespace Lamp::Game {
  function virtual (line 142) | virtual bool installPathSet(){
  type ModType (line 163) | enum ModType{

FILE: main.cpp
  function main (line 19) | int main(int, char**)

FILE: third-party/bit7z/include/include/bit7z/bit7zlibrary.hpp
  type IInArchive (line 18) | struct IInArchive
  type IOutArchive (line 19) | struct IOutArchive
  type GUID (line 22) | struct GUID
  class CMyComPtr (line 27) | class CMyComPtr
  type bit7z (line 33) | namespace bit7z {
    class Bit7zLibrary (line 59) | class Bit7zLibrary final {
      method Bit7zLibrary (line 61) | Bit7zLibrary( const Bit7zLibrary& ) = delete;
      method Bit7zLibrary (line 63) | Bit7zLibrary( Bit7zLibrary&& ) = delete;
      method Bit7zLibrary (line 65) | Bit7zLibrary& operator=( const Bit7zLibrary& ) = delete;
      method Bit7zLibrary (line 67) | Bit7zLibrary& operator=( Bit7zLibrary&& ) = delete;

FILE: third-party/bit7z/include/include/bit7z/bitabstractarchivecreator.hpp
  type IOutStream (line 22) | struct IOutStream
  type ISequentialOutStream (line 23) | struct ISequentialOutStream
  type bit7z (line 25) | namespace bit7z {
    class ArchiveProperties (line 29) | class ArchiveProperties
  function BitAbstractArchiveCreator (line 46) | BitAbstractArchiveCreator( const BitAbstractArchiveCreator& ) = delete;
  function BitAbstractArchiveCreator (line 48) | BitAbstractArchiveCreator( BitAbstractArchiveCreator&& ) = delete;
  function BitAbstractArchiveCreator (line 50) | BitAbstractArchiveCreator& operator=( const BitAbstractArchiveCreator& )...
  function BitAbstractArchiveCreator (line 52) | BitAbstractArchiveCreator& operator=( BitAbstractArchiveCreator&& ) = de...
  function setFormatProperty (line 244) | void setFormatProperty( const wchar_t (&name)[N], T value ) noexcept { /...
  function setFormatProperty (line 261) | void setFormatProperty( const wchar_t (&name)[N], const T& value ) noexc...

FILE: third-party/bit7z/include/include/bit7z/bitabstractarchivehandler.hpp
  type bit7z (line 19) | namespace bit7z {
    class BitInFormat (line 23) | class BitInFormat
    type OverwriteMode (line 56) | enum struct OverwriteMode {
    class BitAbstractArchiveHandler (line 67) | class BitAbstractArchiveHandler {
      method BitAbstractArchiveHandler (line 69) | BitAbstractArchiveHandler( const BitAbstractArchiveHandler& ) = delete;
      method BitAbstractArchiveHandler (line 71) | BitAbstractArchiveHandler( BitAbstractArchiveHandler&& ) = delete;
      method BitAbstractArchiveHandler (line 73) | BitAbstractArchiveHandler& operator=( const BitAbstractArchiveHandle...
      method BitAbstractArchiveHandler (line 75) | BitAbstractArchiveHandler& operator=( BitAbstractArchiveHandler&& ) ...

FILE: third-party/bit7z/include/include/bit7z/bitabstractarchiveopener.hpp
  type bit7z (line 19) | namespace bit7z {
    class BitAbstractArchiveOpener (line 26) | class BitAbstractArchiveOpener : public BitAbstractArchiveHandler {
      method BitAbstractArchiveOpener (line 28) | BitAbstractArchiveOpener( const BitAbstractArchiveOpener& ) = delete;
      method BitAbstractArchiveOpener (line 30) | BitAbstractArchiveOpener( BitAbstractArchiveOpener&& ) = delete;
      method BitAbstractArchiveOpener (line 32) | BitAbstractArchiveOpener& operator=( const BitAbstractArchiveOpener&...
      method BitAbstractArchiveOpener (line 34) | BitAbstractArchiveOpener& operator=( BitAbstractArchiveOpener&& ) = ...

FILE: third-party/bit7z/include/include/bit7z/bitarchiveeditor.hpp
  type bit7z (line 17) | namespace bit7z {
    function BitArchiveEditor (line 30) | class BIT7Z_MAYBE_UNUSED BitArchiveEditor final : public BitArchiveWri...

FILE: third-party/bit7z/include/include/bit7z/bitarchiveitem.hpp
  type bit7z (line 15) | namespace bit7z {
    class BitArchiveItem (line 20) | class BitArchiveItem : public BitGenericItem {

FILE: third-party/bit7z/include/include/bit7z/bitarchiveiteminfo.hpp
  type bit7z (line 17) | namespace bit7z {
    class BitArchiveItemInfo (line 25) | class BitArchiveItemInfo final : public BitArchiveItem {

FILE: third-party/bit7z/include/include/bit7z/bitarchiveitemoffset.hpp
  type bit7z (line 15) | namespace bit7z {
    class BitInputArchive (line 17) | class BitInputArchive
    class BitArchiveItemOffset (line 22) | class BitArchiveItemOffset final : public BitArchiveItem {

FILE: third-party/bit7z/include/include/bit7z/bitarchivereader.hpp
  type IInArchive (line 17) | struct IInArchive
  type IOutArchive (line 18) | struct IOutArchive
  type IArchiveExtractCallback (line 19) | struct IArchiveExtractCallback
  type bit7z (line 21) | namespace bit7z {
    class BitArchiveReader (line 26) | class BitArchiveReader final : public BitAbstractArchiveOpener, public...
      method BitArchiveReader (line 82) | BitArchiveReader( const BitArchiveReader& ) = delete;
      method BitArchiveReader (line 84) | BitArchiveReader( BitArchiveReader&& ) = delete;
      method BitArchiveReader (line 86) | BitArchiveReader& operator=( const BitArchiveReader& ) = delete;
      method BitArchiveReader (line 88) | BitArchiveReader& operator=( BitArchiveReader&& ) = delete;

FILE: third-party/bit7z/include/include/bit7z/bitarchivewriter.hpp
  type bit7z (line 15) | namespace bit7z {
    class BitArchiveWriter (line 20) | class BitArchiveWriter : public BitAbstractArchiveCreator, public BitO...

FILE: third-party/bit7z/include/include/bit7z/bitcompressionlevel.hpp
  type bit7z (line 13) | namespace bit7z {
    type BitCompressionLevel (line 19) | enum struct BitCompressionLevel {

FILE: third-party/bit7z/include/include/bit7z/bitcompressionmethod.hpp
  type bit7z (line 13) | namespace bit7z {
    type BitCompressionMethod (line 18) | enum struct BitCompressionMethod {

FILE: third-party/bit7z/include/include/bit7z/bitcompressor.hpp
  type filesystem (line 24) | namespace filesystem { // NOLINT(modernize-concat-nested-namespaces)
    type fsutil (line 25) | namespace fsutil {
  class BitCompressor (line 39) | class BitCompressor : public BitAbstractArchiveCreator {
    method BitCompressor (line 51) | BitCompressor( Bit7zLibrary const& lib, BitInOutFormat const& format )
    method compressFile (line 61) | void compressFile( Input in_file,

FILE: third-party/bit7z/include/include/bit7z/biterror.hpp
  type bit7z (line 17) | namespace bit7z {
    type BitError (line 22) | enum struct BitError {
  type std (line 48) | namespace std {
    type BIT7Z_MAYBE_UNUSED (line 51) | struct BIT7Z_MAYBE_UNUSED

FILE: third-party/bit7z/include/include/bit7z/bitexception.hpp
  type bit7z (line 20) | namespace bit7z {
    class BitException (line 32) | class BitException final : public system_error {

FILE: third-party/bit7z/include/include/bit7z/bitextractor.hpp
  type bit7z (line 20) | namespace bit7z {
    type filesystem (line 22) | namespace filesystem { // NOLINT(modernize-concat-nested-namespaces)
      type fsutil (line 23) | namespace fsutil {
    type FilterPolicy (line 32) | enum struct FilterPolicy {
    class BitExtractor (line 43) | class BitExtractor final : public BitAbstractArchiveOpener {
      method BitExtractor (line 60) | explicit BitExtractor( const Bit7zLibrary& lib, const BitInFormat& f...
      method extract (line 69) | void extract( Input in_archive, const tstring& out_dir = {} ) const {
      method extract (line 81) | void extract( Input in_archive, vector< byte_t >& out_buffer, uint32...
      method extract (line 93) | void extract( Input in_archive, std::ostream& out_stream, uint32_t i...
      method extract (line 105) | void extract( Input in_archive, std::map< tstring, vector< byte_t > ...
      method extractMatching (line 118) | void extractMatching( Input in_archive,
      method extractMatching (line 141) | void extractMatching( Input in_archive,
      method extractItems (line 164) | void extractItems( Input in_archive,
      method extractMatchingRegex (line 199) | void extractMatchingRegex( Input in_archive,
      method extractMatchingRegex (line 223) | void extractMatchingRegex( Input in_archive,
      method test (line 247) | void test( Input in_archive ) const {
      method extractMatchingFilter (line 253) | void extractMatchingFilter( Input in_archive,
      method extractMatchingFilter (line 281) | void extractMatchingFilter( Input in_archive,

FILE: third-party/bit7z/include/include/bit7z/bitfilecompressor.hpp
  type bit7z (line 19) | namespace bit7z {
    type filesystem (line 25) | namespace filesystem {
      class FSItem (line 26) | class FSItem
    class BitFileCompressor (line 38) | class BitFileCompressor final : public BitCompressor< const tstring& > {

FILE: third-party/bit7z/include/include/bit7z/bitfileextractor.hpp
  type bit7z (line 15) | namespace bit7z {

FILE: third-party/bit7z/include/include/bit7z/bitformat.hpp
  type bit7z (line 21) | namespace bit7z {
    type FormatFeatures (line 26) | enum struct FormatFeatures : unsigned {
    function to_underlying (line 39) | inline constexpr auto to_underlying( E e ) noexcept -> underlying_type...
    function FormatFeatures (line 43) | inline constexpr FormatFeatures operator|( FormatFeatures lhs, FormatF...
    class BitInFormat (line 59) | class BitInFormat {
      method BitInFormat (line 62) | BitInFormat( const BitInFormat& other ) = delete;
      method BitInFormat (line 64) | BitInFormat& operator=( const BitInFormat& other ) = delete;
      method BitInFormat (line 67) | BitInFormat( BitInFormat&& other ) = delete;
      method BitInFormat (line 69) | BitInFormat& operator=( BitInFormat&& other ) = delete;
      method BitInFormat (line 77) | constexpr explicit BitInFormat( unsigned char value ) noexcept: mVal...
    class BitInOutFormat (line 106) | class BitInOutFormat final : public BitInFormat {
      method BitInOutFormat (line 116) | constexpr BitInOutFormat( unsigned char value,
      method BitInOutFormat (line 123) | BitInOutFormat( const BitInOutFormat& other ) = delete;
      method BitInOutFormat (line 125) | BitInOutFormat& operator=( const BitInOutFormat& other ) = delete;
      method BitInOutFormat (line 128) | BitInOutFormat( BitInOutFormat&& other ) = delete;
      method BitInOutFormat (line 130) | BitInOutFormat& operator=( BitInOutFormat&& other ) = delete;
    type BitFormat (line 167) | namespace BitFormat {

FILE: third-party/bit7z/include/include/bit7z/bitfs.hpp
  type ghc (line 26) | namespace ghc {
    type filesystem (line 27) | namespace filesystem {
      class path (line 28) | class path
  type fs (line 33) | namespace fs {

FILE: third-party/bit7z/include/include/bit7z/bitgenericitem.hpp
  type bit7z (line 15) | namespace bit7z {
    class BitGenericItem (line 20) | class BitGenericItem {
      method itemProperty (line 54) | itemProperty( BitProperty property ) const = 0;

FILE: third-party/bit7z/include/include/bit7z/bitinputarchive.hpp
  type IInStream (line 20) | struct IInStream
  type IInArchive (line 21) | struct IInArchive
  type IOutArchive (line 22) | struct IOutArchive
  type bit7z (line 24) | namespace bit7z {
    class BitInputArchive (line 31) | class BitInputArchive {
      method BitInputArchive (line 73) | BitInputArchive( const BitInputArchive& ) = delete;
      method BitInputArchive (line 75) | BitInputArchive( BitInputArchive&& ) = delete;
      method BitInputArchive (line 77) | BitInputArchive& operator=( const BitInputArchive& ) = delete;
      method BitInputArchive (line 79) | BitInputArchive& operator=( BitInputArchive&& ) = delete;
      method extract (line 162) | void extract( std::array< byte_t, N >& buffer, uint32_t index = 0 ) ...
      method extract (line 175) | void extract( byte_t (& buffer)[N], uint32_t index = 0 ) const { // ...
      class const_iterator (line 235) | class const_iterator {

FILE: third-party/bit7z/include/include/bit7z/bititemsvector.hpp
  type bit7z (line 19) | namespace bit7z {
    type filesystem (line 25) | namespace filesystem {
      class FSItem (line 26) | class FSItem
    type GenericInputItem (line 31) | struct GenericInputItem
    type IndexingOptions (line 36) | struct IndexingOptions {
    class BitItemsVector (line 47) | class BitItemsVector final {
      method BitItemsVector (line 51) | BitItemsVector() = default;
      method BitItemsVector (line 53) | BitItemsVector( const BitItemsVector& ) = default;
      method BitItemsVector (line 55) | BitItemsVector( BitItemsVector&& ) = default;
      method BitItemsVector (line 57) | BitItemsVector& operator=( const BitItemsVector& ) = default;
      method BitItemsVector (line 59) | BitItemsVector& operator=( BitItemsVector&& ) = default;

FILE: third-party/bit7z/include/include/bit7z/bitmemcompressor.hpp
  type bit7z (line 15) | namespace bit7z {

FILE: third-party/bit7z/include/include/bit7z/bitmemextractor.hpp
  type bit7z (line 15) | namespace bit7z {

FILE: third-party/bit7z/include/include/bit7z/bitoutputarchive.hpp
  type ISequentialInStream (line 21) | struct ISequentialInStream
  type bit7z (line 23) | namespace bit7z {
    type input_index (line 48) | enum class input_index : std::uint32_t {}
    class UpdateCallback (line 50) | class UpdateCallback
    class BitOutputArchive (line 55) | class BitOutputArchive {
      method BitOutputArchive (line 100) | BitOutputArchive( const BitOutputArchive& ) = delete;
      method BitOutputArchive (line 102) | BitOutputArchive( BitOutputArchive&& ) = delete;
      method BitOutputArchive (line 104) | BitOutputArchive& operator=( const BitOutputArchive& ) = delete;
      method BitOutputArchive (line 106) | BitOutputArchive& operator=( BitOutputArchive&& ) = delete;
      method BitInputArchive (line 236) | inline BitInputArchive* inputArchive() const {
      method setInputArchive (line 240) | inline void setInputArchive( std::unique_ptr< BitInputArchive >&& in...
      method inputArchiveItemsCount (line 244) | inline uint32_t inputArchiveItemsCount() const {
      method setDeletedIndex (line 248) | inline void setDeletedIndex( uint32_t index ) {
      method isDeletedIndex (line 252) | inline bool isDeletedIndex( uint32_t index ) const {
      method hasDeletedIndexes (line 256) | inline bool hasDeletedIndexes() const {
      method hasNewItems (line 260) | inline bool hasNewItems() const {

FILE: third-party/bit7z/include/include/bit7z/bitpropvariant.hpp
  type bit7z (line 20) | namespace bit7z {
    type BitProperty (line 30) | enum struct BitProperty : PROPID {
    type BitPropVariantType (line 132) | enum struct BitPropVariantType : uint32_t {
    type BitPropVariant (line 150) | struct BitPropVariant final : public PROPVARIANT {
      method BitPropVariant (line 289) | BitPropVariant& operator=( const T& value ) noexcept( std::is_integr...

FILE: third-party/bit7z/include/include/bit7z/bitstreamcompressor.hpp
  type bit7z (line 15) | namespace bit7z {

FILE: third-party/bit7z/include/include/bit7z/bitstreamextractor.hpp
  type bit7z (line 15) | namespace bit7z {

FILE: third-party/bit7z/include/include/bit7z/bittypes.hpp
  type bit7z (line 20) | namespace bit7z {
    type byte_t (line 29) | enum class byte_t : unsigned char {}
    type string_traits (line 40) | struct string_traits
    type string_traits< char > (line 43) | struct string_traits< char > {
      method convert_to_string (line 45) | static inline std::string convert_to_string( T&& t ) {
    type string_traits< wchar_t > (line 51) | struct string_traits< wchar_t > {
      method convert_to_string (line 53) | static inline std::wstring convert_to_string( T&& t ) {
    function to_tstring (line 85) | inline std::basic_string< tchar > to_tstring( T&& arg ) {

FILE: third-party/bit7z/include/include/bit7z/bitwindows.hpp
  type bit7z (line 50) | namespace bit7z {
    type FILETIME (line 102) | struct FILETIME {
    type LARGE_INTEGER (line 107) | struct LARGE_INTEGER {
    type ULARGE_INTEGER (line 111) | struct ULARGE_INTEGER {
    type PROPVARIANT (line 115) | struct PROPVARIANT {

FILE: third-party/imgui/imgui.cpp
  type ImGui (line 1075) | namespace ImGui
  function FreeWrapper (line 1157) | static void    FreeWrapper(void* ptr, void* user_data)        { IM_UNUSE...
  function FreeWrapper (line 1160) | static void    FreeWrapper(void* ptr, void* user_data)        { IM_UNUSE...
  function ImGuiInputEvent (line 1433) | static ImGuiInputEvent* FindLatestInputEvent(ImGuiContext* ctx, ImGuiInp...
  function ImVec2 (line 1637) | ImVec2 ImBezierCubicClosestPoint(const ImVec2& p1, const ImVec2& p2, con...
  function ImBezierCubicClosestPointCasteljauStep (line 1660) | static void ImBezierCubicClosestPointCasteljauStep(const ImVec2& p, ImVe...
  function ImVec2 (line 1695) | ImVec2 ImBezierCubicClosestPointCasteljau(const ImVec2& p1, const ImVec2...
  function ImVec2 (line 1705) | ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2...
  function ImTriangleContainsPoint (line 1718) | bool ImTriangleContainsPoint(const ImVec2& a, const ImVec2& b, const ImV...
  function ImTriangleBarycentricCoords (line 1726) | void ImTriangleBarycentricCoords(const ImVec2& a, const ImVec2& b, const...
  function ImVec2 (line 1737) | ImVec2 ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const Im...
  function ImStricmp (line 1758) | int ImStricmp(const char* str1, const char* str2)
  function ImStrnicmp (line 1765) | int ImStrnicmp(const char* str1, const char* str2, size_t count)
  function ImStrncpy (line 1772) | void ImStrncpy(char* dst, const char* src, size_t count)
  function ImStrlenW (line 1808) | int ImStrlenW(const ImWchar* str)
  function ImWchar (line 1823) | const ImWchar* ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf...
  function ImStrTrimBlanks (line 1853) | void ImStrTrimBlanks(char* buf)
  function ImFormatString (line 1899) | int ImFormatString(char* buf, size_t buf_size, const char* fmt, ...)
  function ImFormatStringV (line 1917) | int ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list...
  function ImFormatStringToTempBuffer (line 1933) | void ImFormatStringToTempBuffer(const char** out_buf, const char** out_b...
  function ImFormatStringToTempBufferV (line 1941) | void ImFormatStringToTempBufferV(const char** out_buf, const char** out_...
  function ImGuiID (line 1991) | ImGuiID ImHashData(const void* data_p, size_t data_size, ImGuiID seed)
  function ImGuiID (line 2007) | ImGuiID ImHashStr(const char* data_p, size_t data_size, ImGuiID seed)
  function ImFileHandle (line 2042) | ImFileHandle ImFileOpen(const char* filename, const char* mode)
  function ImFileClose (line 2061) | bool    ImFileClose(ImFileHandle f)     { return fclose(f) == 0; }
  function ImU64 (line 2062) | ImU64   ImFileGetSize(ImFileHandle f)   { long off = 0, sz = 0; return (...
  function ImU64 (line 2063) | ImU64   ImFileRead(void* data, ImU64 sz, ImU64 count, ImFileHandle f)   ...
  function ImU64 (line 2064) | ImU64   ImFileWrite(const void* data, ImU64 sz, ImU64 count, ImFileHandl...
  function IM_MSVC_RUNTIME_CHECKS_OFF (line 2113) | IM_MSVC_RUNTIME_CHECKS_OFF
  function ImTextStrFromUtf8 (line 2170) | int ImTextStrFromUtf8(ImWchar* buf, int buf_size, const char* in_text, c...
  function ImTextCountCharsFromUtf8 (line 2186) | int ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end)
  function ImTextCharToUtf8_inline (line 2199) | static inline int ImTextCharToUtf8_inline(char* buf, int buf_size, unsig...
  function ImTextCountUtf8BytesFromChar (line 2242) | int ImTextCountUtf8BytesFromChar(const char* in_text, const char* in_tex...
  function ImTextCountUtf8BytesFromChar (line 2248) | static inline int ImTextCountUtf8BytesFromChar(unsigned int c)
  function ImTextStrToUtf8 (line 2257) | int ImTextStrToUtf8(char* out_buf, int out_buf_size, const ImWchar* in_t...
  function ImTextCountUtf8BytesFromStr (line 2273) | int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* i...
  function IM_MSVC_RUNTIME_CHECKS_RESTORE (line 2298) | IM_MSVC_RUNTIME_CHECKS_RESTORE
  function ImVec4 (line 2314) | ImVec4 ImGui::ColorConvertU32ToFloat4(ImU32 in)
  function ImU32 (line 2324) | ImU32 ImGui::ColorConvertFloat4ToU32(const ImVec4& in)
  type StaticFunc (line 2416) | struct StaticFunc
    method PairComparerByID (line 2418) | PairComparerByID(const void* lhs, const void* rhs)
  function GetSkipItemForListClipping (line 2713) | static bool GetSkipItemForListClipping()
  function ImGuiListClipper_SortAndFuseRanges (line 2767) | static void ImGuiListClipper_SortAndFuseRanges(ImVector<ImGuiListClipper...
  function ImGuiListClipper_SeekCursorAndSetupPrevLine (line 2791) | static void ImGuiListClipper_SeekCursorAndSetupPrevLine(float pos_y, flo...
  function ImGuiListClipper_SeekCursorForItem (line 2816) | static void ImGuiListClipper_SeekCursorForItem(ImGuiListClipper* clipper...
  function ImGuiListClipper_StepInternal (line 2895) | static bool ImGuiListClipper_StepInternal(ImGuiListClipper* clipper)
  function ImGuiStyle (line 3047) | ImGuiStyle& ImGui::GetStyle()
  function ImU32 (line 3053) | ImU32 ImGui::GetColorU32(ImGuiCol idx, float alpha_mul)
  function ImU32 (line 3061) | ImU32 ImGui::GetColorU32(const ImVec4& col)
  function ImVec4 (line 3069) | const ImVec4& ImGui::GetStyleColorVec4(ImGuiCol idx)
  function ImU32 (line 3075) | ImU32 ImGui::GetColorU32(ImU32 col)
  function ImGuiDataVarInfo (line 3156) | const ImGuiDataVarInfo* ImGui::GetStyleVarInfo(ImGuiStyleVar idx)
  function ImGuiContext (line 3535) | ImGuiContext* ImGui::GetCurrentContext()
  function ImGuiContext (line 3564) | ImGuiContext* ImGui::CreateContext(ImFontAtlas* shared_font_atlas)
  function ImGuiID (line 3718) | ImGuiID ImGui::AddContextHook(ImGuiContext* ctx, const ImGuiContextHook*...
  function ImGuiID (line 3785) | ImGuiID ImGuiWindow::GetID(const char* str, const char* str_end)
  function ImGuiID (line 3795) | ImGuiID ImGuiWindow::GetID(const void* ptr)
  function ImGuiID (line 3805) | ImGuiID ImGuiWindow::GetID(int n)
  function ImGuiID (line 3816) | ImGuiID ImGuiWindow::GetIDFromRectangle(const ImRect& r_abs)
  function SetCurrentWindow (line 3824) | static void SetCurrentWindow(ImGuiWindow* window)
  function ImGuiID (line 3943) | ImGuiID ImGui::GetHoveredID()
  function CalcDelayFromHoveredFlags (line 4006) | static inline float CalcDelayFromHoveredFlags(ImGuiHoveredFlags flags)
  function ImGuiHoveredFlags (line 4016) | static ImGuiHoveredFlags ApplyHoverFlagsForTooltip(ImGuiHoveredFlags use...
  function ImGuiIO (line 4303) | ImGuiIO& ImGui::GetIO()
  function ImDrawData (line 4310) | ImDrawData* ImGui::GetDrawData()
  function ImDrawList (line 4327) | static ImDrawList* GetViewportBgFgDrawList(ImGuiViewportP* viewport, siz...
  function ImDrawList (line 4351) | ImDrawList* ImGui::GetBackgroundDrawList(ImGuiViewport* viewport)
  function ImDrawList (line 4356) | ImDrawList* ImGui::GetBackgroundDrawList()
  function ImDrawList (line 4362) | ImDrawList* ImGui::GetForegroundDrawList(ImGuiViewport* viewport)
  function ImDrawList (line 4367) | ImDrawList* ImGui::GetForegroundDrawList()
  function ImDrawListSharedData (line 4373) | ImDrawListSharedData* ImGui::GetDrawListSharedData()
  function IsWindowActiveAndVisible (line 4491) | static bool IsWindowActiveAndVisible(ImGuiWindow* window)
  function AddWindowToSortBuffer (line 4858) | static void AddWindowToSortBuffer(ImVector<ImGuiWindow*>* out_sorted_win...
  function AddWindowToDrawData (line 4874) | static void AddWindowToDrawData(ImGuiWindow* window, int layer)
  function GetWindowDisplayLayer (line 4887) | static inline int GetWindowDisplayLayer(ImGuiWindow* window)
  function AddRootWindowToDrawData (line 4893) | static inline void AddRootWindowToDrawData(ImGuiWindow* window)
  function FlattenDrawDataIntoSingleLayer (line 4898) | static void FlattenDrawDataIntoSingleLayer(ImDrawDataBuilder* builder)
  function InitViewportDrawData (line 4916) | static void InitViewportDrawData(ImGuiViewportP* viewport)
  function ImGuiWindow (line 4982) | ImGuiWindow* ImGui::FindBottomMostVisibleWindowWithinBeginStack(ImGuiWin...
  function ImVec2 (line 5204) | ImVec2 ImGui::CalcTextSize(const char* text, const char* text_end, bool ...
  function FindHoveredWindow (line 5234) | static void FindHoveredWindow()
  function ImGuiID (line 5407) | ImGuiID ImGui::GetItemID()
  function ImVec2 (line 5413) | ImVec2 ImGui::GetItemRectMin()
  function ImVec2 (line 5419) | ImVec2 ImGui::GetItemRectMax()
  function ImVec2 (line 5425) | ImVec2 ImGui::GetItemRectSize()
  function SetWindowConditionAllowFlags (line 5592) | static void SetWindowConditionAllowFlags(ImGuiWindow* window, ImGuiCond ...
  function ImGuiWindow (line 5599) | ImGuiWindow* ImGui::FindWindowByID(ImGuiID id)
  function ImGuiWindow (line 5605) | ImGuiWindow* ImGui::FindWindowByName(const char* name)
  function ApplyWindowSettings (line 5611) | static void ApplyWindowSettings(ImGuiWindow* window, ImGuiWindowSettings...
  function UpdateWindowInFocusOrderList (line 5619) | static void UpdateWindowInFocusOrderList(ImGuiWindow* window, bool just_...
  function InitOrLoadWindowSettings (line 5642) | static void InitOrLoadWindowSettings(ImGuiWindow* window, ImGuiWindowSet...
  function ImGuiWindow (line 5673) | static ImGuiWindow* CreateNewWindow(const char* name, ImGuiWindowFlags f...
  function ImVec2 (line 5697) | static inline ImVec2 CalcWindowMinSize(ImGuiWindow* window)
  function ImVec2 (line 5718) | static ImVec2 CalcWindowSizeAfterConstraint(ImGuiWindow* window, const I...
  function CalcWindowContentSizes (line 5747) | static void CalcWindowContentSizes(ImGuiWindow* window, ImVec2* content_...
  function ImVec2 (line 5767) | static ImVec2 CalcWindowAutoFitSize(ImGuiWindow* window, const ImVec2& s...
  function ImVec2 (line 5800) | ImVec2 ImGui::CalcWindowNextAutoFitSize(ImGuiWindow* window)
  function ImGuiCol (line 5810) | static ImGuiCol GetWindowBgColorIdx(ImGuiWindow* window)
  function CalcResizePosSizeFromAnyCorner (line 5819) | static void CalcResizePosSizeFromAnyCorner(ImGuiWindow* window, const Im...
  type ImGuiResizeGripDef (line 5834) | struct ImGuiResizeGripDef
  type ImGuiResizeBorderDef (line 5849) | struct ImGuiResizeBorderDef
  function ImRect (line 5863) | static ImRect GetResizeBorderRect(ImGuiWindow* window, int border_n, flo...
  function ImGuiID (line 5877) | ImGuiID ImGui::GetWindowResizeCornerID(ImGuiWindow* window, int n)
  function ImGuiID (line 5887) | ImGuiID ImGui::GetWindowResizeBorderID(ImGuiWindow* window, ImGuiDir dir)
  function ClampWindowPos (line 6105) | static inline void ClampWindowPos(ImGuiWindow* window, const ImRect& vis...
  function ImGuiWindow (line 6347) | ImGuiWindow* ImGui::FindBlockingModal(ImGuiWindow* window)
  function ImGuiWindow (line 7409) | static ImGuiWindow* GetCombinedRootWindow(ImGuiWindow* window, bool popu...
  function ImVec2 (line 7562) | ImVec2 ImGui::GetWindowPos()
  function ImVec2 (line 7604) | ImVec2 ImGui::GetWindowSize()
  function ImDrawList (line 7785) | ImDrawList* ImGui::GetWindowDrawList()
  function ImFont (line 7791) | ImFont* ImGui::GetFont()
  function ImVec2 (line 7801) | ImVec2 ImGui::GetFontTexUvWhitePixel()
  function ImGuiStorage (line 7915) | ImGuiStorage* ImGui::GetStateStorage()
  function ImGuiID (line 7966) | ImGuiID ImGui::GetIDWithSeed(const char* str, const char* str_end, ImGui...
  function ImGuiID (line 7975) | ImGuiID ImGui::GetIDWithSeed(int n, ImGuiID seed)
  function ImGuiID (line 7991) | ImGuiID ImGui::GetID(const char* str_id)
  function ImGuiID (line 7997) | ImGuiID ImGui::GetID(const char* str_id_begin, const char* str_id_end)
  function ImGuiID (line 8003) | ImGuiID ImGui::GetID(const void* ptr_id)
  function ImGuiKeyData (line 8086) | ImGuiKeyData* ImGui::GetKeyData(ImGuiContext* ctx, ImGuiKey key)
  function ImGuiKey (line 8105) | ImGuiKey ImGui::GetKeyIndex(ImGuiKey key)
  function ImVec2 (line 8221) | ImVec2 ImGui::GetKeyMagnitude2d(ImGuiKey key_left, ImGuiKey key_right, I...
  function ImGuiID (line 8268) | static inline ImGuiID GetRoutingIdFromOwnerId(ImGuiID owner_id)
  function ImGuiKeyRoutingData (line 8274) | ImGuiKeyRoutingData* ImGui::GetShortcutRoutingData(ImGuiKeyChord key_chord)
  function CalcRoutingScore (line 8320) | static int CalcRoutingScore(ImGuiWindow* location, ImGuiID owner_id, ImG...
  function ImVec2 (line 8584) | ImVec2 ImGui::GetMousePos()
  function ImVec2 (line 8602) | ImVec2 ImGui::GetMousePosOnOpeningCurrentPopup()
  function ImVec2 (line 8634) | ImVec2 ImGui::GetMouseDragDelta(ImGuiMouseButton button, float lock_thre...
  function ImGuiMouseCursor (line 8659) | ImGuiMouseCursor ImGui::GetMouseCursor()
  function UpdateAliasKey (line 8671) | static void UpdateAliasKey(ImGuiKey key, bool v, float analog_value)
  function ImGuiKeyChord (line 8680) | static ImGuiKeyChord GetMergedModsFromKeys()
  function LockWheelingWindow (line 8882) | static void LockWheelingWindow(ImGuiWindow* window, float wheel_amount)
  function ImGuiWindow (line 8901) | static ImGuiWindow* FindBestWheelingWindow(const ImVec2& wheel)
  function DebugPrintInputEvent (line 9054) | static void DebugPrintInputEvent(const char* prefix, const ImGuiInputEve...
  function ImGuiID (line 9193) | ImGuiID ImGui::GetKeyOwner(ImGuiKey key)
  function ImVec2 (line 9793) | ImVec2 ImGui::GetCursorScreenPos()
  function ImVec2 (line 9809) | ImVec2 ImGui::GetCursorPos()
  function ImVec2 (line 9851) | ImVec2 ImGui::GetCursorStartPos()
  function ImVec2 (line 9937) | ImVec2 ImGui::CalcItemSize(ImVec2 size, float default_w, float default_h)
  function ImVec2 (line 9986) | ImVec2 ImGui::GetContentRegionMax()
  function ImVec2 (line 9995) | ImVec2 ImGui::GetContentRegionMaxAbs()
  function ImVec2 (line 10003) | ImVec2 ImGui::GetContentRegionAvail()
  function ImVec2 (line 10010) | ImVec2 ImGui::GetWindowContentRegionMin()
  function ImVec2 (line 10016) | ImVec2 ImGui::GetWindowContentRegionMax()
  function CalcScrollEdgeSnap (line 10129) | static float CalcScrollEdgeSnap(float target, float snap_min, float snap...
  function ImVec2 (line 10138) | static ImVec2 CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window)
  function ImVec2 (line 10176) | ImVec2 ImGui::ScrollToRectEx(ImGuiWindow* window, const ImRect& item_rec...
  function ImGuiWindow (line 10503) | ImGuiWindow* ImGui::GetTopMostPopupModal()
  function ImGuiWindow (line 10514) | ImGuiWindow* ImGui::GetTopMostAndVisiblePopupModal()
  function ImVec2 (line 10873) | ImVec2 ImGui::FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const I...
  function ImRect (line 10948) | ImRect ImGui::GetPopupAllowedExtentRect(ImGuiWindow* window)
  function ImVec2 (line 10958) | ImVec2 ImGui::FindBestWindowPosForPopup(ImGuiWindow* window)
  function ImGuiDir (line 11073) | static ImGuiDir ImGetDirQuadrantFromDelta(float dx, float dy)
  function NavScoreItemDistInterval (line 11080) | static float inline NavScoreItemDistInterval(float cand_min, float cand_...
  function ImGuiWindow (line 11487) | static ImGuiWindow* ImGui::NavRestoreLastChildNavWindow(ImGuiWindow* win...
  function ImVec2 (line 11564) | static ImVec2 ImGui::NavCalcPreferredRefPos()
  function NavBiasScoringRect (line 11800) | static void NavBiasScoringRect(ImRect& r, ImVec2& preferred_pos_rel, ImG...
  function ImGuiWindow (line 12283) | static ImGuiWindow* FindWindowNavFocusable(int i_start, int i_stop, int ...
  function NavUpdateWindowingHighlightWindow (line 12292) | static void NavUpdateWindowingHighlightWindow(int focus_change_dir)
  function ImGuiPayload (line 12819) | const ImGuiPayload* ImGui::AcceptDragDropPayload(const char* type, ImGui...
  function ImGuiPayload (line 12872) | const ImGuiPayload* ImGui::GetDragDropPayload()
  function LogTextV (line 12898) | static inline void LogTextV(ImGuiContext& g, const char* fmt, va_list args)
  function ImGuiSettingsHandler (line 13213) | ImGuiSettingsHandler* ImGui::FindSettingsHandler(const char* type_name)
  function ImGuiWindowSettings (line 13346) | ImGuiWindowSettings* ImGui::CreateNewWindowSettings(const char* name)
  function ImGuiWindowSettings (line 13371) | ImGuiWindowSettings* ImGui::FindWindowSettingsByID(ImGuiID id)
  function ImGuiWindowSettings (line 13381) | ImGuiWindowSettings* ImGui::FindWindowSettingsByWindow(ImGuiWindow* window)
  function WindowSettingsHandler_ClearAll (line 13403) | static void WindowSettingsHandler_ClearAll(ImGuiContext* ctx, ImGuiSetti...
  function WindowSettingsHandler_ReadLine (line 13424) | static void WindowSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsH...
  function WindowSettingsHandler_ApplyAll (line 13436) | static void WindowSettingsHandler_ApplyAll(ImGuiContext* ctx, ImGuiSetti...
  function WindowSettingsHandler_WriteAll (line 13448) | static void WindowSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSetti...
  function ImGuiViewport (line 13518) | ImGuiViewport* ImGui::GetMainViewport()
  function SetClipboardTextFn_DefaultImpl (line 13595) | static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
  function SetClipboardTextFn_DefaultImpl (line 13622) | static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
  function SetClipboardTextFn_DefaultImpl (line 13677) | static void SetClipboardTextFn_DefaultImpl(void* user_data_ctx, const ch...
  function SetPlatformImeDataFn_DefaultImpl (line 13697) | static void SetPlatformImeDataFn_DefaultImpl(ImGuiViewport* viewport, Im...
  function SetPlatformImeDataFn_DefaultImpl (line 13723) | static void SetPlatformImeDataFn_DefaultImpl(ImGuiViewport*, ImGuiPlatfo...
  function RenderViewportsThumbnails (line 13781) | static void RenderViewportsThumbnails()
  type KeyLayoutData (line 13817) | struct KeyLayoutData { int Row, Col; const char* Label; ImGuiKey Key; }
  function MetricsHelpMarker (line 13887) | static void MetricsHelpMarker(const char* desc)
  type Funcs (line 13955) | struct Funcs
    method ImRect (line 13957) | static ImRect GetTableRect(ImGuiTable* table, int rect_type, int n)
    method ImRect (line 13977) | static ImRect GetWindowRect(ImGuiWindow* window, int rect_type)
  type Func (line 14106) | struct Func { static int IMGUI_CDECL WindowComparerByBeginOrder(const vo...
    method WindowComparerByBeginOrder (line 14106) | WindowComparerByBeginOrder(const void* lhs, const void* rhs) { return ...
  type funcs (line 14278) | struct funcs { static bool IsLegacyNativeDupe(ImGuiKey) { return false; } }
    method IsLegacyNativeDupe (line 14278) | static bool IsLegacyNativeDupe(ImGuiKey) { return false; }
    method IsLegacyNativeDupe (line 14280) | static bool IsLegacyNativeDupe(ImGuiKey key) { return key < 512 && Get...
  type funcs (line 14280) | struct funcs { static bool IsLegacyNativeDupe(ImGuiKey key) { return key...
    method IsLegacyNativeDupe (line 14278) | static bool IsLegacyNativeDupe(ImGuiKey) { return false; }
    method IsLegacyNativeDupe (line 14280) | static bool IsLegacyNativeDupe(ImGuiKey key) { return key < 512 && Get...
  function StackToolFormatLevelInfo (line 15144) | static int StackToolFormatLevelInfo(ImGuiIDStackTool* tool, int n, bool ...

FILE: third-party/imgui/imgui.h
  type ImDrawChannel (line 136) | struct ImDrawChannel
  type ImDrawCmd (line 137) | struct ImDrawCmd
  type ImDrawData (line 138) | struct ImDrawData
  type ImDrawList (line 139) | struct ImDrawList
  type ImDrawListSharedData (line 140) | struct ImDrawListSharedData
  type ImDrawListSplitter (line 141) | struct ImDrawListSplitter
  type ImDrawVert (line 142) | struct ImDrawVert
  type ImFont (line 143) | struct ImFont
  type ImFontAtlas (line 144) | struct ImFontAtlas
  type ImFontBuilderIO (line 145) | struct ImFontBuilderIO
  type ImFontConfig (line 146) | struct ImFontConfig
  type ImFontGlyph (line 147) | struct ImFontGlyph
  type ImFontGlyphRangesBuilder (line 148) | struct ImFontGlyphRangesBuilder
  type ImColor (line 149) | struct ImColor
  type ImGuiContext (line 150) | struct ImGuiContext
  type ImGuiIO (line 151) | struct ImGuiIO
  type ImGuiInputTextCallbackData (line 152) | struct ImGuiInputTextCallbackData
  type ImGuiKeyData (line 153) | struct ImGuiKeyData
  type ImGuiListClipper (line 154) | struct ImGuiListClipper
  type ImGuiOnceUponAFrame (line 155) | struct ImGuiOnceUponAFrame
  type ImGuiPayload (line 156) | struct ImGuiPayload
  type ImGuiPlatformImeData (line 157) | struct ImGuiPlatformImeData
  type ImGuiSizeCallbackData (line 158) | struct ImGuiSizeCallbackData
  type ImGuiStorage (line 159) | struct ImGuiStorage
  type ImGuiStyle (line 160) | struct ImGuiStyle
  type ImGuiTableSortSpecs (line 161) | struct ImGuiTableSortSpecs
  type ImGuiTableColumnSortSpecs (line 162) | struct ImGuiTableColumnSortSpecs
  type ImGuiTextBuffer (line 163) | struct ImGuiTextBuffer
  type ImGuiTextFilter (line 164) | struct ImGuiTextFilter
  type ImGuiViewport (line 165) | struct ImGuiViewport
  type ImGuiKey (line 172) | enum ImGuiKey : int
  type ImGuiMouseSource (line 173) | enum ImGuiMouseSource : int
  type ImGuiCol (line 174) | typedef int ImGuiCol;
  type ImGuiCond (line 175) | typedef int ImGuiCond;
  type ImGuiDataType (line 176) | typedef int ImGuiDataType;
  type ImGuiDir (line 177) | typedef int ImGuiDir;
  type ImGuiMouseButton (line 178) | typedef int ImGuiMouseButton;
  type ImGuiMouseCursor (line 179) | typedef int ImGuiMouseCursor;
  type ImGuiSortDirection (line 180) | typedef int ImGuiSortDirection;
  type ImGuiStyleVar (line 181) | typedef int ImGuiStyleVar;
  type ImGuiTableBgTarget (line 182) | typedef int ImGuiTableBgTarget;
  type ImDrawFlags (line 188) | typedef int ImDrawFlags;
  type ImDrawListFlags (line 189) | typedef int ImDrawListFlags;
  type ImFontAtlasFlags (line 190) | typedef int ImFontAtlasFlags;
  type ImGuiBackendFlags (line 191) | typedef int ImGuiBackendFlags;
  type ImGuiButtonFlags (line 192) | typedef int ImGuiButtonFlags;
  type ImGuiChildFlags (line 193) | typedef int ImGuiChildFlags;
  type ImGuiColorEditFlags (line 194) | typedef int ImGuiColorEditFlags;
  type ImGuiConfigFlags (line 195) | typedef int ImGuiConfigFlags;
  type ImGuiComboFlags (line 196) | typedef int ImGuiComboFlags;
  type ImGuiDragDropFlags (line 197) | typedef int ImGuiDragDropFlags;
  type ImGuiFocusedFlags (line 198) | typedef int ImGuiFocusedFlags;
  type ImGuiHoveredFlags (line 199) | typedef int ImGuiHoveredFlags;
  type ImGuiInputTextFlags (line 200) | typedef int ImGuiInputTextFlags;
  type ImGuiKeyChord (line 201) | typedef int ImGuiKeyChord;
  type ImGuiPopupFlags (line 202) | typedef int ImGuiPopupFlags;
  type ImGuiSelectableFlags (line 203) | typedef int ImGuiSelectableFlags;
  type ImGuiSliderFlags (line 204) | typedef int ImGuiSliderFlags;
  type ImGuiTabBarFlags (line 205) | typedef int ImGuiTabBarFlags;
  type ImGuiTabItemFlags (line 206) | typedef int ImGuiTabItemFlags;
  type ImGuiTableFlags (line 207) | typedef int ImGuiTableFlags;
  type ImGuiTableColumnFlags (line 208) | typedef int ImGuiTableColumnFlags;
  type ImGuiTableRowFlags (line 209) | typedef int ImGuiTableRowFlags;
  type ImGuiTreeNodeFlags (line 210) | typedef int ImGuiTreeNodeFlags;
  type ImGuiViewportFlags (line 211) | typedef int ImGuiViewportFlags;
  type ImGuiWindowFlags (line 212) | typedef int ImGuiWindowFlags;
  type ImDrawIdx (line 225) | typedef unsigned short ImDrawIdx;
  type ImGuiID (line 229) | typedef unsigned int        ImGuiID;
  type ImS8 (line 230) | typedef signed char         ImS8;
  type ImU8 (line 231) | typedef unsigned char       ImU8;
  type ImS16 (line 232) | typedef signed short        ImS16;
  type ImU16 (line 233) | typedef unsigned short      ImU16;
  type ImS32 (line 234) | typedef signed int          ImS32;
  type ImU32 (line 235) | typedef unsigned int        ImU32;
  type ImS64 (line 236) | typedef signed   long long  ImS64;
  type ImU64 (line 237) | typedef unsigned long long  ImU64;
  type ImWchar32 (line 241) | typedef unsigned int ImWchar32;
  type ImWchar16 (line 242) | typedef unsigned short ImWchar16;
  type ImWchar32 (line 244) | typedef ImWchar32 ImWchar;
  type ImWchar16 (line 246) | typedef ImWchar16 ImWchar;
  type ImVec4 (line 271) | struct ImVec4
  type ImGuiChildFlags_ (line 1034) | enum ImGuiChildFlags_
  type ImGuiInputTextFlags_ (line 1049) | enum ImGuiInputTextFlags_
  type ImGuiTreeNodeFlags_ (line 1079) | enum ImGuiTreeNodeFlags_
  type ImGuiPopupFlags_ (line 1113) | enum ImGuiPopupFlags_
  type ImGuiSelectableFlags_ (line 1129) | enum ImGuiSelectableFlags_
  type ImGuiComboFlags_ (line 1144) | enum ImGuiComboFlags_
  type ImGuiTabBarFlags_ (line 1159) | enum ImGuiTabBarFlags_
  type ImGuiTabItemFlags_ (line 1175) | enum ImGuiTabItemFlags_
  type ImGuiTableFlags_ (line 1210) | enum ImGuiTableFlags_
  type ImGuiTableColumnFlags_ (line 1263) | enum ImGuiTableColumnFlags_
  type ImGuiTableRowFlags_ (line 1301) | enum ImGuiTableRowFlags_
  type ImGuiTableBgTarget_ (line 1316) | enum ImGuiTableBgTarget_
  type ImGuiFocusedFlags_ (line 1325) | enum ImGuiFocusedFlags_
  type ImGuiHoveredFlags_ (line 1339) | enum ImGuiHoveredFlags_
  type ImGuiDragDropFlags_ (line 1377) | enum ImGuiDragDropFlags_
  type ImGuiDataType_ (line 1399) | enum ImGuiDataType_
  type ImGuiDir_ (line 1415) | enum ImGuiDir_
  type ImGuiSortDirection_ (line 1426) | enum ImGuiSortDirection_
  type ImGuiKey (line 1443) | enum ImGuiKey : int
  type ImGuiNavInput (line 1576) | enum ImGuiNavInput
  type ImGuiConfigFlags_ (line 1585) | enum ImGuiConfigFlags_
  type ImGuiBackendFlags_ (line 1601) | enum ImGuiBackendFlags_
  type ImGuiCol_ (line 1611) | enum ImGuiCol_
  type ImGuiStyleVar_ (line 1676) | enum ImGuiStyleVar_
  type ImGuiButtonFlags_ (line 1712) | enum ImGuiButtonFlags_
  type ImGuiColorEditFlags_ (line 1725) | enum ImGuiColorEditFlags_
  type ImGuiSliderFlags_ (line 1771) | enum ImGuiSliderFlags_
  type ImGuiMouseButton_ (line 1786) | enum ImGuiMouseButton_
  type ImGuiMouseCursor_ (line 1796) | enum ImGuiMouseCursor_
  type ImGuiMouseSource (line 1815) | enum ImGuiMouseSource : int
  type ImGuiCond_ (line 1826) | enum ImGuiCond_
  type ImNewWrapper (line 1845) | struct ImNewWrapper {}
  function delete (line 1847) | inline void  operator delete(void*, ImNewWrapper, void*)   {}
  function IM_MSVC_RUNTIME_CHECKS_OFF (line 1865) | IM_MSVC_RUNTIME_CHECKS_OFF
  function clear (line 1884) | inline void         clear()                             { if (Data) { Si...
  function clear_delete (line 1885) | inline void         clear_delete()                      { for (int n = 0...
  function clear_destruct (line 1886) | inline void         clear_destruct()                    { for (int n = 0...
  function size_in_bytes (line 1890) | inline int          size_in_bytes() const               { return Size * ...
  function T (line 1893) | inline T&           operator[](int i)                   { IM_ASSERT(i >=...
  function T (line 1894) | inline const T&     operator[](int i) const             { IM_ASSERT(i >=...
  function T (line 1896) | inline T*           begin()                             { return Data; }
  function T (line 1897) | inline const T*     begin() const                       { return Data; }
  function T (line 1898) | inline T*           end()                               { return Data + ...
  function T (line 1899) | inline const T*     end() const                         { return Data + ...
  function T (line 1900) | inline T&           front()                             { IM_ASSERT(Size...
  function T (line 1901) | inline const T&     front() const                       { IM_ASSERT(Size...
  function T (line 1903) | inline const T&     back() const                        { IM_ASSERT(Size...
  function _grow_capacity (line 1906) | inline int          _grow_capacity(int sz) const        { int new_capaci...
  function resize (line 1907) | inline void         resize(int new_size)                { if (new_size >...
  function resize (line 1908) | inline void         resize(int new_size, const T& v)    { if (new_size >...
  function shrink (line 1909) | inline void         shrink(int new_size)                { IM_ASSERT(new_...
  function reserve (line 1910) | inline void         reserve(int new_capacity)           { if (new_capaci...
  function reserve_discard (line 1911) | inline void         reserve_discard(int new_capacity)   { if (new_capaci...
  function push_back (line 1914) | inline void         push_back(const T& v)               { if (Size == Ca...
  function pop_back (line 1915) | inline void         pop_back()                          { IM_ASSERT(Size...
  function push_front (line 1916) | inline void         push_front(const T& v)              { if (Size == 0)...
  function T (line 1917) | inline T*           erase(const T* it)                  { IM_ASSERT(it >...
  function T (line 1918) | inline T*           erase(const T* it, const T* it_last){ IM_ASSERT(it >...
  function T (line 1919) | inline T*           erase_unsorted(const T* it)         { IM_ASSERT(it >...
  function T (line 1920) | inline T*           insert(const T* it, const T& v)     { IM_ASSERT(it >...
  function contains (line 1921) | inline bool         contains(const T& v) const          { const T* data ...
  function T (line 1922) | inline T*           find(const T& v)                    { T* data = Data...
  function T (line 1923) | inline const T*     find(const T& v) const              { const T* data ...
  function find_index (line 1924) | inline int          find_index(const T& v) const        { const T* data_...
  function find_erase (line 1925) | inline bool         find_erase(const T& v)              { const T* it = ...
  function find_erase_unsorted (line 1926) | inline bool         find_erase_unsorted(const T& v)     { const T* it = ...
  function index_from_ptr (line 1927) | inline int          index_from_ptr(const T* it) const   { IM_ASSERT(it >...
  function IM_MSVC_RUNTIME_CHECKS_RESTORE (line 1929) | IM_MSVC_RUNTIME_CHECKS_RESTORE
  type ImGuiKeyData (line 2009) | struct ImGuiKeyData
  type ImGuiIO (line 2017) | struct ImGuiIO
  function ClearSelection (line 2220) | struct ImGuiInputTextCallbackData
  type ImGuiSizeCallbackData (line 2252) | struct ImGuiSizeCallbackData
  function Clear (line 2261) | struct ImGuiPayload
  function IsDataType (line 2277) | bool IsDataType(const char* type) const { return DataFrameCount != -1 &&...
  type ImGuiTableColumnSortSpecs (line 2283) | struct ImGuiTableColumnSortSpecs
  type ImGuiTableSortSpecs (line 2297) | struct ImGuiTableSortSpecs
  type ImGuiOnceUponAFrame (line 2320) | struct ImGuiOnceUponAFrame
  function IsActive (line 2328) | struct ImGuiTextFilter
  type ImGuiTextBuffer (line 2355) | struct ImGuiTextBuffer
  function clear (line 2366) | void                clear()                 { Buf.clear(); }
  function reserve (line 2367) | void                reserve(int capacity)   { Buf.reserve(capacity); }
  function ImGuiStoragePair (line 2382) | struct ImGuiStorage
  function Clear (line 2399) | void                Clear() { Data.clear(); }
  type ImGuiListClipper (line 2444) | struct ImGuiListClipper
  function IncludeRangeByIndices (line 2468) | inline void IncludeRangeByIndices(int item_begin, int item_end)      { I...
  function ForceDisplayRangeByIndices (line 2469) | inline void ForceDisplayRangeByIndices(int item_begin, int item_end) { I...
  function ImColor (line 2526) | struct ImColor
  function Value (line 2534) | constexpr ImColor(ImU32 rgba)                                   : Value(...
  function operator (line 2535) | inline operator ImU32() const                                   { return...
  function GetTexID (line 2575) | struct ImDrawCmd
  type ImDrawFlags_ (line 2642) | enum ImDrawFlags_
  type ImDrawListFlags_ (line 2662) | enum ImDrawListFlags_
  function ImDrawList (line 2680) | struct ImDrawList
  function ImVec2 (line 2710) | inline ImVec2   GetClipRectMin() const { const ImVec4& cr = _ClipRectSta...
  function PathClear (line 2751) | inline    void  PathClear()                                             ...
  function PathLineTo (line 2752) | inline    void  PathLineTo(const ImVec2& pos)                           ...
  function PathLineToMergeDuplicate (line 2753) | inline    void  PathLineToMergeDuplicate(const ImVec2& pos)             ...
  function PathFillConvex (line 2754) | inline    void  PathFillConvex(ImU32 col)                               ...
  function ChannelsSplit (line 2774) | inline void     ChannelsSplit(int count)    { _Splitter.Split(this, coun...
  function ChannelsMerge (line 2775) | inline void     ChannelsMerge()             { _Splitter.Merge(this); }
  function ChannelsSetCurrent (line 2776) | inline void     ChannelsSetCurrent(int n)   { _Splitter.SetCurrentChanne...
  function PrimWriteVtx (line 2786) | inline    void  PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 ...
  function PrimWriteIdx (line 2787) | inline    void  PrimWriteIdx(ImDrawIdx idx)                             ...
  function PrimVtx (line 2788) | inline    void  PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) ...
  type ImDrawData (line 2810) | struct ImDrawData
  type ImFontConfig (line 2834) | struct ImFontConfig
  type ImFontGlyph (line 2864) | struct ImFontGlyph
  function Clear (line 2876) | struct ImFontGlyphRangesBuilder
  function GetBit (line 2882) | inline bool     GetBit(size_t n) const  { int off = (int)(n >> 5); ImU32...
  function SetBit (line 2883) | inline void     SetBit(size_t n)        { int off = (int)(n >> 5); ImU32...
  function AddChar (line 2884) | inline void     AddChar(ImWchar c)      { SetBit(c); }
  type ImFontAtlasFlags_ (line 2904) | enum ImFontAtlasFlags_
  function SetTexID (line 2929) | struct ImFontAtlas
  function ImFontAtlasCustomRect (line 2986) | ImFontAtlasCustomRect*      GetCustomRectByIndex(int index) { IM_ASSERT(...
  type ImFont (line 3033) | struct ImFont
  type ImGuiViewportFlags_ (line 3091) | enum ImGuiViewportFlags_
  function GetCenter (line 3106) | struct ImGuiViewport
  function namespace (line 3154) | namespace ImGui
  function EndChildFrame (line 3158) | static inline void  EndChildFrame()                                     ...
  function PushAllowKeyboardFocus (line 3167) | static inline void  PushAllowKeyboardFocus(bool tab_stop)               ...
  function PopAllowKeyboardFocus (line 3168) | static inline void  PopAllowKeyboardFocus()                             ...
  type ImGuiKeyChord (line 3248) | typedef ImGuiKeyChord ImGuiModFlags;
  type ImGuiModFlags_ (line 3249) | enum ImGuiModFlags_ { ImGuiModFlags_None = 0, ImGuiModFlags_Ctrl = ImGui...

FILE: third-party/imgui/imgui_demo.cpp
  function HelpMarker (line 220) | static void HelpMarker(const char* desc)
  function ShowDemoWindowWidgets (line 574) | static void ShowDemoWindowWidgets()
  function ShowDemoWindowLayout (line 2707) | static void ShowDemoWindowLayout()
  function ShowDemoWindowPopups (line 3563) | static void ShowDemoWindowPopups()
  type MyItemColumnID (line 3868) | enum MyItemColumnID
  type MyItem (line 3877) | struct MyItem
    method SortWithSortSpecs (line 3892) | static void SortWithSortSpecs(ImGuiTableSortSpecs* sort_specs, MyItem*...
    method CompareWithSortSpecs (line 3901) | CompareWithSortSpecs(const void* lhs, const void* rhs)
  function PushStyleCompact (line 3934) | static void PushStyleCompact()
  function PopStyleCompact (line 3941) | static void PopStyleCompact()
  function EditTableSizingFlags (line 3947) | static void EditTableSizingFlags(ImGuiTableFlags* p_flags)
  function EditTableColumnsFlags (line 3988) | static void EditTableColumnsFlags(ImGuiTableColumnFlags* p_flags)
  function ShowTableColumnsStatusFlags (line 4013) | static void ShowTableColumnsStatusFlags(ImGuiTableColumnFlags flags)
  function ShowDemoWindowTables (line 4021) | static void ShowDemoWindowTables()
  function ShowExampleAppConsole (line 7257) | static void ShowExampleAppConsole(bool* p_open)
  function Draw (line 7271) | struct ExampleAppLog
  function ShowExampleAppLog (line 7395) | static void ShowExampleAppLog(bool* p_open)
  function ShowExampleAppLayout (line 7430) | static void ShowExampleAppLayout(bool* p_open)
  function ShowPlaceholderObject (line 7496) | static void ShowPlaceholderObject(const char* prefix, int uid)
  function ShowExampleAppPropertyEditor (line 7545) | static void ShowExampleAppPropertyEditor(bool* p_open)
  function ShowExampleAppLongText (line 7582) | static void ShowExampleAppLongText(bool* p_open)
  function ShowExampleAppAutoResize (line 7645) | static void ShowExampleAppAutoResize(bool* p_open)
  function ShowExampleAppConstrainedResize (line 7671) | static void ShowExampleAppConstrainedResize(bool* p_open)
  function ShowExampleAppSimpleOverlay (line 7770) | static void ShowExampleAppSimpleOverlay(bool* p_open)
  function ShowExampleAppFullscreen (line 7825) | static void ShowExampleAppFullscreen(bool* p_open)
  function ShowExampleAppWindowTitles (line 7863) | static void ShowExampleAppWindowTitles(bool*)
  function ShowExampleAppCustomRendering (line 7897) | static void ShowExampleAppCustomRendering(bool* p_open)
  type MyDocument (line 8178) | struct MyDocument
    method MyDocument (line 8187) | MyDocument(const char* name, bool open = true, const ImVec4& color = I...
    method DoOpen (line 8195) | void DoOpen()       { Open = true; }
    method DoQueueClose (line 8196) | void DoQueueClose() { WantClose = true; }
    method DoForceClose (line 8197) | void DoForceClose() { Open = false; Dirty = false; }
    method DoSave (line 8198) | void DoSave()       { Dirty = false; }
    method DisplayContents (line 8201) | static void DisplayContents(MyDocument* doc)
    method DisplayContextMenu (line 8218) | static void DisplayContextMenu(MyDocument* doc)
  type ExampleAppDocuments (line 8233) | struct ExampleAppDocuments
    method ExampleAppDocuments (line 8237) | ExampleAppDocuments()
  function NotifyOfDocumentsClosedElsewhere (line 8256) | static void NotifyOfDocumentsClosedElsewhere(ExampleAppDocuments& app)
  function ShowExampleAppDocuments (line 8266) | void ShowExampleAppDocuments(bool* p_open)

FILE: third-party/imgui/imgui_draw.cpp
  function ImDrawList (line 426) | ImDrawList* ImDrawList::CloneOutput() const
  function ImVec2 (line 1241) | ImVec2 ImBezierCubicCalc(const ImVec2& p1, const ImVec2& p2, const ImVec...
  function ImVec2 (line 1251) | ImVec2 ImBezierQuadraticCalc(const ImVec2& p1, const ImVec2& p2, const I...
  function PathBezierCubicCurveToCasteljau (line 1261) | static void PathBezierCubicCurveToCasteljau(ImVector<ImVec2>* path, floa...
  function PathBezierQuadraticCurveToCasteljau (line 1286) | static void PathBezierQuadraticCurveToCasteljau(ImVector<ImVec2>* path, ...
  function ImDrawFlags (line 1336) | static inline ImDrawFlags FixRectCornerFlags(ImDrawFlags flags)
  function ImFont (line 2169) | ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg)
  function Decode85Byte (line 2207) | static unsigned int Decode85Byte(char c)                                ...
  function Decode85 (line 2208) | static void         Decode85(const unsigned char* src, unsigned char* dst)
  function ImFont (line 2220) | ImFont* ImFontAtlas::AddFontDefault(const ImFontConfig* font_cfg_template)
  function ImFont (line 2241) | ImFont* ImFontAtlas::AddFontFromFileTTF(const char* filename, float size...
  function ImFont (line 2263) | ImFont* ImFontAtlas::AddFontFromMemoryTTF(void* font_data, int font_data...
  function ImFont (line 2277) | ImFont* ImFontAtlas::AddFontFromMemoryCompressedTTF(const void* compress...
  function ImFont (line 2289) | ImFont* ImFontAtlas::AddFontFromMemoryCompressedBase85TTF(const char* co...
  function ImFontAtlasBuildMultiplyCalcLookupTable (line 2387) | void    ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[...
  function ImFontAtlasBuildMultiplyRectAlpha8 (line 2396) | void    ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256...
  type ImFontBuildSrcData (line 2408) | struct ImFontBuildSrcData
  type ImFontBuildDstData (line 2423) | struct ImFontBuildDstData
  function UnpackBitVectorToFlatIndexList (line 2431) | static void UnpackBitVectorToFlatIndexList(const ImBitVector* in, ImVect...
  function ImFontAtlasBuildWithStbTruetype (line 2443) | static bool ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas)
  function ImFontBuilderIO (line 2706) | const ImFontBuilderIO* ImFontAtlasGetBuilderForStbTruetype()
  function ImFontAtlasUpdateConfigDataPointers (line 2715) | void ImFontAtlasUpdateConfigDataPointers(ImFontAtlas* atlas)
  function ImFontAtlasBuildSetupFont (line 2729) | void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontC...
  function ImFontAtlasBuildPackCustomRects (line 2742) | void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_con...
  function ImFontAtlasBuildRender8bppRectFromString (line 2772) | void ImFontAtlasBuildRender8bppRectFromString(ImFontAtlas* atlas, int x,...
  function ImFontAtlasBuildRender32bppRectFromString (line 2782) | void ImFontAtlasBuildRender32bppRectFromString(ImFontAtlas* atlas, int x...
  function ImFontAtlasBuildRenderDefaultTexData (line 2792) | static void ImFontAtlasBuildRenderDefaultTexData(ImFontAtlas* atlas)
  function ImFontAtlasBuildRenderLinesTexData (line 2832) | static void ImFontAtlasBuildRenderLinesTexData(ImFontAtlas* atlas)
  function ImFontAtlasBuildInit (line 2884) | void ImFontAtlasBuildInit(ImFontAtlas* atlas)
  function ImFontAtlasBuildFinish (line 2912) | void ImFontAtlasBuildFinish(ImFontAtlas* atlas)
  function ImWchar (line 2942) | const ImWchar*   ImFontAtlas::GetGlyphRangesDefault()
  function ImWchar (line 2952) | const ImWchar*   ImFontAtlas::GetGlyphRangesGreek()
  function ImWchar (line 2963) | const ImWchar*  ImFontAtlas::GetGlyphRangesKorean()
  function ImWchar (line 2976) | const ImWchar*  ImFontAtlas::GetGlyphRangesChineseFull()
  function UnpackAccumulativeOffsetsIntoRanges (line 2992) | static void UnpackAccumulativeOffsetsIntoRanges(int base_codepoint, cons...
  function ImWchar (line 3006) | const ImWchar*  ImFontAtlas::GetGlyphRangesChineseSimplifiedCommon()
  function ImWchar (line 3074) | const ImWchar*  ImFontAtlas::GetGlyphRangesJapanese()
  function ImWchar (line 3164) | const ImWchar*  ImFontAtlas::GetGlyphRangesCyrillic()
  function ImWchar (line 3177) | const ImWchar*  ImFontAtlas::GetGlyphRangesThai()
  function ImWchar (line 3189) | const ImWchar*  ImFontAtlas::GetGlyphRangesVietnamese()
  function ImWchar (line 3286) | static ImWchar FindFirstExistingGlyph(ImFont* font, const ImWchar* candi...
  function ImFontGlyph (line 3468) | const ImFontGlyph* ImFont::FindGlyph(ImWchar c) const
  function ImFontGlyph (line 3478) | const ImFontGlyph* ImFont::FindGlyphNoFallback(ImWchar c) const
  function ImVec2 (line 3599) | ImVec2 ImFont::CalcTextSizeA(float size, float max_width, float wrap_wid...
  function ImAcos01 (line 3958) | static inline float ImAcos01(float x)
  function stb_decompress_length (line 4093) | static unsigned int stb_decompress_length(const unsigned char *input)
  function stb__match (line 4101) | static void stb__match(const unsigned char *data, unsigned int length)
  function stb__lit (line 4110) | static void stb__lit(const unsigned char *data, unsigned int length)
  function stb_adler32 (line 4140) | static unsigned int stb_adler32(unsigned int adler32, unsigned char *buf...
  function stb_decompress (line 4171) | static unsigned int stb_decompress(unsigned char *output, const unsigned...

FILE: third-party/imgui/imgui_impl_sdl2.cpp
  type ImGui_ImplSDL2_Data (line 104) | struct ImGui_ImplSDL2_Data
    method ImGui_ImplSDL2_Data (line 117) | ImGui_ImplSDL2_Data()   { memset((void*)this, 0, sizeof(*this)); }
  function ImGui_ImplSDL2_Data (line 124) | static ImGui_ImplSDL2_Data* ImGui_ImplSDL2_GetBackendData()
    method ImGui_ImplSDL2_Data (line 117) | ImGui_ImplSDL2_Data()   { memset((void*)this, 0, sizeof(*this)); }
  function ImGui_ImplSDL2_SetClipboardText (line 139) | static void ImGui_ImplSDL2_SetClipboardText(void*, const char* text)
  function ImGui_ImplSDL2_SetPlatformImeData (line 145) | static void ImGui_ImplSDL2_SetPlatformImeData(ImGuiViewport*, ImGuiPlatf...
  function ImGuiKey (line 158) | static ImGuiKey ImGui_ImplSDL2_KeycodeToImGuiKey(int keycode)
  function ImGui_ImplSDL2_UpdateKeyModifiers (line 285) | static void ImGui_ImplSDL2_UpdateKeyModifiers(SDL_Keymod sdl_key_mods)
  function ImGui_ImplSDL2_ProcessEvent (line 299) | bool ImGui_ImplSDL2_ProcessEvent(const SDL_Event* event)
  function ImGui_ImplSDL2_Init (line 385) | static bool ImGui_ImplSDL2_Init(SDL_Window* window, SDL_Renderer* renderer)
  function ImGui_ImplSDL2_InitForOpenGL (line 467) | bool ImGui_ImplSDL2_InitForOpenGL(SDL_Window* window, void* sdl_gl_context)
  function ImGui_ImplSDL2_InitForVulkan (line 473) | bool ImGui_ImplSDL2_InitForVulkan(SDL_Window* window)
  function ImGui_ImplSDL2_InitForD3D (line 481) | bool ImGui_ImplSDL2_InitForD3D(SDL_Window* window)
  function ImGui_ImplSDL2_InitForMetal (line 489) | bool ImGui_ImplSDL2_InitForMetal(SDL_Window* window)
  function ImGui_ImplSDL2_InitForSDLRenderer (line 494) | bool ImGui_ImplSDL2_InitForSDLRenderer(SDL_Window* window, SDL_Renderer*...
  function ImGui_ImplSDL2_InitForOther (line 499) | bool ImGui_ImplSDL2_InitForOther(SDL_Window* window)
  function ImGui_ImplSDL2_Shutdown (line 504) | void ImGui_ImplSDL2_Shutdown()
  function ImGui_ImplSDL2_UpdateMouseData (line 522) | static void ImGui_ImplSDL2_UpdateMouseData()
  function ImGui_ImplSDL2_UpdateMouseCursor (line 553) | static void ImGui_ImplSDL2_UpdateMouseCursor()
  function ImGui_ImplSDL2_UpdateGamepads (line 579) | static void ImGui_ImplSDL2_UpdateGamepads()
  function ImGui_ImplSDL2_NewFrame (line 625) | void ImGui_ImplSDL2_NewFrame()

FILE: third-party/imgui/imgui_impl_sdl2.h
  type SDL_Window (line 25) | struct SDL_Window
  type SDL_Renderer (line 26) | struct SDL_Renderer
  type SDL_Event (line 27) | typedef union SDL_Event SDL_Event;
  function ImGui_ImplSDL2_NewFrame (line 40) | static inline void ImGui_ImplSDL2_NewFrame(SDL_Window*) { ImGui_ImplSDL2...

FILE: third-party/imgui/imgui_impl_sdlrenderer2.cpp
  type ImGui_ImplSDLRenderer2_Data (line 48) | struct ImGui_ImplSDLRenderer2_Data
    method ImGui_ImplSDLRenderer2_Data (line 52) | ImGui_ImplSDLRenderer2_Data() { memset((void*)this, 0, sizeof(*this)); }
  function ImGui_ImplSDLRenderer2_Data (line 57) | static ImGui_ImplSDLRenderer2_Data* ImGui_ImplSDLRenderer2_GetBackendData()
    method ImGui_ImplSDLRenderer2_Data (line 52) | ImGui_ImplSDLRenderer2_Data() { memset((void*)this, 0, sizeof(*this)); }
  function ImGui_ImplSDLRenderer2_Init (line 63) | bool ImGui_ImplSDLRenderer2_Init(SDL_Renderer* renderer)
  function ImGui_ImplSDLRenderer2_Shutdown (line 80) | void ImGui_ImplSDLRenderer2_Shutdown()
  function ImGui_ImplSDLRenderer2_SetupRenderState (line 94) | static void ImGui_ImplSDLRenderer2_SetupRenderState()
  function ImGui_ImplSDLRenderer2_NewFrame (line 104) | void ImGui_ImplSDLRenderer2_NewFrame()
  function ImGui_ImplSDLRenderer2_RenderDrawData (line 113) | void ImGui_ImplSDLRenderer2_RenderDrawData(ImDrawData* draw_data)
  function ImGui_ImplSDLRenderer2_CreateFontsTexture (line 210) | bool ImGui_ImplSDLRenderer2_CreateFontsTexture()
  function ImGui_ImplSDLRenderer2_DestroyFontsTexture (line 238) | void ImGui_ImplSDLRenderer2_DestroyFontsTexture()
  function ImGui_ImplSDLRenderer2_CreateDeviceObjects (line 250) | bool ImGui_ImplSDLRenderer2_CreateDeviceObjects()
  function ImGui_ImplSDLRenderer2_DestroyDeviceObjects (line 255) | void ImGui_ImplSDLRenderer2_DestroyDeviceObjects()

FILE: third-party/imgui/imgui_impl_sdlrenderer2.h
  type SDL_Renderer (line 26) | struct SDL_Renderer

FILE: third-party/imgui/imgui_internal.h
  type ImBitVector (line 118) | struct ImBitVector
  type ImRect (line 119) | struct ImRect
  type ImDrawDataBuilder (line 120) | struct ImDrawDataBuilder
  type ImDrawListSharedData (line 121) | struct ImDrawListSharedData
  type ImGuiColorMod (line 122) | struct ImGuiColorMod
  type ImGuiContext (line 123) | struct ImGuiContext
  type ImGuiContextHook (line 124) | struct ImGuiContextHook
  type ImGuiDataVarInfo (line 125) | struct ImGuiDataVarInfo
  type ImGuiDataTypeInfo (line 126) | struct ImGuiDataTypeInfo
  type ImGuiGroupData (line 127) | struct ImGuiGroupData
  type ImGuiInputTextState (line 128) | struct ImGuiInputTextState
  type ImGuiInputTextDeactivateData (line 129) | struct ImGuiInputTextDeactivateData
  type ImGuiLastItemData (line 130) | struct ImGuiLastItemData
  type ImGuiLocEntry (line 131) | struct ImGuiLocEntry
  type ImGuiMenuColumns (line 132) | struct ImGuiMenuColumns
  type ImGuiNavItemData (line 133) | struct ImGuiNavItemData
  type ImGuiNavTreeNodeData (line 134) | struct ImGuiNavTreeNodeData
  type ImGuiMetricsConfig (line 135) | struct ImGuiMetricsConfig
  type ImGuiNextWindowData (line 136) | struct ImGuiNextWindowData
  type ImGuiNextItemData (line 137) | struct ImGuiNextItemData
  type ImGuiOldColumnData (line 138) | struct ImGuiOldColumnData
  type ImGuiOldColumns (line 139) | struct ImGuiOldColumns
  type ImGuiPopupData (line 140) | struct ImGuiPopupData
  type ImGuiSettingsHandler (line 141) | struct ImGuiSettingsHandler
  type ImGuiStackSizes (line 142) | struct ImGuiStackSizes
  type ImGuiStyleMod (line 143) | struct ImGuiStyleMod
  type ImGuiTabBar (line 144) | struct ImGuiTabBar
  type ImGuiTabItem (line 145) | struct ImGuiTabItem
  type ImGuiTable (line 146) | struct ImGuiTable
  type ImGuiTableColumn (line 147) | struct ImGuiTableColumn
  type ImGuiTableInstanceData (line 148) | struct ImGuiTableInstanceData
  type ImGuiTableTempData (line 149) | struct ImGuiTableTempData
  type ImGuiTableSettings (line 150) | struct ImGuiTableSettings
  type ImGuiTableColumnsSettings (line 151) | struct ImGuiTableColumnsSettings
  type ImGuiTypingSelectState (line 152) | struct ImGuiTypingSelectState
  type ImGuiTypingSelectRequest (line 153) | struct ImGuiTypingSelectRequest
  type ImGuiWindow (line 154) | struct ImGuiWindow
  type ImGuiWindowTempData (line 155) | struct ImGuiWindowTempData
  type ImGuiWindowSettings (line 156) | struct ImGuiWindowSettings
  type ImGuiLocKey (line 160) | enum ImGuiLocKey : int
  type ImGuiLayoutType (line 161) | typedef int ImGuiLayoutType;
  type ImGuiActivateFlags (line 164) | typedef int ImGuiActivateFlags;
  type ImGuiDebugLogFlags (line 165) | typedef int ImGuiDebugLogFlags;
  type ImGuiFocusRequestFlags (line 166) | typedef int ImGuiFocusRequestFlags;
  type ImGuiInputFlags (line 167) | typedef int ImGuiInputFlags;
  type ImGuiItemFlags (line 168) | typedef int ImGuiItemFlags;
  type ImGuiItemStatusFlags (line 169) | typedef int ImGuiItemStatusFlags;
  type ImGuiOldColumnFlags (line 170) | typedef int ImGuiOldColumnFlags;
  type ImGuiNavHighlightFlags (line 171) | typedef int ImGuiNavHighlightFlags;
  type ImGuiNavMoveFlags (line 172) | typedef int ImGuiNavMoveFlags;
  type ImGuiNextItemDataFlags (line 173) | typedef int ImGuiNextItemDataFlags;
  type ImGuiNextWindowDataFlags (line 174) | typedef int ImGuiNextWindowDataFlags;
  type ImGuiScrollFlags (line 175) | typedef int ImGuiScrollFlags;
  type ImGuiSeparatorFlags (line 176) | typedef int ImGuiSeparatorFlags;
  type ImGuiTextFlags (line 177) | typedef int ImGuiTextFlags;
  type ImGuiTooltipFlags (line 178) | typedef int ImGuiTooltipFlags;
  type ImGuiTypingSelectFlags (line 179) | typedef int ImGuiTypingSelectFlags;
  function namespace (line 196) | namespace ImStb
  function ImQsort (line 353) | static inline void      ImQsort(void* base, size_t count, size_t size_of...
  function ImIsPowerOfTwo (line 360) | static inline bool      ImIsPowerOfTwo(int v)           { return v != 0 ...
  function ImIsPowerOfTwo (line 361) | static inline bool      ImIsPowerOfTwo(ImU64 v)         { return v != 0 ...
  function ImUpperPowerOfTwo (line 362) | static inline int       ImUpperPowerOfTwo(int v)        { v--; v |= v >>...
  function IM_MSVC_RUNTIME_CHECKS_OFF (line 377) | IM_MSVC_RUNTIME_CHECKS_OFF
  function ImCharIsBlankA (line 379) | static inline bool      ImCharIsBlankA(char c)          { return c == ' ...
  function ImCharIsBlankW (line 380) | static inline bool      ImCharIsBlankW(unsigned int c)  { return c == ' ...
  function ImFileHandle (line 409) | static inline ImFileHandle  ImFileOpen(const char*, const char*)        ...
  function ImFileClose (line 410) | static inline bool          ImFileClose(ImFileHandle)                   ...
  function ImU64 (line 411) | static inline ImU64         ImFileGetSize(ImFileHandle)                 ...
  function ImU64 (line 412) | static inline ImU64         ImFileRead(void*, ImU64, ImU64, ImFileHandle...
  function ImU64 (line 413) | static inline ImU64         ImFileWrite(const void*, ImU64, ImU64, ImFil...
  type FILE (line 416) | typedef FILE* ImFileHandle;
  function ImPow (line 440) | static inline float  ImPow(float x, float y)    { return powf(x, y); }
  function ImPow (line 441) | static inline double ImPow(double x, double y)  { return pow(x, y); }
  function ImLog (line 442) | static inline float  ImLog(float x)             { return logf(x); }
  function ImLog (line 443) | static inline double ImLog(double x)            { return log(x); }
  function ImAbs (line 444) | static inline int    ImAbs(int x)               { return x < 0 ? -x : x; }
  function ImAbs (line 445) | static inline float  ImAbs(float x)             { return fabsf(x); }
  function ImAbs (line 446) | static inline double ImAbs(double x)            { return fabs(x); }
  function ImSign (line 447) | static inline float  ImSign(float x)            { return (x < 0.0f) ? -1...
  function ImSign (line 448) | static inline double ImSign(double x)           { return (x < 0.0) ? -1....
  function ImRsqrt (line 450) | static inline float  ImRsqrt(float x)           { return _mm_cvtss_f32(_...
  function ImRsqrt (line 452) | static inline float  ImRsqrt(float x)           { return 1.0f / sqrtf(x); }
  function ImRsqrt (line 454) | static inline double ImRsqrt(double x)          { return 1.0 / sqrt(x); }
  function T (line 458) | inline T ImMin(T lhs, T rhs)                        { return lhs < rhs ?...
  function T (line 459) | inline T ImMax(T lhs, T rhs)                        { return lhs >= rhs ...
  function T (line 460) | inline T ImClamp(T v, T mn, T mx)                   { return (v < mn) ? ...
  function T (line 461) | inline T ImLerp(T a, T b, float t)                  { return (T)(a + (b ...
  function ImSwap (line 462) | inline void ImSwap(T& a, T& b)                      { T tmp = a; a = b; ...
  function T (line 463) | inline T ImAddClampOverflow(T a, T b, T mn, T mx)   { if (b < 0 && (a < ...
  function T (line 464) | inline T ImSubClampOverflow(T a, T b, T mn, T mx)   { if (b > 0 && (a < ...
  function ImVec2 (line 466) | static inline ImVec2 ImMin(const ImVec2& lhs, const ImVec2& rhs)        ...
  function ImVec2 (line 467) | static inline ImVec2 ImMax(const ImVec2& lhs, const ImVec2& rhs)        ...
  function ImVec2 (line 468) | static inline ImVec2 ImClamp(const ImVec2& v, const ImVec2& mn, ImVec2 m...
  function ImVec2 (line 469) | static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, float t)  ...
  function ImVec2 (line 470) | static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, const ImVe...
  function ImVec4 (line 471) | static inline ImVec4 ImLerp(const ImVec4& a, const ImVec4& b, float t)  ...
  function ImSaturate (line 472) | static inline float  ImSaturate(float f)                                ...
  function ImLengthSqr (line 473) | static inline float  ImLengthSqr(const ImVec2& lhs)                     ...
  function ImLengthSqr (line 474) | static inline float  ImLengthSqr(const ImVec4& lhs)                     ...
  function ImInvLength (line 475) | static inline float  ImInvLength(const ImVec2& lhs, float fail_value)   ...
  function ImTrunc (line 476) | static inline float  ImTrunc(float f)                                   ...
  function ImVec2 (line 477) | static inline ImVec2 ImTrunc(const ImVec2& v)                           ...
  function ImFloor (line 478) | static inline float  ImFloor(float f)                                   ...
  function ImVec2 (line 479) | static inline ImVec2 ImFloor(const ImVec2& v)                           ...
  function ImModPositive (line 480) | static inline int    ImModPositive(int a, int b)                        ...
  function ImDot (line 481) | static inline float  ImDot(const ImVec2& a, const ImVec2& b)            ...
  function ImVec2 (line 482) | static inline ImVec2 ImRotate(const ImVec2& v, float cos_a, float sin_a)...
  function ImLinearSweep (line 483) | static inline float  ImLinearSweep(float current, float target, float sp...
  function ImVec2 (line 484) | static inline ImVec2 ImMul(const ImVec2& lhs, const ImVec2& rhs)        ...
  function ImIsFloatAboveGuaranteedIntegerPrecision (line 485) | static inline bool   ImIsFloatAboveGuaranteedIntegerPrecision(float f)  ...
  function ImExponentialMovingAverage (line 486) | static inline float  ImExponentialMovingAverage(float avg, float sample,...
  function ImTriangleArea (line 498) | inline float         ImTriangleArea(const ImVec2& a, const ImVec2& b, co...
  function IM_MSVC_RUNTIME_CHECKS_OFF (line 502) | IM_MSVC_RUNTIME_CHECKS_OFF
  function Contains (line 540) | bool        Contains(const ImVec2& p) const     { return p.x     >= Min....
  function Contains (line 541) | bool        Contains(const ImRect& r) const     { return r.Min.x >= Min....
  function ContainsWithPad (line 542) | bool        ContainsWithPad(const ImVec2& p, const ImVec2& pad) const { ...
  function Overlaps (line 543) | bool        Overlaps(const ImRect& r) const     { return r.Min.y <  Max....
  function Add (line 544) | void        Add(const ImVec2& p)                { if (Min.x > p.x)     M...
  function Add (line 545) | void        Add(const ImRect& r)                { if (Min.x > r.Min.x) M...
  function Expand (line 546) | void        Expand(const float amount)          { Min.x -= amount;   Min...
  function Expand (line 547) | void        Expand(const ImVec2& amount)        { Min.x -= amount.x; Min...
  function Translate (line 548) | void        Translate(const ImVec2& d)          { Min.x += d.x; Min.y +=...
  function TranslateX (line 549) | void        TranslateX(float dx)                { Min.x += dx; Max.x += ...
  function TranslateY (line 550) | void        TranslateY(float dy)                { Min.y += dy; Max.y += ...
  function ClipWith (line 551) | void        ClipWith(const ImRect& r)           { Min = ImMax(Min, r.Min...
  function ClipWithFull (line 552) | void        ClipWithFull(const ImRect& r)       { Min = ImClamp(Min, r.M...
  function Floor (line 553) | void        Floor()                             { Min.x = IM_TRUNC(Min.x...
  function ImBitArrayGetStorageSizeInBytes (line 561) | inline size_t   ImBitArrayGetStorageSizeInBytes(int bitcount)   { return...
  function ImBitArrayClearAllBits (line 562) | inline void     ImBitArrayClearAllBits(ImU32* arr, int bitcount){ memset...
  function ImBitArrayTestBit (line 563) | inline bool     ImBitArrayTestBit(const ImU32* arr, int n)      { ImU32 ...
  function ImBitArrayClearBit (line 564) | inline void     ImBitArrayClearBit(ImU32* arr, int n)           { ImU32 ...
  function ImBitArraySetBit (line 565) | inline void     ImBitArraySetBit(ImU32* arr, int n)             { ImU32 ...
  function ImBitArraySetBitRange (line 566) | inline void     ImBitArraySetBitRange(ImU32* arr, int n, int n2) // Work...
  type ImU32 (line 579) | typedef ImU32* ImBitArrayPtr;
  function ClearAllBits (line 588) | void            ClearAllBits()              { memset(Storage, 0, sizeof(...
  function SetAllBits (line 589) | void            SetAllBits()                { memset(Storage, 255, sizeo...
  function TestBit (line 590) | bool            TestBit(int n) const        { n += OFFSET; IM_ASSERT(n >...
  function SetBit (line 591) | void            SetBit(int n)               { n += OFFSET; IM_ASSERT(n >...
  function ClearBit (line 592) | void            ClearBit(int n)             { n += OFFSET; IM_ASSERT(n >...
  function SetBitRange (line 593) | void            SetBitRange(int n, int n2)  { n += OFFSET; n2 += OFFSET;...
  function const (line 594) | bool            operator[](int n) const     { n += OFFSET; IM_ASSERT(n >...
  function ImBitVector (line 599) | struct IMGUI_API ImBitVector
  function IM_MSVC_RUNTIME_CHECKS_RESTORE (line 608) | IM_MSVC_RUNTIME_CHECKS_RESTORE
  function set (line 623) | inline void         set(T* data, int size)      { Data = data; DataEnd =...
  function set (line 624) | inline void         set(T* data, T* data_end)   { Data = data; DataEnd =...
  function T (line 627) | inline T&           operator[](int i)           { T* p = Data + i; IM_AS...
  function T (line 628) | inline const T&     operator[](int i) const     { const T* p = Data + i;...
  function T (line 630) | inline T*           begin()                     { return Data; }
  function T (line 631) | inline const T*     begin() const               { return Data; }
  function T (line 632) | inline T*           end()                       { return DataEnd; }
  function T (line 633) | inline const T*     end() const                 { return DataEnd; }
  function index_from_ptr (line 636) | inline int  index_from_ptr(const T* it) const   { IM_ASSERT(it >= Data &...
  function GetArenaSizeInBytes (line 653) | inline int   GetArenaSizeInBytes()              { return CurrOff; }
  function SetArenaBasePtr (line 654) | inline void  SetArenaBasePtr(void* base_ptr)    { BasePtr = (char*)base_...
  function GetSpan (line 658) | void  GetSpan(int n, ImSpan<T>* span)    { span->set((T*)GetSpanPtrBegin...
  type ImPoolIdx (line 664) | typedef int ImPoolIdx;
  function T (line 675) | T*          GetByKey(ImGuiID key)               { int idx = Map.GetInt(k...
  function T (line 676) | T*          GetByIndex(ImPoolIdx n)             { return &Buf[n]; }
  function ImPoolIdx (line 677) | ImPoolIdx   GetIndex(const T* p) const          { IM_ASSERT(p >= Buf.Dat...
  function T (line 678) | T*          GetOrAddByKey(ImGuiID key)          { int* p_idx = Map.GetIn...
  function Contains (line 679) | bool        Contains(const T* p) const          { return (p >= Buf.Data ...
  function Clear (line 680) | void        Clear()                             { for (int n = 0; n < Ma...
  function T (line 681) | T*          Add()                               { int idx = FreeIdx; if ...
  function Remove (line 682) | void        Remove(ImGuiID key, const T* p)     { Remove(key, GetIndex(p...
  function Remove (line 683) | void        Remove(ImGuiID key, ImPoolIdx idx)  { Buf[idx].~T(); *(int*)...
  function Reserve (line 684) | void        Reserve(int capacity)               { Buf.reserve(capacity);...
  function T (line 691) | T*          TryGetMapData(ImPoolIdx n)          { int idx = Map.Data[n]....
  function GetSize (line 693) | int         GetSize()                           { return GetMapSize(); }
  function clear (line 707) | void    clear()                     { Buf.clear(); }
  function T (line 710) | T*      alloc_chunk(size_t sz)      { size_t HDR_SZ = 4; sz = IM_MEMALIG...
  function T (line 711) | T*      begin()                     { size_t HDR_SZ = 4; if (!Buf.Data) ...
  function T (line 712) | T*      next_chunk(T* p)            { size_t HDR_SZ = 4; IM_ASSERT(p >= ...
  function chunk_size (line 713) | int     chunk_size(const T* p)      { return ((const int*)p)[-1]; }
  function T (line 714) | T*      end()                       { return (T*)(void*)(Buf.Data + Buf....
  function offset_from_ptr (line 715) | int     offset_from_ptr(const T* p) { IM_ASSERT(p >= begin() && p < end(...
  function T (line 716) | T*      ptr_from_offset(int off)    { IM_ASSERT(off >= 4 && off < Buf.Si...
  function swap (line 717) | void    swap(ImChunkStream<T>& rhs) { rhs.Buf.swap(Buf); }
  function size (line 722) | struct ImGuiTextIndex
  function ImDrawListSharedData (line 765) | struct IMGUI_API ImDrawListSharedData
  type ImDrawDataBuilder (line 788) | struct ImDrawDataBuilder
  type ImGuiItemFlags_ (line 805) | enum ImGuiItemFlags_
  type ImGuiItemStatusFlags_ (line 827) | enum ImGuiItemStatusFlags_
  type ImGuiHoveredFlagsPrivate_ (line 852) | enum ImGuiHoveredFlagsPrivate_
  type ImGuiInputTextFlagsPrivate_ (line 860) | enum ImGuiInputTextFlagsPrivate_
  type ImGuiButtonFlagsPrivate_ (line 869) | enum ImGuiButtonFlagsPrivate_
  type ImGuiComboFlagsPrivate_ (line 894) | enum ImGuiComboFlagsPrivate_
  type ImGuiSliderFlagsPrivate_ (line 900) | enum ImGuiSliderFlagsPrivate_
  type ImGuiSelectableFlagsPrivate_ (line 907) | enum ImGuiSelectableFlagsPrivate_
  type ImGuiTreeNodeFlagsPrivate_ (line 921) | enum ImGuiTreeNodeFlagsPrivate_
  type ImGuiSeparatorFlags_ (line 927) | enum ImGuiSeparatorFlags_
  type ImGuiFocusRequestFlags_ (line 938) | enum ImGuiFocusRequestFlags_
  type ImGuiTextFlags_ (line 945) | enum ImGuiTextFlags_
  type ImGuiTooltipFlags_ (line 951) | enum ImGuiTooltipFlags_
  type ImGuiLayoutType_ (line 959) | enum ImGuiLayoutType_
  type ImGuiLogType (line 965) | enum ImGuiLogType
  type ImGuiAxis (line 975) | enum ImGuiAxis
  type ImGuiPlotType (line 982) | enum ImGuiPlotType
  type ImGuiPopupPositionPolicy (line 988) | enum ImGuiPopupPositionPolicy
  type ImGuiDataVarInfo (line 995) | struct ImGuiDataVarInfo
  type ImGuiDataTypeTempStorage (line 1003) | struct ImGuiDataTypeTempStorage
  type ImGuiDataTypeInfo (line 1009) | struct ImGuiDataTypeInfo
  type ImGuiDataTypePrivate_ (line 1018) | enum ImGuiDataTypePrivate_
  type ImGuiColorMod (line 1026) | struct ImGuiColorMod
  function ImGuiStyleMod (line 1033) | struct ImGuiStyleMod
  function ImGuiComboPreviewData (line 1043) | struct IMGUI_API ImGuiComboPreviewData
  function ImGuiGroupData (line 1056) | struct IMGUI_API ImGuiGroupData
  function ImGuiMenuColumns (line 1074) | struct IMGUI_API ImGuiMenuColumns
  function ImGuiInputTextDeactivatedState (line 1092) | struct IMGUI_API ImGuiInputTextDeactivatedState
  function ImGuiInputTextState (line 1102) | struct IMGUI_API ImGuiInputTextState
  type ImGuiPopupData (line 1139) | struct ImGuiPopupData
  type ImS64 (line 1193) | typedef ImS64 ImGuiSelectionUserData;
  type ImGuiNextItemDataFlags_ (line 1195) | enum ImGuiNextItemDataFlags_
  type ImGuiNextItemData (line 1202) | struct ImGuiNextItemData
  type ImGuiLastItemData (line 1217) | struct ImGuiLastItemData
  type ImGuiNavTreeNodeData (line 1232) | struct ImGuiNavTreeNodeData
  function ImGuiStackSizes (line 1239) | struct IMGUI_API ImGuiStackSizes
  type ImGuiWindowStackData (line 1257) | struct ImGuiWindowStackData
  type ImGuiShrinkWidthItem (line 1264) | struct ImGuiShrinkWidthItem
  function ImGuiPtrOrIndex (line 1271) | struct ImGuiPtrOrIndex
  type ImGuiInputEventType (line 1309) | enum ImGuiInputEventType
  type ImGuiInputSource (line 1321) | enum ImGuiInputSource
  type ImGuiInputEventMousePos (line 1333) | struct ImGuiInputEventMousePos      { float PosX, PosY; ImGuiMouseSource...
  type ImGuiInputEventMouseWheel (line 1334) | struct ImGuiInputEventMouseWheel    { float WheelX, WheelY; ImGuiMouseSo...
  type ImGuiInputEventMouseButton (line 1335) | struct ImGuiInputEventMouseButton   { int Button; bool Down; ImGuiMouseS...
  type ImGuiInputEventKey (line 1336) | struct ImGuiInputEventKey           { ImGuiKey Key; bool Down; float Ana...
  type ImGuiInputEventText (line 1337) | struct ImGuiInputEventText          { unsigned int Char; }
  type ImGuiInputEventAppFocused (line 1338) | struct ImGuiInputEventAppFocused    { bool Focused; }
  type ImGuiInputEvent (line 1340) | struct ImGuiInputEvent
  type ImS16 (line 1363) | typedef ImS16 ImGuiKeyRoutingIndex;
  function Clear (line 1379) | struct ImGuiKeyRoutingTable
  type ImGuiKeyOwnerData (line 1391) | struct ImGuiKeyOwnerData
  type ImGuiInputFlags_ (line 1403) | enum ImGuiInputFlags_
  function FromPositions (line 1454) | struct ImGuiListClipperRange
  function Reset (line 1467) | struct ImGuiListClipperData
  type ImGuiActivateFlags_ (line 1483) | enum ImGuiActivateFlags_
  type ImGuiScrollFlags_ (line 1492) | enum ImGuiScrollFlags_
  type ImGuiNavHighlightFlags_ (line 1506) | enum ImGuiNavHighlightFlags_
  type ImGuiNavMoveFlags_ (line 1515) | enum ImGuiNavMoveFlags_
  type ImGuiNavLayer (line 1536) | enum ImGuiNavLayer
  function Clear (line 1543) | struct ImGuiNavItemData
  type ImGuiTypingSelectFlags_ (line 1564) | enum ImGuiTypingSelectFlags_
  function ImGuiTypingSelectRequest (line 1572) | struct IMGUI_API ImGuiTypingSelectRequest
  function ImGuiTypingSelectState (line 1583) | struct IMGUI_API ImGuiTypingSelectState
  type ImGuiOldColumnFlags_ (line 1601) | enum ImGuiOldColumnFlags_
  type ImGuiOldColumnData (line 1621) | struct ImGuiOldColumnData
  type ImGuiOldColumns (line 1631) | struct ImGuiOldColumns
  function ImGuiViewport (line 1677) | struct ImGuiViewportP : public ImGuiViewport
  type ImGuiWindowSettings (line 1709) | struct ImGuiWindowSettings
  type ImGuiSettingsHandler (line 1723) | struct ImGuiSettingsHandler
  type ImGuiLocKey (line 1743) | enum ImGuiLocKey : int
  type ImGuiLocEntry (line 1756) | struct ImGuiLocEntry
  type ImGuiDebugLogFlags_ (line 1767) | enum ImGuiDebugLogFlags_
  type ImGuiDebugAllocEntry (line 1783) | struct ImGuiDebugAllocEntry
  type ImGuiDebugAllocInfo (line 1790) | struct ImGuiDebugAllocInfo
  type ImGuiMetricsConfig (line 1800) | struct ImGuiMetricsConfig
  type ImGuiStackLevelInfo (line 1814) | struct ImGuiStackLevelInfo
  type ImGuiIDStackTool (line 1826) | struct ImGuiIDStackTool
  type ImGuiContextHookType (line 1843) | enum ImGuiContextHookType { ImGuiContextHookType_NewFramePre, ImGuiConte...
  type ImGuiContextHook (line 1845) | struct ImGuiContextHook
  type ImGuiContext (line 1860) | struct ImGuiContext
  function ImGuiWindowTempData (line 2349) | struct IMGUI_API ImGuiWindowTempData
  function ImGuiWindow (line 2398) | struct IMGUI_API ImGuiWindow
  type ImGuiTabBarFlagsPrivate_ (line 2525) | enum ImGuiTabBarFlagsPrivate_
  type ImGuiTabItemFlagsPrivate_ (line 2533) | enum ImGuiTabItemFlagsPrivate_
  function ImGuiTabBar (line 2560) | struct IMGUI_API ImGuiTabBar
  type ImS16 (line 2607) | typedef ImS16 ImGuiTableColumnIdx;
  type ImU16 (line 2608) | typedef ImU16 ImGuiTableDrawChannelIdx;
  type ImGuiTableCellData (line 2673) | struct ImGuiTableCellData
  type ImGuiTableInstanceData (line 2681) | struct ImGuiTableInstanceData
  function ImGuiTable (line 2695) | struct IMGUI_API ImGuiTable
  function ImGuiTableTempData (line 2818) | struct IMGUI_API ImGuiTableTempData
  type ImGuiTableSettings (line 2864) | struct ImGuiTableSettings
  function namespace (line 2882) | namespace ImGui
  function IsNamedKey (line 3071) | inline bool             IsNamedKey(ImGuiKey key)                        ...
  function IsNamedKeyOrModKey (line 3072) | inline bool             IsNamedKeyOrModKey(ImGuiKey key)                ...
  function IsLegacyKey (line 3073) | inline bool             IsLegacyKey(ImGuiKey key)                       ...
  function IsKeyboardKey (line 3074) | inline bool             IsKeyboardKey(ImGuiKey key)                     ...
  function IsGamepadKey (line 3075) | inline bool             IsGamepadKey(ImGuiKey key)                      ...
  function IsMouseKey (line 3076) | inline bool             IsMouseKey(ImGuiKey key)                        ...
  function IsAliasKey (line 3077) | inline bool             IsAliasKey(ImGuiKey key)                        ...
  function ImGuiKeyChord (line 3078) | inline ImGuiKeyChord    ConvertShortcutMod(ImGuiKeyChord key_chord)     ...
  function ImGuiKey (line 3079) | inline ImGuiKey         ConvertSingleModFlagToKey(ImGuiContext* ctx, ImG...
  function ImGuiKeyData (line 3091) | inline ImGuiKeyData*    GetKeyData(ImGuiKey key)                        ...
  function ImGuiKey (line 3093) | inline ImGuiKey         MouseButtonToKey(ImGuiMouseButton button)       ...
  function IsActiveIdUsingNavDir (line 3101) | inline bool             IsActiveIdUsingNavDir(ImGuiDir dir)             ...
  function ImGuiKeyOwnerData (line 3119) | inline ImGuiKeyOwnerData*   GetKeyOwnerData(ImGuiContext* ctx, ImGuiKey ...
  function ImGuiID (line 3164) | inline ImGuiID          GetCurrentFocusScope() { ImGuiContext& g = *GImG...
  function ImGuiTable (line 3204) | inline    ImGuiTable*   GetCurrentTable() { ImGuiContext& g = *GImGui; r...
  function ImGuiTableInstanceData (line 3217) | inline ImGuiTableInstanceData*  TableGetInstanceData(ImGuiTable* table, ...
  function ImGuiID (line 3218) | inline ImGuiID                  TableGetInstanceID(ImGuiTable* table, in...
  function ImGuiTabBar (line 3249) | inline    ImGuiTabBar*  GetCurrentTabBar() { ImGuiContext& g = *GImGui; ...
  function TabBarGetTabOrder (line 3254) | inline int              TabBarGetTabOrder(ImGuiTabBar* tab_bar, ImGuiTab...
  function TempInputIsActive (line 3345) | inline bool             TempInputIsActive(ImGuiID id)       { ImGuiConte...
  function ImGuiInputTextState (line 3346) | inline ImGuiInputTextState* GetInputTextState(ImGuiID id)   { ImGuiConte...
  function DebugStartItemPicker (line 3381) | inline void             DebugStartItemPicker()                          ...
  function SetItemUsingMouseWheel (line 3405) | inline void     SetItemUsingMouseWheel()                                ...
  function FocusableItemRegister (line 3413) | inline bool     FocusableItemRegister(ImGuiWindow* window, ImGuiID id)  ...
  function FocusableItemUnregister (line 3414) | inline void     FocusableItemUnregister(ImGuiWindow* window)            ...
  type ImFontBuilderIO (line 3428) | struct ImFontBuilderIO

FILE: third-party/imgui/imgui_tables.cpp
  function ImGuiTableFlags (line 262) | inline ImGuiTableFlags TableFixFlags(ImGuiTableFlags flags, ImGuiWindow*...
  function ImGuiTable (line 295) | ImGuiTable* ImGui::TableFindByID(ImGuiID id)
  function TableSetupColumnFlags (line 703) | static void TableSetupColumnFlags(ImGuiTable* table, ImGuiTableColumn* c...
  function ImGuiTableColumnFlags (line 1668) | ImGuiTableColumnFlags ImGui::TableGetColumnFlags(int column_n)
  function ImRect (line 1687) | ImRect ImGui::TableGetCellBgRect(const ImGuiTable* table, int column_n)
  function ImGuiID (line 1702) | ImGuiID ImGui::TableGetColumnResizeID(ImGuiTable* table, int column_n, i...
  type MergeGroup (line 2468) | struct MergeGroup
  function ImU32 (line 2629) | static ImU32 TableGetColumnBorderCol(ImGuiTable* table, int order_n, int...
  function ImGuiTableSortSpecs (line 2742) | ImGuiTableSortSpecs* ImGui::TableGetSortSpecs()
  function ImGuiSortDirection (line 2759) | static inline ImGuiSortDirection TableGetColumnAvailSortDirection(ImGuiT...
  function ImGuiSortDirection (line 2778) | ImGuiSortDirection ImGui::TableGetColumnNextSortDirection(ImGuiTableColu...
  function TableSettingsInit (line 3424) | static void TableSettingsInit(ImGuiTableSettings* settings, ImGuiID id, ...
  function TableSettingsCalcChunkSize (line 3436) | static size_t TableSettingsCalcChunkSize(int columns_count)
  function ImGuiTableSettings (line 3441) | ImGuiTableSettings* ImGui::TableSettingsCreate(ImGuiID id, int columns_c...
  function ImGuiTableSettings (line 3450) | ImGuiTableSettings* ImGui::TableSettingsFindByID(ImGuiID id)
  function ImGuiTableSettings (line 3461) | ImGuiTableSettings* ImGui::TableGetBoundSettings(ImGuiTable* table)
  function TableSettingsHandler_ClearAll (line 3604) | static void TableSettingsHandler_ClearAll(ImGuiContext* ctx, ImGuiSettin...
  function TableSettingsHandler_ApplyAll (line 3614) | static void TableSettingsHandler_ApplyAll(ImGuiContext* ctx, ImGuiSettin...
  function TableSettingsHandler_ReadLine (line 3644) | static void TableSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHa...
  function TableSettingsHandler_WriteAll (line 3670) | static void TableSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettin...
  function GetDraggedColumnOffset (line 3955) | static float GetDraggedColumnOffset(ImGuiOldColumns* columns, int column...
  function GetColumnWidthEx (line 3988) | static float GetColumnWidthEx(ImGuiOldColumns* columns, int column_index...
  function ImGuiOldColumns (line 4084) | ImGuiOldColumns* ImGui::FindOrCreateColumns(ImGuiWindow* window, ImGuiID...
  function ImGuiID (line 4097) | ImGuiID ImGui::GetColumnsID(const char* str_id, int columns_count)

FILE: third-party/imgui/imgui_widgets.cpp
  function ImGuiID (line 864) | ImGuiID ImGui::GetWindowScrollbarID(ImGuiWindow* window, ImGuiAxis axis)
  function ImRect (line 870) | ImRect ImGui::GetWindowScrollbarRect(ImGuiWindow* window, ImGuiAxis axis)
  function CalcMaxPopupHeightFromItemCount (line 1660) | static float CalcMaxPopupHeightFromItemCount(int items_count)
  type ImGuiGetNameFromIndexOldToNewCallbackData (line 1960) | struct ImGuiGetNameFromIndexOldToNewCallbackData { void* UserData; bool ...
  function ImGuiDataTypeInfo (line 2015) | const ImGuiDataTypeInfo* ImGui::DataTypeGetInfo(ImGuiDataType data_type)
  function DataTypeCompareT (line 2139) | static int DataTypeCompareT(const T* lhs, const T* rhs)
  function DataTypeClampT (line 2167) | static bool DataTypeClampT(T* v, const T* v_min, const T* v_max)
  function GetMinimumStepAtDecimalPrecision (line 2195) | static float GetMinimumStepAtDecimalPrecision(int decimal_precision)
  function TYPE (line 2204) | TYPE ImGui::RoundScalarWithFormatT(const char* format, ImGuiDataType dat...
  function TYPE (line 2718) | TYPE ImGui::ScaleValueFromRatioT(ImGuiDataType data_type, float t, TYPE ...
  function ImParseFormatSanitizeForPrinting (line 3311) | void ImParseFormatSanitizeForPrinting(const char* fmt_in, char* fmt_out,...
  function ImParseFormatPrecision (line 3361) | int ImParseFormatPrecision(const char* fmt, int default_precision)
  function ImGuiInputTextFlags (line 3405) | static inline ImGuiInputTextFlags InputScalar_DefaultCharsFilter(ImGuiDa...
  function InputTextCalcTextLenAndLineCount (line 3648) | static int InputTextCalcTextLenAndLineCount(const char* text_begin, cons...
  function ImVec2 (line 3662) | static ImVec2 InputTextCalcTextSizeW(ImGuiContext* ctx, const ImWchar* t...
  type ImStb (line 3708) | namespace ImStb
    function STB_TEXTEDIT_STRINGLEN (line 3711) | static int     STB_TEXTEDIT_STRINGLEN(const ImGuiInputTextState* obj) ...
    function ImWchar (line 3712) | static ImWchar STB_TEXTEDIT_GETCHAR(const ImGuiInputTextState* obj, in...
    function STB_TEXTEDIT_GETWIDTH (line 3713) | static float   STB_TEXTEDIT_GETWIDTH(ImGuiInputTextState* obj, int lin...
    function STB_TEXTEDIT_KEYTOTEXT (line 3714) | static int     STB_TEXTEDIT_KEYTOTEXT(int key)                        ...
    function STB_TEXTEDIT_LAYOUTROW (line 3716) | static void    STB_TEXTEDIT_LAYOUTROW(StbTexteditRow* r, ImGuiInputTex...
    function is_separator (line 3729) | static bool is_separator(unsigned int c)
    function is_word_boundary_from_right (line 3734) | static int is_word_boundary_from_right(ImGuiInputTextState* obj, int idx)
    function is_word_boundary_from_left (line 3746) | static int is_word_boundary_from_left(ImGuiInputTextState* obj, int idx)
    function STB_TEXTEDIT_MOVEWORDLEFT_IMPL (line 3757) | static int  STB_TEXTEDIT_MOVEWORDLEFT_IMPL(ImGuiInputTextState* obj, i...
    function STB_TEXTEDIT_MOVEWORDRIGHT_MAC (line 3758) | static int  STB_TEXTEDIT_MOVEWORDRIGHT_MAC(ImGuiInputTextState* obj, i...
    function STB_TEXTEDIT_MOVEWORDRIGHT_WIN (line 3759) | static int  STB_TEXTEDIT_MOVEWORDRIGHT_WIN(ImGuiInputTextState* obj, i...
    function STB_TEXTEDIT_MOVEWORDRIGHT_IMPL (line 3760) | static int  STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(ImGuiInputTextState* obj, ...
    function STB_TEXTEDIT_DELETECHARS (line 3764) | static void STB_TEXTEDIT_DELETECHARS(ImGuiInputTextState* obj, int pos...
    function STB_TEXTEDIT_INSERTCHARS (line 3780) | static bool STB_TEXTEDIT_INSERTCHARS(ImGuiInputTextState* obj, int pos...
    function stb_textedit_replace (line 3837) | static void stb_textedit_replace(ImGuiInputTextState* str, STB_Textedi...
  function InputTextFilterCharacter (line 3925) | static bool InputTextFilterCharacter(ImGuiContext* ctx, unsigned int* p_...
  function InputTextReconcileUndoStateAfterUserCallback (line 4029) | static void InputTextReconcileUndoStateAfterUserCallback(ImGuiInputTextS...
  function ColorEditRestoreH (line 5094) | static void ColorEditRestoreH(const float* col, float* H)
  function ColorEditRestoreHS (line 5105) | static void ColorEditRestoreHS(const float* col, float* H, float* S, flo...
  function RenderArrowsForVerticalBar (line 5380) | static void RenderArrowsForVerticalBar(ImDrawList* draw_list, ImVec2 pos...
  function ImGuiTypingSelectRequest (line 6659) | ImGuiTypingSelectRequest* ImGui::GetTypingSelectRequest(ImGuiTypingSelec...
  function ImStrimatchlen (line 6755) | static int ImStrimatchlen(const char* s1, const char* s1_end, const char...
  type ImGuiPlotArrayGetterData (line 7095) | struct ImGuiPlotArrayGetterData
    method ImGuiPlotArrayGetterData (line 7100) | ImGuiPlotArrayGetterData(const float* values, int stride) { Values = v...
  function Plot_ArrayGetter (line 7103) | static float Plot_ArrayGetter(void* data, int idx)
  function IsRootOfOpenMenuSet (line 7378) | static bool IsRootOfOpenMenuSet()
  type ImGuiTabBarSection (line 7739) | struct ImGuiTabBarSection
    method ImGuiTabBarSection (line 7745) | ImGuiTabBarSection() { memset(this, 0, sizeof(*this)); }
  type ImGui (line 7748) | namespace ImGui
  function TabItemGetSectionIdx (line 7766) | static inline int TabItemGetSectionIdx(const ImGuiTabItem* tab)
  function ImGuiTabBar (line 7789) | static ImGuiTabBar* GetTabBarFromTabBarRef(const ImGuiPtrOrIndex& ref)
  function ImGuiPtrOrIndex (line 7795) | static ImGuiPtrOrIndex GetTabBarRefFromTabBar(ImGuiTabBar* tab_bar)
  function TabBarCalcScrollableWidth (line 7920) | static float TabBarCalcScrollableWidth(ImGuiTabBar* tab_bar, ImGuiTabBar...
  function ImU32 (line 8170) | static ImU32   ImGui::TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* ...
  function ImGuiTabItem (line 8193) | ImGuiTabItem* ImGui::TabBarFindTabByID(ImGuiTabBar* tab_bar, ImGuiID tab...
  function ImGuiTabItem (line 8203) | ImGuiTabItem* ImGui::TabBarFindTabByOrder(ImGuiTabBar* tab_bar, int order)
  function ImGuiTabItem (line 8210) | ImGuiTabItem* ImGui::TabBarGetCurrentTab(ImGuiTabBar* tab_bar)
  function ImGuiTabItem (line 8380) | static ImGuiTabItem* ImGui::TabBarScrollingButtons(ImGuiTabBar* tab_bar)
  function ImGuiTabItem (line 8441) | static ImGuiTabItem* ImGui::TabBarTabListPopupButton(ImGuiTabBar* tab_bar)
  function ImVec2 (line 8789) | ImVec2 ImGui::TabItemCalcSize(const char* label, bool has_close_button_o...
  function ImVec2 (line 8801) | ImVec2 ImGui::TabItemCalcSize(ImGuiWindow*)

FILE: third-party/imgui/imstb_rectpack.h
  type stbrp_context (line 85) | typedef struct stbrp_context stbrp_context;
  type stbrp_node (line 86) | typedef struct stbrp_node    stbrp_node;
  type stbrp_rect (line 87) | typedef struct stbrp_rect    stbrp_rect;
  type stbrp_coord (line 89) | typedef int            stbrp_coord;
  type stbrp_rect (line 119) | struct stbrp_rect
  type stbrp_node (line 179) | struct stbrp_node
  type stbrp_context (line 185) | struct stbrp_context
  function STBRP_DEF (line 233) | STBRP_DEF void stbrp_setup_heuristic(stbrp_context *context, int heuristic)
  function STBRP_DEF (line 245) | STBRP_DEF void stbrp_setup_allow_out_of_mem(stbrp_context *context, int ...
  function STBRP_DEF (line 265) | STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int ...
  function stbrp__skyline_find_min_y (line 291) | static int stbrp__skyline_find_min_y(stbrp_context *c, stbrp_node *first...
  type stbrp__findresult (line 341) | typedef struct
  function stbrp__findresult (line 347) | static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context *c, ...
  function stbrp__findresult (line 449) | static stbrp__findresult stbrp__skyline_pack_rectangle(stbrp_context *co...
  function rect_height_compare (line 528) | static int STBRP__CDECL rect_height_compare(const void *a, const void *b)
  function rect_original_order (line 539) | static int STBRP__CDECL rect_original_order(const void *a, const void *b)
  function STBRP_DEF (line 546) | STBRP_DEF int stbrp_pack_rects(stbrp_context *context, stbrp_rect *rects...

FILE: third-party/imgui/imstb_textedit.h
  type StbUndoRecord (line 302) | typedef struct
  type StbUndoState (line 311) | typedef struct
  type STB_TexteditState (line 320) | typedef struct
  type StbTexteditRow (line 367) | typedef struct
  function stb_text_locate_coord (line 401) | static int stb_text_locate_coord(STB_TEXTEDIT_STRING *str, float x, floa...
  function stb_textedit_click (line 461) | static void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditSta...
  function stb_textedit_drag (line 479) | static void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditStat...
  type StbFindState (line 511) | typedef struct
  function stb_textedit_find_charpos (line 521) | static void stb_textedit_find_charpos(StbFindState *find, STB_TEXTEDIT_S...
  function stb_textedit_clamp (line 572) | static void stb_textedit_clamp(STB_TEXTEDIT_STRING *str, STB_TexteditSta...
  function stb_textedit_delete (line 586) | static void stb_textedit_delete(STB_TEXTEDIT_STRING *str, STB_TexteditSt...
  function stb_textedit_delete_selection (line 594) | static void stb_textedit_delete_selection(STB_TEXTEDIT_STRING *str, STB_...
  function stb_textedit_sortselection (line 610) | static void stb_textedit_sortselection(STB_TexteditState *state)
  function stb_textedit_move_to_first (line 620) | static void stb_textedit_move_to_first(STB_TexteditState *state)
  function stb_textedit_move_to_last (line 631) | static void stb_textedit_move_to_last(STB_TEXTEDIT_STRING *str, STB_Text...
  function is_word_boundary (line 643) | static int is_word_boundary( STB_TEXTEDIT_STRING *str, int idx )
  function stb_textedit_move_to_word_previous (line 649) | static int stb_textedit_move_to_word_previous( STB_TEXTEDIT_STRING *str,...
  function stb_textedit_move_to_word_next (line 664) | static int stb_textedit_move_to_word_next( STB_TEXTEDIT_STRING *str, int...
  function stb_textedit_prep_selection_at_cursor (line 682) | static void stb_textedit_prep_selection_at_cursor(STB_TexteditState *state)
  function stb_textedit_cut (line 691) | static int stb_textedit_cut(STB_TEXTEDIT_STRING *str, STB_TexteditState ...
  function stb_textedit_paste_internal (line 702) | static int stb_textedit_paste_internal(STB_TEXTEDIT_STRING *str, STB_Tex...
  function stb_textedit_key (line 723) | static void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState...
  function stb_textedit_flush_redo (line 1113) | static void stb_textedit_flush_redo(StbUndoState *state)
  function stb_textedit_discard_undo (line 1120) | static void stb_textedit_discard_undo(StbUndoState *state)
  function stb_textedit_discard_redo (line 1142) | static void stb_textedit_discard_redo(StbUndoState *state)
  function StbUndoRecord (line 1172) | static StbUndoRecord *stb_text_create_undo_record(StbUndoState *state, i...
  function STB_TEXTEDIT_CHARTYPE (line 1196) | static STB_TEXTEDIT_CHARTYPE *stb_text_createundo(StbUndoState *state, i...
  function stb_text_undo (line 1216) | static void stb_text_undo(STB_TEXTEDIT_STRING *str, STB_TexteditState *s...
  function stb_text_redo (line 1284) | static void stb_text_redo(STB_TEXTEDIT_STRING *str, STB_TexteditState *s...
  function stb_text_makeundo_insert (line 1335) | static void stb_text_makeundo_insert(STB_TexteditState *state, int where...
  function stb_text_makeundo_delete (line 1340) | static void stb_text_makeundo_delete(STB_TEXTEDIT_STRING *str, STB_Texte...
  function stb_text_makeundo_replace (line 1350) | static void stb_text_makeundo_replace(STB_TEXTEDIT_STRING *str, STB_Text...
  function stb_textedit_clear_state (line 1361) | static void stb_textedit_clear_state(STB_TexteditState *state, int is_si...
  function stb_textedit_initialize_state (line 1379) | static void stb_textedit_initialize_state(STB_TexteditState *state, int ...
  function stb_textedit_paste (line 1389) | static int stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditStat...

FILE: third-party/imgui/imstb_truetype.h
  function my_stbtt_initfont (line 292) | void my_stbtt_initfont(void)
  function my_stbtt_print (line 304) | void my_stbtt_print(float x, float y, char *text)
  function main (line 339) | int main(int argc, char **argv)
  function main (line 380) | int main(int arg, char **argv)
  type stbtt_uint8 (line 433) | typedef unsigned char   stbtt_uint8;
  type stbtt_int8 (line 434) | typedef signed   char   stbtt_int8;
  type stbtt_uint16 (line 435) | typedef unsigned short  stbtt_uint16;
  type stbtt_int16 (line 436) | typedef signed   short  stbtt_int16;
  type stbtt_uint32 (line 437) | typedef unsigned int    stbtt_uint32;
  type stbtt_int32 (line 438) | typedef signed   int    stbtt_int32;
  type stbtt__buf (line 518) | typedef struct
  type stbtt_bakedchar (line 532) | typedef struct
  type stbtt_aligned_quad (line 548) | typedef struct
  type stbtt_packedchar (line 580) | typedef struct
  type stbtt_pack_context (line 587) | typedef struct stbtt_pack_context stbtt_pack_context;
  type stbtt_fontinfo (line 588) | typedef struct stbtt_fontinfo stbtt_fontinfo;
  type stbrp_rect (line 590) | typedef struct stbrp_rect stbrp_rect;
  type stbtt_pack_range (line 624) | typedef struct
  type stbtt_pack_context (line 683) | struct stbtt_pack_context {
  type stbtt_fontinfo (line 718) | struct stbtt_fontinfo
  type stbtt_kerningentry (line 809) | typedef struct stbtt_kerningentry
  type stbtt_vertex (line 840) | typedef struct
  type stbtt__bitmap (line 929) | typedef struct
  function stbtt_uint8 (line 1138) | static stbtt_uint8 stbtt__buf_get8(stbtt__buf *b)
  function stbtt_uint8 (line 1145) | static stbtt_uint8 stbtt__buf_peek8(stbtt__buf *b)
  function stbtt__buf_seek (line 1152) | static void stbtt__buf_seek(stbtt__buf *b, int o)
  function stbtt__buf_skip (line 1158) | static void stbtt__buf_skip(stbtt__buf *b, int o)
  function stbtt_uint32 (line 1163) | static stbtt_uint32 stbtt__buf_get(stbtt__buf *b, int n)
  function stbtt__buf (line 1173) | static stbtt__buf stbtt__new_buf(const void *p, size_t size)
  function stbtt__buf (line 1186) | static stbtt__buf stbtt__buf_range(const stbtt__buf *b, int o, int s)
  function stbtt__buf (line 1195) | static stbtt__buf stbtt__cff_get_index(stbtt__buf *b)
  function stbtt_uint32 (line 1209) | static stbtt_uint32 stbtt__cff_int(stbtt__buf *b)
  function stbtt__cff_skip_operand (line 1221) | static void stbtt__cff_skip_operand(stbtt__buf *b) {
  function stbtt__buf (line 1236) | static stbtt__buf stbtt__dict_get(stbtt__buf *b, int key)
  function stbtt__dict_get_ints (line 1251) | static void stbtt__dict_get_ints(stbtt__buf *b, int key, int outcount, s...
  function stbtt__cff_index_count (line 1259) | static int stbtt__cff_index_count(stbtt__buf *b)
  function stbtt__buf (line 1265) | static stbtt__buf stbtt__cff_index_get(stbtt__buf b, int i)
  function stbtt_uint16 (line 1291) | static stbtt_uint16 ttUSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; }
  function stbtt_int16 (line 1292) | static stbtt_int16 ttSHORT(stbtt_uint8 *p)   { return p[0]*256 + p[1]; }
  function stbtt_uint32 (line 1293) | static stbtt_uint32 ttULONG(stbtt_uint8 *p)  { return (p[0]<<24) + (p[1]...
  function stbtt_int32 (line 1294) | static stbtt_int32 ttLONG(stbtt_uint8 *p)    { return (p[0]<<24) + (p[1]...
  function stbtt__isfont (line 1299) | static int stbtt__isfont(stbtt_uint8 *font)
  function stbtt_uint32 (line 1311) | static stbtt_uint32 stbtt__find_table(stbtt_uint8 *data, stbtt_uint32 fo...
  function stbtt_GetFontOffsetForIndex_internal (line 1324) | static int stbtt_GetFontOffsetForIndex_internal(unsigned char *font_coll...
  function stbtt_GetNumberOfFonts_internal (line 1343) | static int stbtt_GetNumberOfFonts_internal(unsigned char *font_collection)
  function stbtt__buf (line 1359) | static stbtt__buf stbtt__get_subrs(stbtt__buf cff, stbtt__buf fontdict)
  function stbtt__get_svg (line 1373) | static int stbtt__get_svg(stbtt_fontinfo *info)
  function stbtt_InitFont_internal (line 1388) | static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *...
  function STBTT_DEF (line 1501) | STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unico...
  function STBTT_DEF (line 1594) | STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int un...
  function stbtt_setvertex (line 1599) | static void stbtt_setvertex(stbtt_vertex *v, stbtt_uint8 type, stbtt_int...
  function stbtt__GetGlyfOffset (line 1608) | static int stbtt__GetGlyfOffset(const stbtt_fontinfo *info, int glyph_in...
  function STBTT_DEF (line 1630) | STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_in...
  function STBTT_DEF (line 1646) | STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int code...
  function STBTT_DEF (line 1651) | STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_i...
  function stbtt__close_shape (line 1663) | static int stbtt__close_shape(stbtt_vertex *vertices, int num_vertices, ...
  function stbtt__GetGlyphShapeTT (line 1679) | static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_...
  type stbtt__csctx (line 1902) | typedef struct
  function stbtt__track_vertex (line 1916) | static void stbtt__track_vertex(stbtt__csctx *c, stbtt_int32 x, stbtt_in...
  function stbtt__csctx_v (line 1925) | static void stbtt__csctx_v(stbtt__csctx *c, stbtt_uint8 type, stbtt_int3...
  function stbtt__csctx_close_shape (line 1941) | static void stbtt__csctx_close_shape(stbtt__csctx *ctx)
  function stbtt__csctx_rmove_to (line 1947) | static void stbtt__csctx_rmove_to(stbtt__csctx *ctx, float dx, float dy)
  function stbtt__csctx_rline_to (line 1955) | static void stbtt__csctx_rline_to(stbtt__csctx *ctx, float dx, float dy)
  function stbtt__csctx_rccurve_to (line 1962) | static void stbtt__csctx_rccurve_to(stbtt__csctx *ctx, float dx1, float ...
  function stbtt__buf (line 1973) | static stbtt__buf stbtt__get_subr(stbtt__buf idx, int n)
  function stbtt__buf (line 1987) | static stbtt__buf stbtt__cid_get_glyph_subrs(const stbtt_fontinfo *info,...
  function stbtt__run_charstring (line 2015) | static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_i...
  function stbtt__GetGlyphShapeT2 (line 2274) | static int stbtt__GetGlyphShapeT2(const stbtt_fontinfo *info, int glyph_...
  function stbtt__GetGlyphInfoT2 (line 2291) | static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_i...
  function STBTT_DEF (line 2302) | STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_...
  function STBTT_DEF (line 2310) | STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int gl...
  function STBTT_DEF (line 2322) | STBTT_DEF int  stbtt_GetKerningTableLength(const stbtt_fontinfo *info)
  function STBTT_DEF (line 2337) | STBTT_DEF int stbtt_GetKerningTable(const stbtt_fontinfo *info, stbtt_ke...
  function stbtt__GetGlyphKernInfoAdvance (line 2364) | static int stbtt__GetGlyphKernInfoAdvance(const stbtt_fontinfo *info, in...
  function stbtt_int32 (line 2394) | static stbtt_int32 stbtt__GetCoverageIndex(stbtt_uint8 *coverageTable, i...
  function stbtt_int32 (line 2452) | static stbtt_int32  stbtt__GetGlyphClass(stbtt_uint8 *classDefTable, int...
  function stbtt_int32 (line 2501) | static stbtt_int32 stbtt__GetGlyphGPOSInfoAdvance(const stbtt_fontinfo *...
  function STBTT_DEF (line 2615) | STBTT_DEF int  stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int...
  function STBTT_DEF (line 2627) | STBTT_DEF int  stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info,...
  function STBTT_DEF (line 2634) | STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, in...
  function STBTT_DEF (line 2639) | STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *as...
  function STBTT_DEF (line 2646) | STBTT_DEF int  stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int ...
  function STBTT_DEF (line 2657) | STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int ...
  function STBTT_DEF (line 2665) | STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, fl...
  function STBTT_DEF (line 2671) | STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *in...
  function STBTT_DEF (line 2677) | STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *v)
  function STBTT_DEF (line 2682) | STBTT_DEF stbtt_uint8 *stbtt_FindSVGDoc(const stbtt_fontinfo *info, int gl)
  function STBTT_DEF (line 2699) | STBTT_DEF int stbtt_GetGlyphSVG(const stbtt_fontinfo *info, int gl, cons...
  function STBTT_DEF (line 2716) | STBTT_DEF int stbtt_GetCodepointSVG(const stbtt_fontinfo *info, int unic...
  function STBTT_DEF (line 2726) | STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *fon...
  function STBTT_DEF (line 2744) | STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int g...
  function STBTT_DEF (line 2749) | STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo ...
  function STBTT_DEF (line 2754) | STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, i...
  type stbtt__hheap_chunk (line 2763) | typedef struct stbtt__hheap_chunk
  type stbtt__hheap (line 2768) | typedef struct stbtt__hheap
  function stbtt__hheap_free (line 2796) | static void stbtt__hheap_free(stbtt__hheap *hh, void *p)
  function stbtt__hheap_cleanup (line 2802) | static void stbtt__hheap_cleanup(stbtt__hheap *hh, void *userdata)
  type stbtt__edge (line 2812) | typedef struct stbtt__edge {
  type stbtt__active_edge (line 2818) | typedef struct stbtt__active_edge
  function stbtt__active_edge (line 2840) | static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__ed...
  function stbtt__active_edge (line 2862) | static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__ed...
  function stbtt__fill_active_edges (line 2887) | static void stbtt__fill_active_edges(unsigned char *scanline, int len, s...
  function stbtt__rasterize_sorted_edges (line 2929) | static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__...
  function stbtt__handle_clipped_edge (line 3033) | static void stbtt__handle_clipped_edge(float *scanline, int x, stbtt__ac...
  function stbtt__sized_trapezoid_area (line 3070) | static float stbtt__sized_trapezoid_area(float height, float top_width, ...
  function stbtt__position_trapezoid_area (line 3077) | static float stbtt__position_trapezoid_area(float height, float tx0, flo...
  function stbtt__sized_triangle_area (line 3082) | static float stbtt__sized_triangle_area(float height, float width)
  function stbtt__fill_active_edges_new (line 3087) | static void stbtt__fill_active_edges_new(float *scanline, float *scanlin...
  function stbtt__rasterize_sorted_edges (line 3305) | static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__...
  function stbtt__sort_edges_ins_sort (line 3407) | static void stbtt__sort_edges_ins_sort(stbtt__edge *p, int n)
  function stbtt__sort_edges_quicksort (line 3425) | static void stbtt__sort_edges_quicksort(stbtt__edge *p, int n)
  function stbtt__sort_edges (line 3487) | static void stbtt__sort_edges(stbtt__edge *p, int n)
  type stbtt__point (line 3493) | typedef struct
  function stbtt__rasterize (line 3498) | static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, i...
  function stbtt__add_point (line 3555) | static void stbtt__add_point(stbtt__point *points, int n, float x, float y)
  function stbtt__tesselate_curve (line 3563) | static int stbtt__tesselate_curve(stbtt__point *points, int *num_points,...
  function stbtt__tesselate_cubic (line 3583) | static void stbtt__tesselate_cubic(stbtt__point *points, int *num_points...
  function stbtt__point (line 3626) | static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num...
  function STBTT_DEF (line 3703) | STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, float flatness_in_...
  function STBTT_DEF (line 3716) | STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata)
  function STBTT_DEF (line 3766) | STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info,...
  function STBTT_DEF (line 3785) | STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigne...
  function STBTT_DEF (line 3795) | STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fo...
  function STBTT_DEF (line 3800) | STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *i...
  function STBTT_DEF (line 3810) | STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, uns...
  function stbtt_BakeFontBitmap_internal (line 3821) | static int stbtt_BakeFontBitmap_internal(unsigned char *data, int offset...
  function STBTT_DEF (line 3867) | STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int p...
  type stbrp_coord (line 3895) | typedef int stbrp_coord;
  type stbrp_context (line 3908) | typedef struct
  type stbrp_node (line 3914) | typedef struct
  type stbrp_rect (line 3919) | struct stbrp_rect
  function stbrp_init_target (line 3925) | static void stbrp_init_target(stbrp_context *con, int pw, int ph, stbrp_...
  function stbrp_pack_rects (line 3936) | static void stbrp_pack_rects(stbrp_context *con, stbrp_rect *rects, int ...
  function STBTT_DEF (line 3965) | STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pi...
  function STBTT_DEF (line 3997) | STBTT_DEF void stbtt_PackEnd  (stbtt_pack_context *spc)
  function STBTT_DEF (line 4003) | STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsign...
  function STBTT_DEF (line 4013) | STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *sp...
  function stbtt__h_prefilter (line 4020) | static void stbtt__h_prefilter(unsigned char *pixels, int w, int h, int ...
  function stbtt__v_prefilter (line 4082) | static void stbtt__v_prefilter(unsigned char *pixels, int w, int h, int ...
  function stbtt__oversample_shift (line 4144) | static float stbtt__oversample_shift(int oversample)
  function STBTT_DEF (line 4157) | STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, c...
  function STBTT_DEF (line 4192) | STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontin...
  function STBTT_DEF (line 4216) | STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *sp...
  function STBTT_DEF (line 4305) | STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, st...
  function STBTT_DEF (line 4310) | STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsign...
  function STBTT_DEF (line 4346) | STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigne...
  function STBTT_DEF (line 4358) | STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata...
  function STBTT_DEF (line 4371) | STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int...
  function stbtt__ray_intersect_bezier (line 4406) | static int stbtt__ray_intersect_bezier(float orig[2], float ray[2], floa...
  function equal (line 4470) | static int equal(float *a, float *b)
  function stbtt__compute_crossings_x (line 4475) | static int stbtt__compute_crossings_x(float x, float y, int nverts, stbt...
  function stbtt__cuberoot (line 4543) | static float stbtt__cuberoot( float x )
  function stbtt__solve_cubic (line 4552) | static int stbtt__solve_cubic(float a, float b, float c, float* r)
  function STBTT_DEF (line 4773) | STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata)
  function stbtt_int32 (line 4784) | static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint...
  function stbtt_CompareUTF8toUTF16_bigendian_internal (line 4823) | static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len...
  function STBTT_DEF (line 4830) | STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font...
  function stbtt__matchpair (line 4851) | static int stbtt__matchpair(stbtt_uint8 *fc, stbtt_uint32 nm, stbtt_uint...
  function stbtt__matches (line 4898) | static int stbtt__matches(stbtt_uint8 *fc, stbtt_uint32 offset, stbtt_ui...
  function stbtt_FindMatchingFont_internal (line 4927) | static int stbtt_FindMatchingFont_internal(unsigned char *font_collectio...
  function STBTT_DEF (line 4943) | STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset,
  function STBTT_DEF (line 4950) | STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int...
  function STBTT_DEF (line 4955) | STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data)
  function STBTT_DEF (line 4960) | STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *...
  function STBTT_DEF (line 4965) | STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, cons...
  function STBTT_DEF (line 4970) | STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len...

FILE: third-party/json/json.hpp
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 245) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_END (line 256) | NLOHMANN_JSON_NAMESPACE_END
  type would_call_std_ (line 2798) | struct would_call_std_
  type value_t (line 2856) | enum class value_t : std::uint8_t
  function NLOHMANN_JSON_NAMESPACE_END (line 2921) | NLOHMANN_JSON_NAMESPACE_END
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 3014) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 3060) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 3250) | NLOHMANN_JSON_NAMESPACE_BEGIN
  class json_pointer (line 3398) | class json_pointer
  type ordered_map (line 3409) | struct ordered_map
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 3420) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 4158) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_END (line 4286) | NLOHMANN_JSON_NAMESPACE_END
  function NLOHMANN_JSON_NAMESPACE_END (line 4519) | NLOHMANN_JSON_NAMESPACE_END
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 4565) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 4573) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 4588) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 5103) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_END (line 5285) | NLOHMANN_JSON_NAMESPACE_END
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 5333) | NLOHMANN_JSON_NAMESPACE_BEGIN
  type adl_serializer (line 5761) | struct adl_serializer
    method from_json (line 5766) | static auto from_json(BasicJsonType && j, TargetType& val) noexcept(
    method from_json (line 5776) | static auto from_json(BasicJsonType && j) noexcept(
    method to_json (line 5786) | static auto to_json(BasicJsonType& j, TargetType && val) noexcept(
  function set_subtype (line 5867) | void set_subtype(subtype_type subtype_) noexcept
  function subtype_type (line 5875) | constexpr subtype_type subtype() const noexcept
  function has_subtype (line 5882) | constexpr bool has_subtype() const noexcept
  function clear_subtype (line 5889) | void clear_subtype() noexcept
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 5928) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 6098) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function json_sax_dom_parser (line 6744) | explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_exceptio...
  function json_sax_dom_parser (line 6749) | json_sax_dom_parser(const json_sax_dom_parser&) = delete;
  function json_sax_dom_parser (line 6750) | json_sax_dom_parser(json_sax_dom_parser&&) = default;
  function null (line 6755) | bool null()
  function boolean (line 6761) | bool boolean(bool val)
  function number_integer (line 6767) | bool number_integer(number_integer_t val)
  function number_unsigned (line 6773) | bool number_unsigned(number_unsigned_t val)
  function number_float (line 6779) | bool number_float(number_float_t val, const string_t& /*unused*/)
  function string (line 6785) | bool string(string_t& val)
  function binary (line 6791) | bool binary(binary_t& val)
  function start_object (line 6797) | bool start_object(std::size_t len)
  function key (line 6809) | bool key(string_t& val)
  function end_object (line 6819) | bool end_object()
  function start_array (line 6829) | bool start_array(std::size_t len)
  function end_array (line 6841) | bool end_array()
  function parse_error (line 6852) | bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/,
  function is_errored (line 6864) | constexpr bool is_errored() const
  class json_sax_dom_callback_parser (line 6913) | class json_sax_dom_callback_parser
    method json_sax_dom_callback_parser (line 6924) | json_sax_dom_callback_parser(BasicJsonType& r,
    method json_sax_dom_callback_parser (line 6933) | json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = de...
    method json_sax_dom_callback_parser (line 6934) | json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default;
    method json_sax_dom_callback_parser (line 6935) | json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_pa...
    method json_sax_dom_callback_parser (line 6936) | json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&...
    method null (line 6939) | bool null()
    method boolean (line 6945) | bool boolean(bool val)
    method number_integer (line 6951) | bool number_integer(number_integer_t val)
    method number_unsigned (line 6957) | bool number_unsigned(number_unsigned_t val)
    method number_float (line 6963) | bool number_float(number_float_t val, const string_t& /*unused*/)
    method string (line 6969) | bool string(string_t& val)
    method binary (line 6975) | bool binary(binary_t& val)
    method start_object (line 6981) | bool start_object(std::size_t len)
    method key (line 6999) | bool key(string_t& val)
    method end_object (line 7016) | bool end_object()
    method start_array (line 7052) | bool start_array(std::size_t len)
    method end_array (line 7069) | bool end_array()
    method parse_error (line 7102) | bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/,
    method is_errored (line 7114) | constexpr bool is_errored() const
    method handle_value (line 7136) | std::pair<bool, BasicJsonType*> handle_value(Value&& v, const bool ski...
  class json_sax_acceptor (line 7220) | class json_sax_acceptor
    method null (line 7229) | bool null()
    method boolean (line 7234) | bool boolean(bool /*unused*/)
    method number_integer (line 7239) | bool number_integer(number_integer_t /*unused*/)
    method number_unsigned (line 7244) | bool number_unsigned(number_unsigned_t /*unused*/)
    method number_float (line 7249) | bool number_float(number_float_t /*unused*/, const string_t& /*unused*/)
    method string (line 7254) | bool string(string_t& /*unused*/)
    method binary (line 7259) | bool binary(binary_t& /*unused*/)
    method start_object (line 7264) | bool start_object(std::size_t /*unused*/ = static_cast<std::size_t>(-1))
    method key (line 7269) | bool key(string_t& /*unused*/)
    method end_object (line 7274) | bool end_object()
    method start_array (line 7279) | bool start_array(std::size_t /*unused*/ = static_cast<std::size_t>(-1))
    method end_array (line 7284) | bool end_array()
    method parse_error (line 7289) | bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/...
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 7326) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function reset (line 8621) | void reset() noexcept
  function char_int_type (line 8638) | char_int_type get()
  function unget (line 8675) | void unget()
  function add (line 8702) | void add(char_int_type c)
  function number_unsigned_t (line 8719) | constexpr number_unsigned_t get_number_unsigned() const noexcept
  function number_float_t (line 8725) | constexpr number_float_t get_number_float() const noexcept
  function string_t (line 8731) | string_t& get_string()
  function position_t (line 8741) | constexpr position_t get_position() const noexcept
  function get_token_string (line 8749) | std::string get_token_string() const
  function JSON_HEDLEY_RETURNS_NON_NULL (line 8773) | JSON_HEDLEY_RETURNS_NON_NULL
  function skip_bom (line 8787) | bool skip_bom()
  function skip_whitespace (line 8801) | void skip_whitespace()
  function token_type (line 8810) | token_type scan()
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 8959) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_END (line 9099) | NLOHMANN_JSON_NAMESPACE_END
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 12125) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 12637) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_END (line 12753) | NLOHMANN_JSON_NAMESPACE_END
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 12808) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function pointer (line 13110) | pointer operator->() const
  function iter_impl (line 13152) | iter_impl operator++(int)& // NOLINT(cert-dcl21-cpp)
  function iter_impl (line 13163) | iter_impl& operator++()
  function iter_impl (line 13203) | iter_impl operator--(int)& // NOLINT(cert-dcl21-cpp)
  function iter_impl (line 13214) | iter_impl& operator--()
  function iter_impl (line 13362) | iter_impl& operator+=(difference_type i)
  function iter_impl (line 13399) | iter_impl& operator-=(difference_type i)
  function iter_impl (line 13408) | iter_impl operator+(difference_type i) const
  function friend (line 13419) | friend iter_impl operator+(difference_type i, const iter_impl& it)
  function iter_impl (line 13430) | iter_impl operator-(difference_type i) const
  function difference_type (line 13441) | difference_type operator-(const iter_impl& other) const
  function reference (line 13470) | reference operator[](difference_type n) const
  function reference (line 13524) | reference value() const
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 13559) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 13711) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_BASIC_JSON_TPL_DECLARATION (line 13731) | NLOHMANN_BASIC_JSON_TPL_DECLARATION
  function json_pointer (line 13743) | explicit json_pointer(const string_t& s = "")
  function string_t (line 13749) | string_t to_string() const
  function friend (line 13770) | friend std::ostream& operator<<(std::ostream& o, const json_pointer& ptr)
  function json_pointer (line 13779) | json_pointer& operator/=(const json_pointer& ptr)
  function json_pointer (line 13789) | json_pointer& operator/=(string_t token)
  function json_pointer (line 13797) | json_pointer& operator/=(std::size_t array_idx)
  function friend (line 13804) | friend json_pointer operator/(const json_pointer& lhs,
  function friend (line 13812) | friend json_pointer operator/(const json_pointer& lhs, string_t token) /...
  function friend (line 13819) | friend json_pointer operator/(const json_pointer& lhs, std::size_t array...
  function json_pointer (line 13826) | json_pointer parent_pointer() const
  function pop_back (line 13840) | void pop_back()
  function string_t (line 13852) | const string_t& back() const
  function push_back (line 13864) | void push_back(const string_t& token)
  function push_back (line 13871) | void push_back(string_t&& token)
  function empty (line 13878) | bool empty() const noexcept
  function BasicJsonType (line 13955) | BasicJsonType& get_and_create(BasicJsonType& j) const
  function BasicJsonType (line 14035) | BasicJsonType& get_unchecked(BasicJsonType* ptr) const
  function BasicJsonType (line 14103) | BasicJsonType& get_checked(BasicJsonType* ptr) const
  function BasicJsonType (line 14161) | const BasicJsonType& get_unchecked(const BasicJsonType* ptr) const
  function BasicJsonType (line 14210) | const BasicJsonType& get_checked(const BasicJsonType* ptr) const
  function contains (line 14259) | bool contains(const BasicJsonType* ptr) const
  function split (line 14347) | static std::vector<string_t> split(const string_t& reference_string)
  function BasicJsonType (line 14487) | static BasicJsonType
  function convert (line 14516) | json_pointer<string_t> convert() const&
  function convert (line 14523) | json_pointer<string_t> convert()&&
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 14690) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 14815) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_END (line 14937) | NLOHMANN_JSON_NAMESPACE_END
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 16804) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_END (line 17901) | NLOHMANN_JSON_NAMESPACE_END
  function hex_bytes (line 18561) | static std::string hex_bytes(std::uint8_t byte)
  function is_negative_number (line 18572) | bool is_negative_number(NumberType x)
  function is_negative_number (line 18578) | bool is_negative_number(NumberType /*unused*/)
  function dump_integer (line 18598) | void dump_integer(NumberType x)
  function dump_float (line 18683) | void dump_float(number_float_t x)
  function dump_float (line 18704) | void dump_float(number_float_t x, std::true_type /*is_ieee_single_or_dou...
  function dump_float (line 18712) | void dump_float(number_float_t x, std::false_type /*is_ieee_single_or_do...
  function decode (line 18784) | static std::uint8_t decode(std::uint8_t& state, std::uint32_t& codep, co...
  function number_unsigned_t (line 18824) | number_unsigned_t remove_sign(number_unsigned_t x)
  function number_unsigned_t (line 18839) | inline number_unsigned_t remove_sign(number_integer_t x) noexcept
  function ordered_map (line 18926) | ordered_map() noexcept(noexcept(Container())) : Container{} {}
  function ordered_map (line 18927) | explicit ordered_map(const Allocator& alloc) noexcept(noexcept(Container...
  function ordered_map (line 18929) | ordered_map(It first, It last, const Allocator& alloc = Allocator())
  function ordered_map (line 18931) | ordered_map(std::initializer_list<value_type> init, const Allocator& all...
  function emplace (line 18934) | std::pair<iterator, bool> emplace(const key_type& key, T&& t)
  function emplace (line 18949) | std::pair<iterator, bool> emplace(KeyType && key, T && t)
  function T (line 18962) | T& operator[](const key_type& key)
  function T (line 18969) | T & operator[](KeyType && key)
  function T (line 18974) | const T& operator[](const key_type& key) const
  function T (line 18981) | const T & operator[](KeyType && key) const
  function T (line 18986) | T& at(const key_type& key)
  function T (line 19001) | T & at(KeyType && key)
  function T (line 19014) | const T& at(const key_type& key) const
  function T (line 19029) | const T & at(KeyType && key) const
  function size_type (line 19042) | size_type erase(const key_type& key)
  function size_type (line 19063) | size_type erase(KeyType && key)
  function iterator (line 19082) | iterator erase(iterator pos)
  function iterator (line 19087) | iterator erase(iterator first, iterator last)
  function size_type (line 19140) | size_type count(const key_type& key) const
  function size_type (line 19154) | size_type count(KeyType && key) const
  function iterator (line 19166) | iterator find(const key_type& key)
  function iterator (line 19180) | iterator find(KeyType && key)
  function const_iterator (line 19192) | const_iterator find(const key_type& key) const
  function insert (line 19204) | std::pair<iterator, bool> insert( value_type&& value )
  function insert (line 19209) | std::pair<iterator, bool> insert( const value_type& value )
  function insert (line 19227) | void insert(InputIt first, InputIt last)
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 19252) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function set_parents (line 19871) | void set_parents()
  function iterator (line 19908) | iterator set_parents(iterator it, typename iterator::difference_type cou...
  function reference (line 19921) | reference set_parent(reference j, std::size_t old_capacity = static_cast...
  function basic_json (line 19983) | basic_json(const value_t v)
  function basic_json (line 19991) | basic_json(std::nullptr_t = nullptr) noexcept // NOLINT(bugprone-excepti...
  function basic_json (line 20003) | basic_json(CompatibleType && val) noexcept(noexcept( // NOLINT(bugprone-...
  function basic_json (line 20017) | basic_json(const BasicJsonType& val)
  function basic_json (line 20070) | basic_json(initializer_list_t init,
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20125) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20136) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20147) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20158) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20169) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20177) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function basic_json (line 20185) | basic_json(size_type cnt, const basic_json& val)
  function basic_json (line 20198) | basic_json(InputIT first, InputIT last)
  function basic_json (line 20308) | basic_json(const JsonRef& ref) : basic_json(ref.moved_or_copied()) {}
  function basic_json (line 20312) | basic_json(const basic_json& other)
  function basic_json (line 20380) | basic_json(basic_json&& other) noexcept
  function basic_json (line 20397) | basic_json& operator=(basic_json other) noexcept (
  function value_t (line 20459) | constexpr value_t type() const noexcept
  function is_primitive (line 20466) | constexpr bool is_primitive() const noexcept
  function is_structured (line 20473) | constexpr bool is_structured() const noexcept
  function is_null (line 20480) | constexpr bool is_null() const noexcept
  function is_boolean (line 20487) | constexpr bool is_boolean() const noexcept
  function is_number (line 20494) | constexpr bool is_number() const noexcept
  function is_number_integer (line 20501) | constexpr bool is_number_integer() const noexcept
  function is_number_unsigned (line 20508) | constexpr bool is_number_unsigned() const noexcept
  function is_number_float (line 20515) | constexpr bool is_number_float() const noexcept
  function is_object (line 20522) | constexpr bool is_object() const noexcept
  function is_array (line 20529) | constexpr bool is_array() const noexcept
  function is_string (line 20536) | constexpr bool is_string() const noexcept
  function is_binary (line 20543) | constexpr bool is_binary() const noexcept
  function is_discarded (line 20550) | constexpr bool is_discarded() const noexcept
  function object_t (line 20581) | object_t* get_impl_ptr(object_t* /*unused*/) noexcept
  function object_t (line 20587) | constexpr const object_t* get_impl_ptr(const object_t* /*unused*/) const...
  function array_t (line 20593) | array_t* get_impl_ptr(array_t* /*unused*/) noexcept
  function array_t (line 20599) | constexpr const array_t* get_impl_ptr(const array_t* /*unused*/) const n...
  function string_t (line 20605) | string_t* get_impl_ptr(string_t* /*unused*/) noexcept
  function string_t (line 20611) | constexpr const string_t* get_impl_ptr(const string_t* /*unused*/) const...
  function boolean_t (line 20617) | boolean_t* get_impl_ptr(boolean_t* /*unused*/) noexcept
  function boolean_t (line 20623) | constexpr const boolean_t* get_impl_ptr(const boolean_t* /*unused*/) con...
  function number_integer_t (line 20629) | number_integer_t* get_impl_ptr(number_integer_t* /*unused*/) noexcept
  function number_integer_t (line 20635) | constexpr const number_integer_t* get_impl_ptr(const number_integer_t* /...
  function number_unsigned_t (line 20641) | number_unsigned_t* get_impl_ptr(number_unsigned_t* /*unused*/) noexcept
  function number_unsigned_t (line 20647) | constexpr const number_unsigned_t* get_impl_ptr(const number_unsigned_t*...
  function number_float_t (line 20653) | number_float_t* get_impl_ptr(number_float_t* /*unused*/) noexcept
  function number_float_t (line 20659) | constexpr const number_float_t* get_impl_ptr(const number_float_t* /*unu...
  function binary_t (line 20665) | binary_t* get_impl_ptr(binary_t* /*unused*/) noexcept
  function binary_t (line 20671) | constexpr const binary_t* get_impl_ptr(const binary_t* /*unused*/) const...
  function ReferenceType (line 20688) | static ReferenceType get_ref_impl(ThisType& obj)
  function get_ptr (line 20721) | constexpr auto get_ptr() const noexcept -> decltype(std::declval<const b...
  function ValueType (line 20813) | ValueType get_impl(detail::priority_tag<1> /*unused*/) const noexcept(no...
  function BasicJsonType (line 20838) | BasicJsonType get_impl(detail::priority_tag<2> /*unused*/) const
  function basic_json (line 20861) | basic_json get_impl(detail::priority_tag<3> /*unused*/) const
  function get_impl (line 20874) | constexpr auto get_impl(detail::priority_tag<4> /*unused*/) const noexcept
  function get (line 20950) | auto get() noexcept -> decltype(std::declval<basic_json_t&>().template g...
  function ValueType (line 20963) | ValueType & get_to(ValueType& v) const noexcept(noexcept(
  function ValueType (line 20976) | ValueType & get_to(ValueType& v) const
  function Array (line 20987) | Array get_to(T (&v)[N]) const // NOLINT(cppcoreguidelines-avoid-c-arrays...
  function ReferenceType (line 20999) | ReferenceType get_ref()
  function ReferenceType (line 21010) | ReferenceType get_ref() const
  function binary_t (line 21069) | binary_t& get_binary()
  function binary_t (line 21081) | const binary_t& get_binary() const
  function reference (line 21104) | reference at(size_type idx)
  function const_reference (line 21127) | const_reference at(size_type idx) const
  function reference (line 21150) | reference at(const typename object_t::key_type& key)
  function reference (line 21170) | reference at(KeyType && key)
  function const_reference (line 21188) | const_reference at(const typename object_t::key_type& key) const
  function const_reference (line 21208) | const_reference at(KeyType && key) const
  function reference (line 21226) | reference operator[](size_type idx)
  function const_reference (line 21272) | const_reference operator[](size_type idx) const
  function reference (line 21285) | reference operator[](typename object_t::key_type key)
  function const_reference (line 21307) | const_reference operator[](const typename object_t::key_type& key) const
  function reference (line 21323) | reference operator[](T* key)
  function const_reference (line 21329) | const_reference operator[](T* key) const
  function reference (line 21338) | reference operator[](KeyType && key)
  function const_reference (line 21362) | const_reference operator[](KeyType && key) const
  class ValueType (line 21388) | class ValueType
  function ReturnType (line 21417) | ReturnType value(const typename object_t::key_type& key, ValueType && de...
  function ValueType (line 21443) | ValueType value(KeyType && key, const ValueType& default_value) const
  function ReturnType (line 21470) | ReturnType value(KeyType && key, ValueType && default_value) const
  function ValueType (line 21493) | ValueType value(const json_pointer& ptr, const ValueType& default_value)...
  function ReturnType (line 21518) | ReturnType value(const json_pointer& ptr, ValueType && default_value) const
  function ValueType (line 21542) | ValueType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, cons...
  function ReturnType (line 21553) | ReturnType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, Val...
  function reference (line 21560) | reference front()
  function const_reference (line 21567) | const_reference front() const
  function reference (line 21574) | reference back()
  function const_reference (line 21583) | const_reference back() const
  function IteratorType (line 21595) | IteratorType erase(IteratorType pos)
  function IteratorType (line 21665) | IteratorType erase(IteratorType first, IteratorType last)
  function erase_internal (line 21733) | private:
  function size_type (line 21749) | size_type erase_internal(KeyType && key)
  function size_type (line 21781) | size_type erase(KeyType && key)
  function erase (line 21788) | void erase(const size_type idx)
  function iterator (line 21818) | iterator find(const typename object_t::key_type& key)
  function const_iterator (line 21832) | const_iterator find(const typename object_t::key_type& key) const
  function iterator (line 21848) | iterator find(KeyType && key)
  function const_iterator (line 21864) | const_iterator find(KeyType && key) const
  function size_type (line 21878) | size_type count(const typename object_t::key_type& key) const
  function size_type (line 21888) | size_type count(KeyType && key) const
  function contains (line 21896) | bool contains(const typename object_t::key_type& key) const
  function contains (line 21905) | bool contains(KeyType && key) const
  function contains (line 21912) | bool contains(const json_pointer& ptr) const
  function contains (line 21919) | bool contains(const typename ::nlohmann::json_pointer<BasicJsonType>& pt...
  function iterator (line 21936) | iterator begin() noexcept
  function const_iterator (line 21945) | const_iterator begin() const noexcept
  function const_iterator (line 21952) | const_iterator cbegin() const noexcept
  function iterator (line 21961) | iterator end() noexcept
  function const_iterator (line 21970) | const_iterator end() const noexcept
  function const_iterator (line 21977) | const_iterator cend() const noexcept
  function reverse_iterator (line 21986) | reverse_iterator rbegin() noexcept
  function const_reverse_iterator (line 21993) | const_reverse_iterator rbegin() const noexcept
  function reverse_iterator (line 22000) | reverse_iterator rend() noexcept
  function const_reverse_iterator (line 22007) | const_reverse_iterator rend() const noexcept
  function const_reverse_iterator (line 22014) | const_reverse_iterator crbegin() const noexcept
  function const_reverse_iterator (line 22021) | const_reverse_iterator crend() const noexcept
  function iterator_wrapper (line 22033) | static iteration_proxy<iterator> iterator_wrapper(reference ref) noexcept
  function iterator_wrapper (line 22044) | static iteration_proxy<const_iterator> iterator_wrapper(const_reference ...
  function items (line 22051) | iteration_proxy<iterator> items() noexcept
  function items (line 22058) | iteration_proxy<const_iterator> items() const noexcept
  function empty (line 22075) | bool empty() const noexcept
  function size_type (line 22114) | size_type size() const noexcept
  function size_type (line 22153) | size_type max_size() const noexcept
  function clear (line 22197) | void clear() noexcept
  function push_back (line 22258) | void push_back(basic_json&& val)
  function reference (line 22283) | reference operator+=(basic_json&& val)
  function push_back (line 22291) | void push_back(const basic_json& val)
  function reference (line 22315) | reference operator+=(const basic_json& val)
  function push_back (line 22323) | void push_back(const typename object_t::value_type& val)
  function reference (line 22346) | reference operator+=(const typename object_t::value_type& val)
  function push_back (line 22354) | void push_back(initializer_list_t init)
  function reference (line 22370) | reference operator+=(initializer_list_t init)
  function reference (line 22379) | reference emplace_back(Args&& ... args)
  function emplace (line 22404) | std::pair<iterator, bool> emplace(Args&& ... args)
  function iterator (line 22436) | iterator insert_iterator(const_iterator pos, Args&& ... args)
  function iterator (line 22455) | iterator insert(const_iterator pos, const basic_json& val)
  function iterator (line 22475) | iterator insert(const_iterator pos, basic_json&& val)
  function iterator (line 22482) | iterator insert(const_iterator pos, size_type cnt, const basic_json& val)
  function iterator (line 22502) | iterator insert(const_iterator pos, const_iterator first, const_iterator...
  function iterator (line 22533) | iterator insert(const_iterator pos, initializer_list_t ilist)
  function insert (line 22553) | void insert(const_iterator first, const_iterator last)
  function update (line 22578) | void update(const_reference j, bool merge_objects = false)
  function update (line 22585) | void update(const_iterator first, const_iterator last, bool merge_object...
  function swap (line 22632) | void swap(reference other) noexcept (
  function friend (line 22649) | friend void swap(reference left, reference right) noexcept (
  function swap (line 22661) | void swap(array_t& other) // NOLINT(bugprone-exception-escape)
  function swap (line 22677) | void swap(object_t& other) // NOLINT(bugprone-exception-escape)
  function swap (line 22693) | void swap(string_t& other) // NOLINT(bugprone-exception-escape)
  function swap (line 22709) | void swap(binary_t& other) // NOLINT(bugprone-exception-escape)
  function swap (line 22725) | void swap(typename binary_t::container_type& other) // NOLINT(bugprone-e...
  function else (line 22814) | else if(compares_unordered(lhs, rhs))\
  function compares_unordered (line 22843) | bool compares_unordered(const_reference rhs, bool inverse = false) const...
  function friend (line 22956) | friend bool operator==(const_reference lhs, const_reference rhs) noexcept
  function friend (line 22988) | friend bool operator!=(const_reference lhs, const_reference rhs) noexcept
  function friend (line 23045) | friend bool operator<=(const_reference lhs, const_reference rhs) noexcept
  function friend (line 23074) | friend bool operator>(const_reference lhs, const_reference rhs) noexcept
  function friend (line 23104) | friend bool operator>=(const_reference lhs, const_reference rhs) noexcept
  function friend (line 23145) | friend std::ostream& operator<<(std::ostream& o, const basic_json& j)
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23185) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23199) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function basic_json (line 23213) | static basic_json parse(detail::span_input_adapter&& i,
  function accept (line 23226) | static bool accept(InputType&& i,
  function accept (line 23235) | static bool accept(IteratorType first, IteratorType last,
  function accept (line 23243) | static bool accept(detail::span_input_adapter&& i,
  function sax_parse (line 23253) | static bool sax_parse(InputType&& i, SAX* sax,
  function sax_parse (line 23268) | static bool sax_parse(IteratorType first, IteratorType last, SAX* sax,
  function sax_parse (line 23287) | static bool sax_parse(detail::span_input_adapter&& i, SAX* sax,
  function JSON_HEDLEY_RETURNS_NON_NULL (line 23328) | JSON_HEDLEY_RETURNS_NON_NULL
  function to_cbor (line 23391) | static void to_cbor(const basic_json& j, detail::output_adapter<std::uin...
  function to_cbor (line 23398) | static void to_cbor(const basic_json& j, detail::output_adapter<char> o)
  function to_msgpack (line 23405) | static std::vector<std::uint8_t> to_msgpack(const basic_json& j)
  function to_msgpack (line 23414) | static void to_msgpack(const basic_json& j, detail::output_adapter<std::...
  function to_msgpack (line 23421) | static void to_msgpack(const basic_json& j, detail::output_adapter<char> o)
  function to_ubjson (line 23428) | static std::vector<std::uint8_t> to_ubjson(const basic_json& j,
  function to_ubjson (line 23439) | static void to_ubjson(const basic_json& j, detail::output_adapter<std::u...
  function to_ubjson (line 23447) | static void to_ubjson(const basic_json& j, detail::output_adapter<char> o,
  function to_bjdata (line 23455) | static std::vector<std::uint8_t> to_bjdata(const basic_json& j,
  function to_bjdata (line 23466) | static void to_bjdata(const basic_json& j, detail::output_adapter<std::u...
  function to_bjdata (line 23474) | static void to_bjdata(const basic_json& j, detail::output_adapter<char> o,
  function to_bson (line 23482) | static std::vector<std::uint8_t> to_bson(const basic_json& j)
  function to_bson (line 23491) | static void to_bson(const basic_json& j, detail::output_adapter<std::uin...
  function to_bson (line 23498) | static void to_bson(const basic_json& j, detail::output_adapter<char> o)
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23506) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23522) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function basic_json (line 23538) | static basic_json from_cbor(const T* ptr, std::size_t len,
  function basic_json (line 23549) | static basic_json from_cbor(detail::span_input_adapter&& i,
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23565) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23580) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function basic_json (line 23595) | static basic_json from_msgpack(const T* ptr, std::size_t len,
  function basic_json (line 23604) | static basic_json from_msgpack(detail::span_input_adapter&& i,
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23619) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23634) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function basic_json (line 23649) | static basic_json from_ubjson(const T* ptr, std::size_t len,
  function basic_json (line 23658) | static basic_json from_ubjson(detail::span_input_adapter&& i,
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23674) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23689) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23704) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23719) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function basic_json (line 23734) | static basic_json from_bson(const T* ptr, std::size_t len,
  function basic_json (line 23743) | static basic_json from_bson(detail::span_input_adapter&& i,
  function reference (line 23765) | reference operator[](const json_pointer& ptr)
  function reference (line 23772) | reference operator[](const ::nlohmann::json_pointer<BasicJsonType>& ptr)
  function const_reference (line 23779) | const_reference operator[](const json_pointer& ptr) const
  function const_reference (line 23786) | const_reference operator[](const ::nlohmann::json_pointer<BasicJsonType>...
  function reference (line 23793) | reference at(const json_pointer& ptr)
  function reference (line 23800) | reference at(const ::nlohmann::json_pointer<BasicJsonType>& ptr)
  function const_reference (line 23807) | const_reference at(const json_pointer& ptr) const
  function const_reference (line 23814) | const_reference at(const ::nlohmann::json_pointer<BasicJsonType>& ptr) c...
  function basic_json (line 23821) | basic_json flatten() const
  function basic_json (line 23830) | basic_json unflatten() const
  function patch_inplace (line 23846) | void patch_inplace(const basic_json& json_patch)
  function basic_json (line 24117) | basic_json patch(const basic_json& json_patch) const
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 24126) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function merge_patch (line 24269) | void merge_patch(const basic_json& apply_patch)
  function NLOHMANN_BASIC_JSON_TPL_DECLARATION (line 24300) | NLOHMANN_BASIC_JSON_TPL_DECLARATION
  type literals (line 24306) | inline namespace literals
    type json_literals (line 24308) | inline namespace json_literals
  function NLOHMANN_JSON_NAMESPACE_END (line 24329) | NLOHMANN_JSON_NAMESPACE_END

FILE: third-party/l4z/lz4.c
  function LZ4_isAligned (line 290) | static int LZ4_isAligned(const void* ptr, size_t alignment)
  type BYTE (line 302) | typedef  uint8_t BYTE;
  type U16 (line 303) | typedef uint16_t U16;
  type U32 (line 304) | typedef uint32_t U32;
  type S32 (line 305) | typedef  int32_t S32;
  type U64 (line 306) | typedef uint64_t U64;
  type uptrval (line 307) | typedef uintptr_t uptrval;
  type BYTE (line 312) | typedef unsigned char       BYTE;
  type U16 (line 313) | typedef unsigned short      U16;
  type U32 (line 314) | typedef unsigned int        U32;
  type S32 (line 315) | typedef   signed int        S32;
  type U64 (line 316) | typedef unsigned long long  U64;
  type uptrval (line 317) | typedef size_t              uptrval;
  type U64 (line 321) | typedef U64    reg_t;
  type reg_t (line 323) | typedef size_t reg_t;
  type limitedOutput_directive (line 326) | typedef enum {
  function LZ4_isLittleEndian (line 361) | static unsigned LZ4_isLittleEndian(void)
  function U16 (line 371) | static U16 LZ4_read16(const void* memPtr) { return *(const U16*) memPtr; }
  function U32 (line 372) | static U32 LZ4_read32(const void* memPtr) { return *(const U32*) memPtr; }
  function reg_t (line 373) | static reg_t LZ4_read_ARCH(const void* memPtr) { return *(const reg_t*) ...
  function LZ4_write16 (line 375) | static void LZ4_write16(void* memPtr, U16 value) { *(U16*)memPtr = value; }
  function LZ4_write32 (line 376) | static void LZ4_write32(void* memPtr, U32 value) { *(U32*)memPtr = value; }
  type LZ4_unalign (line 382) | typedef union { U16 u16; U32 u32; reg_t uArch; } __attribute__((packed))...
  function U16 (line 384) | static U16 LZ4_read16(const void* ptr) { return ((const LZ4_unalign*)ptr...
  function U32 (line 385) | static U32 LZ4_read32(const void* ptr) { return ((const LZ4_unalign*)ptr...
  function reg_t (line 386) | static reg_t LZ4_read_ARCH(const void* ptr) { return ((const LZ4_unalign...
  function LZ4_write16 (line 388) | static void LZ4_write16(void* memPtr, U16 value) { ((LZ4_unalign*)memPtr...
  function LZ4_write32 (line 389) | static void LZ4_write32(void* memPtr, U32 value) { ((LZ4_unalign*)memPtr...
  function U16 (line 393) | static U16 LZ4_read16(const void* memPtr)
  function U32 (line 398) | static U32 LZ4_read32(const void* memPtr)
  function reg_t (line 403) | static reg_t LZ4_read_ARCH(const void* memPtr)
  function LZ4_write16 (line 408) | static void LZ4_write16(void* memPtr, U16 value)
  function LZ4_write32 (line 413) | static void LZ4_write32(void* memPtr, U32 value)
  function U16 (line 421) | static U16 LZ4_readLE16(const void* memPtr)
  function LZ4_writeLE16 (line 431) | static void LZ4_writeLE16(void* memPtr, U16 value)
  function LZ4_FORCE_INLINE (line 443) | LZ4_FORCE_INLINE
  function LZ4_FORCE_INLINE (line 474) | LZ4_FORCE_INLINE void
  function LZ4_FORCE_INLINE (line 500) | LZ4_FORCE_INLINE void
  function LZ4_FORCE_INLINE (line 513) | LZ4_FORCE_INLINE void
  function LZ4_NbCommonBytes (line 558) | static unsigned LZ4_NbCommonBytes (reg_t val)
  function LZ4_count (line 658) | LZ4_FORCE_INLINE
  type tableType_t (line 696) | typedef enum { clearedTable = 0, byPtr, byU32, byU16 } tableType_t;
  type dict_directive (line 721) | typedef enum { noDict = 0, withPrefix64k, usingExtDict, usingDictCtx } d...
  type dictIssue_directive (line 722) | typedef enum { noDictIssue = 0, dictSmall } dictIssue_directive;
  function LZ4_versionNumber (line 728) | int LZ4_versionNumber (void) { return LZ4_VERSION_NUMBER; }
  function LZ4_compressBound (line 730) | int LZ4_compressBound(int isize)  { return LZ4_COMPRESSBOUND(isize); }
  function LZ4_sizeofState (line 731) | int LZ4_sizeofState(void) { return sizeof(LZ4_stream_t); }
  function LZ4_FORCE_INLINE (line 756) | LZ4_FORCE_INLINE U32 LZ4_hash4(U32 sequence, tableType_t const tableType)
  function LZ4_FORCE_INLINE (line 764) | LZ4_FORCE_INLINE U32 LZ4_hash5(U64 sequence, tableType_t const tableType)
  function LZ4_FORCE_INLINE (line 776) | LZ4_FORCE_INLINE U32 LZ4_hashPosition(const void* const p, tableType_t c...
  function LZ4_FORCE_INLINE (line 782) | LZ4_FORCE_INLINE void LZ4_clearHash(U32 h, void* tableBase, tableType_t ...
  function LZ4_FORCE_INLINE (line 794) | LZ4_FORCE_INLINE void LZ4_putIndexOnHash(U32 idx, U32 h, void* tableBase...
  function LZ4_FORCE_INLINE (line 806) | LZ4_FORCE_INLINE void LZ4_putPositionOnHash(const BYTE* p, U32 h,
  function LZ4_FORCE_INLINE (line 819) | LZ4_FORCE_INLINE void LZ4_putPosition(const BYTE* p, void* tableBase, ta...
  function LZ4_FORCE_INLINE (line 831) | LZ4_FORCE_INLINE U32 LZ4_getIndexOnHash(U32 h, const void* tableBase, ta...
  function BYTE (line 847) | static const BYTE* LZ4_getPositionOnHash(U32 h, const void* tableBase, t...
  function LZ4_FORCE_INLINE (line 854) | LZ4_FORCE_INLINE const BYTE*
  function LZ4_FORCE_INLINE (line 863) | LZ4_FORCE_INLINE void
  function LZ4_FORCE_INLINE (line 910) | LZ4_FORCE_INLINE int LZ4_compress_generic_validated(
  function LZ4_FORCE_INLINE (line 1308) | LZ4_FORCE_INLINE int LZ4_compress_generic(
  function LZ4_compress_fast_extState (line 1346) | int LZ4_compress_fast_extState(void* state, const char* source, char* de...
  function LZ4_compress_fast_extState_fastReset (line 1378) | int LZ4_compress_fast_extState_fastReset(void* state, const char* src, c...
  function LZ4_compress_fast (line 1416) | int LZ4_compress_fast(const char* source, char* dest, int inputSize, int...
  function LZ4_compress_default (line 1435) | int LZ4_compress_default(const char* src, char* dst, int srcSize, int ma...
  function LZ4_compress_destSize_extState (line 1444) | static int LZ4_compress_destSize_extState (LZ4_stream_t* state, const ch...
  function LZ4_compress_destSize (line 1461) | int LZ4_compress_destSize(const char* src, char* dst, int* srcSizePtr, i...
  function LZ4_stream_t (line 1486) | LZ4_stream_t* LZ4_createStream(void)
  function LZ4_stream_t_alignment (line 1497) | static size_t LZ4_stream_t_alignment(void)
  function LZ4_stream_t (line 1507) | LZ4_stream_t* LZ4_initStream (void* buffer, size_t size)
  function LZ4_resetStream (line 1519) | void LZ4_resetStream (LZ4_stream_t* LZ4_stream)
  function LZ4_resetStream_fast (line 1525) | void LZ4_resetStream_fast(LZ4_stream_t* ctx) {
  function LZ4_freeStream (line 1530) | int LZ4_freeStream (LZ4_stream_t* LZ4_stream)
  function LZ4_loadDict (line 1541) | int LZ4_loadDict (LZ4_stream_t* LZ4_dict, const char* dictionary, int di...
  function LZ4_attach_dictionary (line 1583) | void LZ4_attach_dictionary(LZ4_stream_t* workingStream, const LZ4_stream...
  function LZ4_renormDictT (line 1612) | static void LZ4_renormDictT(LZ4_stream_t_internal* LZ4_dict, int nextSize)
  function LZ4_compress_fast_continue (line 1632) | int LZ4_compress_fast_continue (LZ4_stream_t* LZ4_stream,
  function LZ4_compress_forceExtDict (line 1712) | int LZ4_compress_forceExtDict (LZ4_stream_t* LZ4_dict, const char* sourc...
  function LZ4_saveDict (line 1739) | int LZ4_saveDict (LZ4_stream_t* LZ4_dict, char* safeBuffer, int dictSize)
  type earlyEnd_directive (line 1767) | typedef enum { decode_full_block = 0, partial_decode = 1 } earlyEnd_dire...
  function read_long_length_no_check (line 1777) | size_t read_long_length_no_check(const BYTE** pp)
  function LZ4_FORCE_INLINE (line 1794) | LZ4_FORCE_INLINE int
  type Rvl_t (line 1901) | typedef size_t Rvl_t;
  function LZ4_FORCE_INLINE (line 1903) | LZ4_FORCE_INLINE Rvl_t
  function LZ4_FORCE_O2 (line 2344) | LZ4_FORCE_O2
  function LZ4_FORCE_O2 (line 2352) | LZ4_FORCE_O2
  function LZ4_FORCE_O2 (line 2361) | LZ4_FORCE_O2
  function LZ4_FORCE_O2 (line 2372) | LZ4_FORCE_O2 /* Exported, an obsolete API function. */
  function LZ4_FORCE_O2 (line 2380) | LZ4_FORCE_O2
  function LZ4_decompress_fast_withPrefix64k (line 2390) | int LZ4_decompress_fast_withPrefix64k(const char* source, char* dest, in...
  function LZ4_FORCE_O2 (line 2397) | LZ4_FORCE_O2
  function LZ4_FORCE_O2 (line 2406) | LZ4_FORCE_O2
  function LZ4_FORCE_O2 (line 2416) | LZ4_FORCE_O2
  function LZ4_FORCE_O2 (line 2426) | LZ4_FORCE_O2
  function LZ4_FORCE_O2 (line 2437) | LZ4_FORCE_O2
  function LZ4_FORCE_INLINE (line 2450) | LZ4_FORCE_INLINE
  function LZ4_streamDecode_t (line 2462) | LZ4_streamDecode_t* LZ4_createStreamDecode(void)
  function LZ4_freeStreamDecode (line 2468) | int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream)
  function LZ4_setStreamDecode (line 2482) | int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const cha...
  function LZ4_decoderRingBufferSize (line 2508) | int LZ4_decoderRingBufferSize(int maxBlockSize)
  function LZ4_FORCE_O2 (line 2523) | LZ4_FORCE_O2
  function LZ4_FORCE_O2 (line 2563) | LZ4_FORCE_O2 int
  function LZ4_decompress_safe_usingDict (line 2612) | int LZ4_decompress_safe_usingDict(const char* source, char* dest, int co...
  function LZ4_decompress_safe_partial_usingDict (line 2627) | int LZ4_decompress_safe_partial_usingDict(const char* source, char* dest...
  function LZ4_decompress_fast_usingDict (line 2642) | int LZ4_decompress_fast_usingDict(const char* source, char* dest, int or...
  function LZ4_compress_limitedOutput (line 2657) | int LZ4_compress_limitedOutput(const char* source, char* dest, int input...
  function LZ4_compress (line 2661) | int LZ4_compress(const char* src, char* dest, int srcSize)
  function LZ4_compress_limitedOutput_withState (line 2665) | int LZ4_compress_limitedOutput_withState (void* state, const char* src, ...
  function LZ4_compress_withState (line 2669) | int LZ4_compress_withState (void* state, const char* src, char* dst, int...
  function LZ4_compress_limitedOutput_continue (line 2673) | int LZ4_compress_limitedOutput_continue (LZ4_stream_t* LZ4_stream, const...
  function LZ4_compress_continue (line 2677) | int LZ4_compress_continue (LZ4_stream_t* LZ4_stream, const char* source,...
  function LZ4_uncompress (line 2688) | int LZ4_uncompress (const char* source, char* dest, int outputSize)
  function LZ4_uncompress_unknownOutputSize (line 2692) | int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, in...
  function LZ4_sizeofStreamState (line 2699) | int LZ4_sizeofStreamState(void) { return sizeof(LZ4_stream_t); }
  function LZ4_resetStreamState (line 2701) | int LZ4_resetStreamState(void* state, char* inputBuffer)

FILE: third-party/l4z/lz4.h
  type LZ4_stream_t (line 312) | typedef union LZ4_stream_u LZ4_stream_t;
  type LZ4_streamDecode_t (line 410) | typedef union LZ4_streamDecode_u LZ4_streamDecode_t;
  type LZ4_i8 (line 660) | typedef  int8_t  LZ4_i8;
  type LZ4_byte (line 661) | typedef uint8_t  LZ4_byte;
  type LZ4_u16 (line 662) | typedef uint16_t LZ4_u16;
  type LZ4_u32 (line 663) | typedef uint32_t LZ4_u32;
  type LZ4_i8 (line 665) | typedef   signed char  LZ4_i8;
  type LZ4_byte (line 666) | typedef unsigned char  LZ4_byte;
  type LZ4_u16 (line 667) | typedef unsigned short LZ4_u16;
  type LZ4_u32 (line 668) | typedef unsigned int   LZ4_u32;
  type LZ4_stream_t_internal (line 677) | typedef struct LZ4_stream_t_internal LZ4_stream_t_internal;
  type LZ4_stream_t_internal (line 678) | struct LZ4_stream_t_internal {
  type LZ4_streamDecode_t_internal (line 717) | typedef struct {

FILE: third-party/l4z/lz4file.c
  type LZ4_readFile_s (line 39) | struct LZ4_readFile_s {
  type LZ4_writeFile_s (line 48) | struct LZ4_writeFile_s {
  function LZ4F_errorCode_t (line 57) | LZ4F_errorCode_t LZ4F_readOpen(LZ4_readFile_t** lz4fRead, FILE* fp)
  function LZ4F_read (line 126) | size_t LZ4F_read(LZ4_readFile_t* lz4fRead, void* buf, size_t size)
  function LZ4F_errorCode_t (line 171) | LZ4F_errorCode_t LZ4F_readClose(LZ4_readFile_t* lz4fRead)
  function LZ4F_errorCode_t (line 181) | LZ4F_errorCode_t LZ4F_writeOpen(LZ4_writeFile_t** lz4fWrite, FILE* fp, c...
  function LZ4F_write (line 250) | size_t LZ4F_write(LZ4_writeFile_t* lz4fWrite, void* buf, size_t size)
  function LZ4F_errorCode_t (line 286) | LZ4F_errorCode_t LZ4F_writeClose(LZ4_writeFile_t* lz4fWrite)

FILE: third-party/l4z/lz4file.h
  type LZ4_readFile_t (line 44) | typedef struct LZ4_readFile_s LZ4_readFile_t;
  type LZ4_writeFile_t (line 45) | typedef struct LZ4_writeFile_s LZ4_writeFile_t;

FILE: third-party/l4z/lz4frame.c
  function LZ4F_free (line 126) | static void LZ4F_free(void* p, LZ4F_CustomMem cmem)
  type BYTE (line 170) | typedef  uint8_t BYTE;
  type U16 (line 171) | typedef uint16_t U16;
  type U32 (line 172) | typedef uint32_t U32;
  type S32 (line 173) | typedef  int32_t S32;
  type U64 (line 174) | typedef uint64_t U64;
  type BYTE (line 176) | typedef unsigned char       BYTE;
  type U16 (line 177) | typedef unsigned short      U16;
  type U32 (line 178) | typedef unsigned int        U32;
  type S32 (line 179) | typedef   signed int        S32;
  type U64 (line 180) | typedef unsigned long long  U64;
  function U32 (line 185) | static U32 LZ4F_readLE32 (const void* src)
  function LZ4F_writeLE32 (line 195) | static void LZ4F_writeLE32 (void* dst, U32 value32)
  function U64 (line 204) | static U64 LZ4F_readLE64 (const void* src)
  function LZ4F_writeLE64 (line 218) | static void LZ4F_writeLE64 (void* dst, U64 value64)
  type LZ4F_blockCompression_t (line 260) | typedef enum { LZ4B_COMPRESSED, LZ4B_UNCOMPRESSED} LZ4F_blockCompression_t;
  type LZ4F_cctx_t (line 262) | typedef struct LZ4F_cctx_s
  function LZ4F_isError (line 290) | unsigned LZ4F_isError(LZ4F_errorCode_t code)
  function LZ4F_errorCodes (line 302) | LZ4F_errorCodes LZ4F_getErrorCode(size_t functionResult)
  function LZ4F_errorCode_t (line 308) | static LZ4F_errorCode_t LZ4F_returnErrorCode(LZ4F_errorCodes code)
  function LZ4F_getVersion (line 321) | unsigned LZ4F_getVersion(void) { return LZ4F_VERSION; }
  function LZ4F_compressionLevel_max (line 323) | int LZ4F_compressionLevel_max(void) { return LZ4HC_CLEVEL_MAX; }
  function LZ4F_getBlockSize (line 325) | size_t LZ4F_getBlockSize(LZ4F_blockSizeID_t blockSizeID)
  function BYTE (line 341) | static BYTE LZ4F_headerChecksum (const void* header, size_t length)
  function LZ4F_blockSizeID_t (line 351) | static LZ4F_blockSizeID_t LZ4F_optimalBSID(const LZ4F_blockSizeID_t requ...
  function LZ4F_compressBound_internal (line 371) | static size_t LZ4F_compressBound_internal(size_t srcSize,
  function LZ4F_compressFrameBound (line 398) | size_t LZ4F_compressFrameBound(size_t srcSize, const LZ4F_preferences_t*...
  function LZ4F_compressFrame_usingCDict (line 420) | size_t LZ4F_compressFrame_usingCDict(LZ4F_cctx* cctx,
  function LZ4F_compressFrame (line 475) | size_t LZ4F_compressFrame(void* dstBuffer, size_t dstCapacity,
  type LZ4F_CDict_s (line 522) | struct LZ4F_CDict_s {
  function LZ4F_CDict (line 529) | LZ4F_CDict*
  function LZ4F_CDict (line 565) | LZ4F_CDict* LZ4F_createCDict(const void* dictBuffer, size_t dictSize)
  function LZ4F_freeCDict (line 571) | void LZ4F_freeCDict(LZ4F_CDict* cdict)
  function LZ4F_cctx (line 585) | LZ4F_cctx*
  function LZ4F_errorCode_t (line 607) | LZ4F_errorCode_t
  function LZ4F_errorCode_t (line 620) | LZ4F_errorCode_t LZ4F_freeCompressionContext(LZ4F_cctx* cctxPtr)
  function LZ4F_initStream (line 639) | static void LZ4F_initStream(void* ctx,
  function ctxTypeID_to_size (line 660) | static int ctxTypeID_to_size(int ctxTypeID) {
  function LZ4F_compressBegin_usingCDict (line 677) | size_t LZ4F_compressBegin_usingCDict(LZ4F_cctx* cctxPtr,
  function LZ4F_compressBegin (line 795) | size_t LZ4F_compressBegin(LZ4F_cctx* cctxPtr,
  function LZ4F_compressBound (line 809) | size_t LZ4F_compressBound(size_t srcSize, const LZ4F_preferences_t* pref...
  function LZ4F_makeBlock (line 825) | static size_t LZ4F_makeBlock(void* dst,
  function LZ4F_compressBlock (line 853) | static int LZ4F_compressBlock(void* ctx, const char* src, char* dst, int...
  function LZ4F_compressBlock_continue (line 865) | static int LZ4F_compressBlock_continue(void* ctx, const char* src, char*...
  function LZ4F_compressBlockHC (line 873) | static int LZ4F_compressBlockHC(void* ctx, const char* src, char* dst, i...
  function LZ4F_compressBlockHC_continue (line 882) | static int LZ4F_compressBlockHC_continue(void* ctx, const char* src, cha...
  function LZ4F_doNotCompressBlock (line 888) | static int LZ4F_doNotCompressBlock(void* ctx, const char* src, char* dst...
  function compressFunc_t (line 894) | static compressFunc_t LZ4F_selectCompression(LZ4F_blockMode_t blockMode,...
  function LZ4F_localSaveDict (line 906) | static int LZ4F_localSaveDict(LZ4F_cctx_t* cctxPtr)
  type LZ4F_lastBlockStatus (line 913) | typedef enum { notDone, fromTmpBuffer, fromSrcBuffer } LZ4F_lastBlockSta...
  function LZ4F_compressUpdateImpl (line 930) | static size_t LZ4F_compressUpdateImpl(LZ4F_cctx* cctxPtr,
  function LZ4F_compressUpdate (line 1060) | size_t LZ4F_compressUpdate(LZ4F_cctx* cctxPtr,
  function LZ4F_uncompressedUpdate (line 1084) | size_t LZ4F_uncompressedUpdate(LZ4F_cctx* cctxPtr,
  function LZ4F_flush (line 1104) | size_t LZ4F_flush(LZ4F_cctx* cctxPtr,
  function LZ4F_compressEnd (line 1151) | size_t LZ4F_compressEnd(LZ4F_cctx* cctxPtr,
  type dStage_t (line 1194) | typedef enum {
  type LZ4F_dctx_s (line 1206) | struct LZ4F_dctx_s {
  function LZ4F_dctx (line 1230) | LZ4F_dctx* LZ4F_createDecompressionContext_advanced(LZ4F_CustomMem custo...
  function LZ4F_errorCode_t (line 1246) | LZ4F_errorCode_t
  function LZ4F_errorCode_t (line 1259) | LZ4F_errorCode_t LZ4F_freeDecompressionContext(LZ4F_dctx* dctx)
  function LZ4F_resetDecompressionContext (line 1274) | void LZ4F_resetDecompressionContext(LZ4F_dctx* dctx)
  function LZ4F_decodeHeader (line 1291) | static size_t LZ4F_decodeHeader(LZ4F_dctx* dctx, const void* src, size_t...
  function LZ4F_headerSize (line 1387) | size_t LZ4F_headerSize(const void* src, size_t srcSize)
  function LZ4F_errorCode_t (line 1428) | LZ4F_errorCode_t LZ4F_getFrameInfo(LZ4F_dctx* dctx,
  function LZ4F_updateDict (line 1470) | static void LZ4F_updateDict(LZ4F_dctx* dctx,
  function LZ4F_decompress (line 1556) | size_t LZ4F_decompress(LZ4F_dctx* dctx,
  function LZ4F_decompress_usingDict (line 2065) | size_t LZ4F_decompress_usingDict(LZ4F_dctx* dctx,

FILE: third-party/l4z/lz4frame.h
  type LZ4F_errorCode_t (line 103) | typedef size_t LZ4F_errorCode_t;
  type LZ4F_blockSizeID_t (line 123) | typedef enum {
  type LZ4F_blockMode_t (line 138) | typedef enum {
  type LZ4F_contentChecksum_t (line 145) | typedef enum {
  type LZ4F_blockChecksum_t (line 152) | typedef enum {
  type LZ4F_frameType_t (line 157) | typedef enum {
  type LZ4F_blockSizeID_t (line 164) | typedef LZ4F_blockSizeID_t blockSizeID_t;
  type LZ4F_blockMode_t (line 165) | typedef LZ4F_blockMode_t blockMode_t;
  type LZ4F_frameType_t (line 166) | typedef LZ4F_frameType_t frameType_t;
  type LZ4F_contentChecksum_t (line 167) | typedef LZ4F_contentChecksum_t contentChecksum_t;
  type LZ4F_frameInfo_t (line 175) | typedef struct {
  type LZ4F_preferences_t (line 192) | typedef struct {
  type LZ4F_cctx (line 232) | typedef struct LZ4F_cctx_s LZ4F_cctx;
  type LZ4F_cctx (line 233) | typedef LZ4F_cctx* LZ4F_compressionContext_t;
  type LZ4F_compressOptions_t (line 235) | typedef struct {
  type LZ4F_dctx (line 354) | typedef struct LZ4F_dctx_s LZ4F_dctx;
  type LZ4F_dctx (line 355) | typedef LZ4F_dctx* LZ4F_decompressionContext_t;
  type LZ4F_decompressOptions_t (line 357) | typedef struct {
  type LZ4F_errorCodes (line 556) | typedef enum { LZ4F_LIST_ERRORS(LZ4F_GENERATE_ENUM)
  type LZ4F_CDict (line 608) | typedef struct LZ4F_CDict_s LZ4F_CDict;
  type LZ4F_CustomMem (line 671) | typedef struct {

FILE: third-party/l4z/lz4hc.c
  type dictCtx_directive (line 71) | typedef enum { noDictCtx, usingDictCtxHc } dictCtx_directive;
  function U32 (line 88) | static U32 LZ4HC_hashPtr(const void* ptr) { return HASH_FUNCTION(LZ4_rea...
  function LZ4HC_clearTables (line 94) | static void LZ4HC_clearTables (LZ4HC_CCtx_internal* hc4)
  function LZ4HC_init_internal (line 100) | static void LZ4HC_init_internal (LZ4HC_CCtx_internal* hc4, const BYTE* s...
  function LZ4_FORCE_INLINE (line 120) | LZ4_FORCE_INLINE void LZ4HC_Insert (LZ4HC_CCtx_internal* hc4, const BYTE...
  function LZ4_FORCE_INLINE (line 145) | LZ4_FORCE_INLINE
  function U32 (line 167) | static U32 LZ4HC_rotatePattern(size_t const rotate, U32 const pattern)
  function LZ4HC_countPattern (line 176) | static unsigned
  function LZ4HC_reverseCountPattern (line 209) | static unsigned
  function LZ4HC_protectDictEnd (line 231) | static int LZ4HC_protectDictEnd(U32 const dictLimit, U32 const matchIndex)
  type repeat_state_e (line 236) | typedef enum { rep_untested, rep_not, rep_confirmed } repeat_state_e;
  type HCfavor_e (line 237) | typedef enum { favorCompressionRatio=0, favorDecompressionSpeed } HCfavo...
  function LZ4_FORCE_INLINE (line 239) | LZ4_FORCE_INLINE int
  function LZ4_FORCE_INLINE (line 449) | LZ4_FORCE_INLINE int
  function LZ4_FORCE_INLINE (line 467) | LZ4_FORCE_INLINE int LZ4HC_encodeSequence (
  function LZ4_FORCE_INLINE (line 553) | LZ4_FORCE_INLINE int LZ4HC_compress_hashChain (
  function LZ4_FORCE_INLINE (line 800) | LZ4_FORCE_INLINE int LZ4HC_compress_generic_internal (
  function LZ4HC_compress_generic_noDictCtx (line 865) | static int
  function LZ4HC_compress_generic_dictCtx (line 880) | static int
  function LZ4HC_compress_generic (line 906) | static int
  function LZ4_sizeofStateHC (line 925) | int LZ4_sizeofStateHC(void) { return (int)sizeof(LZ4_streamHC_t); }
  function LZ4_streamHC_t_alignment (line 927) | static size_t LZ4_streamHC_t_alignment(void)
  function LZ4_compress_HC_extStateHC_fastReset (line 939) | int LZ4_compress_HC_extStateHC_fastReset (void* state, const char* src, ...
  function LZ4_compress_HC_extStateHC (line 951) | int LZ4_compress_HC_extStateHC (void* state, const char* src, char* dst,...
  function LZ4_compress_HC (line 958) | int LZ4_compress_HC(const char* src, char* dst, int srcSize, int dstCapa...
  function LZ4_compress_HC_destSize (line 976) | int LZ4_compress_HC_destSize(void* state, const char* source, char* dest...
  function LZ4_streamHC_t (line 992) | LZ4_streamHC_t* LZ4_createStreamHC(void)
  function LZ4_freeStreamHC (line 1001) | int LZ4_freeStreamHC (LZ4_streamHC_t* LZ4_streamHCPtr)
  function LZ4_streamHC_t (line 1011) | LZ4_streamHC_t* LZ4_initStreamHC (void* buffer, size_t size)
  function LZ4_resetStreamHC (line 1027) | void LZ4_resetStreamHC (LZ4_streamHC_t* LZ4_streamHCPtr, int compression...
  function LZ4_resetStreamHC_fast (line 1033) | void LZ4_resetStreamHC_fast (LZ4_streamHC_t* LZ4_streamHCPtr, int compre...
  function LZ4_setCompressionLevel (line 1051) | void LZ4_setCompressionLevel(LZ4_streamHC_t* LZ4_streamHCPtr, int compre...
  function LZ4_favorDecompressionSpeed (line 1059) | void LZ4_favorDecompressionSpeed(LZ4_streamHC_t* LZ4_streamHCPtr, int fa...
  function LZ4_loadDictHC (line 1066) | int LZ4_loadDictHC (LZ4_streamHC_t* LZ4_streamHCPtr,
  function LZ4_attach_HC_dictionary (line 1087) | void LZ4_attach_HC_dictionary(LZ4_streamHC_t *working_stream, const LZ4_...
  function LZ4HC_setExternalDict (line 1093) | static void LZ4HC_setExternalDict(LZ4HC_CCtx_internal* ctxPtr, const BYT...
  function LZ4_compressHC_continue_generic (line 1111) | static int
  function LZ4_compress_HC_continue (line 1151) | int LZ4_compress_HC_continue (LZ4_streamHC_t* LZ4_streamHCPtr, const cha...
  function LZ4_compress_HC_continue_destSize (line 1159) | int LZ4_compress_HC_continue_destSize (LZ4_streamHC_t* LZ4_streamHCPtr, ...
  function LZ4_saveDictHC (line 1171) | int LZ4_saveDictHC (LZ4_streamHC_t* LZ4_streamHCPtr, char* safeBuffer, i...
  function LZ4_compressHC (line 1203) | int LZ4_compressHC(const char* src, char* dst, int srcSize) { return LZ4...
  function LZ4_compressHC_limitedOutput (line 1204) | int LZ4_compressHC_limitedOutput(const char* src, char* dst, int srcSize...
  function LZ4_compressHC2 (line 1205) | int LZ4_compressHC2(const char* src, char* dst, int srcSize, int cLevel)...
  function LZ4_compressHC2_limitedOutput (line 1206) | int LZ4_compressHC2_limitedOutput(const char* src, char* dst, int srcSiz...
  function LZ4_compressHC_withStateHC (line 1207) | int LZ4_compressHC_withStateHC (void* state, const char* src, char* dst,...
  function LZ4_compressHC_limitedOutput_withStateHC (line 1208) | int LZ4_compressHC_limitedOutput_withStateHC (void* state, const char* s...
  function LZ4_compressHC2_withStateHC (line 1209) | int LZ4_compressHC2_withStateHC (void* state, const char* src, char* dst...
  function LZ4_compressHC2_limitedOutput_withStateHC (line 1210) | int LZ4_compressHC2_limitedOutput_withStateHC (void* state, const char* ...
  function LZ4_compressHC_continue (line 1211) | int LZ4_compressHC_continue (LZ4_streamHC_t* ctx, const char* src, char*...
  function LZ4_compressHC_limitedOutput_continue (line 1212) | int LZ4_compressHC_limitedOutput_continue (LZ4_streamHC_t* ctx, const ch...
  function LZ4_sizeofStreamStateHC (line 1216) | int LZ4_sizeofStreamStateHC(void) { return sizeof(LZ4_streamHC_t); }
  function LZ4_resetStreamStateHC (line 1220) | int LZ4_resetStreamStateHC(void* state, char* inputBuffer)
  function LZ4_freeHC (line 1237) | int LZ4_freeHC (void* LZ4HC_Data)
  function LZ4_compressHC2_continue (line 1245) | int LZ4_compressHC2_continue (void* LZ4HC_Data, const char* src, char* d...
  function LZ4_compressHC2_limitedOutput_continue (line 1250) | int LZ4_compressHC2_limitedOutput_continue (void* LZ4HC_Data, const char...
  type LZ4HC_optimal_t (line 1268) | typedef struct {
  function LZ4_FORCE_INLINE (line 1276) | LZ4_FORCE_INLINE int LZ4HC_literalsPrice(int const litlen)
  function LZ4_FORCE_INLINE (line 1287) | LZ4_FORCE_INLINE int LZ4HC_sequencePrice(int litlen, int mlen)
  type LZ4HC_match_t (line 1302) | typedef struct {
  function LZ4_FORCE_INLINE (line 1307) | LZ4_FORCE_INLINE LZ4HC_match_t
  function LZ4HC_compress_optimal (line 1330) | static int LZ4HC_compress_optimal ( LZ4HC_CCtx_internal* ctx,

FILE: third-party/l4z/lz4hc.h
  type LZ4_streamHC_t (line 101) | typedef union LZ4_streamHC_u LZ4_streamHC_t;
  type LZ4HC_CCtx_internal (line 204) | typedef struct LZ4HC_CCtx_internal LZ4HC_CCtx_internal;
  type LZ4HC_CCtx_internal (line 205) | struct LZ4HC_CCtx_internal

FILE: third-party/l4z/xxhash.c
  function XXH_free (line 109) | static void  XXH_free  (void* p)  { free(p); }
  type BYTE (line 147) | typedef uint8_t  BYTE;
  type U16 (line 148) | typedef uint16_t U16;
  type U32 (line 149) | typedef uint32_t U32;
  type BYTE (line 151) | typedef unsigned char      BYTE;
  type U16 (line 152) | typedef unsigned short     U16;
  type U32 (line 153) | typedef unsigned int       U32;
  function U32 (line 160) | static U32 XXH_read32(const void* memPtr) { return *(const U32*) memPtr; }
  type unalign (line 166) | typedef union { U32 u32; } __attribute__((packed)) unalign;
  function U32 (line 167) | static U32 XXH_read32(const void* ptr) { return ((const unalign*)ptr)->u...
  function U32 (line 174) | static U32 XXH_read32(const void* memPtr)
  function U32 (line 203) | static U32 XXH_swap32 (U32 x)
  type XXH_endianess (line 216) | typedef enum { XXH_bigEndian=0, XXH_littleEndian=1 } XXH_endianess;
  function XXH_isLittleEndian (line 220) | static int XXH_isLittleEndian(void)
  type XXH_alignment (line 232) | typedef enum { XXH_aligned, XXH_unaligned } XXH_alignment;
  function FORCE_INLINE (line 234) | FORCE_INLINE U32 XXH_readLE32_align(const void* ptr, XXH_endianess endia...
  function FORCE_INLINE (line 242) | FORCE_INLINE U32 XXH_readLE32(const void* ptr, XXH_endianess endian)
  function U32 (line 247) | static U32 XXH_readBE32(const void* ptr)
  function XXH_versionNumber (line 257) | XXH_PUBLIC_API unsigned XXH_versionNumber (void) { return XXH_VERSION_NU...
  function U32 (line 269) | static U32 XXH32_round(U32 seed, U32 input)
  function U32 (line 278) | static U32 XXH32_avalanche(U32 h32)
  function U32 (line 290) | static U32
  function FORCE_INLINE (line 351) | FORCE_INLINE U32
  function XXH32 (line 392) | XXH_PUBLIC_API unsigned int XXH32 (const void* input, size_t len, unsign...
  function XXH_PUBLIC_API (line 422) | XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void)
  function XXH_PUBLIC_API (line 426) | XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr)
  function XXH_PUBLIC_API (line 432) | XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dstState, const XXH32...
  function XXH_PUBLIC_API (line 437) | XXH_PUBLIC_API XXH_errorcode XXH32_reset(XXH32_state_t* statePtr, unsign...
  function FORCE_INLINE (line 451) | FORCE_INLINE XXH_errorcode
  function XXH_PUBLIC_API (line 515) | XXH_PUBLIC_API XXH_errorcode XXH32_update (XXH32_state_t* state_in, cons...
  function FORCE_INLINE (line 526) | FORCE_INLINE U32
  function XXH32_digest (line 546) | XXH_PUBLIC_API unsigned int XXH32_digest (const XXH32_state_t* state_in)
  function XXH_PUBLIC_API (line 565) | XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH3...
  function XXH_PUBLIC_API (line 572) | XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonica...
  type U64 (line 592) | typedef uint64_t U64;
  type U64 (line 595) | typedef unsigned long long U64;
  function U64 (line 603) | static U64 XXH_read64(const void* memPtr) { return *(const U64*) memPtr; }
  type unalign64 (line 609) | typedef union { U32 u32; U64 u64; } __attribute__((packed)) unalign64;
  function U64 (line 610) | static U64 XXH_read64(const void* ptr) { return ((const unalign64*)ptr)-...
  function U64 (line 618) | static U64 XXH_read64(const void* memPtr)
  function U64 (line 632) | static U64 XXH_swap64 (U64 x)
  function FORCE_INLINE (line 645) | FORCE_INLINE U64 XXH_readLE64_align(const void* ptr, XXH_endianess endia...
  function FORCE_INLINE (line 653) | FORCE_INLINE U64 XXH_readLE64(const void* ptr, XXH_endianess endian)
  function U64 (line 658) | static U64 XXH_readBE64(const void* ptr)
  function U64 (line 672) | static U64 XXH64_round(U64 acc, U64 input)
  function U64 (line 680) | static U64 XXH64_mergeRound(U64 acc, U64 val)
  function U64 (line 688) | static U64 XXH64_avalanche(U64 h64)
  function U64 (line 701) | static U64
  function FORCE_INLINE (line 810) | FORCE_INLINE U64
  function XXH64 (line 855) | XXH_PUBLIC_API unsigned long long XXH64 (const void* input, size_t len, ...
  function XXH_PUBLIC_API (line 883) | XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void)
  function XXH_PUBLIC_API (line 887) | XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr)
  function XXH_PUBLIC_API (line 893) | XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dstState, const XXH64...
  function XXH_PUBLIC_API (line 898) | XXH_PUBLIC_API XXH_errorcode XXH64_reset(XXH64_state_t* statePtr, unsign...
  function FORCE_INLINE (line 911) | FORCE_INLINE XXH_errorcode
  function XXH_PUBLIC_API (line 971) | XXH_PUBLIC_API XXH_errorcode XXH64_update (XXH64_state_t* state_in, cons...
  function FORCE_INLINE (line 981) | FORCE_INLINE U64 XXH64_digest_endian (const XXH64_state_t* state, XXH_en...
  function XXH64_digest (line 1005) | XXH_PUBLIC_API unsigned long long XXH64_digest (const XXH64_state_t* sta...
  function XXH_PUBLIC_API (line 1018) | XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH6...
  function XXH_PUBLIC_API (line 1025) | XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonica...

FILE: third-party/l4z/xxhash.h
  type XXH_errorcode (line 79) | typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode;
  type XXH32_hash_t (line 162) | typedef unsigned int XXH32_hash_t;
  type XXH32_state_t (line 172) | typedef struct XXH32_state_s XXH32_state_t;
  type XXH32_canonical_t (line 204) | typedef struct { unsigned char digest[4]; } XXH32_canonical_t;
  type XXH64_hash_t (line 219) | typedef unsigned long long XXH64_hash_t;
  type XXH64_state_t (line 229) | typedef struct XXH64_state_s XXH64_state_t;
  type XXH64_canonical_t (line 239) | typedef struct { unsigned char digest[8]; } XXH64_canonical_t;
  type XXH32_state_s (line 264) | struct XXH32_state_s {
  type XXH64_state_s (line 276) | struct XXH64_state_s {
  type XXH32_state_s (line 289) | struct XXH32_state_s {
  type XXH64_state_s (line 302) | struct XXH64_state_s {

FILE: third-party/nfd/include/nfd.h
  type nfdchar_t (line 20) | typedef char nfdchar_t;
  type nfdpathset_t (line 23) | typedef struct {
  type nfdresult_t (line 29) | typedef enum {

FILE: third-party/pugixml/src/pugixml.cpp
  type pugi (line 183) | namespace pugi
    type xml_attribute_struct (line 1065) | struct xml_attribute_struct
      method xml_attribute_struct (line 1067) | xml_attribute_struct(impl::xml_memory_page* page): header(page, 0), ...
      method xml_attribute_struct (line 1112) | xml_attribute_struct(impl::xml_memory_page* page): name(0), value(0)...
    type xml_node_struct (line 1083) | struct xml_node_struct
      method xml_node_struct (line 1085) | xml_node_struct(impl::xml_memory_page* page, xml_node_type type): he...
      method xml_node_struct (line 1128) | xml_node_struct(impl::xml_memory_page* page, xml_node_type type): na...
    type xml_attribute_struct (line 1110) | struct xml_attribute_struct
      method xml_attribute_struct (line 1067) | xml_attribute_struct(impl::xml_memory_page* page): header(page, 0), ...
      method xml_attribute_struct (line 1112) | xml_attribute_struct(impl::xml_memory_page* page): name(0), value(0)...
    type xml_node_struct (line 1126) | struct xml_node_struct
      method xml_node_struct (line 1085) | xml_node_struct(impl::xml_memory_page* page, xml_node_type type): he...
      method xml_node_struct (line 1128) | xml_node_struct(impl::xml_memory_page* page, xml_node_type type): na...
  function PUGI_IMPL_NS_BEGIN (line 198) | PUGI_IMPL_NS_BEGIN
  function PUGI_IMPL_FN (line 204) | PUGI_IMPL_FN void default_deallocate(void* ptr)
  type xml_memory_management_function_storage (line 210) | struct xml_memory_management_function_storage
  function PUGI_IMPL_NS_END (line 222) | PUGI_IMPL_NS_END
  function PUGI_IMPL_FN (line 239) | PUGI_IMPL_FN bool strequal(const char_t* src, const char_t* dst)
  function PUGI_IMPL_FN (line 251) | PUGI_IMPL_FN bool strequalrange(const char_t* lhs, const char_t* rhs, si...
  function PUGI_IMPL_FN (line 261) | PUGI_IMPL_FN size_t strlength_wide(const wchar_t* s)
  function PUGI_IMPL_NS_END (line 273) | PUGI_IMPL_NS_END
  function PUGI_IMPL_NS_BEGIN (line 303) | PUGI_IMPL_NS_BEGIN
  function PUGI_IMPL_FN_NO_INLINE (line 409) | PUGI_IMPL_FN_NO_INLINE bool compact_hash_table::rehash(size_t count)
  type xml_allocator (line 471) | struct xml_allocator
    method xml_allocator (line 525) | xml_allocator(xml_memory_page* root): _root(root), _busy_size(root->bu...
    method xml_memory_page (line 532) | xml_memory_page* allocate_page(size_t data_size)
    method deallocate_page (line 550) | static void deallocate_page(xml_memory_page* page)
    method deallocate_memory (line 609) | void deallocate_memory(void* ptr, size_t size, xml_memory_page* page)
    method char_t (line 653) | char_t* allocate_string(size_t length)
    method deallocate_string (line 687) | void deallocate_string(char_t* string)
    method reserve (line 706) | bool reserve()
  type xml_memory_page (line 473) | struct xml_memory_page
    method xml_memory_page (line 475) | static xml_memory_page* construct(void* memory)
  type xml_memory_string_header (line 517) | struct xml_memory_string_header
  type xml_allocator (line 523) | struct xml_allocator
    method xml_allocator (line 525) | xml_allocator(xml_memory_page* root): _root(root), _busy_size(root->bu...
    method xml_memory_page (line 532) | xml_memory_page* allocate_page(size_t data_size)
    method deallocate_page (line 550) | static void deallocate_page(xml_memory_page* page)
    method deallocate_memory (line 609) | void deallocate_memory(void* ptr, size_t size, xml_memory_page* page)
    method char_t (line 653) | char_t* allocate_string(size_t length)
    method deallocate_string (line 687) | void deallocate_string(char_t* string)
    method reserve (line 706) | bool reserve()
  function PUGI_IMPL_FN_NO_INLINE (line 723) | PUGI_IMPL_FN_NO_INLINE void* xml_allocator::allocate_memory_oob(size_t s...
  class compact_header (line 767) | class compact_header
    method compact_header (line 770) | compact_header(xml_memory_page* page, unsigned int flags)
    method xml_memory_page (line 796) | xml_memory_page* get_page() const
  function PUGI_IMPL_FN (line 810) | PUGI_IMPL_FN xml_memory_page* compact_get_page(const void* object, int h...
  function PUGI_IMPL_FN_NO_INLINE (line 817) | PUGI_IMPL_FN_NO_INLINE T* compact_get_value(const void* object)
  function PUGI_IMPL_FN_NO_INLINE (line 822) | PUGI_IMPL_FN_NO_INLINE void compact_set_value(const void* object, T* value)
  class compact_pointer (line 827) | class compact_pointer
    method compact_pointer (line 830) | compact_pointer(): _data(0)
    method T (line 880) | T* operator->() const
  class compact_pointer_parent (line 889) | class compact_pointer_parent
    method compact_pointer_parent (line 892) | compact_pointer_parent(): _data(0)
    method T (line 960) | T* operator->() const
  class compact_string (line 969) | class compact_string
    method compact_string (line 972) | compact_string(): _data(0)
  type pugi (line 1063) | namespace pugi
    type xml_attribute_struct (line 1065) | struct xml_attribute_struct
      method xml_attribute_struct (line 1067) | xml_attribute_struct(impl::xml_memory_page* page): header(page, 0), ...
      method xml_attribute_struct (line 1112) | xml_attribute_struct(impl::xml_memory_page* page): name(0), value(0)...
    type xml_node_struct (line 1083) | struct xml_node_struct
      method xml_node_struct (line 1085) | xml_node_struct(impl::xml_memory_page* page, xml_node_type type): he...
      method xml_node_struct (line 1128) | xml_node_struct(impl::xml_memory_page* page, xml_node_type type): na...
    type xml_attribute_struct (line 1110) | struct xml_attribute_struct
      method xml_attribute_struct (line 1067) | xml_attribute_struct(impl::xml_memory_page* page): header(page, 0), ...
      method xml_attribute_struct (line 1112) | xml_attribute_struct(impl::xml_memory_page* page): name(0), value(0)...
    type xml_node_struct (line 1126) | struct xml_node_struct
      method xml_node_struct (line 1085) | xml_node_struct(impl::xml_memory_page* page, xml_node_type type): he...
      method xml_node_struct (line 1128) | xml_node_struct(impl::xml_memory_page* page, xml_node_type type): na...
  type pugi (line 1108) | namespace pugi
    type xml_attribute_struct (line 1065) | struct xml_attribute_struct
      method xml_attribute_struct (line 1067) | xml_attribute_struct(impl::xml_memory_page* page): header(page, 0), ...
      method xml_attribute_struct (line 1112) | xml_attribute_struct(impl::xml_memory_page* page): name(0), value(0)...
    type xml_node_struct (line 1083) | struct xml_node_struct
      method xml_node_struct (line 1085) | xml_node_struct(impl::xml_memory_page* page, xml_node_type type): he...
      method xml_node_struct (line 1128) | xml_node_struct(impl::xml_memory_page* page, xml_node_type type): na...
    type xml_attribute_struct (line 1110) | struct xml_attribute_struct
      method xml_attribute_struct (line 1067) | xml_attribute_struct(impl::xml_memory_page* page): header(page, 0), ...
      method xml_attribute_struct (line 1112) | xml_attribute_struct(impl::xml_memory_page* page): name(0), value(0)...
    type xml_node_struct (line 1126) | struct xml_node_struct
      method xml_node_struct (line 1085) | xml_node_struct(impl::xml_memory_page* page, xml_node_type type): he...
      method xml_node_struct (line 1128) | xml_node
Condensed preview — 167 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,846K chars).
[
  {
    "path": ".actrc",
    "chars": 95,
    "preview": "--bind\n--artifact-server-path=./artifacts\n-P ubuntu-22.04=ghcr.io/catthehacker/ubuntu:act-22.04"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/-game--bug-report.md",
    "chars": 787,
    "preview": "---\nname: \"[GAME] Bug report\"\nabout: Create a report to help us improve\ntitle: ''\nlabels: bug\nassignees: ''\n\n---\n\n**Desc"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 604,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: enhancement\nassignees: ''\n\n---\n\n**Is"
  },
  {
    "path": ".github/actions/setup-os/action.yml",
    "chars": 2496,
    "preview": "name: Setup Os\n\ndescription: Provisions OS deps\n\nruns:\n  using: \"composite\"\n\n  steps:\n\n    - name: Update System \n      "
  },
  {
    "path": ".github/actions/setup-tooling/README.md",
    "chars": 1298,
    "preview": "# setup-tooling\n\nInstalls ASDF with plugins\n\n## Requirements\n\n- a `.tool-versions` file in the root of the repo\n\n## Usag"
  },
  {
    "path": ".github/actions/setup-tooling/action.yml",
    "chars": 1854,
    "preview": "name: Setup Asdf\n\ndescription: provisions tooling\n\ninputs:\n  SetupCommand:\n    description: \"Command to run\"\n    require"
  },
  {
    "path": ".github/workflows/pr-title.yml",
    "chars": 345,
    "preview": "name: Check PR title\n\non:\n  pull_request_target:\n    types:\n      - opened\n      - reopened\n      - edited\n      - synch"
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 2899,
    "preview": "on:\n  push:\n    branches:\n      - master\n\npermissions:\n  contents: write\n  pull-requests: write\n\nname: Release Managemen"
  },
  {
    "path": ".gitignore",
    "chars": 1095,
    "preview": "## OSX artifacts\n.DS_Store\n\n## Dear ImGui artifacts\nimgui.ini\n\n## General build artifacts\n*.o\n*.obj\n*.exe\nexamples/*/Deb"
  },
  {
    "path": ".tool-versions",
    "chars": 37,
    "preview": "cmake 3.27.0\nninja 1.11.1\nact 0.2.52\n"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 8106,
    "preview": "# Changelog\n\n## [1.3.2](https://github.com/CHollingworth/Lampray/compare/v1.3.1...v1.3.2) (2023-12-18)\n\n\n### Bug Fixes\n\n"
  },
  {
    "path": "CMakeLists.txt",
    "chars": 3025,
    "preview": "cmake_minimum_required(VERSION 3.26)\nproject(Lampray)\n\nset(CMAKE_CXX_STANDARD 17)\n\n\noption(USE_XDG_DIRECTORY \"Use XDG di"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1491,
    "preview": "# Contributing to Lampray\n\n> Thanks for helping make Lampray better! Follow this guide to learn how to contribute to Lam"
  },
  {
    "path": "Doxyfile",
    "chars": 128265,
    "preview": "# Doxyfile 1.9.8\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) "
  },
  {
    "path": "LICENSE",
    "chars": 1211,
    "preview": "This is free and unencumbered software released into the public domain.\n\nAnyone is free to copy, modify, publish, use, c"
  },
  {
    "path": "Lampray/Base/lampBase.h",
    "chars": 34020,
    "preview": "//\n// Created by charles on 27/09/23.\n//\n\n#ifndef LAMP_LAMPBASE_H\n#define LAMP_LAMPBASE_H\n\n#include <string>\n#include <p"
  },
  {
    "path": "Lampray/Control/lampConfig.cpp",
    "chars": 1574,
    "preview": "//\n// Created by charles on 27/09/23.\n//\n#include \"lampConfig.h\"\n#include \"../Filesystem/lampFS.h\"\n\nbool Lamp::Core::lam"
  },
  {
    "path": "Lampray/Control/lampConfig.h",
    "chars": 2925,
    "preview": "//\n// Created by charles on 27/09/23.\n//\n\n#ifndef LAMP_LAMPCONFIG_H\n#define LAMP_LAMPCONFIG_H\n\n#include <list>\n#include "
  },
  {
    "path": "Lampray/Control/lampControl.cpp",
    "chars": 876,
    "preview": "//\n// Created by charles on 27/09/23.\n//\n#include \"lampControl.h\"\n\nLamp::Core::lampString Lamp::Core::lampControl::getFo"
  },
  {
    "path": "Lampray/Control/lampControl.h",
    "chars": 33211,
    "preview": "//\n// Created by charles on 27/09/23.\n//\n\n#ifndef LAMP_LAMPCONTROL_H\n#define LAMP_LAMPCONTROL_H\n\n#include <list>\n#includ"
  },
  {
    "path": "Lampray/Control/lampGames.h",
    "chars": 1743,
    "preview": "//\n// Created by charles on 27/09/23.\n//\n\n#ifndef LAMP_LAMPGAMES_H\n#define LAMP_LAMPGAMES_H\n\n#include \"../../game-data/B"
  },
  {
    "path": "Lampray/Control/lampNotification.h",
    "chars": 9573,
    "preview": "//\n// Created by SnazzyPanda on 2023-12-30.\n//\n\n#ifndef LAMP_LAMPNOTIFICATION_H\n#define LAMP_LAMPNOTIFICATION_H\n\n#includ"
  },
  {
    "path": "Lampray/Filesystem/lampExtract.cpp",
    "chars": 9364,
    "preview": "//\n// Created by charles on 27/09/23.\n//\n\n#include <regex>\n#include \"lampFS.h\"\n#include \"bit7zlibrary.hpp\"\n#include \"../"
  },
  {
    "path": "Lampray/Filesystem/lampFS.h",
    "chars": 15914,
    "preview": "//\n// Created by charles on 27/09/23.\n//\n\n#ifndef LAMP_LAMPFS_H\n#define LAMP_LAMPFS_H\n\n#include <string>\n#include <files"
  },
  {
    "path": "Lampray/Filesystem/lampIO.cpp",
    "chars": 11581,
    "preview": "//\n// Created by charles on 27/09/23.\n//\n#include <map>\n#include <regex>\n#include \"lampFS.h\"\n#include \"../Control/lampCo"
  },
  {
    "path": "Lampray/Filesystem/lampShare.cpp",
    "chars": 15478,
    "preview": "//\n// Created by charles on 07/10/23.\n//\n#include <lz4hc.h>\n#include <climits>\n\n#include \"lampFS.h\"\n#include \"../../thir"
  },
  {
    "path": "Lampray/Filesystem/lampTrack.cpp",
    "chars": 15012,
    "preview": "//\n// Created by charles on 10/10/23.\n//\n#include <algorithm>\n#include <filesystem>\n#include \"lampFS.h\"\nstd::string Lamp"
  },
  {
    "path": "Lampray/Filesystem/lampUpdate.cpp",
    "chars": 2188,
    "preview": "//\n// Created by charles on 27/09/23.\n//\n#include \"lampFS.h\"\n\n#include <curl/curl.h>\n#include <string>\n#include <iostrea"
  },
  {
    "path": "Lampray/Lang/lampLang.h",
    "chars": 9589,
    "preview": "//\n// Created by charles on 18/12/23.\n//\n\n#ifndef LAMPRAY_LAMPLANG_H\n#define LAMPRAY_LAMPLANG_H\n\n#include <filesystem>\n#"
  },
  {
    "path": "Lampray/Menu/lampCustomise.h",
    "chars": 15363,
    "preview": "//\n// Created by charles on 08/10/23.\n//\n\n#ifndef LAMP_LAMPCUSTOMISE_H\n#define LAMP_LAMPCUSTOMISE_H\n\n#include \"../../thi"
  },
  {
    "path": "Lampray/Menu/lampMenu.cpp",
    "chars": 16870,
    "preview": "//\n// Created by charles on 27/09/23.\n#include <cstdlib>\n#include \"lampMenu.h\"\n#include \"lampCustomise.h\"\n#include \"../L"
  },
  {
    "path": "Lampray/Menu/lampMenu.h",
    "chars": 896,
    "preview": "//\n// Created by charles on 27/09/23.\n//\n\n#ifndef LAMP_LAMPMENU_H\n#define LAMP_LAMPMENU_H\n\n#include \"../../third-party/i"
  },
  {
    "path": "Lampray/Parse/lampParse.h",
    "chars": 16534,
    "preview": "//\n// Created by charles on 27/09/23.\n//\n\n#ifndef LAMP_LAMPPARSE_H\n#define LAMP_LAMPPARSE_H\n\n#include <string>\n#include "
  },
  {
    "path": "README.md",
    "chars": 3280,
    "preview": "# ![Lampray](logo/LMP-64.png) Lampray\n\nLampray is a mod manager for gaming on Linux! If you'd like to help improve Lampr"
  },
  {
    "path": "VERSION",
    "chars": 57,
    "preview": "x-release-please-start-version\n1.3.2\nx-release-please-end"
  },
  {
    "path": "build.sh",
    "chars": 269,
    "preview": "#!/bin/bash\n\nBUILD_TYPE=${1:-Debug}\n\ncmake \\\n    -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \\\n    -DCMAKE_MAKE_PROGRAM=ninja \\\n   "
  },
  {
    "path": "docs/building-from-source.md",
    "chars": 2144,
    "preview": "# Building from source\n\n> Learn how to build Lampray from source. When you're finished, you'll be able to [mod your game"
  },
  {
    "path": "docs/customizing-lampray.md",
    "chars": 3379,
    "preview": "# Customizing Lampray\n\n> Learn how to customize Lampray's fonts, transparency, color theme, and more.\n\n## Prerequisites\n"
  },
  {
    "path": "docs/directory-structure.md",
    "chars": 1217,
    "preview": "# Directory structure\n\n> These are the various directories that make up Lampray.\n\n## Overview\n\nThese are the primary dir"
  },
  {
    "path": "docs/frequently-asked-questions.md",
    "chars": 1169,
    "preview": "# Frequently Asked Questions (FAQ) \n\n> These are the frequently asked questions for Lampray. This list will continue to "
  },
  {
    "path": "docs/lampray-docs.md",
    "chars": 965,
    "preview": "# Lampray Docs\n\nWelcome to Lampray Docs! Whether you're new to Lampray or a long-time user, the docs are a valuable way "
  },
  {
    "path": "docs/managing-mods.md",
    "chars": 2177,
    "preview": "# Managing mods\n\n> Learn how to manage your mods using Lampray.\n\n## Prerequisites\n\nBefore you can manage your mods using"
  },
  {
    "path": "docs/mod-types/baldurs-gate-3.md",
    "chars": 2138,
    "preview": "# Baldur's Gate 3 mod types\n\n> These are the various mod types you can select when [modding your game](../managing-mods."
  },
  {
    "path": "docs/mod-types/cyberpunk-2077.md",
    "chars": 106,
    "preview": "# Cyberpunk 2077 mod types\n\n> **Note:** This page is currently under construction. Check back again soon!\n"
  },
  {
    "path": "docs/mod-types/supported-games.md",
    "chars": 213,
    "preview": "# Supported games\n\nThese are the games Lampray currently supports. Select a game below to learn more about its specific "
  },
  {
    "path": "game-data/BG3/BG3.cpp",
    "chars": 19881,
    "preview": "//\n// Created by charles on 27/09/23.\n//\n\n#include <filesystem>\n#include <regex>\n#include \"BG3.h\"\n#include \"../../Lampra"
  },
  {
    "path": "game-data/BG3/BG3.h",
    "chars": 4624,
    "preview": "//\n// Created by charles on 27/09/23.\n//\n\n#ifndef LAMP_BG3_H\n#define LAMP_BG3_H\n#include \"../gameControl.h\"\n#include \".."
  },
  {
    "path": "game-data/C77/C77.cpp",
    "chars": 8913,
    "preview": "//\n// Created by charles on 14/10/23.\n//\n\n#include \"C77.h\"\n#include \"../../Lampray/Control/lampControl.h\"\nnamespace Lamp"
  },
  {
    "path": "game-data/C77/C77.h",
    "chars": 3512,
    "preview": "//\n// Created by charles on 14/10/23.\n//\n\n#ifndef LAMP_C77_H\n#define LAMP_C77_H\n\n#include \"../gameControl.h\"\n#include \"."
  },
  {
    "path": "game-data/LHL/LHL.cpp",
    "chars": 124,
    "preview": "//\n// Created by charles on 13/12/23.\n//\n\n#include \"LHL.h\"\n\nnamespace Lamp {\n    namespace Game {\n    } // Game\n} // Lam"
  },
  {
    "path": "game-data/LHL/LHL.h",
    "chars": 201,
    "preview": "//\n// Created by charles on 13/12/23.\n//\n\n#ifndef LAMP_LHL_H\n#define LAMP_LHL_H\n\nnamespace Lamp {\n    namespace Game {\n\n"
  },
  {
    "path": "game-data/gameControl.h",
    "chars": 6536,
    "preview": "//\n// Created by charles on 11/09/23.\n//\n\n#ifndef LAMP_GAMECONTROL_H\n#define LAMP_GAMECONTROL_H\n\n#include <string>\n#incl"
  },
  {
    "path": "main.cpp",
    "chars": 11583,
    "preview": "#include \"Lampray/Control/lampConfig.h\"\n#include \"third-party/imgui/imgui.h\"\n#include \"third-party/imgui/imgui_impl_sdl2"
  },
  {
    "path": "setup.sh",
    "chars": 1819,
    "preview": "#!/usr/bin/env bash\n\n#\n# Setup ASDF and Plugins\n#  ASDF_PLUGINS=(nodejs pnpm bats) \\\n#  ASDF_PLUGIN_URL_nodejs=https://s"
  },
  {
    "path": "third-party/bit7z/BUILD.txt",
    "chars": 23,
    "preview": "v4.0.0-rc gcc9.4.0_x64\n"
  },
  {
    "path": "third-party/bit7z/LICENSE",
    "chars": 16727,
    "preview": "Mozilla Public License Version 2.0\n==================================\n\n1. Definitions\n--------------\n\n1.1. \"Contributor\""
  },
  {
    "path": "third-party/bit7z/README.md",
    "chars": 20745,
    "preview": "<h1 align=\"center\">bit7z</h1>\n\n<h3 align=\"center\">A C++ static library offering a clean and simple interface to the 7-zi"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bit7z.hpp",
    "chars": 674,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bit7zlibrary.hpp",
    "chars": 3695,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitabstractarchivecreator.hpp",
    "chars": 12100,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitabstractarchivehandler.hpp",
    "chars": 8566,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitabstractarchiveopener.hpp",
    "chars": 1792,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitarchiveeditor.hpp",
    "chars": 6536,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitarchiveitem.hpp",
    "chars": 3056,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitarchiveiteminfo.hpp",
    "chars": 1680,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitarchiveitemoffset.hpp",
    "chars": 1772,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitarchivereader.hpp",
    "chars": 6122,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitarchivewriter.hpp",
    "chars": 2986,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitcompressionlevel.hpp",
    "chars": 1021,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitcompressionmethod.hpp",
    "chars": 738,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitcompressor.hpp",
    "chars": 4563,
    "preview": "// This is an open source non-commercial project. Dear PVS-Studio, please check it.\n// PVS-Studio Static Code Analyzer f"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitdefines.hpp",
    "chars": 3973,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/biterror.hpp",
    "chars": 1280,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitexception.hpp",
    "chars": 3281,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitextractor.hpp",
    "chars": 14546,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitfilecompressor.hpp",
    "chars": 5723,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitfileextractor.hpp",
    "chars": 685,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitformat.hpp",
    "chars": 9923,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitfs.hpp",
    "chars": 1288,
    "preview": "// This is an open source non-commercial project. Dear PVS-Studio, please check it.\n// PVS-Studio Static Code Analyzer f"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitgenericitem.hpp",
    "chars": 1840,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitinputarchive.hpp",
    "chars": 13669,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bititemsvector.hpp",
    "chars": 6423,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitmemcompressor.hpp",
    "chars": 920,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitmemextractor.hpp",
    "chars": 702,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitoutputarchive.hpp",
    "chars": 12762,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitpropvariant.hpp",
    "chars": 15274,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitstreamcompressor.hpp",
    "chars": 939,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitstreamextractor.hpp",
    "chars": 702,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bittypes.hpp",
    "chars": 2419,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/bit7z/include/include/bit7z/bitwindows.hpp",
    "chars": 4414,
    "preview": "/*\n * bit7z - A C++ static library to interface with the 7-zip shared libraries.\n * Copyright (c) 2014-2022 Riccardo Ost"
  },
  {
    "path": "third-party/imgui/LICENSE.txt",
    "chars": 1083,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2014-2023 Omar Cornut\n\nPermission is hereby granted, free of charge, to any person "
  },
  {
    "path": "third-party/imgui/imconfig.h",
    "chars": 10329,
    "preview": "//-----------------------------------------------------------------------------\n// DEAR IMGUI COMPILE-TIME OPTIONS\n// Ru"
  },
  {
    "path": "third-party/imgui/imgui.cpp",
    "chars": 780088,
    "preview": "// dear imgui, v1.90.0\n// (main code and documentation)\n\n// Help:\n// - See links below.\n// - Call and read ImGui::ShowDe"
  },
  {
    "path": "third-party/imgui/imgui.h",
    "chars": 325498,
    "preview": "// dear imgui, v1.90.0\n// (headers)\n\n// Help:\n// - See links below.\n// - Call and read ImGui::ShowDemoWindow() in imgui_"
  },
  {
    "path": "third-party/imgui/imgui_demo.cpp",
    "chars": 435314,
    "preview": "// dear imgui, v1.90.0\n// (demo code)\n\n// Help:\n// - Read FAQ at http://dearimgui.com/faq\n// - Call and read ImGui::Show"
  },
  {
    "path": "third-party/imgui/imgui_draw.cpp",
    "chars": 221048,
    "preview": "// dear imgui, v1.90.0\n// (drawing and font code)\n\n/*\n\nIndex of this file:\n\n// [SECTION] STB libraries implementation\n//"
  },
  {
    "path": "third-party/imgui/imgui_impl_sdl2.cpp",
    "chars": 36305,
    "preview": "// dear imgui: Platform Backend for SDL2\n// This needs to be used along with a Renderer (e.g. DirectX11, OpenGL3, Vulkan"
  },
  {
    "path": "third-party/imgui/imgui_impl_sdl2.h",
    "chars": 2578,
    "preview": "// dear imgui: Platform Backend for SDL2\n// This needs to be used along with a Renderer (e.g. DirectX11, OpenGL3, Vulkan"
  },
  {
    "path": "third-party/imgui/imgui_impl_sdlrenderer2.cpp",
    "chars": 11797,
    "preview": "// dear imgui: Renderer Backend for SDL_Renderer for SDL2\n// (Requires: SDL 2.0.17+)\n\n// Note how SDL_Renderer is an _op"
  },
  {
    "path": "third-party/imgui/imgui_impl_sdlrenderer2.h",
    "chars": 1979,
    "preview": "// dear imgui: Renderer Backend for SDL_Renderer for SDL2\n// (Requires: SDL 2.0.17+)\n\n// Note how SDL_Renderer is an _op"
  },
  {
    "path": "third-party/imgui/imgui_internal.h",
    "chars": 254228,
    "preview": "// dear imgui, v1.90.0\n// (internal structures/api)\n\n// You may use this file to debug, understand or extend Dear ImGui "
  },
  {
    "path": "third-party/imgui/imgui_tables.cpp",
    "chars": 235857,
    "preview": "// dear imgui, v1.90.0\n// (tables and columns code)\n\n/*\n\nIndex of this file:\n\n// [SECTION] Commentary\n// [SECTION] Heade"
  },
  {
    "path": "third-party/imgui/imgui_widgets.cpp",
    "chars": 441320,
    "preview": "// dear imgui, v1.90.0\n// (widgets code)\n\n/*\n\nIndex of this file:\n\n// [SECTION] Forward Declarations\n// [SECTION] Widget"
  },
  {
    "path": "third-party/imgui/imstb_rectpack.h",
    "chars": 20344,
    "preview": "// [DEAR IMGUI]\n// This is a slightly modified version of stb_rect_pack.h 1.01.\n// Grep for [DEAR IMGUI] to find the cha"
  },
  {
    "path": "third-party/imgui/imstb_textedit.h",
    "chars": 54923,
    "preview": "// [DEAR IMGUI]\n// This is a slightly modified version of stb_textedit.h 1.14.\n// Those changes would need to be pushed "
  },
  {
    "path": "third-party/imgui/imstb_truetype.h",
    "chars": 199484,
    "preview": "// [DEAR IMGUI]\n// This is a slightly modified version of stb_truetype.h 1.26.\n// Mostly fixing for compiler and static "
  },
  {
    "path": "third-party/json/LICENSE.MIT",
    "chars": 1076,
    "preview": "MIT License \n\nCopyright (c) 2013-2022 Niels Lohmann\n\nPermission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "third-party/json/json.hpp",
    "chars": 907857,
    "preview": "//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11"
  },
  {
    "path": "third-party/l4z/LICENSE",
    "chars": 635,
    "preview": "This repository uses 2 different licenses :\n- all files in the `lib` directory use a BSD 2-Clause license\n- all other fi"
  },
  {
    "path": "third-party/l4z/liblz4.pc",
    "chars": 395,
    "preview": "#   LZ4 - Fast LZ compression algorithm\n#   Copyright (C) 2011-2020, Yann Collet.\n#   BSD 2-Clause License (http://www.o"
  },
  {
    "path": "third-party/l4z/liblz4.pc.in",
    "chars": 387,
    "preview": "#   LZ4 - Fast LZ compression algorithm\n#   Copyright (C) 2011-2020, Yann Collet.\n#   BSD 2-Clause License (http://www.o"
  },
  {
    "path": "third-party/l4z/lz4.c",
    "chars": 113390,
    "preview": "/*\n   LZ4 - Fast LZ compression algorithm\n   Copyright (C) 2011-2020, Yann Collet.\n\n   BSD 2-Clause License (http://www."
  },
  {
    "path": "third-party/l4z/lz4.h",
    "chars": 43263,
    "preview": "/*\n *  LZ4 - Fast LZ compression algorithm\n *  Header File\n *  Copyright (C) 2011-2020, Yann Collet.\n\n   BSD 2-Clause Li"
  },
  {
    "path": "third-party/l4z/lz4file.c",
    "chars": 8647,
    "preview": "/*\n * LZ4 file library\n * Copyright (C) 2022, Xiaomi Inc.\n *\n * BSD 2-Clause License (http://www.opensource.org/licenses"
  },
  {
    "path": "third-party/l4z/lz4file.h",
    "chars": 3298,
    "preview": "/*\n   LZ4 file library\n   Header File\n   Copyright (C) 2022, Xiaomi Inc.\n   BSD 2-Clause License (http://www.opensource."
  },
  {
    "path": "third-party/l4z/lz4frame.c",
    "chars": 89076,
    "preview": "/*\n * LZ4 auto-framing library\n * Copyright (C) 2011-2016, Yann Collet.\n *\n * BSD 2-Clause License (http://www.opensourc"
  },
  {
    "path": "third-party/l4z/lz4frame.h",
    "chars": 32749,
    "preview": "/*\n   LZ4F - LZ4-Frame library\n   Header File\n   Copyright (C) 2011-2020, Yann Collet.\n   BSD 2-Clause License (http://w"
  },
  {
    "path": "third-party/l4z/lz4frame_static.h",
    "chars": 2044,
    "preview": "/*\n   LZ4 auto-framing library\n   Header File for static linking only\n   Copyright (C) 2011-2020, Yann Collet.\n\n   BSD 2"
  },
  {
    "path": "third-party/l4z/lz4hc.c",
    "chars": 70129,
    "preview": "/*\n    LZ4 HC - High Compression Mode of LZ4\n    Copyright (C) 2011-2020, Yann Collet.\n\n    BSD 2-Clause License (http:/"
  },
  {
    "path": "third-party/l4z/lz4hc.h",
    "chars": 20179,
    "preview": "/*\n   LZ4 HC - High Compression Mode of LZ4\n   Header File\n   Copyright (C) 2011-2020, Yann Collet.\n   BSD 2-Clause Lice"
  },
  {
    "path": "third-party/l4z/xxhash.c",
    "chars": 34045,
    "preview": "/*\n*  xxHash - Fast Hash algorithm\n*  Copyright (C) 2012-2016, Yann Collet\n*\n*  BSD 2-Clause License (http://www.opensou"
  },
  {
    "path": "third-party/l4z/xxhash.h",
    "chars": 13466,
    "preview": "/*\n   xxHash - Extremely Fast Hash algorithm\n   Header File\n   Copyright (C) 2012-2016, Yann Collet.\n\n   BSD 2-Clause Li"
  },
  {
    "path": "third-party/nfd/.circleci/config.yml",
    "chars": 655,
    "preview": "version: 2.1\n\njobs:\n  build:\n    macos:\n      xcode: 13.3\n    steps:\n      - checkout\n      - run:\n          name: Insta"
  },
  {
    "path": "third-party/nfd/.clang-format",
    "chars": 204,
    "preview": "---\nBasedOnStyle: Chromium\nIndentWidth: 4\nBinPackArguments: false\nColumnLimit: 100\nAllowShortIfStatementsOnASingleLine: "
  },
  {
    "path": "third-party/nfd/.github/workflows/cmake.yml",
    "chars": 7168,
    "preview": "name: build\n\non:\n  push:\n    branches: [ master ]\n  pull_request:\n    branches: [ master ]\n\njobs:\n  clang-format:\n\n    n"
  },
  {
    "path": "third-party/nfd/.gitignore",
    "chars": 88,
    "preview": "# VS CMake default output\n/.vs/\n/out/\n/CMakeSettings.json\n\n# Mac OS X rubbish\n.DS_Store\n"
  },
  {
    "path": "third-party/nfd/include/nfd.h",
    "chars": 1870,
    "preview": "/*\n  Native File Dialog\n\n  User API\n\n  http://www.frogtoss.com/labs\n */\n\n\n#ifndef _NFD_H\n#define _NFD_H\n\n#ifdef __cplusp"
  },
  {
    "path": "third-party/pugixml/CMakeLists.txt",
    "chars": 9099,
    "preview": "cmake_minimum_required(VERSION 3.5)\r\n\r\n# Policy configuration; this *MUST* be specified before project is defined\r\nif(PO"
  },
  {
    "path": "third-party/pugixml/LICENSE.md",
    "chars": 1103,
    "preview": "MIT License\r\n\r\nCopyright (c) 2006-2023 Arseny Kapoulkine\r\n\r\nPermission is hereby granted, free of charge, to any person\r"
  },
  {
    "path": "third-party/pugixml/readme.txt",
    "chars": 2144,
    "preview": "pugixml 1.14 - an XML processing library\r\n\r\nCopyright (C) 2006-2023, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)\r"
  },
  {
    "path": "third-party/pugixml/scripts/cocoapods_push.sh",
    "chars": 109,
    "preview": "#!/bin/bash\r\n\r\n#Push to igagis repo for now\r\npod repo push igagis pugixml.podspec --use-libraries --verbose\r\n"
  },
  {
    "path": "third-party/pugixml/scripts/natvis/pugixml.natvis",
    "chars": 3256,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<AutoVisualizer xmlns=\"http://schemas.microsoft.com/vstudio/debugger/natvis/2010"
  },
  {
    "path": "third-party/pugixml/scripts/natvis/pugixml_compact.natvis",
    "chars": 24583,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<AutoVisualizer xmlns=\"http://schemas.microsoft.com/vstudio/debugger/natvis/2010"
  },
  {
    "path": "third-party/pugixml/scripts/nuget/pugixml.nuspec",
    "chars": 1585,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package xmlns=\"http://schemas.microsoft.com/packaging/2011/10/nuspec.xsd\">\r\n  "
  },
  {
    "path": "third-party/pugixml/scripts/nuget_build.ps1",
    "chars": 2293,
    "preview": "function Run-Command([string]$cmd)\r\n{\r\n\tInvoke-Expression $cmd\r\n\tif ($LastExitCode) { exit $LastExitCode }\r\n}\r\n\r\nfunctio"
  },
  {
    "path": "third-party/pugixml/scripts/premake4.lua",
    "chars": 2468,
    "preview": "-- Reset RNG seed to get consistent results across runs (i.e. XCode)\r\nmath.randomseed(12345)\r\n\r\nlocal static = _ARGS[1] "
  },
  {
    "path": "third-party/pugixml/scripts/pugixml-config.cmake.in",
    "chars": 591,
    "preview": "@PACKAGE_INIT@\r\n\r\ninclude(\"${CMAKE_CURRENT_LIST_DIR}/pugixml-targets.cmake\")\r\n\r\n# If the user is not requiring 1.11 (eit"
  },
  {
    "path": "third-party/pugixml/scripts/pugixml.pc.in",
    "chars": 388,
    "preview": "prefix=@CMAKE_INSTALL_PREFIX@\r\nexec_prefix=${prefix}\r\nincludedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@@INSTALL_SUFFIX@\r\nlibdir"
  },
  {
    "path": "third-party/pugixml/scripts/pugixml.podspec",
    "chars": 482,
    "preview": "Pod::Spec.new do |s|\r\n  s.name         = \"pugixml\"\r\n  s.version      = \"1.14\"\r\n  s.summary      = \"C++ XML parser librar"
  },
  {
    "path": "third-party/pugixml/scripts/pugixml.xcodeproj/project.pbxproj",
    "chars": 6857,
    "preview": "// !$*UTF8*$!\r\n{\r\n\tarchiveVersion = 1;\r\n\tclasses = {\r\n\t};\r\n\tobjectVersion = 45;\r\n\tobjects = {\r\n\r\n/* Begin PBXBuildFile s"
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_airplay.mkf",
    "chars": 101,
    "preview": "includepaths\r\n{\r\n\"../src\"\r\n}\r\n\r\nfiles\r\n{\r\n(\"../src\")\r\npugiconfig.hpp\r\npugixml.cpp\r\npugixml.hpp\r\n}\r\n\r\n"
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_codeblocks.cbp",
    "chars": 1193,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>\r\n<CodeBlocks_project_file>\r\n\t<FileVersion major=\"1\" minor=\"6\" /"
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_codelite.project",
    "chars": 2509,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<CodeLite_Project Name=\"pugixml\">\r\n  <VirtualDirectory Name=\"src\">\r\n    <File Na"
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_dll.rc",
    "chars": 1452,
    "preview": "#include <winver.h>\r\n\r\n#define PUGIXML_VERSION_MAJOR 1\r\n#define PUGIXML_VERSION_MINOR 14\r\n#define PUGIXML_VERSION_PATCH "
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_vs2005.vcproj",
    "chars": 6657,
    "preview": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"8.00\"\r\n\tName=\""
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_vs2005_static.vcproj",
    "chars": 6689,
    "preview": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"8.00\"\r\n\tName=\""
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_vs2008.vcproj",
    "chars": 6485,
    "preview": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"9.00\"\r\n\tName=\""
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_vs2008_static.vcproj",
    "chars": 6517,
    "preview": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"9.00\"\r\n\tName=\""
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_vs2010.vcxproj",
    "chars": 9437,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_vs2010_static.vcxproj",
    "chars": 9473,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_vs2013.vcxproj",
    "chars": 10036,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_vs2013_static.vcxproj",
    "chars": 10072,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_vs2015.vcxproj",
    "chars": 8509,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micro"
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_vs2015_static.vcxproj",
    "chars": 8785,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micro"
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_vs2017.vcxproj",
    "chars": 8513,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.micro"
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_vs2017_static.vcxproj",
    "chars": 8787,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.micro"
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_vs2019.vcxproj",
    "chars": 8514,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.micro"
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_vs2019_static.vcxproj",
    "chars": 8788,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.micro"
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_vs2022.vcxproj",
    "chars": 8514,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.micro"
  },
  {
    "path": "third-party/pugixml/scripts/pugixml_vs2022_static.vcxproj",
    "chars": 8788,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.micro"
  },
  {
    "path": "third-party/pugixml/src/pugiconfig.hpp",
    "chars": 2973,
    "preview": "/**\r\n * pugixml parser - version 1.14\r\n * --------------------------------------------------------\r\n * Copyright (C) 200"
  },
  {
    "path": "third-party/pugixml/src/pugixml.cpp",
    "chars": 360053,
    "preview": "/**\r\n * pugixml parser - version 1.14\r\n * --------------------------------------------------------\r\n * Copyright (C) 200"
  },
  {
    "path": "third-party/pugixml/src/pugixml.hpp",
    "chars": 55813,
    "preview": "/**\r\n * pugixml parser - version 1.14\r\n * --------------------------------------------------------\r\n * Copyright (C) 200"
  }
]

// ... and 4 more files (download for full content)

About this extraction

This page contains the full source code of the CHollingworth/Lampray GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 167 files (31.6 MB), approximately 1.4M tokens, and a symbol index with 2678 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!