diff --git a/.cargo/config.toml b/.cargo/config.toml old mode 100644 new mode 100755 index 4b9a056..f8eb063 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -2,4 +2,4 @@ runner = "sudo -E" [build] -rustflags = ["-C", "target-cpu=native"] \ No newline at end of file +rustflags = ["-C", "target-cpu=native"] diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index dfe0770..0000000 --- a/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml deleted file mode 100644 index c863e44..0000000 --- a/.github/workflows/deploy-docs.yml +++ /dev/null @@ -1,68 +0,0 @@ -# Simple workflow for deploying static content to GitHub Pages -name: Deploy Docs to Github Pages - -on: - # Runs on pushes targeting the default branch - push: - branches: ["main"] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. -concurrency: - group: "pages" - cancel-in-progress: false - -jobs: - # Build docs job - build_docs: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Setup Pages - uses: actions/configure-pages@v4 - - uses: dtolnay/rust-toolchain@stable - - name: Build docs - run: cargo doc --no-deps - - name: Fix docs - run: | - rm -rf ./docs - echo "" > target/doc/index.html - cp -r target/doc ./docs - chmod -c -R +rX "./docs/" | while read line; do - echo "::warning title=Invalid file permissions automatically fixed::$line" - done - - name: Upload pages artifact - uses: actions/upload-pages-artifact@v3 - with: - path: './docs' - - # Deploy job - deploy: - # Add a dependency to the build job - needs: build_docs - - # Grant GITHUB_TOKEN the permissions required to make a Pages deployment - permissions: - pages: write # to deploy to Pages - id-token: write # to verify the deployment originates from an appropriate source - - # Deploy to the github-pages environment - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - - # Specify runner + deployment step - runs-on: ubuntu-latest - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 index 4607e0a..435cbad --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ /target -csflow/src/cs2dumper/offsets.rs -csflow/src/cs2dumper/engine2.rs -csflow/src/cs2dumper/client.rs -webradar_rewrite \ No newline at end of file +/src/dma/cs2dumper/offsets.rs +/src/dma/cs2dumper/client.rs +/src/dma/cs2dumper/engine2.rs \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index f2f68ed..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "type": "lldb", - "request": "launch", - "name": "Debug executable 'radarflow'", - "cargo": { - "args": [ - "build", - "--bin=radarflow", - "--package=radarflow" - ], - "filter": { - "name": "radarflow", - "kind": "bin" - } - }, - "args": ["-p", "8081", "-c", "pcileech"], - "cwd": "${workspaceFolder}" - }, - ] -} \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock old mode 100644 new mode 100755 index f1d9933..01a454c --- a/Cargo.lock +++ b/Cargo.lock @@ -132,9 +132,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.77" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9d19de80eff169429ac1e9f48fffb163916b448a44e8e046186232046d9e1f9" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" [[package]] name = "as_derive_utils" @@ -150,13 +150,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.75" +version = "0.1.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdf6721fb0140e4f897002dd086c06f6c27775df19cfe1fccb21181a48fd2c98" +checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -340,9 +340,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.12" +version = "4.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcfab8ba68f3668e89f6ff60f5b205cea56aa7b769451a59f34b8682f51c056d" +checksum = "52bdc885e4cacc7f7c9eedc1ef6da641603180c783c41a15c264944deeaab642" dependencies = [ "clap_builder", "clap_derive", @@ -369,7 +369,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -439,9 +439,9 @@ checksum = "69f3b219d28b6e3b4ac87bc1fc522e0803ab22e055da177bff0068c4150c61a6" [[package]] name = "cpufeatures" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ "libc", ] @@ -475,21 +475,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "csflow" -version = "0.1.2" -dependencies = [ - "clap", - "dataview 1.0.1", - "enum-primitive-derive", - "log", - "memflow", - "num-traits", - "reqwest", - "serde", - "thiserror", -] - [[package]] name = "darling" version = "0.20.3" @@ -511,7 +496,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -522,7 +507,7 @@ checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -548,9 +533,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ "powerfmt", ] @@ -763,9 +748,9 @@ checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "goblin" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27c1b4369c2cd341b5de549380158b105a04c331be5db9110eef7b6d2742134" +checksum = "bb07a4ffed2093b118a525b1d8f5204ae274faed5604537caf7135d0f18d9887" dependencies = [ "log", "plain", @@ -925,17 +910,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.48.0", -] - [[package]] name = "ipnet" version = "2.9.0" @@ -1018,12 +992,6 @@ dependencies = [ "redox_syscall 0.4.1", ] -[[package]] -name = "linux-raw-sys" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - [[package]] name = "linux-raw-sys" version = "0.4.12" @@ -1072,8 +1040,9 @@ checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "memflow" -version = "0.2.0" -source = "git+https://github.com/memflow/memflow.git?rev=c19d870#c19d8707ce980497204ca446fc9565bc344fcc64" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "441730cf8e48d671cead445034c076acc2634fa95ba032feb5be78945c581551" dependencies = [ "abi_stable", "bitflags 1.3.2", @@ -1103,13 +1072,14 @@ dependencies = [ [[package]] name = "memflow-derive" version = "0.2.0" -source = "git+https://github.com/memflow/memflow.git?rev=c19d870#c19d8707ce980497204ca446fc9565bc344fcc64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d766f6681f968c92eb0359fc4bc99039ebe2568df4bb884c7cb7b16023e94d32" dependencies = [ "darling", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -1282,7 +1252,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -1403,7 +1373,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -1454,37 +1424,41 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.71" +version = "1.0.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75cb1540fadbd5b8fbccc4dddad2734eba435053f725621c070711a14bb5f4b8" +checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] [[package]] name = "radarflow" -version = "0.2.1" +version = "0.2.2" dependencies = [ "anyhow", "axum", "clap", - "csflow", + "dataview 1.0.1", + "enum-primitive-derive", + "itertools 0.12.0", "local-ip-address", "log", + "memflow", + "num-traits", + "reqwest", "serde", "serde_json", "simple_logger", "tokio", - "tokio-timerfd", "tower", "tower-http", "vergen", @@ -1623,21 +1597,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.20", -] - -[[package]] -name = "rustix" -version = "0.37.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" -dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", + "semver 1.0.21", ] [[package]] @@ -1649,7 +1609,7 @@ dependencies = [ "bitflags 2.4.1", "errno", "libc", - "linux-raw-sys 0.4.12", + "linux-raw-sys", "windows-sys 0.52.0", ] @@ -1682,22 +1642,22 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scroll" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" +checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" dependencies = [ "scroll_derive", ] [[package]] name = "scroll_derive" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" +checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -1734,9 +1694,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" [[package]] name = "semver-parser" @@ -1746,29 +1706,29 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.193" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.193" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] name = "serde_json" -version = "1.0.108" +version = "1.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" dependencies = [ "itoa", "ryu", @@ -1777,9 +1737,9 @@ dependencies = [ [[package]] name = "serde_path_to_error" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335" +checksum = "ebd154a240de39fdebcf5775d2675c204d7c13cf39a4c697be6493c8e734337c" dependencies = [ "itoa", "serde", @@ -1882,9 +1842,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.43" +version = "2.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee659fb5f3d355364e1f3e5bc10fb82068efbf824a1e9d1c9504244a6469ad53" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" dependencies = [ "proc-macro2", "quote", @@ -1947,28 +1907,28 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall 0.4.1", - "rustix 0.38.28", + "rustix", "windows-sys 0.52.0", ] [[package]] name = "thiserror" -version = "1.0.52" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a48fd946b02c0a526b2e9481c8e2a17755e47039164a86c4070446e3a4614d" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.52" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7fbe9b594d6568a6a1443250a7e67d80b74e1e96f6d1715e1e21cc1888291d3" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -2002,15 +1962,6 @@ dependencies = [ "time-core", ] -[[package]] -name = "timerfd" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3fd47d83ad0b5c7be2e8db0b9d712901ef6ce5afbcc6f676761004f5104ea2" -dependencies = [ - "rustix 0.37.27", -] - [[package]] name = "tinyvec" version = "1.6.0" @@ -2053,7 +2004,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] [[package]] @@ -2066,19 +2017,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-timerfd" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87eecdae9a9b793843b1df7a64bc136f203443c1ca9889b3c4a39590afa51094" -dependencies = [ - "futures-core", - "libc", - "slab", - "timerfd", - "tokio", -] - [[package]] name = "tokio-tungstenite" version = "0.20.1" @@ -2384,7 +2322,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", "wasm-bindgen-shared", ] @@ -2418,7 +2356,7 @@ checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2595,9 +2533,9 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winnow" -version = "0.5.31" +version = "0.5.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a4882e6b134d6c28953a387571f1acdd3496830d5e36c5e3a1075580ea641c" +checksum = "b7520bbdec7211caa7c4e682eb1fbe07abe20cee6756b6e00f537c82c11816aa" dependencies = [ "memchr", ] @@ -2641,5 +2579,5 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.48", ] diff --git a/Cargo.toml b/Cargo.toml old mode 100644 new mode 100755 index 30c545e..efc1cdd --- a/Cargo.toml +++ b/Cargo.toml @@ -1,3 +1,43 @@ -[workspace] -members = ["csflow", "radarflow"] -resolver = "2" \ No newline at end of file +[package] +name = "radarflow" +version = "0.2.2" +authors = ["Janek S " > target/doc/index.html -cp -r target/doc ./docs \ No newline at end of file diff --git a/csflow/build.rs b/build.rs old mode 100644 new mode 100755 similarity index 71% rename from csflow/build.rs rename to build.rs index f682ec9..ae610eb --- a/csflow/build.rs +++ b/build.rs @@ -1,5 +1,7 @@ use std::error::Error; +use vergen::EmitBuilder; + fn download(url: &str, to: &str) -> Result<(), Box> { let content = reqwest::blocking::get(url) .unwrap_or_else(|_| panic!("Downloading \"{to}\"")) @@ -16,18 +18,27 @@ fn main() -> Result<(), Box> { download( "https://raw.githubusercontent.com/a2x/cs2-dumper/main/generated/client.dll.rs", - "./src/cs2dumper/client.rs" + "./src/dma/cs2dumper/client.rs" ).expect("Failed to download build file \"client.dll.rs\""); download( "https://raw.githubusercontent.com/a2x/cs2-dumper/main/generated/offsets.rs", - "./src/cs2dumper/offsets.rs" + "./src/dma/cs2dumper/offsets.rs" ).expect("Failed to download build file \"offsets.rs\""); download( "https://raw.githubusercontent.com/a2x/cs2-dumper/main/generated/engine2.dll.rs", - "./src/cs2dumper/engine2.rs" + "./src/dma/cs2dumper/engine2.rs" ).expect("Failed to download build file \"engine2.dll.rs\""); + EmitBuilder::builder() + .git_sha(true) + .git_commit_date() + .cargo_debug() + .cargo_target_triple() + .rustc_semver() + .rustc_llvm_version() + .emit()?; + Ok(()) } \ No newline at end of file diff --git a/csflow/Cargo.lock b/csflow/Cargo.lock deleted file mode 100644 index 86941bc..0000000 --- a/csflow/Cargo.lock +++ /dev/null @@ -1,1912 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "abi_stable" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c8f0d5c8e09e8b591f6db9f56b006c9b9e7a44064acb274411ae51aaaa1364d" -dependencies = [ - "abi_stable_derive", - "abi_stable_shared", - "core_extensions", - "crossbeam-channel", - "generational-arena", - "libloading 0.7.4", - "lock_api", - "parking_lot", - "paste", - "repr_offset", - "rustc_version 0.4.0", - "serde", - "serde_derive", - "serde_json", -] - -[[package]] -name = "abi_stable_derive" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9810ef8debee5544010d92dac0b88b32853cd5bd5ca3298243c99e931da0f0" -dependencies = [ - "abi_stable_shared", - "as_derive_utils", - "core_extensions", - "proc-macro2", - "quote", - "rustc_version 0.2.3", - "syn 1.0.109", - "typed-arena", -] - -[[package]] -name = "abi_stable_shared" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece9da89066e018d908b48755e17cdd08a46ce222f84b1f226e837f836f84a5f" -dependencies = [ - "core_extensions", -] - -[[package]] -name = "addr2line" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "ahash" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "allocator-api2" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" - -[[package]] -name = "as_derive_utils" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a26fa495cefb8c86d9ce183b3f39ad11678e54fb3c20e6b7dbd87770811d9b" -dependencies = [ - "core_extensions", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "backtrace" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "base64" -version = "0.21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" - -[[package]] -name = "bit_field" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" - -[[package]] -name = "bumpalo" -version = "3.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" - -[[package]] -name = "bytes" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" - -[[package]] -name = "cc" -version = "1.0.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "libc", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cglue" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cbee103c8a337b7cf4d299133132237dff667d5f90cb1e97626a5caa1bb9ab9" -dependencies = [ - "abi_stable", - "cglue-macro", - "no-std-compat", - "rustc_version 0.4.0", - "serde", - "tarc", -] - -[[package]] -name = "cglue-gen" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09113ac46fb70539ed96b74af4382516fc25bfc463164eeb0ca036b9f77371d8" -dependencies = [ - "itertools 0.10.5", - "lazy_static", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "cglue-macro" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf28b8c74a050973c9972edfad2f32f404bc1ff6725e37d003e7d55504dec1cf" -dependencies = [ - "cglue-gen", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "coarsetime" -version = "0.1.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71367d3385c716342014ad17e3d19f7788ae514885a1f4c24f500260fb365e1a" -dependencies = [ - "libc", - "once_cell", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" - -[[package]] -name = "core_extensions" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92c71dc07c9721607e7a16108336048ee978c3a8b129294534272e8bac96c0ee" -dependencies = [ - "core_extensions_proc_macros", -] - -[[package]] -name = "core_extensions_proc_macros" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f3b219d28b6e3b4ac87bc1fc522e0803ab22e055da177bff0068c4150c61a6" - -[[package]] -name = "crossbeam-channel" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82a9b73a36529d9c47029b9fb3a6f0ea3cc916a261195352ba19e770fc1748b2" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a430a770ebd84726f584a90ee7f020d28db52c6d02138900f22341f866d39c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "cs2flow" -version = "0.1.0" -dependencies = [ - "dataview 1.0.1", - "log", - "memflow", - "reqwest", -] - -[[package]] -name = "darling" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.43", -] - -[[package]] -name = "darling_macro" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" -dependencies = [ - "darling_core", - "quote", - "syn 2.0.43", -] - -[[package]] -name = "dataview" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47a802a2cad0ff4dfc4f3110da174b7a6928c315cae523e88638cfb72941b4d5" - -[[package]] -name = "dataview" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50eb3a329e19d78c3a3dfa4ec5a51ecb84fa3a20c06edad04be25356018218f9" -dependencies = [ - "derive_pod", -] - -[[package]] -name = "derive_pod" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ea6706d74fca54e15f1d40b5cf7fe7f764aaec61352a9fcec58fe27e042fc8" - -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", -] - -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "encoding_rs" -version = "0.8.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "errno" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "fastrand" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" - -[[package]] -name = "fixed-slice-vec" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bb23c599a9ff5b981529099902fe5de8d55ecc8c1f451542da17b8d2d65326e" - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futures-channel" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" - -[[package]] -name = "futures-io" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" - -[[package]] -name = "futures-sink" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" - -[[package]] -name = "futures-task" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" - -[[package]] -name = "futures-util" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" -dependencies = [ - "futures-core", - "futures-io", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generational-arena" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877e94aff08e743b651baaea359664321055749b398adff8740a7399af7796e7" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "getrandom" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "gimli" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" - -[[package]] -name = "goblin" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27c1b4369c2cd341b5de549380158b105a04c331be5db9110eef7b6d2742134" -dependencies = [ - "log", - "plain", - "scroll", -] - -[[package]] -name = "h2" -version = "0.3.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" -dependencies = [ - "ahash", - "allocator-api2", -] - -[[package]] -name = "hermit-abi" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" - -[[package]] -name = "http" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hyper" -version = "0.14.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes", - "hyper", - "native-tls", - "tokio", - "tokio-native-tls", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "indexmap" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" -dependencies = [ - "equivalent", - "hashbrown", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "ipnet" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" - -[[package]] -name = "js-sys" -version = "0.3.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.151" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" - -[[package]] -name = "libloading" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" -dependencies = [ - "cfg-if", - "winapi", -] - -[[package]] -name = "libloading" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "libredox" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" -dependencies = [ - "bitflags 2.4.1", - "libc", - "redox_syscall 0.4.1", -] - -[[package]] -name = "linux-raw-sys" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" - -[[package]] -name = "lock_api" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "memchr" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" - -[[package]] -name = "memflow" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e4ab23adc6b68aa85d9d2d43c04f31c51b895acb323f807ff95ed8d844639b1" -dependencies = [ - "abi_stable", - "bitflags 1.3.2", - "bumpalo", - "cglue", - "coarsetime", - "dataview 1.0.1", - "dirs", - "fixed-slice-vec", - "goblin", - "hashbrown", - "itertools 0.12.0", - "libloading 0.8.1", - "log", - "memflow-derive", - "memmap", - "no-std-compat", - "once_cell", - "pelite", - "rangemap", - "serde", - "smallvec", - "toml", - "x86_64", -] - -[[package]] -name = "memflow-derive" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d766f6681f968c92eb0359fc4bc99039ebe2568df4bb884c7cb7b16023e94d32" -dependencies = [ - "darling", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.43", -] - -[[package]] -name = "memmap" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.48.0", -] - -[[package]] -name = "native-tls" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" -dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "no-std-compat" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "object" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "openssl" -version = "0.10.62" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cde4d2d9200ad5909f8dac647e29482e07c3a35de8a13fce7c9c7747ad9f671" -dependencies = [ - "bitflags 2.4.1", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.43", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-sys" -version = "0.9.98" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1665caf8ab2dc9aef43d1c0023bd904633a6a05cb30b0ad59bec2ae986e57a7" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", -] - -[[package]] -name = "paste" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" - -[[package]] -name = "pelite" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c270b1a0c279bbcb4cff3d2294121731c48ee68f0435d26cf71018a853cb890" -dependencies = [ - "dataview 0.1.2", - "no-std-compat", - "pelite-macros", -] - -[[package]] -name = "pelite-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a7cf3f8ecebb0f4895f4892a8be0a0dc81b498f9d56735cb769dc31bf00815b" - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "pin-project-lite" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" - -[[package]] -name = "plain" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" - -[[package]] -name = "proc-macro-crate" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97dc5fea232fc28d2f597b37c4876b348a40e33f3b02cc975c8d006d78d94b1a" -dependencies = [ - "toml_datetime", - "toml_edit", -] - -[[package]] -name = "proc-macro2" -version = "1.0.71" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75cb1540fadbd5b8fbccc4dddad2734eba435053f725621c070711a14bb5f4b8" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rangemap" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "977b1e897f9d764566891689e642653e5ed90c6895106acd005eb4c1d0203991" - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_users" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" -dependencies = [ - "getrandom", - "libredox", - "thiserror", -] - -[[package]] -name = "repr_offset" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb1070755bd29dffc19d0971cab794e607839ba2ef4b69a9e6fbc8733c1b72ea" -dependencies = [ - "tstr", -] - -[[package]] -name = "reqwest" -version = "0.11.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" -dependencies = [ - "base64", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-tls", - "ipnet", - "js-sys", - "log", - "mime", - "native-tls", - "once_cell", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_json", - "serde_urlencoded", - "system-configuration", - "tokio", - "tokio-native-tls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver 1.0.20", -] - -[[package]] -name = "rustix" -version = "0.38.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" -dependencies = [ - "bitflags 2.4.1", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustversion" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" - -[[package]] -name = "ryu" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" - -[[package]] -name = "schannel" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "scroll" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" -dependencies = [ - "scroll_derive", -] - -[[package]] -name = "scroll_derive" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.43", -] - -[[package]] -name = "security-framework" -version = "2.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - -[[package]] -name = "serde" -version = "1.0.193" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.193" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.43", -] - -[[package]] -name = "serde_json" -version = "1.0.108" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_spanned" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" - -[[package]] -name = "socket2" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" -dependencies = [ - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee659fb5f3d355364e1f3e5bc10fb82068efbf824a1e9d1c9504244a6469ad53" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tarc" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88da97cd34718f47df2adae0c2310ee305e061c794b9c07fd33d8387f4ee2e1c" - -[[package]] -name = "tempfile" -version = "3.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall 0.4.1", - "rustix", - "windows-sys 0.52.0", -] - -[[package]] -name = "thiserror" -version = "1.0.52" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a48fd946b02c0a526b2e9481c8e2a17755e47039164a86c4070446e3a4614d" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.52" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7fbe9b594d6568a6a1443250a7e67d80b74e1e96f6d1715e1e21cc1888291d3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.43", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.35.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "num_cpus", - "pin-project-lite", - "socket2", - "windows-sys 0.48.0", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "toml" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - -[[package]] -name = "toml_datetime" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" -dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -] - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "pin-project-lite", - "tracing-core", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "tstr" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cca3264971090dec0feef3b455a3c178f02762f7550cf4592991ac64b3be2d7e" -dependencies = [ - "tstr_proc_macros", -] - -[[package]] -name = "tstr_proc_macros" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78122066b0cb818b8afd08f7ed22f7fdbc3e90815035726f0840d0d26c0747a" - -[[package]] -name = "typed-arena" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" - -[[package]] -name = "unicode-bidi" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "url" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "volatile" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "442887c63f2c839b346c192d047a7c87e73d0689c9157b00b53dcc27dd5ea793" - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.43", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.43", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" - -[[package]] -name = "web-sys" -version = "0.3.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.0", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" -dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" - -[[package]] -name = "winnow" -version = "0.5.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a4882e6b134d6c28953a387571f1acdd3496830d5e36c5e3a1075580ea641c" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "x86_64" -version = "0.14.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b835097a84e4457323331ec5d6eb23d096066cbfb215d54096dcb4b2e85f500" -dependencies = [ - "bit_field", - "bitflags 2.4.1", - "rustversion", - "volatile", -] - -[[package]] -name = "zerocopy" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.43", -] diff --git a/csflow/Cargo.toml b/csflow/Cargo.toml deleted file mode 100644 index 41415e9..0000000 --- a/csflow/Cargo.toml +++ /dev/null @@ -1,28 +0,0 @@ -[package] -name = "csflow" -version = "0.1.2" -authors = ["Janek S "] -edition = "2021" -description = "SDK for CS2 cheats utilizing memflow" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -# memory -dataview = "1.0.1" -memflow = { git = "https://github.com/memflow/memflow.git", rev = "c19d870" } - -# logging -log = "0.4.19" - -# error handling -thiserror = "1.0.52" - -# derive stuff -enum-primitive-derive = "0.2.2" -num-traits = "0.2.16" -serde = { version = "1.0.181", features = ["derive"] } -clap = { version = "4.3.19", features = ["derive", "string"] } - -[build-dependencies] -reqwest = { version = "0.11.18", features = ["blocking"] } diff --git a/csflow/README.md b/csflow/README.md deleted file mode 100644 index 0d0ce48..0000000 --- a/csflow/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# csflow -SDK for CS2 cheats utilizing [memflow](https://github.com/memflow/memflow) - -## Documentation -Documentation can be found [here](https://superyu1337.github.io/cs2-memflow/csflow/index.html) diff --git a/csflow/src/context/cached_view.rs b/csflow/src/context/cached_view.rs deleted file mode 100644 index 4439be1..0000000 --- a/csflow/src/context/cached_view.rs +++ /dev/null @@ -1,122 +0,0 @@ -use ::std::sync::{atomic::{AtomicU8, Ordering, AtomicI32}, Arc}; - -use memflow::prelude::v1::*; - -pub const INVALIDATE_ALWAYS: u8 = 0b00000001; -pub const INVALIDATE_TICK: u8 = 0b00000010; - -pub struct ExternallyControlledValidator { - validator_next_flags: Arc, - validator_tick_count: Arc, -} - -impl ExternallyControlledValidator { - pub fn new() -> Self { - Self { - validator_next_flags: Arc::new(AtomicU8::new(INVALIDATE_ALWAYS)), - validator_tick_count: Arc::new(AtomicI32::new(0)), - } - } - - pub fn set_next_flags(&mut self, flags: u8) { - self.validator_next_flags - .store(flags as u8, Ordering::SeqCst); - } - - pub fn set_tick_count(&mut self, tick_count: i32) { - self.validator_tick_count - .store(tick_count, Ordering::SeqCst); - } - - pub fn validator(&self) -> CustomValidator { - CustomValidator::new( - self.validator_next_flags.clone(), - self.validator_tick_count.clone(), - ) - } -} - -#[derive(Clone)] -struct ValidatorSlot { - value: i32, - flags: u8, -} - -#[derive(Clone)] -pub struct CustomValidator { - slots: Vec, - - // The invalidation flags used for the next read or write. - next_flags: Arc, - next_flags_local: u8, - - // last_count is used to quickly invalidate slots without having to - // iterate over all slots and invalidating manually. - last_count: usize, - - // tick count is the externally controlled tick number that will - // invalidate specific caches when it is increased. - tick_count: Arc, - tick_count_local: i32, -} - -impl CustomValidator { - pub fn new(next_flags: Arc, tick_count: Arc) -> Self { - Self { - slots: vec![], - next_flags, - next_flags_local: INVALIDATE_ALWAYS, - last_count: 0, - tick_count, - tick_count_local: -1, - } - } -} - -impl CacheValidator for CustomValidator { - // Create a vector containing all slots with a predefined invalid state. - fn allocate_slots(&mut self, slot_count: usize) { - self.slots.resize( - slot_count, - ValidatorSlot { - value: -1, - flags: INVALIDATE_ALWAYS, - }, - ); - } - - // This function is invoked on every batch of memory operations. - // This simply updates the internal state and reads the Atomic variables for the upcoming validations. - fn update_validity(&mut self) { - self.last_count = self.last_count.wrapping_add(1); - self.next_flags_local = self.next_flags.load(Ordering::SeqCst); - self.tick_count_local = self.tick_count.load(Ordering::SeqCst); - } - - // This simply returns true or false if the slot is valid or not. - // `last_count` is used here to invalidate slots quickly without requiring to iterate over the entire slot list. - fn is_slot_valid(&self, slot_id: usize) -> bool { - match self.slots[slot_id].flags { - INVALIDATE_ALWAYS => self.slots[slot_id].value == self.last_count as i32, - INVALIDATE_TICK => self.slots[slot_id].value == self.tick_count_local as i32, - _ => false, - } - } - - // In case the cache is being updates this function marks the slot as being valid. - fn validate_slot(&mut self, slot_id: usize) { - match self.next_flags_local { - INVALIDATE_ALWAYS => self.slots[slot_id].value = self.last_count as i32, - INVALIDATE_TICK => self.slots[slot_id].value = self.tick_count_local as i32, - _ => (), - } - - self.slots[slot_id].flags = self.next_flags_local; - } - - // In case a slot has to be freed this function resets it to the default values. - fn invalidate_slot(&mut self, slot_id: usize) { - self.slots[slot_id].value = -1; - self.slots[slot_id].flags = INVALIDATE_ALWAYS; - } -} \ No newline at end of file diff --git a/csflow/src/context/mod.rs b/csflow/src/context/mod.rs deleted file mode 100644 index d4aa09e..0000000 --- a/csflow/src/context/mod.rs +++ /dev/null @@ -1,144 +0,0 @@ -use memflow::{plugins::{IntoProcessInstanceArcBox, Inventory, ConnectorArgs, args::Args}, os::{ModuleInfo, Os, Process}, mem::{MemoryView, CachedView}, types::Address}; -use memflow::prelude::v1::size; - -use crate::{error::Error, structs::{CPlayerController, CBaseEntity, GlobalVars, GameRules}, cs2dumper, traits::MemoryClass}; - -use self::cached_view::{ExternallyControlledValidator, CustomValidator, INVALIDATE_TICK}; - -pub mod cached_view; - -pub struct CheatCtx { - pub process: IntoProcessInstanceArcBox<'static>, - pub memory: CachedView<'static, IntoProcessInstanceArcBox<'static>, CustomValidator>, - pub cache_controller: ExternallyControlledValidator, - pub client_module: ModuleInfo, - pub engine_module: ModuleInfo, -} - -impl CheatCtx { - fn check_version(&mut self) -> Result<(), Error> { - let game_build_number: u32 = self.memory.read(self.engine_module.base + cs2dumper::offsets::engine2_dll::dwBuildNumber)?; - let offset_build_number = cs2dumper::offsets::game_info::buildNumber; - - if game_build_number as usize != offset_build_number { - return Err(Error::GameVersionMismatch(game_build_number as usize, offset_build_number)) - } - - Ok(()) - } - - pub fn setup(connector: Connector, pcileech_device: String) -> Result { - let inventory = Inventory::scan(); - - let os = { - if connector == Connector::Pcileech { - let args = Args::new() - .insert("device", &pcileech_device); - - let connector_args = ConnectorArgs::new(None, args, None); - - inventory.builder() - .connector(&connector.to_string()) - .args(connector_args) - .os("win32") - .build()? - } else { - inventory.builder() - .connector(&connector.to_string()) - .os("win32") - .build()? - } - }; - - let mut process = os.into_process_by_name("cs2.exe")?; - - let client_module = process.module_by_name("client.dll")?; - - let engine_module = process.module_by_name("engine2.dll")?; - - // Create the validator - let mut validator_controller = ExternallyControlledValidator::new(); - let validator = validator_controller.validator(); - - // Create CachedView over the processes MemoryView - let proc_arch = process.info().proc_arch; - let cached_process = CachedView::builder(process.clone()) - .arch(proc_arch) - .validator(validator) - .cache_size(size::mb(10)) - .build()?; - - validator_controller.set_next_flags(INVALIDATE_TICK); - - let mut ctx = Self { - process: process, - memory: cached_process, - cache_controller: validator_controller, - client_module, - engine_module, - }; - - ctx.check_version()?; - - Ok(ctx) - } - - pub fn get_local(&mut self) -> Result { - let ptr = self.memory.read_addr64(self.client_module.base + cs2dumper::offsets::client_dll::dwLocalPlayerController)?; - Ok(CPlayerController::new(ptr)) - } - - pub fn get_plantedc4(&mut self) -> Result { - let ptr = self.memory.read_addr64(self.client_module.base + cs2dumper::offsets::client_dll::dwPlantedC4)?; - let ptr2 = self.memory.read_addr64(ptr)?; - Ok(CBaseEntity::new(ptr2)) - } - - pub fn get_globals(&mut self) -> Result { - let ptr = self.memory.read_addr64(self.client_module.base + cs2dumper::offsets::client_dll::dwGlobalVars)?; - Ok(GlobalVars::new(ptr)) - } - - pub fn get_gamerules(&mut self) -> Result { - let ptr = self.memory.read_addr64(self.client_module.base + cs2dumper::offsets::client_dll::dwGameRules)?; - Ok(GameRules::new(ptr)) - } - - // todo: separate into own class - pub fn get_entity_list(&mut self) -> Result { - let ptr = self.memory.read_addr64(self.client_module.base + cs2dumper::offsets::client_dll::dwEntityList)?; - Ok(ptr) - } - - // todo: separate into own class - pub fn highest_entity_index(&mut self) -> Result { - let game_entity_system = self.process.read_addr64(self.client_module.base + cs2dumper::offsets::client_dll::dwGameEntitySystem)?; - let highest_index = self.process.read(game_entity_system + cs2dumper::offsets::client_dll::dwGameEntitySystem_getHighestEntityIndex)?; - Ok(highest_index) - } - - // todo: separate into own class - pub fn network_is_ingame(&mut self) -> Result { - let ptr = self.process.read_addr64(self.engine_module.base + cs2dumper::offsets::engine2_dll::dwNetworkGameClient)?; - let signonstate: i32 = self.process.read(ptr + cs2dumper::offsets::engine2_dll::dwNetworkGameClient_signOnState)?; - Ok(signonstate == 6) - } -} - -#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, clap::ValueEnum, Default)] -pub enum Connector { - #[default] - Qemu, - Kvm, - Pcileech -} - -impl ToString for Connector { - fn to_string(&self) -> String { - match self { - Connector::Qemu => String::from("qemu"), - Connector::Kvm => String::from("kvm"), - Connector::Pcileech => String::from("pcileech"), - } - } -} diff --git a/csflow/src/enums/mod.rs b/csflow/src/enums/mod.rs deleted file mode 100644 index 8deb3ee..0000000 --- a/csflow/src/enums/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -mod player_type; -mod teamid; - -pub use player_type::PlayerType; -pub use teamid::TeamID; \ No newline at end of file diff --git a/csflow/src/error.rs b/csflow/src/error.rs deleted file mode 100644 index f456339..0000000 --- a/csflow/src/error.rs +++ /dev/null @@ -1,39 +0,0 @@ -use memflow::types::Address; -use thiserror::Error; - -use crate::structs::Vec3; - -#[derive(Error, Debug)] -pub enum Error { - /// Game version mismatch. - /// First arg is the game version, second is the offset version. - #[error("version mismatch, game has version {0}, but offsets have version {1}")] - GameVersionMismatch(usize, usize), - - #[error("memflow error: {0}")] - Memflow(#[from] memflow::error::Error), - - #[error("memflow partial error when reading address: {0}")] - MemflowPartialAddress(#[from] memflow::error::PartialError
), - - #[error("memflow partial error when reading Vec3: {0}")] - MemflowPartialVec3(#[from] memflow::error::PartialError), - - #[error("memflow partial error when reading String: {0}")] - MemflowPartialString(#[from] memflow::error::PartialError), - - #[error("memflow partial error when reading i32: {0}")] - MemflowPartiali32(#[from] memflow::error::PartialError), - - #[error("memflow partial error when reading u32: {0}")] - MemflowPartialu32(#[from] memflow::error::PartialError), - - #[error("memflow partial error when reading f32: {0}")] - MemflowPartialf32(#[from] memflow::error::PartialError), - - #[error("memflow partial error when reading u8: {0}")] - MemflowPartialu8(#[from] memflow::error::PartialError), - - #[error("memflow partial error when reading Vec: {0}")] - MemflowPartialVecu8(#[from] memflow::error::PartialError>) -} \ No newline at end of file diff --git a/csflow/src/lib.rs b/csflow/src/lib.rs deleted file mode 100644 index 68e11c1..0000000 --- a/csflow/src/lib.rs +++ /dev/null @@ -1,14 +0,0 @@ -#![allow(dead_code)] - -mod cs2dumper; -mod context; -mod error; - -pub mod structs; -pub mod traits; -pub mod enums; - -pub use context::*; -pub use error::Error; - -pub use memflow::prelude as memflow; \ No newline at end of file diff --git a/csflow/src/structs/entity/base_entity.rs b/csflow/src/structs/entity/base_entity.rs deleted file mode 100644 index ce6ce55..0000000 --- a/csflow/src/structs/entity/base_entity.rs +++ /dev/null @@ -1,82 +0,0 @@ -use memflow::{types::Address, mem::MemoryView}; -use crate::{CheatCtx, Error, cs2dumper, traits::{BaseEntity, MemoryClass}, structs::Vec3}; - -#[derive(Debug, Clone, Copy)] -pub struct CBaseEntity(Address); - -impl MemoryClass for CBaseEntity { - fn ptr(&self) -> Address { - self.0 - } - - fn new(ptr: Address) -> Self { - Self(ptr) - } -} - -impl BaseEntity for CBaseEntity { - fn from_index(ctx: &mut CheatCtx, entity_list: Address, index: i32) -> Result, Error> { - let list_entry = ctx.memory.read_addr64(entity_list + 8 * (index >> 9) + 16)?; - if list_entry.is_null() && !list_entry.is_valid() { - return Ok(None); - } - - let player_ptr = ctx.memory.read_addr64(list_entry + 120 * (index & 0x1FF))?; - if player_ptr.is_null() && !player_ptr.is_valid() { - return Ok(None); - } - - Ok(Some(Self::new(player_ptr))) - } - - fn pos(&self, ctx: &mut CheatCtx) -> Result { - let node = ctx.memory.read_addr64(self.0 + cs2dumper::client::C_BaseEntity::m_pGameSceneNode)?; - Ok(ctx.memory.read(node + cs2dumper::client::CGameSceneNode::m_vecAbsOrigin)?) - } - - fn class_name(&self, ctx: &mut CheatCtx) -> Result { - let entity_identity_ptr = ctx.process.read_addr64(self.0 + cs2dumper::client::CEntityInstance::m_pEntity)?; - let class_name_ptr = ctx.process.read_addr64(entity_identity_ptr + cs2dumper::client::CEntityIdentity::m_designerName)?; - Ok(ctx.memory.read_char_string_n(class_name_ptr, 32)?) - } - - fn next_by_class(&self, ctx: &mut CheatCtx) -> Result where Self: std::marker::Sized { - let entity_identity_ptr = ctx.process.read_addr64(self.0 + cs2dumper::client::CEntityInstance::m_pEntity)?; - let next_by_class_ptr = ctx.process.read_addr64(entity_identity_ptr + cs2dumper::client::CEntityIdentity::m_pNextByClass)?; - let entity_ptr = ctx.process.read_addr64(next_by_class_ptr)?; - Ok(Self(entity_ptr)) - } - - fn previous_by_class(&self, ctx: &mut CheatCtx) -> Result where Self: std::marker::Sized { - let entity_identity_ptr = ctx.memory.read_addr64(self.0 + cs2dumper::client::CEntityInstance::m_pEntity)?; - let next_by_class_ptr = ctx.process.read_addr64(entity_identity_ptr + cs2dumper::client::CEntityIdentity::m_pPrevByClass)?; - let entity_ptr = ctx.process.read_addr64(next_by_class_ptr)?; - Ok(Self(entity_ptr)) - } -} - -impl CBaseEntity { - pub fn to_player_controller(&self) -> super::CPlayerController { - super::CPlayerController::new(self.0) - } - - /// Professionally engineered function to quickly check if the entity has class name "weapon_c4" - pub fn is_dropped_c4(&self, ctx: &mut CheatCtx) -> Result { - let entity_identity_ptr = ctx.process.read_addr64(self.0 + cs2dumper::client::CEntityInstance::m_pEntity)?; - let class_name_ptr = ctx.process.read_addr64(entity_identity_ptr + cs2dumper::client::CEntityIdentity::m_designerName)?; - - let data = ctx.process.read_raw(class_name_ptr + 7, 2)?; - let is_c4 = data == "c4".as_bytes(); - Ok(is_c4) - } - - /// Professionally engineered function to quickly check if the entity has class name "cs_player_controller" - pub fn is_cs_player_controller(&self, ctx: &mut CheatCtx) -> Result { - let entity_identity_ptr = ctx.process.read_addr64(self.0 + cs2dumper::client::CEntityInstance::m_pEntity)?; - let class_name_ptr = ctx.process.read_addr64(entity_identity_ptr + cs2dumper::client::CEntityIdentity::m_designerName)?; - - let data = ctx.process.read_raw(class_name_ptr, 20)?; - let is_controller = data == "cs_player_controller".as_bytes(); - Ok(is_controller) - } -} \ No newline at end of file diff --git a/csflow/src/structs/entity/mod.rs b/csflow/src/structs/entity/mod.rs deleted file mode 100644 index 68eaa1f..0000000 --- a/csflow/src/structs/entity/mod.rs +++ /dev/null @@ -1,7 +0,0 @@ -mod base_entity; -mod player_controller; -mod player_pawn; - -pub use base_entity::CBaseEntity; -pub use player_controller::CPlayerController; -pub use player_pawn::CPlayerPawn; \ No newline at end of file diff --git a/csflow/src/structs/entity/player_controller.rs b/csflow/src/structs/entity/player_controller.rs deleted file mode 100644 index 33668f2..0000000 --- a/csflow/src/structs/entity/player_controller.rs +++ /dev/null @@ -1,114 +0,0 @@ -use memflow::{types::Address, mem::MemoryView}; -use num_traits::FromPrimitive; - -use crate::{CheatCtx, Error, cs2dumper, structs::Vec3, traits::{MemoryClass, BaseEntity}, enums::{TeamID, PlayerType}}; - -#[derive(Debug, Clone, Copy)] -pub struct CPlayerController(Address); - -impl MemoryClass for CPlayerController { - fn ptr(&self) -> Address { - self.0 - } - - fn new(ptr: Address) -> Self { - Self(ptr) - } -} - -impl BaseEntity for CPlayerController { - fn from_index(ctx: &mut CheatCtx, entity_list: Address, index: i32) -> Result, Error> { - let list_entry = ctx.memory.read_addr64(entity_list + 8 * (index >> 9) + 16)?; - if list_entry.is_null() && !list_entry.is_valid() { - return Ok(None); - } - - let player_ptr = ctx.memory.read_addr64(list_entry + 120 * (index & 0x1FF))?; - if player_ptr.is_null() && !player_ptr.is_valid() { - return Ok(None); - } - - Ok(Some(Self::new(player_ptr))) - } - - /// This function is slower because of an additional pointer read, use pawn.pos() instead. - fn pos(&self, ctx: &mut CheatCtx) -> Result { - let node = ctx.memory.read_addr64(self.0 + cs2dumper::client::C_BaseEntity::m_pGameSceneNode)?; - Ok(ctx.memory.read(node + cs2dumper::client::CGameSceneNode::m_vecAbsOrigin)?) - } - - fn class_name(&self, ctx: &mut CheatCtx) -> Result { - let entity_identity_ptr = ctx.process.read_addr64(self.0 + cs2dumper::client::CEntityInstance::m_pEntity)?; - let class_name_ptr = ctx.process.read_addr64(entity_identity_ptr + cs2dumper::client::CEntityIdentity::m_designerName)?; - Ok(ctx.memory.read_char_string_n(class_name_ptr, 32)?) - } - - fn next_by_class(&self, ctx: &mut CheatCtx) -> Result where Self: std::marker::Sized { - let entity_identity_ptr = ctx.process.read_addr64(self.0 + cs2dumper::client::CEntityInstance::m_pEntity)?; - let next_by_class_ptr = ctx.process.read_addr64(entity_identity_ptr + cs2dumper::client::CEntityIdentity::m_pNextByClass)?; - - let class_name_ptr = ctx.process.read_addr64(entity_identity_ptr + cs2dumper::client::CEntityIdentity::m_designerName)?; - let class_name= ctx.process.read_char_string_n(class_name_ptr, 32)?; - - println!("class_name: {}", class_name); - - let stringable_index: i32 = ctx.process.read(entity_identity_ptr + cs2dumper::client::CEntityIdentity::m_nameStringableIndex)?; - println!("stringable_index: {}", stringable_index); - - let entity_ptr = ctx.process.read_addr64(next_by_class_ptr)?; - println!("entity_ptr: {}", entity_ptr); - Ok(Self(entity_ptr)) - } - - fn previous_by_class(&self, ctx: &mut CheatCtx) -> Result where Self: std::marker::Sized { - let entity_identity_ptr = ctx.process.read_addr64(self.0 + cs2dumper::client::CEntityInstance::m_pEntity)?; - let next_by_class_ptr = ctx.process.read_addr64(entity_identity_ptr + cs2dumper::client::CEntityIdentity::m_pPrevByClass)?; - let entity_ptr = ctx.process.read_addr64(next_by_class_ptr)?; - Ok(Self(entity_ptr)) - } -} - -impl CPlayerController { - pub fn get_pawn(&self, ctx: &mut CheatCtx, entity_list: Address) -> Result, Error> { - let uhandle = ctx.memory.read(self.0 + cs2dumper::client::CCSPlayerController::m_hPlayerPawn)?; - super::CPlayerPawn::from_uhandle(ctx, entity_list, uhandle) - } - - // Technically something that should be in the BaseEntity trait, but we are only gonna use it on CPlayerController - pub fn get_team(&self, ctx: &mut CheatCtx) -> Result, Error> { - let team_num: i32 = ctx.memory.read(self.0 + cs2dumper::client::C_BaseEntity::m_iTeamNum)?; - Ok(TeamID::from_i32(team_num)) - } - - pub fn get_player_type(&self, ctx: &mut CheatCtx, local: &CPlayerController) -> Result, Error> { - if self.0 == local.0 { - return Ok(Some(PlayerType::Local)) - } - - let team = { - match self.get_team(ctx)? { - Some(t) => t, - None => { return Ok(None) }, - } - }; - - let local_team = { - match local.get_team(ctx)? { - Some(t) => t, - None => { return Ok(None) }, - } - }; - - let player_type = { - if team == TeamID::Spectator { - PlayerType::Spectator - } else if team != local_team { - PlayerType::Enemy - } else { - PlayerType::Team - } - }; - - Ok(Some(player_type)) - } -} \ No newline at end of file diff --git a/csflow/src/structs/entity/player_pawn.rs b/csflow/src/structs/entity/player_pawn.rs deleted file mode 100644 index 08cd8ec..0000000 --- a/csflow/src/structs/entity/player_pawn.rs +++ /dev/null @@ -1,81 +0,0 @@ -use memflow::{types::Address, mem::MemoryView}; - -use crate::{Error, CheatCtx, cs2dumper, structs::Vec3, traits::MemoryClass}; - -#[derive(Debug, Clone, Copy)] -pub struct CPlayerPawn(Address); - -impl MemoryClass for CPlayerPawn { - fn ptr(&self) -> Address { - self.0 - } - - fn new(ptr: Address) -> Self { - Self(ptr) - } -} - -impl CPlayerPawn { - pub fn from_uhandle(ctx: &mut CheatCtx, entity_list: Address, uhandle: u32) -> Result, Error> { - let list_entry = ctx.memory.read_addr64(entity_list + 0x8 * ((uhandle & 0x7FFF) >> 9) + 16)?; - - if list_entry.is_null() || !list_entry.is_valid() { - Ok(None) - } else { - let ptr = ctx.memory.read_addr64(list_entry + 120 * (uhandle & 0x1FF))?; - Ok(Some(Self(ptr))) - } - } - - // Todo: Optimize this function: find another way to do this - pub fn has_c4(&self, ctx: &mut CheatCtx, entity_list: Address) -> Result { - let mut has_c4 = false; - let wep_services = ctx.memory.read_addr64(self.0 + cs2dumper::client::C_BasePlayerPawn::m_pWeaponServices)?; - let wep_count: i32 = ctx.memory.read(wep_services + cs2dumper::client::CPlayer_WeaponServices::m_hMyWeapons)?; - let wep_base = ctx.memory.read_addr64(wep_services + cs2dumper::client::CPlayer_WeaponServices::m_hMyWeapons + 0x8)?; - - for wep_idx in 0..wep_count { - let handle: i32 = ctx.memory.read(wep_base + wep_idx * 0x4)?; - if handle == -1 { - continue; - } - - let list_entry = ctx.memory.read_addr64(entity_list + 0x8 * ((handle & 0x7FFF) >> 9) + 16)?; - if let Some(wep_ptr) = { - if list_entry.is_null() || !list_entry.is_valid() { - None - } else { - let ptr = ctx.memory.read_addr64(list_entry + 120 * (handle & 0x1FF))?; - Some(ptr) - } - } { - let wep_data = ctx.memory.read_addr64(wep_ptr + cs2dumper::client::C_BaseEntity::m_nSubclassID + 0x8)?; - let id: i32 = ctx.memory.read(wep_data + cs2dumper::client::CCSWeaponBaseVData::m_WeaponType)?; - - if id == 7 { - has_c4 = true; - break; - } - } - } - - Ok(has_c4) - } - - pub fn pos(&self, ctx: &mut CheatCtx) -> Result { - Ok(ctx.memory.read(self.0 + cs2dumper::client::C_BasePlayerPawn::m_vOldOrigin)?) - } - - pub fn angles(&self, ctx: &mut CheatCtx) -> Result { - Ok(ctx.memory.read(self.0 + cs2dumper::client::C_CSPlayerPawnBase::m_angEyeAngles)?) - } - - pub fn health(&self, ctx: &mut CheatCtx) -> Result { - Ok(ctx.memory.read(self.0 + cs2dumper::client::C_BaseEntity::m_iHealth)?) - } - - /// Same as ::get_health > 0 - pub fn is_alive(&self, ctx: &mut CheatCtx) -> Result { - Ok(self.health(ctx)? > 0) - } -} \ No newline at end of file diff --git a/csflow/src/structs/gamerules.rs b/csflow/src/structs/gamerules.rs deleted file mode 100644 index 67fc338..0000000 --- a/csflow/src/structs/gamerules.rs +++ /dev/null @@ -1,35 +0,0 @@ -use memflow::{types::Address, mem::MemoryView}; -use crate::{traits::MemoryClass, CheatCtx, Error, cs2dumper}; - -#[derive(Debug, Clone, Copy)] -pub struct GameRules(Address); - -impl MemoryClass for GameRules { - fn ptr(&self) -> memflow::types::Address { - self.0 - } - - fn new(ptr: memflow::types::Address) -> Self { - Self(ptr) - } -} - -impl GameRules { - pub fn bomb_dropped(&self, ctx: &mut CheatCtx) -> Result { - let data: u8 = ctx.memory.read(self.0 + cs2dumper::client::C_CSGameRules::m_bBombDropped)?; - Ok(data != 0) - } - - pub fn total_rounds_played(&self, ctx: &mut CheatCtx) -> Result { - Ok(ctx.memory.read(self.0 + cs2dumper::client::C_CSGameRules::m_totalRoundsPlayed)?) - } - - pub fn game_phase(&self, ctx: &mut CheatCtx) -> Result { - Ok(ctx.memory.read(self.0 + cs2dumper::client::C_CSGameRules::m_gamePhase)?) - } - - pub fn bomb_planted(&self, ctx: &mut CheatCtx) -> Result { - let data: u8 = ctx.memory.read(self.0 + cs2dumper::client::C_CSGameRules::m_bBombPlanted)?; - Ok(data != 0) - } -} \ No newline at end of file diff --git a/csflow/src/structs/global_vars.rs b/csflow/src/structs/global_vars.rs deleted file mode 100644 index 4895026..0000000 --- a/csflow/src/structs/global_vars.rs +++ /dev/null @@ -1,68 +0,0 @@ -use memflow::{types::Address, mem::MemoryView}; -use crate::{traits::MemoryClass, CheatCtx, Error, cached_view::INVALIDATE_ALWAYS}; - -#[derive(Debug, Clone, Copy)] -pub struct GlobalVars(Address); - -impl MemoryClass for GlobalVars { - fn ptr(&self) -> memflow::types::Address { - self.0 - } - - fn new(ptr: memflow::types::Address) -> Self { - Self(ptr) - } -} - -impl GlobalVars { - pub fn real_time(&self, ctx: &mut CheatCtx) -> Result { - ctx.cache_controller.set_next_flags(INVALIDATE_ALWAYS); - Ok(ctx.process.read(self.0)?) - } - - pub fn frame_count(&self, ctx: &mut CheatCtx) -> Result { - Ok(ctx.process.read(self.0 + 0x4)?) - } - - pub fn frame_time(&self, ctx: &mut CheatCtx) -> Result { - Ok(ctx.process.read(self.0 + 0x8)?) - } - - pub fn absolute_frame_time(&self, ctx: &mut CheatCtx) -> Result { - Ok(ctx.process.read(self.0 + 0xC)?) - } - - pub fn max_clients(&self, ctx: &mut CheatCtx) -> Result { - Ok(ctx.process.read(self.0 + 0x10)?) - } - - pub fn tick_count(&self, ctx: &mut CheatCtx) -> Result { - Ok(ctx.process.read(self.0 + 0x40)?) - } - - pub fn map_name(&self, ctx: &mut CheatCtx) -> Result { - let ptr = ctx.memory.read_addr64(self.0 + 0x188)?; - Ok(ctx.process.read_char_string_n(ptr, 32)?) - } -} - -/* -struct GlobalVarsBase { - real_time: f32, // 0x0000 - frame_count: i32, // 0x0004 - frame_time: f32, // 0x0008 - absolute_frame_time: f32, // 0x000C - max_clients: i32, // 0x0010 - pad_0: [u8; 0x14], // 0x0014 - frame_time_2: f32, // 0x0028 - current_time: f32, // 0x002C - current_time_2: f32, // 0x0030 - pad_1: [u8; 0xC], // 0x0034 - tick_count: f32, // 0x0040 // NO fucking idea why the fuck this "should" be an f32???? - pad_2: [u8; 0x4], // 0x0044 - network_channel: *const c_void, // 0x0048 - pad_3: [u8; 0x130], // 0x0050 - current_map: *const c_char, // 0x0180 - current_map_name: *const c_char, // 0x0188 -} -*/ \ No newline at end of file diff --git a/csflow/src/structs/mod.rs b/csflow/src/structs/mod.rs deleted file mode 100644 index fd8809c..0000000 --- a/csflow/src/structs/mod.rs +++ /dev/null @@ -1,9 +0,0 @@ -mod vec3; -mod global_vars; -mod gamerules; -mod entity; - -pub use vec3::Vec3; -pub use global_vars::GlobalVars; -pub use gamerules::GameRules; -pub use entity::{CBaseEntity, CPlayerController, CPlayerPawn}; \ No newline at end of file diff --git a/csflow/src/traits/base_entity.rs b/csflow/src/traits/base_entity.rs deleted file mode 100644 index 8c401e4..0000000 --- a/csflow/src/traits/base_entity.rs +++ /dev/null @@ -1,13 +0,0 @@ -use memflow::types::Address; - -use crate::{CheatCtx, structs::Vec3, Error}; - -/// A trait for basic functions from C_BaseEntity -/// CCSPlayerController inherits C_BaseEntity, which is why this trait exists. -pub trait BaseEntity { - fn from_index(ctx: &mut CheatCtx, entity_list: Address, index: i32) -> Result, Error> where Self: std::marker::Sized; - fn pos(&self, ctx: &mut CheatCtx) -> Result; - fn class_name(&self, ctx: &mut CheatCtx) -> Result; - fn next_by_class(&self, ctx: &mut CheatCtx) -> Result where Self: std::marker::Sized; - fn previous_by_class(&self, ctx: &mut CheatCtx) -> Result where Self: std::marker::Sized; -} \ No newline at end of file diff --git a/csflow/src/traits/memory_class.rs b/csflow/src/traits/memory_class.rs deleted file mode 100644 index 60ad31c..0000000 --- a/csflow/src/traits/memory_class.rs +++ /dev/null @@ -1,7 +0,0 @@ -use memflow::types::Address; - -/// A trait that implements basic functions for a class represented by a single pointer -pub trait MemoryClass { - fn ptr(&self) -> Address; - fn new(ptr: Address) -> Self; -} \ No newline at end of file diff --git a/csflow/src/traits/mod.rs b/csflow/src/traits/mod.rs deleted file mode 100644 index 9f3ad87..0000000 --- a/csflow/src/traits/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -mod base_entity; -mod memory_class; - -pub use base_entity::BaseEntity; -pub use memory_class::MemoryClass; \ No newline at end of file diff --git a/docs/.lock b/docs/.lock deleted file mode 100644 index e69de29..0000000 diff --git a/docs/crates.js b/docs/crates.js deleted file mode 100644 index 891c5c2..0000000 --- a/docs/crates.js +++ /dev/null @@ -1 +0,0 @@ -window.ALL_CRATES = ["csflow","radarflow"]; \ No newline at end of file diff --git a/docs/csflow/all.html b/docs/csflow/all.html deleted file mode 100644 index 7e54b25..0000000 --- a/docs/csflow/all.html +++ /dev/null @@ -1 +0,0 @@ -List of all items in this crate
\ No newline at end of file diff --git a/docs/csflow/context/enum.Connector.html b/docs/csflow/context/enum.Connector.html deleted file mode 100644 index 25027bc..0000000 --- a/docs/csflow/context/enum.Connector.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../csflow/enum.Connector.html...

- - - \ No newline at end of file diff --git a/docs/csflow/context/struct.CheatCtx.html b/docs/csflow/context/struct.CheatCtx.html deleted file mode 100644 index 422c65f..0000000 --- a/docs/csflow/context/struct.CheatCtx.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../csflow/struct.CheatCtx.html...

- - - \ No newline at end of file diff --git a/docs/csflow/enum.Connector.html b/docs/csflow/enum.Connector.html deleted file mode 100644 index 23520ea..0000000 --- a/docs/csflow/enum.Connector.html +++ /dev/null @@ -1,72 +0,0 @@ -Connector in csflow - Rust

Enum csflow::Connector

source ·
pub enum Connector {
-    Qemu,
-    Kvm,
-    Pcileech,
-}

Variants§

§

Qemu

§

Kvm

§

Pcileech

Trait Implementations§

source§

impl Clone for Connector

source§

fn clone(&self) -> Connector

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Default for Connector

source§

fn default() -> Connector

Returns the “default value” for a type. Read more
source§

impl Ord for Connector

source§

fn cmp(&self, other: &Connector) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere - Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere - Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

Restrict a value to a certain interval. Read more
source§

impl PartialEq<Connector> for Connector

source§

fn eq(&self, other: &Connector) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd<Connector> for Connector

source§

fn partial_cmp(&self, other: &Connector) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl ToString for Connector

source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl ValueEnum for Connector

source§

fn value_variants<'a>() -> &'a [Self]

All possible argument values, in display order.
source§

fn to_possible_value<'a>(&self) -> Option<PossibleValue>

The canonical argument value. Read more
§

fn from_str(input: &str, ignore_case: bool) -> Result<Self, String>

Parse an argument into Self.
source§

impl Copy for Connector

source§

impl Eq for Connector

source§

impl StructuralEq for Connector

source§

impl StructuralPartialEq for Connector

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<'a, T> BorrowOwned<'a> for Twhere - T: 'a + Clone,

§

type ROwned = T

The owned type, stored in RCow::Owned
§

type RBorrowed = &'a T

The borrowed type, stored in RCow::Borrowed
§

fn r_borrow( - this: &'a <T as BorrowOwned<'a>>::ROwned -) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn r_to_owned( - this: <T as BorrowOwned<'a>>::RBorrowed -) -> <T as BorrowOwned<'a>>::ROwned

§

fn deref_borrowed(this: &<T as BorrowOwned<'a>>::RBorrowed) -> &T

§

fn deref_owned(this: &<T as BorrowOwned<'a>>::ROwned) -> &T

§

fn from_cow_borrow(this: &'a T) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn from_cow_owned(this: <T as ToOwned>::Owned) -> <T as BorrowOwned<'a>>::ROwned

§

fn into_cow_borrow(this: <T as BorrowOwned<'a>>::RBorrowed) -> &'a T

§

fn into_cow_owned(this: <T as BorrowOwned<'a>>::ROwned) -> <T as ToOwned>::Owned

§

impl<Q, K> Comparable<K> for Qwhere - Q: Ord + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T, F> From2<T> for Fwhere - T: Into<F>,

§

fn from2(other: T) -> F

§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, -the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<T> SelfOps for Twhere - T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> Uwhere - F: FnOnce(Self) -> U, - Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere - F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self -Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere - F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. -Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Selfwhere - F: FnOnce(&mut Self), - Self: Sized,

Mutates self using a closure taking self by mutable reference, -passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Selfwhere - F: FnOnce(&Self), - Self: Sized,

Observes the value of self, passing it along unmodified. -Useful in long method chains. Read more
§

fn into_<T>(self) -> Twhere - Self: Into<T>,

Performs a conversion with Into. -using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &Twhere - Self: AsRef<T>, - T: ?Sized,

Performs a reference to reference conversion with AsRef, -using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut Twhere - Self: AsMut<T>, - T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, -using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)where - Self: Sized,

Drops self using method notation. -Alternative to std::mem::drop. Read more
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<This> TransmuteElement for Thiswhere - This: ?Sized,

§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtrwhere - Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeIdentity for Twhere - T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Typewhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self, Global>) -> Arc<Self::Type, Global>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self, Global>) -> Rc<Self::Type, Global>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Selfwhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type, Global>) -> Arc<Self, Global>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type, Global>) -> Rc<Self, Global>

Converts an Rc back to the original type.
\ No newline at end of file diff --git a/docs/csflow/enum.Error.html b/docs/csflow/enum.Error.html deleted file mode 100644 index 63adbc5..0000000 --- a/docs/csflow/enum.Error.html +++ /dev/null @@ -1,61 +0,0 @@ -Error in csflow - Rust

Enum csflow::Error

source ·
pub enum Error {
-    GameVersionMismatch(usize, usize),
-    Memflow(Error),
-    MemflowPartialAddress(PartialError<Address>),
-    MemflowPartialVec3(PartialError<Vec3>),
-    MemflowPartialString(PartialError<String>),
-    MemflowPartiali32(PartialError<i32>),
-    MemflowPartialu32(PartialError<u32>),
-    MemflowPartialu8(PartialError<u8>),
-}

Variants§

§

GameVersionMismatch(usize, usize)

Game version mismatch. -First arg is the game version, second is the offset version.

-
§

Memflow(Error)

§

MemflowPartialAddress(PartialError<Address>)

§

MemflowPartialVec3(PartialError<Vec3>)

§

MemflowPartialString(PartialError<String>)

§

MemflowPartiali32(PartialError<i32>)

§

MemflowPartialu32(PartialError<u32>)

§

MemflowPartialu8(PartialError<u8>)

Trait Implementations§

source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Error

source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for Error

source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
1.0.0 · source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<PartialError<Address>> for Error

source§

fn from(source: PartialError<Address>) -> Self

Converts to this type from the input type.
source§

impl From<PartialError<String>> for Error

source§

fn from(source: PartialError<String>) -> Self

Converts to this type from the input type.
source§

impl From<PartialError<Vec3>> for Error

source§

fn from(source: PartialError<Vec3>) -> Self

Converts to this type from the input type.
source§

impl From<PartialError<i32>> for Error

source§

fn from(source: PartialError<i32>) -> Self

Converts to this type from the input type.
source§

impl From<PartialError<u32>> for Error

source§

fn from(source: PartialError<u32>) -> Self

Converts to this type from the input type.
source§

impl From<PartialError<u8>> for Error

source§

fn from(source: PartialError<u8>) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl UnwindSafe for Error

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T, F> From2<T> for Fwhere - T: Into<F>,

§

fn from2(other: T) -> F

§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, -the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<T> SelfOps for Twhere - T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> Uwhere - F: FnOnce(Self) -> U, - Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere - F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self -Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere - F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. -Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Selfwhere - F: FnOnce(&mut Self), - Self: Sized,

Mutates self using a closure taking self by mutable reference, -passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Selfwhere - F: FnOnce(&Self), - Self: Sized,

Observes the value of self, passing it along unmodified. -Useful in long method chains. Read more
§

fn into_<T>(self) -> Twhere - Self: Into<T>,

Performs a conversion with Into. -using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &Twhere - Self: AsRef<T>, - T: ?Sized,

Performs a reference to reference conversion with AsRef, -using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut Twhere - Self: AsMut<T>, - T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, -using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)where - Self: Sized,

Drops self using method notation. -Alternative to std::mem::drop. Read more
source§

impl<T> ToString for Twhere - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<This> TransmuteElement for Thiswhere - This: ?Sized,

§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtrwhere - Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeIdentity for Twhere - T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Typewhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self, Global>) -> Arc<Self::Type, Global>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self, Global>) -> Rc<Self::Type, Global>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Selfwhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type, Global>) -> Arc<Self, Global>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type, Global>) -> Rc<Self, Global>

Converts an Rc back to the original type.
\ No newline at end of file diff --git a/docs/csflow/enums/enum.PlayerType.html b/docs/csflow/enums/enum.PlayerType.html deleted file mode 100644 index f18badc..0000000 --- a/docs/csflow/enums/enum.PlayerType.html +++ /dev/null @@ -1,67 +0,0 @@ -PlayerType in csflow::enums - Rust

Enum csflow::enums::PlayerType

source ·
pub enum PlayerType {
-    Unknown,
-    Spectator,
-    Local,
-    Enemy,
-    Team,
-}

Variants§

§

Unknown

§

Spectator

§

Local

§

Enemy

§

Team

Trait Implementations§

source§

impl Clone for PlayerType

source§

fn clone(&self) -> PlayerType

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for PlayerType

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for PlayerType

source§

fn default() -> PlayerType

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for PlayerType

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl PartialEq<PlayerType> for PlayerType

source§

fn eq(&self, other: &PlayerType) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for PlayerType

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for PlayerType

source§

impl StructuralPartialEq for PlayerType

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<'a, T> BorrowOwned<'a> for Twhere - T: 'a + Clone,

§

type ROwned = T

The owned type, stored in RCow::Owned
§

type RBorrowed = &'a T

The borrowed type, stored in RCow::Borrowed
§

fn r_borrow( - this: &'a <T as BorrowOwned<'a>>::ROwned -) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn r_to_owned( - this: <T as BorrowOwned<'a>>::RBorrowed -) -> <T as BorrowOwned<'a>>::ROwned

§

fn deref_borrowed(this: &<T as BorrowOwned<'a>>::RBorrowed) -> &T

§

fn deref_owned(this: &<T as BorrowOwned<'a>>::ROwned) -> &T

§

fn from_cow_borrow(this: &'a T) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn from_cow_owned(this: <T as ToOwned>::Owned) -> <T as BorrowOwned<'a>>::ROwned

§

fn into_cow_borrow(this: <T as BorrowOwned<'a>>::RBorrowed) -> &'a T

§

fn into_cow_owned(this: <T as BorrowOwned<'a>>::ROwned) -> <T as ToOwned>::Owned

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T, F> From2<T> for Fwhere - T: Into<F>,

§

fn from2(other: T) -> F

§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, -the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<T> SelfOps for Twhere - T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> Uwhere - F: FnOnce(Self) -> U, - Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere - F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self -Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere - F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. -Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Selfwhere - F: FnOnce(&mut Self), - Self: Sized,

Mutates self using a closure taking self by mutable reference, -passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Selfwhere - F: FnOnce(&Self), - Self: Sized,

Observes the value of self, passing it along unmodified. -Useful in long method chains. Read more
§

fn into_<T>(self) -> Twhere - Self: Into<T>,

Performs a conversion with Into. -using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &Twhere - Self: AsRef<T>, - T: ?Sized,

Performs a reference to reference conversion with AsRef, -using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut Twhere - Self: AsMut<T>, - T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, -using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)where - Self: Sized,

Drops self using method notation. -Alternative to std::mem::drop. Read more
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<This> TransmuteElement for Thiswhere - This: ?Sized,

§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtrwhere - Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeIdentity for Twhere - T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Typewhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self, Global>) -> Arc<Self::Type, Global>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self, Global>) -> Rc<Self::Type, Global>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Selfwhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type, Global>) -> Arc<Self, Global>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type, Global>) -> Rc<Self, Global>

Converts an Rc back to the original type.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

§

impl<This> ValidTag_Bounds for Thiswhere - This: Debug + Clone + PartialEq<This>,

\ No newline at end of file diff --git a/docs/csflow/enums/enum.TeamID.html b/docs/csflow/enums/enum.TeamID.html deleted file mode 100644 index 6451735..0000000 --- a/docs/csflow/enums/enum.TeamID.html +++ /dev/null @@ -1,91 +0,0 @@ -TeamID in csflow::enums - Rust

Enum csflow::enums::TeamID

source ·
#[repr(i32)]
pub enum TeamID { - Spectator, - T, - CT, -}

Variants§

§

Spectator

§

T

§

CT

Trait Implementations§

source§

impl Debug for TeamID

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromPrimitive for TeamID

source§

fn from_u64(val: u64) -> Option<Self>

Converts an u64 to return an optional value of this type. If the -value cannot be represented by this type, then None is returned.
source§

fn from_i64(val: i64) -> Option<Self>

Converts an i64 to return an optional value of this type. If the -value cannot be represented by this type, then None is returned.
source§

fn from_isize(n: isize) -> Option<Self>

Converts an isize to return an optional value of this type. If the -value cannot be represented by this type, then None is returned.
source§

fn from_i8(n: i8) -> Option<Self>

Converts an i8 to return an optional value of this type. If the -value cannot be represented by this type, then None is returned.
source§

fn from_i16(n: i16) -> Option<Self>

Converts an i16 to return an optional value of this type. If the -value cannot be represented by this type, then None is returned.
source§

fn from_i32(n: i32) -> Option<Self>

Converts an i32 to return an optional value of this type. If the -value cannot be represented by this type, then None is returned.
source§

fn from_i128(n: i128) -> Option<Self>

Converts an i128 to return an optional value of this type. If the -value cannot be represented by this type, then None is returned. Read more
source§

fn from_usize(n: usize) -> Option<Self>

Converts a usize to return an optional value of this type. If the -value cannot be represented by this type, then None is returned.
source§

fn from_u8(n: u8) -> Option<Self>

Converts an u8 to return an optional value of this type. If the -value cannot be represented by this type, then None is returned.
source§

fn from_u16(n: u16) -> Option<Self>

Converts an u16 to return an optional value of this type. If the -value cannot be represented by this type, then None is returned.
source§

fn from_u32(n: u32) -> Option<Self>

Converts an u32 to return an optional value of this type. If the -value cannot be represented by this type, then None is returned.
source§

fn from_u128(n: u128) -> Option<Self>

Converts an u128 to return an optional value of this type. If the -value cannot be represented by this type, then None is returned. Read more
source§

fn from_f32(n: f32) -> Option<Self>

Converts a f32 to return an optional value of this type. If the -value cannot be represented by this type, then None is returned.
source§

fn from_f64(n: f64) -> Option<Self>

Converts a f64 to return an optional value of this type. If the -value cannot be represented by this type, then None is returned. Read more
source§

impl PartialEq<TeamID> for TeamID

source§

fn eq(&self, other: &TeamID) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl ToPrimitive for TeamID

source§

fn to_u64(&self) -> Option<u64>

Converts the value of self to a u64. If the value cannot be -represented by a u64, then None is returned.
source§

fn to_i64(&self) -> Option<i64>

Converts the value of self to an i64. If the value cannot be -represented by an i64, then None is returned.
source§

fn to_isize(&self) -> Option<isize>

Converts the value of self to an isize. If the value cannot be -represented by an isize, then None is returned.
source§

fn to_i8(&self) -> Option<i8>

Converts the value of self to an i8. If the value cannot be -represented by an i8, then None is returned.
source§

fn to_i16(&self) -> Option<i16>

Converts the value of self to an i16. If the value cannot be -represented by an i16, then None is returned.
source§

fn to_i32(&self) -> Option<i32>

Converts the value of self to an i32. If the value cannot be -represented by an i32, then None is returned.
source§

fn to_i128(&self) -> Option<i128>

Converts the value of self to an i128. If the value cannot be -represented by an i128 (i64 under the default implementation), then -None is returned. Read more
source§

fn to_usize(&self) -> Option<usize>

Converts the value of self to a usize. If the value cannot be -represented by a usize, then None is returned.
source§

fn to_u8(&self) -> Option<u8>

Converts the value of self to a u8. If the value cannot be -represented by a u8, then None is returned.
source§

fn to_u16(&self) -> Option<u16>

Converts the value of self to a u16. If the value cannot be -represented by a u16, then None is returned.
source§

fn to_u32(&self) -> Option<u32>

Converts the value of self to a u32. If the value cannot be -represented by a u32, then None is returned.
source§

fn to_u128(&self) -> Option<u128>

Converts the value of self to a u128. If the value cannot be -represented by a u128 (u64 under the default implementation), then -None is returned. Read more
source§

fn to_f32(&self) -> Option<f32>

Converts the value of self to an f32. Overflows may map to positive -or negative inifinity, otherwise None is returned if the value cannot -be represented by an f32.
source§

fn to_f64(&self) -> Option<f64>

Converts the value of self to an f64. Overflows may map to positive -or negative inifinity, otherwise None is returned if the value cannot -be represented by an f64. Read more
source§

impl TryFrom<i16> for TeamID

§

type Error = &'static str

The type returned in the event of a conversion error.
source§

fn try_from(value: i16) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl TryFrom<i32> for TeamID

§

type Error = &'static str

The type returned in the event of a conversion error.
source§

fn try_from(value: i32) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl TryFrom<i64> for TeamID

§

type Error = &'static str

The type returned in the event of a conversion error.
source§

fn try_from(value: i64) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl TryFrom<i8> for TeamID

§

type Error = &'static str

The type returned in the event of a conversion error.
source§

fn try_from(value: i8) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl TryFrom<u16> for TeamID

§

type Error = &'static str

The type returned in the event of a conversion error.
source§

fn try_from(value: u16) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl TryFrom<u32> for TeamID

§

type Error = &'static str

The type returned in the event of a conversion error.
source§

fn try_from(value: u32) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl TryFrom<u64> for TeamID

§

type Error = &'static str

The type returned in the event of a conversion error.
source§

fn try_from(value: u64) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl TryFrom<u8> for TeamID

§

type Error = &'static str

The type returned in the event of a conversion error.
source§

fn try_from(value: u8) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl Eq for TeamID

source§

impl StructuralEq for TeamID

source§

impl StructuralPartialEq for TeamID

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T, F> From2<T> for Fwhere - T: Into<F>,

§

fn from2(other: T) -> F

§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, -the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<T> SelfOps for Twhere - T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> Uwhere - F: FnOnce(Self) -> U, - Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere - F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self -Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere - F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. -Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Selfwhere - F: FnOnce(&mut Self), - Self: Sized,

Mutates self using a closure taking self by mutable reference, -passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Selfwhere - F: FnOnce(&Self), - Self: Sized,

Observes the value of self, passing it along unmodified. -Useful in long method chains. Read more
§

fn into_<T>(self) -> Twhere - Self: Into<T>,

Performs a conversion with Into. -using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &Twhere - Self: AsRef<T>, - T: ?Sized,

Performs a reference to reference conversion with AsRef, -using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut Twhere - Self: AsMut<T>, - T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, -using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)where - Self: Sized,

Drops self using method notation. -Alternative to std::mem::drop. Read more
§

impl<This> TransmuteElement for Thiswhere - This: ?Sized,

§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtrwhere - Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeIdentity for Twhere - T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Typewhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self, Global>) -> Arc<Self::Type, Global>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self, Global>) -> Rc<Self::Type, Global>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Selfwhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type, Global>) -> Arc<Self, Global>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type, Global>) -> Rc<Self, Global>

Converts an Rc back to the original type.
\ No newline at end of file diff --git a/docs/csflow/enums/index.html b/docs/csflow/enums/index.html deleted file mode 100644 index 8e82234..0000000 --- a/docs/csflow/enums/index.html +++ /dev/null @@ -1 +0,0 @@ -csflow::enums - Rust
\ No newline at end of file diff --git a/docs/csflow/enums/player_type/enum.PlayerType.html b/docs/csflow/enums/player_type/enum.PlayerType.html deleted file mode 100644 index 28c3a92..0000000 --- a/docs/csflow/enums/player_type/enum.PlayerType.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../csflow/enums/enum.PlayerType.html...

- - - \ No newline at end of file diff --git a/docs/csflow/enums/sidebar-items.js b/docs/csflow/enums/sidebar-items.js deleted file mode 100644 index b8eb5c0..0000000 --- a/docs/csflow/enums/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["PlayerType","TeamID"]}; \ No newline at end of file diff --git a/docs/csflow/enums/teamid/enum.TeamID.html b/docs/csflow/enums/teamid/enum.TeamID.html deleted file mode 100644 index ff81ef5..0000000 --- a/docs/csflow/enums/teamid/enum.TeamID.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../csflow/enums/enum.TeamID.html...

- - - \ No newline at end of file diff --git a/docs/csflow/error/enum.Error.html b/docs/csflow/error/enum.Error.html deleted file mode 100644 index 06cff71..0000000 --- a/docs/csflow/error/enum.Error.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../csflow/enum.Error.html...

- - - \ No newline at end of file diff --git a/docs/csflow/index.html b/docs/csflow/index.html deleted file mode 100644 index 38e7ae7..0000000 --- a/docs/csflow/index.html +++ /dev/null @@ -1 +0,0 @@ -csflow - Rust
\ No newline at end of file diff --git a/docs/csflow/sidebar-items.js b/docs/csflow/sidebar-items.js deleted file mode 100644 index 084eb87..0000000 --- a/docs/csflow/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["Connector","Error"],"mod":["enums","structs","traits"],"struct":["CheatCtx"]}; \ No newline at end of file diff --git a/docs/csflow/struct.CheatCtx.html b/docs/csflow/struct.CheatCtx.html deleted file mode 100644 index ad0749f..0000000 --- a/docs/csflow/struct.CheatCtx.html +++ /dev/null @@ -1,56 +0,0 @@ -CheatCtx in csflow - Rust

Struct csflow::CheatCtx

source ·
pub struct CheatCtx {
-    pub process: IntoProcessInstanceArcBox<'static>,
-    pub client_module: ModuleInfo,
-    pub engine_module: ModuleInfo,
-}

Fields§

§process: IntoProcessInstanceArcBox<'static>§client_module: ModuleInfo§engine_module: ModuleInfo

Implementations§

source§

impl CheatCtx

source

pub fn setup( - connector: Connector, - pcileech_device: String -) -> Result<CheatCtx, Error>

source

pub fn get_local(&mut self) -> Result<CPlayerController, Error>

source

pub fn get_plantedc4(&mut self) -> Result<CBaseEntity, Error>

source

pub fn is_bomb_planted(&mut self) -> Result<bool, Error>

source

pub fn is_bomb_dropped(&mut self) -> Result<bool, Error>

source

pub fn get_entity_list(&mut self) -> Result<Address, Error>

source

pub fn get_globals(&mut self) -> Result<Address, Error>

source

pub fn map_name(&mut self, global_vars: Address) -> Result<String, Error>

source

pub fn highest_entity_index(&mut self) -> Result<i32, Error>

source

pub fn network_is_ingame(&mut self) -> Result<bool, Error>

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T, F> From2<T> for Fwhere - T: Into<F>,

§

fn from2(other: T) -> F

§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, -the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<T> SelfOps for Twhere - T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> Uwhere - F: FnOnce(Self) -> U, - Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere - F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self -Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere - F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. -Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Selfwhere - F: FnOnce(&mut Self), - Self: Sized,

Mutates self using a closure taking self by mutable reference, -passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Selfwhere - F: FnOnce(&Self), - Self: Sized,

Observes the value of self, passing it along unmodified. -Useful in long method chains. Read more
§

fn into_<T>(self) -> Twhere - Self: Into<T>,

Performs a conversion with Into. -using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &Twhere - Self: AsRef<T>, - T: ?Sized,

Performs a reference to reference conversion with AsRef, -using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut Twhere - Self: AsMut<T>, - T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, -using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)where - Self: Sized,

Drops self using method notation. -Alternative to std::mem::drop. Read more
§

impl<This> TransmuteElement for Thiswhere - This: ?Sized,

§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtrwhere - Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeIdentity for Twhere - T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Typewhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self, Global>) -> Arc<Self::Type, Global>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self, Global>) -> Rc<Self::Type, Global>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Selfwhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type, Global>) -> Arc<Self, Global>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type, Global>) -> Rc<Self, Global>

Converts an Rc back to the original type.
\ No newline at end of file diff --git a/docs/csflow/structs/entity/base_entity/struct.CBaseEntity.html b/docs/csflow/structs/entity/base_entity/struct.CBaseEntity.html deleted file mode 100644 index 9ebf093..0000000 --- a/docs/csflow/structs/entity/base_entity/struct.CBaseEntity.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../csflow/structs/struct.CBaseEntity.html...

- - - \ No newline at end of file diff --git a/docs/csflow/structs/entity/player_controller/struct.CPlayerController.html b/docs/csflow/structs/entity/player_controller/struct.CPlayerController.html deleted file mode 100644 index 0874c21..0000000 --- a/docs/csflow/structs/entity/player_controller/struct.CPlayerController.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../csflow/structs/struct.CPlayerController.html...

- - - \ No newline at end of file diff --git a/docs/csflow/structs/entity/player_pawn/struct.CPlayerPawn.html b/docs/csflow/structs/entity/player_pawn/struct.CPlayerPawn.html deleted file mode 100644 index 0772661..0000000 --- a/docs/csflow/structs/entity/player_pawn/struct.CPlayerPawn.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../csflow/structs/struct.CPlayerPawn.html...

- - - \ No newline at end of file diff --git a/docs/csflow/structs/index.html b/docs/csflow/structs/index.html deleted file mode 100644 index 644af73..0000000 --- a/docs/csflow/structs/index.html +++ /dev/null @@ -1 +0,0 @@ -csflow::structs - Rust
\ No newline at end of file diff --git a/docs/csflow/structs/sidebar-items.js b/docs/csflow/structs/sidebar-items.js deleted file mode 100644 index 51c68c1..0000000 --- a/docs/csflow/structs/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["CBaseEntity","CPlayerController","CPlayerPawn","Vec3"]}; \ No newline at end of file diff --git a/docs/csflow/structs/struct.CBaseEntity.html b/docs/csflow/structs/struct.CBaseEntity.html deleted file mode 100644 index 8c15e81..0000000 --- a/docs/csflow/structs/struct.CBaseEntity.html +++ /dev/null @@ -1,53 +0,0 @@ -CBaseEntity in csflow::structs - Rust

Struct csflow::structs::CBaseEntity

source ·
pub struct CBaseEntity(/* private fields */);

Implementations§

Trait Implementations§

source§

impl BaseEntity for CBaseEntity

source§

fn from_index( - ctx: &mut CheatCtx, - entity_list: Address, - index: i32 -) -> Result<Option<CBaseEntity>, Error>

source§

fn pos(&self, ctx: &mut CheatCtx) -> Result<Vec3, Error>

source§

fn class_name(&self, ctx: &mut CheatCtx) -> Result<String, Error>

source§

impl MemoryClass for CBaseEntity

source§

fn ptr(&self) -> Address

source§

fn new(ptr: Address) -> Self

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T, F> From2<T> for Fwhere - T: Into<F>,

§

fn from2(other: T) -> F

§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, -the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<T> SelfOps for Twhere - T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> Uwhere - F: FnOnce(Self) -> U, - Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere - F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self -Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere - F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. -Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Selfwhere - F: FnOnce(&mut Self), - Self: Sized,

Mutates self using a closure taking self by mutable reference, -passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Selfwhere - F: FnOnce(&Self), - Self: Sized,

Observes the value of self, passing it along unmodified. -Useful in long method chains. Read more
§

fn into_<T>(self) -> Twhere - Self: Into<T>,

Performs a conversion with Into. -using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &Twhere - Self: AsRef<T>, - T: ?Sized,

Performs a reference to reference conversion with AsRef, -using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut Twhere - Self: AsMut<T>, - T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, -using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)where - Self: Sized,

Drops self using method notation. -Alternative to std::mem::drop. Read more
§

impl<This> TransmuteElement for Thiswhere - This: ?Sized,

§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtrwhere - Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeIdentity for Twhere - T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Typewhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self, Global>) -> Arc<Self::Type, Global>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self, Global>) -> Rc<Self::Type, Global>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Selfwhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type, Global>) -> Arc<Self, Global>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type, Global>) -> Rc<Self, Global>

Converts an Rc back to the original type.
\ No newline at end of file diff --git a/docs/csflow/structs/struct.CPlayerController.html b/docs/csflow/structs/struct.CPlayerController.html deleted file mode 100644 index cc6f411..0000000 --- a/docs/csflow/structs/struct.CPlayerController.html +++ /dev/null @@ -1,61 +0,0 @@ -CPlayerController in csflow::structs - Rust
pub struct CPlayerController(/* private fields */);

Implementations§

source§

impl CPlayerController

source

pub fn get_pawn( - &self, - ctx: &mut CheatCtx, - entity_list: Address -) -> Result<Option<CPlayerPawn>, Error>

source

pub fn get_team(&self, ctx: &mut CheatCtx) -> Result<Option<TeamID>, Error>

source

pub fn get_player_type( - &self, - ctx: &mut CheatCtx, - local: &CPlayerController -) -> Result<Option<PlayerType>, Error>

Trait Implementations§

source§

impl BaseEntity for CPlayerController

source§

fn from_index( - ctx: &mut CheatCtx, - entity_list: Address, - index: i32 -) -> Result<Option<CPlayerController>, Error>

source§

fn pos(&self, ctx: &mut CheatCtx) -> Result<Vec3, Error>

source§

fn class_name(&self, ctx: &mut CheatCtx) -> Result<String, Error>

source§

impl MemoryClass for CPlayerController

source§

fn ptr(&self) -> Address

source§

fn new(ptr: Address) -> Self

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T, F> From2<T> for Fwhere - T: Into<F>,

§

fn from2(other: T) -> F

§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, -the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<T> SelfOps for Twhere - T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> Uwhere - F: FnOnce(Self) -> U, - Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere - F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self -Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere - F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. -Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Selfwhere - F: FnOnce(&mut Self), - Self: Sized,

Mutates self using a closure taking self by mutable reference, -passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Selfwhere - F: FnOnce(&Self), - Self: Sized,

Observes the value of self, passing it along unmodified. -Useful in long method chains. Read more
§

fn into_<T>(self) -> Twhere - Self: Into<T>,

Performs a conversion with Into. -using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &Twhere - Self: AsRef<T>, - T: ?Sized,

Performs a reference to reference conversion with AsRef, -using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut Twhere - Self: AsMut<T>, - T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, -using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)where - Self: Sized,

Drops self using method notation. -Alternative to std::mem::drop. Read more
§

impl<This> TransmuteElement for Thiswhere - This: ?Sized,

§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtrwhere - Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeIdentity for Twhere - T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Typewhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self, Global>) -> Arc<Self::Type, Global>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self, Global>) -> Rc<Self::Type, Global>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Selfwhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type, Global>) -> Arc<Self, Global>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type, Global>) -> Rc<Self, Global>

Converts an Rc back to the original type.
\ No newline at end of file diff --git a/docs/csflow/structs/struct.CPlayerPawn.html b/docs/csflow/structs/struct.CPlayerPawn.html deleted file mode 100644 index 59fd9e5..0000000 --- a/docs/csflow/structs/struct.CPlayerPawn.html +++ /dev/null @@ -1,58 +0,0 @@ -CPlayerPawn in csflow::structs - Rust

Struct csflow::structs::CPlayerPawn

source ·
pub struct CPlayerPawn(/* private fields */);

Implementations§

source§

impl CPlayerPawn

source

pub fn from_uhandle( - ctx: &mut CheatCtx, - entity_list: Address, - uhandle: u32 -) -> Result<Option<Self>, Error>

source

pub fn has_c4( - &self, - ctx: &mut CheatCtx, - entity_list: Address -) -> Result<bool, Error>

source

pub fn pos(&self, ctx: &mut CheatCtx) -> Result<Vec3, Error>

source

pub fn angles(&self, ctx: &mut CheatCtx) -> Result<Vec3, Error>

source

pub fn health(&self, ctx: &mut CheatCtx) -> Result<u32, Error>

source

pub fn is_alive(&self, ctx: &mut CheatCtx) -> Result<bool, Error>

Same as ::get_health > 0

-

Trait Implementations§

source§

impl MemoryClass for CPlayerPawn

source§

fn ptr(&self) -> Address

source§

fn new(ptr: Address) -> Self

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T, F> From2<T> for Fwhere - T: Into<F>,

§

fn from2(other: T) -> F

§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, -the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<T> SelfOps for Twhere - T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> Uwhere - F: FnOnce(Self) -> U, - Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere - F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self -Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere - F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. -Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Selfwhere - F: FnOnce(&mut Self), - Self: Sized,

Mutates self using a closure taking self by mutable reference, -passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Selfwhere - F: FnOnce(&Self), - Self: Sized,

Observes the value of self, passing it along unmodified. -Useful in long method chains. Read more
§

fn into_<T>(self) -> Twhere - Self: Into<T>,

Performs a conversion with Into. -using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &Twhere - Self: AsRef<T>, - T: ?Sized,

Performs a reference to reference conversion with AsRef, -using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut Twhere - Self: AsMut<T>, - T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, -using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)where - Self: Sized,

Drops self using method notation. -Alternative to std::mem::drop. Read more
§

impl<This> TransmuteElement for Thiswhere - This: ?Sized,

§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtrwhere - Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeIdentity for Twhere - T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Typewhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self, Global>) -> Arc<Self::Type, Global>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self, Global>) -> Rc<Self::Type, Global>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Selfwhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type, Global>) -> Arc<Self, Global>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type, Global>) -> Rc<Self, Global>

Converts an Rc back to the original type.
\ No newline at end of file diff --git a/docs/csflow/structs/struct.Vec3.html b/docs/csflow/structs/struct.Vec3.html deleted file mode 100644 index e583c48..0000000 --- a/docs/csflow/structs/struct.Vec3.html +++ /dev/null @@ -1,63 +0,0 @@ -Vec3 in csflow::structs - Rust

Struct csflow::structs::Vec3

source ·
#[repr(C)]
pub struct Vec3 { - pub x: f32, - pub y: f32, - pub z: f32, -}

Fields§

§x: f32§y: f32§z: f32

Trait Implementations§

source§

impl Clone for Vec3

source§

fn clone(&self) -> Vec3

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Vec3

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Vec3

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for Vec3

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for Vec3

source§

impl Pod for Vec3

Auto Trait Implementations§

§

impl RefUnwindSafe for Vec3

§

impl Send for Vec3

§

impl Sync for Vec3

§

impl Unpin for Vec3

§

impl UnwindSafe for Vec3

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<'a, T> BorrowOwned<'a> for Twhere - T: 'a + Clone,

§

type ROwned = T

The owned type, stored in RCow::Owned
§

type RBorrowed = &'a T

The borrowed type, stored in RCow::Borrowed
§

fn r_borrow( - this: &'a <T as BorrowOwned<'a>>::ROwned -) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn r_to_owned( - this: <T as BorrowOwned<'a>>::RBorrowed -) -> <T as BorrowOwned<'a>>::ROwned

§

fn deref_borrowed(this: &<T as BorrowOwned<'a>>::RBorrowed) -> &T

§

fn deref_owned(this: &<T as BorrowOwned<'a>>::ROwned) -> &T

§

fn from_cow_borrow(this: &'a T) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn from_cow_owned(this: <T as ToOwned>::Owned) -> <T as BorrowOwned<'a>>::ROwned

§

fn into_cow_borrow(this: <T as BorrowOwned<'a>>::RBorrowed) -> &'a T

§

fn into_cow_owned(this: <T as BorrowOwned<'a>>::ROwned) -> <T as ToOwned>::Owned

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T, F> From2<T> for Fwhere - T: Into<F>,

§

fn from2(other: T) -> F

§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<T> PodMethods for Twhere - T: Pod + ?Sized,

§

fn zeroed() -> T

Returns a zero-initialized instance of the type.
§

fn as_bytes(&self) -> &[u8]

Returns the object’s memory as a byte slice.
§

fn as_bytes_mut(&mut self) -> &mut [u8]

Returns the object’s memory as a mutable byte slice.
§

fn as_data_view(&self) -> &DataView

Returns a data view into the object’s memory.
§

fn as_data_view_mut(&mut self) -> &mut DataView

Returns a mutable data view into the object’s memory.
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, -the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<T> SelfOps for Twhere - T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> Uwhere - F: FnOnce(Self) -> U, - Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere - F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self -Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere - F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. -Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Selfwhere - F: FnOnce(&mut Self), - Self: Sized,

Mutates self using a closure taking self by mutable reference, -passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Selfwhere - F: FnOnce(&Self), - Self: Sized,

Observes the value of self, passing it along unmodified. -Useful in long method chains. Read more
§

fn into_<T>(self) -> Twhere - Self: Into<T>,

Performs a conversion with Into. -using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &Twhere - Self: AsRef<T>, - T: ?Sized,

Performs a reference to reference conversion with AsRef, -using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut Twhere - Self: AsMut<T>, - T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, -using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)where - Self: Sized,

Drops self using method notation. -Alternative to std::mem::drop. Read more
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<This> TransmuteElement for Thiswhere - This: ?Sized,

§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtrwhere - Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeIdentity for Twhere - T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Typewhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self, Global>) -> Arc<Self::Type, Global>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self, Global>) -> Rc<Self::Type, Global>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Selfwhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type, Global>) -> Arc<Self, Global>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type, Global>) -> Rc<Self, Global>

Converts an Rc back to the original type.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/csflow/structs/vec3/struct.Vec3.html b/docs/csflow/structs/vec3/struct.Vec3.html deleted file mode 100644 index d15f989..0000000 --- a/docs/csflow/structs/vec3/struct.Vec3.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../csflow/structs/struct.Vec3.html...

- - - \ No newline at end of file diff --git a/docs/csflow/traits/base_entity/trait.BaseEntity.html b/docs/csflow/traits/base_entity/trait.BaseEntity.html deleted file mode 100644 index 27532e0..0000000 --- a/docs/csflow/traits/base_entity/trait.BaseEntity.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../csflow/traits/trait.BaseEntity.html...

- - - \ No newline at end of file diff --git a/docs/csflow/traits/index.html b/docs/csflow/traits/index.html deleted file mode 100644 index 7846434..0000000 --- a/docs/csflow/traits/index.html +++ /dev/null @@ -1,2 +0,0 @@ -csflow::traits - Rust

Module csflow::traits

source ·

Traits

  • A trait for basic functions from C_BaseEntity -CCSPlayerController inherits C_BaseEntity, which is why this trait exists.
  • A trait that implements basic functions for a class represented by a single pointer
\ No newline at end of file diff --git a/docs/csflow/traits/memory_class/trait.MemoryClass.html b/docs/csflow/traits/memory_class/trait.MemoryClass.html deleted file mode 100644 index 69157cf..0000000 --- a/docs/csflow/traits/memory_class/trait.MemoryClass.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../csflow/traits/trait.MemoryClass.html...

- - - \ No newline at end of file diff --git a/docs/csflow/traits/sidebar-items.js b/docs/csflow/traits/sidebar-items.js deleted file mode 100644 index c066c62..0000000 --- a/docs/csflow/traits/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"trait":["BaseEntity","MemoryClass"]}; \ No newline at end of file diff --git a/docs/csflow/traits/trait.BaseEntity.html b/docs/csflow/traits/trait.BaseEntity.html deleted file mode 100644 index eb2a9f3..0000000 --- a/docs/csflow/traits/trait.BaseEntity.html +++ /dev/null @@ -1,18 +0,0 @@ -BaseEntity in csflow::traits - Rust

Trait csflow::traits::BaseEntity

source ·
pub trait BaseEntity {
-    // Required methods
-    fn from_index(
-        ctx: &mut CheatCtx,
-        entity_list: Address,
-        index: i32
-    ) -> Result<Option<Self>, Error>
-       where Self: Sized;
-    fn pos(&self, ctx: &mut CheatCtx) -> Result<Vec3, Error>;
-    fn class_name(&self, ctx: &mut CheatCtx) -> Result<String, Error>;
-}
Expand description

A trait for basic functions from C_BaseEntity -CCSPlayerController inherits C_BaseEntity, which is why this trait exists.

-

Required Methods§

source

fn from_index( - ctx: &mut CheatCtx, - entity_list: Address, - index: i32 -) -> Result<Option<Self>, Error>where - Self: Sized,

source

fn pos(&self, ctx: &mut CheatCtx) -> Result<Vec3, Error>

source

fn class_name(&self, ctx: &mut CheatCtx) -> Result<String, Error>

Implementors§

\ No newline at end of file diff --git a/docs/csflow/traits/trait.MemoryClass.html b/docs/csflow/traits/trait.MemoryClass.html deleted file mode 100644 index 4fd3288..0000000 --- a/docs/csflow/traits/trait.MemoryClass.html +++ /dev/null @@ -1,6 +0,0 @@ -MemoryClass in csflow::traits - Rust
pub trait MemoryClass {
-    // Required methods
-    fn ptr(&self) -> Address;
-    fn new(ptr: Address) -> Self;
-}
Expand description

A trait that implements basic functions for a class represented by a single pointer

-

Required Methods§

source

fn ptr(&self) -> Address

source

fn new(ptr: Address) -> Self

Implementors§

\ No newline at end of file diff --git a/docs/help.html b/docs/help.html deleted file mode 100644 index d01035c..0000000 --- a/docs/help.html +++ /dev/null @@ -1 +0,0 @@ -Rustdoc help

Rustdoc help

Back
\ No newline at end of file diff --git a/docs/implementors/alloc/string/trait.ToString.js b/docs/implementors/alloc/string/trait.ToString.js deleted file mode 100644 index 720dcbd..0000000 --- a/docs/implementors/alloc/string/trait.ToString.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl ToString for Connector"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/clap_builder/derive/trait.Args.js b/docs/implementors/clap_builder/derive/trait.Args.js deleted file mode 100644 index b6108af..0000000 --- a/docs/implementors/clap_builder/derive/trait.Args.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"radarflow":[["impl Args for Cli"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/clap_builder/derive/trait.CommandFactory.js b/docs/implementors/clap_builder/derive/trait.CommandFactory.js deleted file mode 100644 index f4f2683..0000000 --- a/docs/implementors/clap_builder/derive/trait.CommandFactory.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"radarflow":[["impl CommandFactory for Cli"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/clap_builder/derive/trait.FromArgMatches.js b/docs/implementors/clap_builder/derive/trait.FromArgMatches.js deleted file mode 100644 index 00f80fe..0000000 --- a/docs/implementors/clap_builder/derive/trait.FromArgMatches.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"radarflow":[["impl FromArgMatches for Cli"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/clap_builder/derive/trait.Parser.js b/docs/implementors/clap_builder/derive/trait.Parser.js deleted file mode 100644 index a5921e7..0000000 --- a/docs/implementors/clap_builder/derive/trait.Parser.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"radarflow":[["impl Parser for Cli"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/clap_builder/derive/trait.ValueEnum.js b/docs/implementors/clap_builder/derive/trait.ValueEnum.js deleted file mode 100644 index 564b089..0000000 --- a/docs/implementors/clap_builder/derive/trait.ValueEnum.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl ValueEnum for Connector"]], -"radarflow":[["impl ValueEnum for Loglevel"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/clone/trait.Clone.js b/docs/implementors/core/clone/trait.Clone.js deleted file mode 100644 index 329bb13..0000000 --- a/docs/implementors/core/clone/trait.Clone.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl Clone for PlayerType"],["impl Clone for Vec3"],["impl Clone for Connector"]], -"radarflow":[["impl Clone for AppState"],["impl Clone for Loglevel"],["impl Clone for BombData"],["impl Clone for RadarData"],["impl Clone for PlayerData"],["impl Clone for CachedEntity"],["impl Clone for EntityData"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/cmp/trait.Eq.js b/docs/implementors/core/cmp/trait.Eq.js deleted file mode 100644 index b9ce93d..0000000 --- a/docs/implementors/core/cmp/trait.Eq.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl Eq for Connector"],["impl Eq for TeamID"]], -"radarflow":[["impl Eq for Loglevel"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/cmp/trait.Ord.js b/docs/implementors/core/cmp/trait.Ord.js deleted file mode 100644 index 74d84fa..0000000 --- a/docs/implementors/core/cmp/trait.Ord.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl Ord for Connector"]], -"radarflow":[["impl Ord for Loglevel"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/cmp/trait.PartialEq.js b/docs/implementors/core/cmp/trait.PartialEq.js deleted file mode 100644 index 9470f72..0000000 --- a/docs/implementors/core/cmp/trait.PartialEq.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl PartialEq<Connector> for Connector"],["impl PartialEq<PlayerType> for PlayerType"],["impl PartialEq<TeamID> for TeamID"]], -"radarflow":[["impl PartialEq<Loglevel> for Loglevel"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/cmp/trait.PartialOrd.js b/docs/implementors/core/cmp/trait.PartialOrd.js deleted file mode 100644 index a349267..0000000 --- a/docs/implementors/core/cmp/trait.PartialOrd.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl PartialOrd<Connector> for Connector"]], -"radarflow":[["impl PartialOrd<Loglevel> for Loglevel"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/convert/trait.From.js b/docs/implementors/core/convert/trait.From.js deleted file mode 100644 index e7e594a..0000000 --- a/docs/implementors/core/convert/trait.From.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl From<PartialError<i32>> for Error"],["impl From<PartialError<String>> for Error"],["impl From<PartialError<Address>> for Error"],["impl From<PartialError<Vec3>> for Error"],["impl From<PartialError<u8>> for Error"],["impl From<PartialError<u32>> for Error"],["impl From<Error> for Error"]], -"radarflow":[["impl From<Loglevel> for LevelFilter"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/convert/trait.TryFrom.js b/docs/implementors/core/convert/trait.TryFrom.js deleted file mode 100644 index c26399f..0000000 --- a/docs/implementors/core/convert/trait.TryFrom.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl TryFrom<i8> for TeamID"],["impl TryFrom<i64> for TeamID"],["impl TryFrom<u32> for TeamID"],["impl TryFrom<u64> for TeamID"],["impl TryFrom<u16> for TeamID"],["impl TryFrom<u8> for TeamID"],["impl TryFrom<i16> for TeamID"],["impl TryFrom<i32> for TeamID"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/default/trait.Default.js b/docs/implementors/core/default/trait.Default.js deleted file mode 100644 index 7d34aa4..0000000 --- a/docs/implementors/core/default/trait.Default.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl Default for PlayerType"],["impl Default for Connector"]], -"radarflow":[["impl Default for Loglevel"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/error/trait.Error.js b/docs/implementors/core/error/trait.Error.js deleted file mode 100644 index f586f78..0000000 --- a/docs/implementors/core/error/trait.Error.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl Error for Error"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/fmt/trait.Debug.js b/docs/implementors/core/fmt/trait.Debug.js deleted file mode 100644 index 00e78d9..0000000 --- a/docs/implementors/core/fmt/trait.Debug.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl Debug for PlayerType"],["impl Debug for Vec3"],["impl Debug for TeamID"],["impl Debug for Error"]], -"radarflow":[["impl Debug for PlayerData"],["impl Debug for EntityData"],["impl Debug for RadarData"],["impl Debug for BombData"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/fmt/trait.Display.js b/docs/implementors/core/fmt/trait.Display.js deleted file mode 100644 index e566bd4..0000000 --- a/docs/implementors/core/fmt/trait.Display.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl Display for Error"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/marker/trait.Copy.js b/docs/implementors/core/marker/trait.Copy.js deleted file mode 100644 index eeb570e..0000000 --- a/docs/implementors/core/marker/trait.Copy.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl Copy for Connector"],["impl Copy for PlayerType"],["impl Copy for Vec3"]], -"radarflow":[["impl Copy for Loglevel"],["impl Copy for CachedEntity"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/marker/trait.Freeze.js b/docs/implementors/core/marker/trait.Freeze.js deleted file mode 100644 index 6166c3d..0000000 --- a/docs/implementors/core/marker/trait.Freeze.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl Freeze for CheatCtx",1,["csflow::context::CheatCtx"]],["impl Freeze for Connector",1,["csflow::context::Connector"]],["impl Freeze for Error",1,["csflow::error::Error"]],["impl Freeze for Vec3",1,["csflow::structs::vec3::Vec3"]],["impl Freeze for CBaseEntity",1,["csflow::structs::entity::base_entity::CBaseEntity"]],["impl Freeze for CPlayerController",1,["csflow::structs::entity::player_controller::CPlayerController"]],["impl Freeze for CPlayerPawn",1,["csflow::structs::entity::player_pawn::CPlayerPawn"]],["impl Freeze for PlayerType",1,["csflow::enums::player_type::PlayerType"]],["impl Freeze for TeamID",1,["csflow::enums::teamid::TeamID"]]], -"radarflow":[["impl Freeze for PlayerData",1,["radarflow::comms::PlayerData"]],["impl Freeze for BombData",1,["radarflow::comms::BombData"]],["impl Freeze for EntityData",1,["radarflow::comms::EntityData"]],["impl Freeze for RadarData",1,["radarflow::comms::RadarData"]],["impl Freeze for Cli",1,["radarflow::cli::Cli"]],["impl Freeze for Loglevel",1,["radarflow::cli::Loglevel"]],["impl Freeze for CachedEntity",1,["radarflow::dma::cache::CachedEntity"]],["impl Freeze for Cache",1,["radarflow::dma::cache::Cache"]],["impl Freeze for CacheBuilder",1,["radarflow::dma::cache::CacheBuilder"]],["impl Freeze for AppState",1,["radarflow::websocket::AppState"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/marker/trait.Send.js b/docs/implementors/core/marker/trait.Send.js deleted file mode 100644 index 4059117..0000000 --- a/docs/implementors/core/marker/trait.Send.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl Send for CheatCtx",1,["csflow::context::CheatCtx"]],["impl Send for Connector",1,["csflow::context::Connector"]],["impl Send for Error",1,["csflow::error::Error"]],["impl Send for Vec3",1,["csflow::structs::vec3::Vec3"]],["impl Send for CBaseEntity",1,["csflow::structs::entity::base_entity::CBaseEntity"]],["impl Send for CPlayerController",1,["csflow::structs::entity::player_controller::CPlayerController"]],["impl Send for CPlayerPawn",1,["csflow::structs::entity::player_pawn::CPlayerPawn"]],["impl Send for PlayerType",1,["csflow::enums::player_type::PlayerType"]],["impl Send for TeamID",1,["csflow::enums::teamid::TeamID"]]], -"radarflow":[["impl Send for PlayerData",1,["radarflow::comms::PlayerData"]],["impl Send for BombData",1,["radarflow::comms::BombData"]],["impl Send for EntityData",1,["radarflow::comms::EntityData"]],["impl Send for RadarData",1,["radarflow::comms::RadarData"]],["impl Send for Cli",1,["radarflow::cli::Cli"]],["impl Send for Loglevel",1,["radarflow::cli::Loglevel"]],["impl Send for CachedEntity",1,["radarflow::dma::cache::CachedEntity"]],["impl Send for Cache",1,["radarflow::dma::cache::Cache"]],["impl Send for CacheBuilder",1,["radarflow::dma::cache::CacheBuilder"]],["impl Send for AppState",1,["radarflow::websocket::AppState"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/marker/trait.StructuralEq.js b/docs/implementors/core/marker/trait.StructuralEq.js deleted file mode 100644 index 4bf38f0..0000000 --- a/docs/implementors/core/marker/trait.StructuralEq.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl StructuralEq for TeamID"],["impl StructuralEq for Connector"]], -"radarflow":[["impl StructuralEq for Loglevel"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/marker/trait.StructuralPartialEq.js b/docs/implementors/core/marker/trait.StructuralPartialEq.js deleted file mode 100644 index 165e38d..0000000 --- a/docs/implementors/core/marker/trait.StructuralPartialEq.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl StructuralPartialEq for PlayerType"],["impl StructuralPartialEq for TeamID"],["impl StructuralPartialEq for Connector"]], -"radarflow":[["impl StructuralPartialEq for Loglevel"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/marker/trait.Sync.js b/docs/implementors/core/marker/trait.Sync.js deleted file mode 100644 index 981683a..0000000 --- a/docs/implementors/core/marker/trait.Sync.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl Sync for CheatCtx",1,["csflow::context::CheatCtx"]],["impl Sync for Connector",1,["csflow::context::Connector"]],["impl Sync for Error",1,["csflow::error::Error"]],["impl Sync for Vec3",1,["csflow::structs::vec3::Vec3"]],["impl Sync for CBaseEntity",1,["csflow::structs::entity::base_entity::CBaseEntity"]],["impl Sync for CPlayerController",1,["csflow::structs::entity::player_controller::CPlayerController"]],["impl Sync for CPlayerPawn",1,["csflow::structs::entity::player_pawn::CPlayerPawn"]],["impl Sync for PlayerType",1,["csflow::enums::player_type::PlayerType"]],["impl Sync for TeamID",1,["csflow::enums::teamid::TeamID"]]], -"radarflow":[["impl Sync for PlayerData",1,["radarflow::comms::PlayerData"]],["impl Sync for BombData",1,["radarflow::comms::BombData"]],["impl Sync for EntityData",1,["radarflow::comms::EntityData"]],["impl Sync for RadarData",1,["radarflow::comms::RadarData"]],["impl Sync for Cli",1,["radarflow::cli::Cli"]],["impl Sync for Loglevel",1,["radarflow::cli::Loglevel"]],["impl Sync for CachedEntity",1,["radarflow::dma::cache::CachedEntity"]],["impl Sync for Cache",1,["radarflow::dma::cache::Cache"]],["impl Sync for CacheBuilder",1,["radarflow::dma::cache::CacheBuilder"]],["impl Sync for AppState",1,["radarflow::websocket::AppState"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/marker/trait.Unpin.js b/docs/implementors/core/marker/trait.Unpin.js deleted file mode 100644 index b45238a..0000000 --- a/docs/implementors/core/marker/trait.Unpin.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl Unpin for CheatCtx",1,["csflow::context::CheatCtx"]],["impl Unpin for Connector",1,["csflow::context::Connector"]],["impl Unpin for Error",1,["csflow::error::Error"]],["impl Unpin for Vec3",1,["csflow::structs::vec3::Vec3"]],["impl Unpin for CBaseEntity",1,["csflow::structs::entity::base_entity::CBaseEntity"]],["impl Unpin for CPlayerController",1,["csflow::structs::entity::player_controller::CPlayerController"]],["impl Unpin for CPlayerPawn",1,["csflow::structs::entity::player_pawn::CPlayerPawn"]],["impl Unpin for PlayerType",1,["csflow::enums::player_type::PlayerType"]],["impl Unpin for TeamID",1,["csflow::enums::teamid::TeamID"]]], -"radarflow":[["impl Unpin for PlayerData",1,["radarflow::comms::PlayerData"]],["impl Unpin for BombData",1,["radarflow::comms::BombData"]],["impl Unpin for EntityData",1,["radarflow::comms::EntityData"]],["impl Unpin for RadarData",1,["radarflow::comms::RadarData"]],["impl Unpin for Cli",1,["radarflow::cli::Cli"]],["impl Unpin for Loglevel",1,["radarflow::cli::Loglevel"]],["impl Unpin for CachedEntity",1,["radarflow::dma::cache::CachedEntity"]],["impl Unpin for Cache",1,["radarflow::dma::cache::Cache"]],["impl Unpin for CacheBuilder",1,["radarflow::dma::cache::CacheBuilder"]],["impl Unpin for AppState",1,["radarflow::websocket::AppState"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/docs/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js deleted file mode 100644 index 7491bb1..0000000 --- a/docs/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl RefUnwindSafe for CheatCtx",1,["csflow::context::CheatCtx"]],["impl RefUnwindSafe for Connector",1,["csflow::context::Connector"]],["impl RefUnwindSafe for Error",1,["csflow::error::Error"]],["impl RefUnwindSafe for Vec3",1,["csflow::structs::vec3::Vec3"]],["impl RefUnwindSafe for CBaseEntity",1,["csflow::structs::entity::base_entity::CBaseEntity"]],["impl RefUnwindSafe for CPlayerController",1,["csflow::structs::entity::player_controller::CPlayerController"]],["impl RefUnwindSafe for CPlayerPawn",1,["csflow::structs::entity::player_pawn::CPlayerPawn"]],["impl RefUnwindSafe for PlayerType",1,["csflow::enums::player_type::PlayerType"]],["impl RefUnwindSafe for TeamID",1,["csflow::enums::teamid::TeamID"]]], -"radarflow":[["impl RefUnwindSafe for PlayerData",1,["radarflow::comms::PlayerData"]],["impl RefUnwindSafe for BombData",1,["radarflow::comms::BombData"]],["impl RefUnwindSafe for EntityData",1,["radarflow::comms::EntityData"]],["impl RefUnwindSafe for RadarData",1,["radarflow::comms::RadarData"]],["impl RefUnwindSafe for Cli",1,["radarflow::cli::Cli"]],["impl RefUnwindSafe for Loglevel",1,["radarflow::cli::Loglevel"]],["impl RefUnwindSafe for CachedEntity",1,["radarflow::dma::cache::CachedEntity"]],["impl RefUnwindSafe for Cache",1,["radarflow::dma::cache::Cache"]],["impl RefUnwindSafe for CacheBuilder",1,["radarflow::dma::cache::CacheBuilder"]],["impl !RefUnwindSafe for AppState",1,["radarflow::websocket::AppState"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/docs/implementors/core/panic/unwind_safe/trait.UnwindSafe.js deleted file mode 100644 index d33d9b7..0000000 --- a/docs/implementors/core/panic/unwind_safe/trait.UnwindSafe.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl !UnwindSafe for CheatCtx",1,["csflow::context::CheatCtx"]],["impl UnwindSafe for Connector",1,["csflow::context::Connector"]],["impl UnwindSafe for Error",1,["csflow::error::Error"]],["impl UnwindSafe for Vec3",1,["csflow::structs::vec3::Vec3"]],["impl UnwindSafe for CBaseEntity",1,["csflow::structs::entity::base_entity::CBaseEntity"]],["impl UnwindSafe for CPlayerController",1,["csflow::structs::entity::player_controller::CPlayerController"]],["impl UnwindSafe for CPlayerPawn",1,["csflow::structs::entity::player_pawn::CPlayerPawn"]],["impl UnwindSafe for PlayerType",1,["csflow::enums::player_type::PlayerType"]],["impl UnwindSafe for TeamID",1,["csflow::enums::teamid::TeamID"]]], -"radarflow":[["impl UnwindSafe for PlayerData",1,["radarflow::comms::PlayerData"]],["impl UnwindSafe for BombData",1,["radarflow::comms::BombData"]],["impl UnwindSafe for EntityData",1,["radarflow::comms::EntityData"]],["impl UnwindSafe for RadarData",1,["radarflow::comms::RadarData"]],["impl UnwindSafe for Cli",1,["radarflow::cli::Cli"]],["impl UnwindSafe for Loglevel",1,["radarflow::cli::Loglevel"]],["impl UnwindSafe for CachedEntity",1,["radarflow::dma::cache::CachedEntity"]],["impl UnwindSafe for Cache",1,["radarflow::dma::cache::Cache"]],["impl UnwindSafe for CacheBuilder",1,["radarflow::dma::cache::CacheBuilder"]],["impl !UnwindSafe for AppState",1,["radarflow::websocket::AppState"]]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/csflow/traits/base_entity/trait.BaseEntity.js b/docs/implementors/csflow/traits/base_entity/trait.BaseEntity.js deleted file mode 100644 index 01a3111..0000000 --- a/docs/implementors/csflow/traits/base_entity/trait.BaseEntity.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"csflow":[] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/csflow/traits/memory_class/trait.MemoryClass.js b/docs/implementors/csflow/traits/memory_class/trait.MemoryClass.js deleted file mode 100644 index 01a3111..0000000 --- a/docs/implementors/csflow/traits/memory_class/trait.MemoryClass.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"csflow":[] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/dataview/trait.Pod.js b/docs/implementors/dataview/trait.Pod.js deleted file mode 100644 index 19f64a9..0000000 --- a/docs/implementors/dataview/trait.Pod.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl Pod for Vec3"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/num_traits/cast/trait.FromPrimitive.js b/docs/implementors/num_traits/cast/trait.FromPrimitive.js deleted file mode 100644 index afad559..0000000 --- a/docs/implementors/num_traits/cast/trait.FromPrimitive.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl FromPrimitive for TeamID"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/num_traits/cast/trait.ToPrimitive.js b/docs/implementors/num_traits/cast/trait.ToPrimitive.js deleted file mode 100644 index 116233a..0000000 --- a/docs/implementors/num_traits/cast/trait.ToPrimitive.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl ToPrimitive for TeamID"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/serde/de/trait.Deserialize.js b/docs/implementors/serde/de/trait.Deserialize.js deleted file mode 100644 index df03700..0000000 --- a/docs/implementors/serde/de/trait.Deserialize.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl<'de> Deserialize<'de> for PlayerType"],["impl<'de> Deserialize<'de> for Vec3"]], -"radarflow":[["impl<'de> Deserialize<'de> for RadarData"],["impl<'de> Deserialize<'de> for EntityData"],["impl<'de> Deserialize<'de> for PlayerData"],["impl<'de> Deserialize<'de> for BombData"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/serde/ser/trait.Serialize.js b/docs/implementors/serde/ser/trait.Serialize.js deleted file mode 100644 index 9cc453c..0000000 --- a/docs/implementors/serde/ser/trait.Serialize.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = { -"csflow":[["impl Serialize for Vec3"],["impl Serialize for PlayerType"]], -"radarflow":[["impl Serialize for EntityData"],["impl Serialize for BombData"],["impl Serialize for PlayerData"],["impl Serialize for RadarData"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 78365ee..0000000 --- a/docs/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/radarflow/all.html b/docs/radarflow/all.html deleted file mode 100644 index 92b11e3..0000000 --- a/docs/radarflow/all.html +++ /dev/null @@ -1 +0,0 @@ -List of all items in this crate
\ No newline at end of file diff --git a/docs/radarflow/cli/constant.POLL_RANGE.html b/docs/radarflow/cli/constant.POLL_RANGE.html deleted file mode 100644 index b5f10f2..0000000 --- a/docs/radarflow/cli/constant.POLL_RANGE.html +++ /dev/null @@ -1 +0,0 @@ -POLL_RANGE in radarflow::cli - Rust

Constant radarflow::cli::POLL_RANGE

source ·
const POLL_RANGE: RangeInclusive<usize>;
\ No newline at end of file diff --git a/docs/radarflow/cli/constant.PORT_RANGE.html b/docs/radarflow/cli/constant.PORT_RANGE.html deleted file mode 100644 index aca89f3..0000000 --- a/docs/radarflow/cli/constant.PORT_RANGE.html +++ /dev/null @@ -1 +0,0 @@ -PORT_RANGE in radarflow::cli - Rust

Constant radarflow::cli::PORT_RANGE

source ·
const PORT_RANGE: RangeInclusive<usize>;
\ No newline at end of file diff --git a/docs/radarflow/cli/enum.Loglevel.html b/docs/radarflow/cli/enum.Loglevel.html deleted file mode 100644 index d755c68..0000000 --- a/docs/radarflow/cli/enum.Loglevel.html +++ /dev/null @@ -1,82 +0,0 @@ -Loglevel in radarflow::cli - Rust

Enum radarflow::cli::Loglevel

source ·
pub enum Loglevel {
-    Error,
-    Warn,
-    Info,
-    Debug,
-    Trace,
-}
Expand description

Wrapper because log::LevelFilter doesn’t implement ValueEnum

-

Variants§

§

Error

§

Warn

§

Info

§

Debug

§

Trace

Trait Implementations§

source§

impl Clone for Loglevel

source§

fn clone(&self) -> Loglevel

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Default for Loglevel

source§

fn default() -> Loglevel

Returns the “default value” for a type. Read more
source§

impl From<Loglevel> for LevelFilter

source§

fn from(val: Loglevel) -> Self

Converts to this type from the input type.
source§

impl Ord for Loglevel

source§

fn cmp(&self, other: &Loglevel) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere - Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere - Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

Restrict a value to a certain interval. Read more
source§

impl PartialEq<Loglevel> for Loglevel

source§

fn eq(&self, other: &Loglevel) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd<Loglevel> for Loglevel

source§

fn partial_cmp(&self, other: &Loglevel) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl ValueEnum for Loglevel

source§

fn value_variants<'a>() -> &'a [Self]

All possible argument values, in display order.
source§

fn to_possible_value<'a>(&self) -> Option<PossibleValue>

The canonical argument value. Read more
§

fn from_str(input: &str, ignore_case: bool) -> Result<Self, String>

Parse an argument into Self.
source§

impl Copy for Loglevel

source§

impl Eq for Loglevel

source§

impl StructuralEq for Loglevel

source§

impl StructuralPartialEq for Loglevel

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<'a, T> BorrowOwned<'a> for Twhere - T: 'a + Clone,

§

type ROwned = T

The owned type, stored in RCow::Owned
§

type RBorrowed = &'a T

The borrowed type, stored in RCow::Borrowed
§

fn r_borrow( - this: &'a <T as BorrowOwned<'a>>::ROwned -) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn r_to_owned( - this: <T as BorrowOwned<'a>>::RBorrowed -) -> <T as BorrowOwned<'a>>::ROwned

§

fn deref_borrowed(this: &<T as BorrowOwned<'a>>::RBorrowed) -> &T

§

fn deref_owned(this: &<T as BorrowOwned<'a>>::ROwned) -> &T

§

fn from_cow_borrow(this: &'a T) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn from_cow_owned(this: <T as ToOwned>::Owned) -> <T as BorrowOwned<'a>>::ROwned

§

fn into_cow_borrow(this: <T as BorrowOwned<'a>>::RBorrowed) -> &'a T

§

fn into_cow_owned(this: <T as BorrowOwned<'a>>::ROwned) -> <T as ToOwned>::Owned

§

impl<Q, K> Comparable<K> for Qwhere - Q: Ord + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T, F> From2<T> for Fwhere - T: Into<F>,

§

fn from2(other: T) -> F

§

impl<T> FromRef<T> for Twhere - T: Clone,

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, -the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SelfOps for Twhere - T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> Uwhere - F: FnOnce(Self) -> U, - Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere - F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self -Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere - F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. -Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Selfwhere - F: FnOnce(&mut Self), - Self: Sized,

Mutates self using a closure taking self by mutable reference, -passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Selfwhere - F: FnOnce(&Self), - Self: Sized,

Observes the value of self, passing it along unmodified. -Useful in long method chains. Read more
§

fn into_<T>(self) -> Twhere - Self: Into<T>,

Performs a conversion with Into. -using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &Twhere - Self: AsRef<T>, - T: ?Sized,

Performs a reference to reference conversion with AsRef, -using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut Twhere - Self: AsMut<T>, - T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, -using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)where - Self: Sized,

Drops self using method notation. -Alternative to std::mem::drop. Read more
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<This> TransmuteElement for Thiswhere - This: ?Sized,

§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtrwhere - Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeIdentity for Twhere - T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Typewhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self, Global>) -> Arc<Self::Type, Global>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self, Global>) -> Rc<Self::Type, Global>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Selfwhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type, Global>) -> Arc<Self, Global>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type, Global>) -> Rc<Self, Global>

Converts an Rc back to the original type.
§

impl<V, T> VZip<V> for Twhere - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/radarflow/cli/fn.poll_in_range.html b/docs/radarflow/cli/fn.poll_in_range.html deleted file mode 100644 index bbf19c3..0000000 --- a/docs/radarflow/cli/fn.poll_in_range.html +++ /dev/null @@ -1 +0,0 @@ -poll_in_range in radarflow::cli - Rust

Function radarflow::cli::poll_in_range

source ·
fn poll_in_range(s: &str) -> Result<u16, String>
\ No newline at end of file diff --git a/docs/radarflow/cli/fn.port_in_range.html b/docs/radarflow/cli/fn.port_in_range.html deleted file mode 100644 index f9b4012..0000000 --- a/docs/radarflow/cli/fn.port_in_range.html +++ /dev/null @@ -1 +0,0 @@ -port_in_range in radarflow::cli - Rust

Function radarflow::cli::port_in_range

source ·
fn port_in_range(s: &str) -> Result<u16, String>
\ No newline at end of file diff --git a/docs/radarflow/cli/fn.valid_path.html b/docs/radarflow/cli/fn.valid_path.html deleted file mode 100644 index ed3649c..0000000 --- a/docs/radarflow/cli/fn.valid_path.html +++ /dev/null @@ -1 +0,0 @@ -valid_path in radarflow::cli - Rust

Function radarflow::cli::valid_path

source ·
fn valid_path(s: &str) -> Result<PathBuf, String>
\ No newline at end of file diff --git a/docs/radarflow/cli/fn.version.html b/docs/radarflow/cli/fn.version.html deleted file mode 100644 index 7d33ccd..0000000 --- a/docs/radarflow/cli/fn.version.html +++ /dev/null @@ -1 +0,0 @@ -version in radarflow::cli - Rust

Function radarflow::cli::version

source ·
fn version() -> String
\ No newline at end of file diff --git a/docs/radarflow/cli/index.html b/docs/radarflow/cli/index.html deleted file mode 100644 index 222bfeb..0000000 --- a/docs/radarflow/cli/index.html +++ /dev/null @@ -1 +0,0 @@ -radarflow::cli - Rust

Module radarflow::cli

source ·

Structs

Enums

  • Wrapper because log::LevelFilter doesn’t implement ValueEnum

Constants

Functions

\ No newline at end of file diff --git a/docs/radarflow/cli/sidebar-items.js b/docs/radarflow/cli/sidebar-items.js deleted file mode 100644 index 8b28ceb..0000000 --- a/docs/radarflow/cli/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"constant":["POLL_RANGE","PORT_RANGE"],"enum":["Loglevel"],"fn":["poll_in_range","port_in_range","valid_path","version"],"struct":["Cli"]}; \ No newline at end of file diff --git a/docs/radarflow/cli/struct.Cli.html b/docs/radarflow/cli/struct.Cli.html deleted file mode 100644 index d13e867..0000000 --- a/docs/radarflow/cli/struct.Cli.html +++ /dev/null @@ -1,84 +0,0 @@ -Cli in radarflow::cli - Rust

Struct radarflow::cli::Cli

source ·
pub struct Cli {
-    pub connector: Connector,
-    pub pcileech_device: String,
-    pub port: u16,
-    pub web_path: PathBuf,
-    pub poll_rate: u16,
-    pub loglevel: Loglevel,
-}

Fields§

§connector: Connector

Specifies the connector type for DMA

-
§pcileech_device: String

Name of the Pcileech device

-
§port: u16

Port number for the Webserver to run on

-
§web_path: PathBuf

Path to the directory served by the Webserver

-
§poll_rate: u16

Polling frequency in times per second for the DMA thread

-
§loglevel: Loglevel

Verbosity level for logging to the console

-

Trait Implementations§

source§

impl Args for Cli

source§

fn group_id() -> Option<Id>

Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
source§

fn augment_args<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_args_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

impl CommandFactory for Cli

source§

fn command<'b>() -> Command

Build a [Command] that can instantiate Self. Read more
source§

fn command_for_update<'b>() -> Command

Build a [Command] that can update self. Read more
source§

impl FromArgMatches for Cli

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( - __clap_arg_matches: &mut ArgMatches -) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( - &mut self, - __clap_arg_matches: &ArgMatches -) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut( - &mut self, - __clap_arg_matches: &mut ArgMatches -) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

impl Parser for Cli

§

fn parse() -> Self

Parse from std::env::args_os(), exit on error
§

fn try_parse() -> Result<Self, Error<RichFormatter>>

Parse from std::env::args_os(), return Err on error.
§

fn parse_from<I, T>(itr: I) -> Selfwhere - I: IntoIterator<Item = T>, - T: Into<OsString> + Clone,

Parse from iterator, exit on error
§

fn try_parse_from<I, T>(itr: I) -> Result<Self, Error<RichFormatter>>where - I: IntoIterator<Item = T>, - T: Into<OsString> + Clone,

Parse from iterator, return Err on error.
§

fn update_from<I, T>(&mut self, itr: I)where - I: IntoIterator<Item = T>, - T: Into<OsString> + Clone,

Update from iterator, exit on error
§

fn try_update_from<I, T>(&mut self, itr: I) -> Result<(), Error<RichFormatter>>where - I: IntoIterator<Item = T>, - T: Into<OsString> + Clone,

Update from iterator, return Err on error.

Auto Trait Implementations§

§

impl RefUnwindSafe for Cli

§

impl Send for Cli

§

impl Sync for Cli

§

impl Unpin for Cli

§

impl UnwindSafe for Cli

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T, F> From2<T> for Fwhere - T: Into<F>,

§

fn from2(other: T) -> F

§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, -the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SelfOps for Twhere - T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> Uwhere - F: FnOnce(Self) -> U, - Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere - F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self -Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere - F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. -Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Selfwhere - F: FnOnce(&mut Self), - Self: Sized,

Mutates self using a closure taking self by mutable reference, -passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Selfwhere - F: FnOnce(&Self), - Self: Sized,

Observes the value of self, passing it along unmodified. -Useful in long method chains. Read more
§

fn into_<T>(self) -> Twhere - Self: Into<T>,

Performs a conversion with Into. -using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &Twhere - Self: AsRef<T>, - T: ?Sized,

Performs a reference to reference conversion with AsRef, -using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut Twhere - Self: AsMut<T>, - T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, -using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)where - Self: Sized,

Drops self using method notation. -Alternative to std::mem::drop. Read more
§

impl<This> TransmuteElement for Thiswhere - This: ?Sized,

§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtrwhere - Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeIdentity for Twhere - T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Typewhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self, Global>) -> Arc<Self::Type, Global>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self, Global>) -> Rc<Self::Type, Global>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Selfwhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type, Global>) -> Arc<Self, Global>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type, Global>) -> Rc<Self, Global>

Converts an Rc back to the original type.
§

impl<V, T> VZip<V> for Twhere - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/radarflow/comms/enum.EntityData.html b/docs/radarflow/comms/enum.EntityData.html deleted file mode 100644 index bfe761c..0000000 --- a/docs/radarflow/comms/enum.EntityData.html +++ /dev/null @@ -1,68 +0,0 @@ -EntityData in radarflow::comms - Rust
pub enum EntityData {
-    Player(PlayerData),
-    Bomb(BombData),
-}

Variants§

Trait Implementations§

source§

impl Clone for EntityData

source§

fn clone(&self) -> EntityData

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for EntityData

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for EntityData

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for EntityData

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<'a, T> BorrowOwned<'a> for Twhere - T: 'a + Clone,

§

type ROwned = T

The owned type, stored in RCow::Owned
§

type RBorrowed = &'a T

The borrowed type, stored in RCow::Borrowed
§

fn r_borrow( - this: &'a <T as BorrowOwned<'a>>::ROwned -) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn r_to_owned( - this: <T as BorrowOwned<'a>>::RBorrowed -) -> <T as BorrowOwned<'a>>::ROwned

§

fn deref_borrowed(this: &<T as BorrowOwned<'a>>::RBorrowed) -> &T

§

fn deref_owned(this: &<T as BorrowOwned<'a>>::ROwned) -> &T

§

fn from_cow_borrow(this: &'a T) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn from_cow_owned(this: <T as ToOwned>::Owned) -> <T as BorrowOwned<'a>>::ROwned

§

fn into_cow_borrow(this: <T as BorrowOwned<'a>>::RBorrowed) -> &'a T

§

fn into_cow_owned(this: <T as BorrowOwned<'a>>::ROwned) -> <T as ToOwned>::Owned

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T, F> From2<T> for Fwhere - T: Into<F>,

§

fn from2(other: T) -> F

§

impl<T> FromRef<T> for Twhere - T: Clone,

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, -the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SelfOps for Twhere - T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> Uwhere - F: FnOnce(Self) -> U, - Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere - F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self -Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere - F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. -Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Selfwhere - F: FnOnce(&mut Self), - Self: Sized,

Mutates self using a closure taking self by mutable reference, -passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Selfwhere - F: FnOnce(&Self), - Self: Sized,

Observes the value of self, passing it along unmodified. -Useful in long method chains. Read more
§

fn into_<T>(self) -> Twhere - Self: Into<T>,

Performs a conversion with Into. -using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &Twhere - Self: AsRef<T>, - T: ?Sized,

Performs a reference to reference conversion with AsRef, -using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut Twhere - Self: AsMut<T>, - T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, -using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)where - Self: Sized,

Drops self using method notation. -Alternative to std::mem::drop. Read more
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<This> TransmuteElement for Thiswhere - This: ?Sized,

§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtrwhere - Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeIdentity for Twhere - T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Typewhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self, Global>) -> Arc<Self::Type, Global>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self, Global>) -> Rc<Self::Type, Global>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Selfwhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type, Global>) -> Arc<Self, Global>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type, Global>) -> Rc<Self, Global>

Converts an Rc back to the original type.
§

impl<V, T> VZip<V> for Twhere - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/radarflow/comms/index.html b/docs/radarflow/comms/index.html deleted file mode 100644 index a64303e..0000000 --- a/docs/radarflow/comms/index.html +++ /dev/null @@ -1 +0,0 @@ -radarflow::comms - Rust
\ No newline at end of file diff --git a/docs/radarflow/comms/sidebar-items.js b/docs/radarflow/comms/sidebar-items.js deleted file mode 100644 index f06afaa..0000000 --- a/docs/radarflow/comms/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["EntityData"],"struct":["BombData","PlayerData","RadarData"]}; \ No newline at end of file diff --git a/docs/radarflow/comms/struct.BombData.html b/docs/radarflow/comms/struct.BombData.html deleted file mode 100644 index ee5d1be..0000000 --- a/docs/radarflow/comms/struct.BombData.html +++ /dev/null @@ -1,68 +0,0 @@ -BombData in radarflow::comms - Rust

Struct radarflow::comms::BombData

source ·
pub struct BombData {
-    pos: Vec3,
-    is_planted: bool,
-}

Fields§

§pos: Vec3§is_planted: bool

Implementations§

source§

impl BombData

source

pub fn new(pos: Vec3, is_planted: bool) -> BombData

Trait Implementations§

source§

impl Clone for BombData

source§

fn clone(&self) -> BombData

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for BombData

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for BombData

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for BombData

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<'a, T> BorrowOwned<'a> for Twhere - T: 'a + Clone,

§

type ROwned = T

The owned type, stored in RCow::Owned
§

type RBorrowed = &'a T

The borrowed type, stored in RCow::Borrowed
§

fn r_borrow( - this: &'a <T as BorrowOwned<'a>>::ROwned -) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn r_to_owned( - this: <T as BorrowOwned<'a>>::RBorrowed -) -> <T as BorrowOwned<'a>>::ROwned

§

fn deref_borrowed(this: &<T as BorrowOwned<'a>>::RBorrowed) -> &T

§

fn deref_owned(this: &<T as BorrowOwned<'a>>::ROwned) -> &T

§

fn from_cow_borrow(this: &'a T) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn from_cow_owned(this: <T as ToOwned>::Owned) -> <T as BorrowOwned<'a>>::ROwned

§

fn into_cow_borrow(this: <T as BorrowOwned<'a>>::RBorrowed) -> &'a T

§

fn into_cow_owned(this: <T as BorrowOwned<'a>>::ROwned) -> <T as ToOwned>::Owned

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T, F> From2<T> for Fwhere - T: Into<F>,

§

fn from2(other: T) -> F

§

impl<T> FromRef<T> for Twhere - T: Clone,

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, -the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SelfOps for Twhere - T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> Uwhere - F: FnOnce(Self) -> U, - Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere - F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self -Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere - F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. -Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Selfwhere - F: FnOnce(&mut Self), - Self: Sized,

Mutates self using a closure taking self by mutable reference, -passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Selfwhere - F: FnOnce(&Self), - Self: Sized,

Observes the value of self, passing it along unmodified. -Useful in long method chains. Read more
§

fn into_<T>(self) -> Twhere - Self: Into<T>,

Performs a conversion with Into. -using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &Twhere - Self: AsRef<T>, - T: ?Sized,

Performs a reference to reference conversion with AsRef, -using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut Twhere - Self: AsMut<T>, - T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, -using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)where - Self: Sized,

Drops self using method notation. -Alternative to std::mem::drop. Read more
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<This> TransmuteElement for Thiswhere - This: ?Sized,

§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtrwhere - Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeIdentity for Twhere - T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Typewhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self, Global>) -> Arc<Self::Type, Global>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self, Global>) -> Rc<Self::Type, Global>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Selfwhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type, Global>) -> Arc<Self, Global>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type, Global>) -> Rc<Self, Global>

Converts an Rc back to the original type.
§

impl<V, T> VZip<V> for Twhere - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/radarflow/comms/struct.PlayerData.html b/docs/radarflow/comms/struct.PlayerData.html deleted file mode 100644 index 97d50ea..0000000 --- a/docs/radarflow/comms/struct.PlayerData.html +++ /dev/null @@ -1,75 +0,0 @@ -PlayerData in radarflow::comms - Rust

Struct radarflow::comms::PlayerData

source ·
pub struct PlayerData {
-    pos: Vec3,
-    yaw: f32,
-    player_type: PlayerType,
-    has_bomb: bool,
-}

Fields§

§pos: Vec3§yaw: f32§player_type: PlayerType§has_bomb: bool

Implementations§

source§

impl PlayerData

source

pub fn new( - pos: Vec3, - yaw: f32, - player_type: PlayerType, - has_bomb: bool -) -> PlayerData

Trait Implementations§

source§

impl Clone for PlayerData

source§

fn clone(&self) -> PlayerData

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for PlayerData

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for PlayerData

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for PlayerData

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<'a, T> BorrowOwned<'a> for Twhere - T: 'a + Clone,

§

type ROwned = T

The owned type, stored in RCow::Owned
§

type RBorrowed = &'a T

The borrowed type, stored in RCow::Borrowed
§

fn r_borrow( - this: &'a <T as BorrowOwned<'a>>::ROwned -) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn r_to_owned( - this: <T as BorrowOwned<'a>>::RBorrowed -) -> <T as BorrowOwned<'a>>::ROwned

§

fn deref_borrowed(this: &<T as BorrowOwned<'a>>::RBorrowed) -> &T

§

fn deref_owned(this: &<T as BorrowOwned<'a>>::ROwned) -> &T

§

fn from_cow_borrow(this: &'a T) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn from_cow_owned(this: <T as ToOwned>::Owned) -> <T as BorrowOwned<'a>>::ROwned

§

fn into_cow_borrow(this: <T as BorrowOwned<'a>>::RBorrowed) -> &'a T

§

fn into_cow_owned(this: <T as BorrowOwned<'a>>::ROwned) -> <T as ToOwned>::Owned

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T, F> From2<T> for Fwhere - T: Into<F>,

§

fn from2(other: T) -> F

§

impl<T> FromRef<T> for Twhere - T: Clone,

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, -the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SelfOps for Twhere - T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> Uwhere - F: FnOnce(Self) -> U, - Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere - F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self -Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere - F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. -Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Selfwhere - F: FnOnce(&mut Self), - Self: Sized,

Mutates self using a closure taking self by mutable reference, -passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Selfwhere - F: FnOnce(&Self), - Self: Sized,

Observes the value of self, passing it along unmodified. -Useful in long method chains. Read more
§

fn into_<T>(self) -> Twhere - Self: Into<T>,

Performs a conversion with Into. -using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &Twhere - Self: AsRef<T>, - T: ?Sized,

Performs a reference to reference conversion with AsRef, -using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut Twhere - Self: AsMut<T>, - T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, -using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)where - Self: Sized,

Drops self using method notation. -Alternative to std::mem::drop. Read more
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<This> TransmuteElement for Thiswhere - This: ?Sized,

§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtrwhere - Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeIdentity for Twhere - T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Typewhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self, Global>) -> Arc<Self::Type, Global>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self, Global>) -> Rc<Self::Type, Global>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Selfwhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type, Global>) -> Arc<Self, Global>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type, Global>) -> Rc<Self, Global>

Converts an Rc back to the original type.
§

impl<V, T> VZip<V> for Twhere - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/radarflow/comms/struct.RadarData.html b/docs/radarflow/comms/struct.RadarData.html deleted file mode 100644 index ab9ea5b..0000000 --- a/docs/radarflow/comms/struct.RadarData.html +++ /dev/null @@ -1,74 +0,0 @@ -RadarData in radarflow::comms - Rust

Struct radarflow::comms::RadarData

source ·
pub struct RadarData {
-    ingame: bool,
-    map_name: String,
-    player_data: Vec<EntityData>,
-}

Fields§

§ingame: bool§map_name: String§player_data: Vec<EntityData>

Implementations§

source§

impl RadarData

source

pub fn new( - ingame: bool, - map_name: String, - player_data: Vec<EntityData> -) -> RadarData

source

pub fn empty() -> RadarData

Returns empty RadarData, it’s also the same data that gets sent to clients when not ingame

-

Trait Implementations§

source§

impl Clone for RadarData

source§

fn clone(&self) -> RadarData

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for RadarData

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for RadarData

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for RadarData

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<'a, T> BorrowOwned<'a> for Twhere - T: 'a + Clone,

§

type ROwned = T

The owned type, stored in RCow::Owned
§

type RBorrowed = &'a T

The borrowed type, stored in RCow::Borrowed
§

fn r_borrow( - this: &'a <T as BorrowOwned<'a>>::ROwned -) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn r_to_owned( - this: <T as BorrowOwned<'a>>::RBorrowed -) -> <T as BorrowOwned<'a>>::ROwned

§

fn deref_borrowed(this: &<T as BorrowOwned<'a>>::RBorrowed) -> &T

§

fn deref_owned(this: &<T as BorrowOwned<'a>>::ROwned) -> &T

§

fn from_cow_borrow(this: &'a T) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn from_cow_owned(this: <T as ToOwned>::Owned) -> <T as BorrowOwned<'a>>::ROwned

§

fn into_cow_borrow(this: <T as BorrowOwned<'a>>::RBorrowed) -> &'a T

§

fn into_cow_owned(this: <T as BorrowOwned<'a>>::ROwned) -> <T as ToOwned>::Owned

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T, F> From2<T> for Fwhere - T: Into<F>,

§

fn from2(other: T) -> F

§

impl<T> FromRef<T> for Twhere - T: Clone,

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, -the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SelfOps for Twhere - T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> Uwhere - F: FnOnce(Self) -> U, - Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere - F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self -Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere - F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. -Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Selfwhere - F: FnOnce(&mut Self), - Self: Sized,

Mutates self using a closure taking self by mutable reference, -passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Selfwhere - F: FnOnce(&Self), - Self: Sized,

Observes the value of self, passing it along unmodified. -Useful in long method chains. Read more
§

fn into_<T>(self) -> Twhere - Self: Into<T>,

Performs a conversion with Into. -using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &Twhere - Self: AsRef<T>, - T: ?Sized,

Performs a reference to reference conversion with AsRef, -using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut Twhere - Self: AsMut<T>, - T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, -using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)where - Self: Sized,

Drops self using method notation. -Alternative to std::mem::drop. Read more
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<This> TransmuteElement for Thiswhere - This: ?Sized,

§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtrwhere - Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeIdentity for Twhere - T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Typewhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self, Global>) -> Arc<Self::Type, Global>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self, Global>) -> Rc<Self::Type, Global>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Selfwhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type, Global>) -> Arc<Self, Global>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type, Global>) -> Rc<Self, Global>

Converts an Rc back to the original type.
§

impl<V, T> VZip<V> for Twhere - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/radarflow/dma/cache/enum.CachedEntity.html b/docs/radarflow/dma/cache/enum.CachedEntity.html deleted file mode 100644 index a80f1c4..0000000 --- a/docs/radarflow/dma/cache/enum.CachedEntity.html +++ /dev/null @@ -1,70 +0,0 @@ -CachedEntity in radarflow::dma::cache - Rust
pub enum CachedEntity {
-    Bomb {
-        ptr: Address,
-    },
-    Player {
-        ptr: Address,
-        player_type: PlayerType,
-    },
-}

Variants§

§

Bomb

Fields

§ptr: Address
§

Player

Fields

§ptr: Address
§player_type: PlayerType

Trait Implementations§

source§

impl Clone for CachedEntity

source§

fn clone(&self) -> CachedEntity

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Copy for CachedEntity

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<'a, T> BorrowOwned<'a> for Twhere - T: 'a + Clone,

§

type ROwned = T

The owned type, stored in RCow::Owned
§

type RBorrowed = &'a T

The borrowed type, stored in RCow::Borrowed
§

fn r_borrow( - this: &'a <T as BorrowOwned<'a>>::ROwned -) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn r_to_owned( - this: <T as BorrowOwned<'a>>::RBorrowed -) -> <T as BorrowOwned<'a>>::ROwned

§

fn deref_borrowed(this: &<T as BorrowOwned<'a>>::RBorrowed) -> &T

§

fn deref_owned(this: &<T as BorrowOwned<'a>>::ROwned) -> &T

§

fn from_cow_borrow(this: &'a T) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn from_cow_owned(this: <T as ToOwned>::Owned) -> <T as BorrowOwned<'a>>::ROwned

§

fn into_cow_borrow(this: <T as BorrowOwned<'a>>::RBorrowed) -> &'a T

§

fn into_cow_owned(this: <T as BorrowOwned<'a>>::ROwned) -> <T as ToOwned>::Owned

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T, F> From2<T> for Fwhere - T: Into<F>,

§

fn from2(other: T) -> F

§

impl<T> FromRef<T> for Twhere - T: Clone,

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, -the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SelfOps for Twhere - T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> Uwhere - F: FnOnce(Self) -> U, - Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere - F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self -Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere - F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. -Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Selfwhere - F: FnOnce(&mut Self), - Self: Sized,

Mutates self using a closure taking self by mutable reference, -passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Selfwhere - F: FnOnce(&Self), - Self: Sized,

Observes the value of self, passing it along unmodified. -Useful in long method chains. Read more
§

fn into_<T>(self) -> Twhere - Self: Into<T>,

Performs a conversion with Into. -using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &Twhere - Self: AsRef<T>, - T: ?Sized,

Performs a reference to reference conversion with AsRef, -using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut Twhere - Self: AsMut<T>, - T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, -using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)where - Self: Sized,

Drops self using method notation. -Alternative to std::mem::drop. Read more
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<This> TransmuteElement for Thiswhere - This: ?Sized,

§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtrwhere - Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeIdentity for Twhere - T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Typewhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self, Global>) -> Arc<Self::Type, Global>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self, Global>) -> Rc<Self::Type, Global>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Selfwhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type, Global>) -> Arc<Self, Global>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type, Global>) -> Rc<Self, Global>

Converts an Rc back to the original type.
§

impl<V, T> VZip<V> for Twhere - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/radarflow/dma/cache/index.html b/docs/radarflow/dma/cache/index.html deleted file mode 100644 index fdab7d5..0000000 --- a/docs/radarflow/dma/cache/index.html +++ /dev/null @@ -1 +0,0 @@ -radarflow::dma::cache - Rust
\ No newline at end of file diff --git a/docs/radarflow/dma/cache/sidebar-items.js b/docs/radarflow/dma/cache/sidebar-items.js deleted file mode 100644 index 6c93539..0000000 --- a/docs/radarflow/dma/cache/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["CachedEntity"],"struct":["Cache","CacheBuilder"]}; \ No newline at end of file diff --git a/docs/radarflow/dma/cache/struct.Cache.html b/docs/radarflow/dma/cache/struct.Cache.html deleted file mode 100644 index 23baeea..0000000 --- a/docs/radarflow/dma/cache/struct.Cache.html +++ /dev/null @@ -1,60 +0,0 @@ -Cache in radarflow::dma::cache - Rust

Struct radarflow::dma::cache::Cache

source ·
pub struct Cache {
-    timestamp: Instant,
-    entity_cache: Vec<CachedEntity>,
-    map_name: String,
-    entity_list: Address,
-}

Fields§

§timestamp: Instant§entity_cache: Vec<CachedEntity>§map_name: String§entity_list: Address

Implementations§

source§

impl Cache

source

pub fn is_valid(&self) -> bool

source

pub fn new_invalid() -> Cache

source

pub fn entity_cache(&mut self) -> Vec<CachedEntity>

source

pub fn map_name(&self) -> String

source

pub fn entity_list(&self) -> Address

Auto Trait Implementations§

§

impl RefUnwindSafe for Cache

§

impl Send for Cache

§

impl Sync for Cache

§

impl Unpin for Cache

§

impl UnwindSafe for Cache

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T, F> From2<T> for Fwhere - T: Into<F>,

§

fn from2(other: T) -> F

§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, -the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SelfOps for Twhere - T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> Uwhere - F: FnOnce(Self) -> U, - Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere - F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self -Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere - F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. -Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Selfwhere - F: FnOnce(&mut Self), - Self: Sized,

Mutates self using a closure taking self by mutable reference, -passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Selfwhere - F: FnOnce(&Self), - Self: Sized,

Observes the value of self, passing it along unmodified. -Useful in long method chains. Read more
§

fn into_<T>(self) -> Twhere - Self: Into<T>,

Performs a conversion with Into. -using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &Twhere - Self: AsRef<T>, - T: ?Sized,

Performs a reference to reference conversion with AsRef, -using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut Twhere - Self: AsMut<T>, - T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, -using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)where - Self: Sized,

Drops self using method notation. -Alternative to std::mem::drop. Read more
§

impl<This> TransmuteElement for Thiswhere - This: ?Sized,

§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtrwhere - Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeIdentity for Twhere - T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Typewhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self, Global>) -> Arc<Self::Type, Global>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self, Global>) -> Rc<Self::Type, Global>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Selfwhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type, Global>) -> Arc<Self, Global>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type, Global>) -> Rc<Self, Global>

Converts an Rc back to the original type.
§

impl<V, T> VZip<V> for Twhere - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/radarflow/dma/cache/struct.CacheBuilder.html b/docs/radarflow/dma/cache/struct.CacheBuilder.html deleted file mode 100644 index f8966cf..0000000 --- a/docs/radarflow/dma/cache/struct.CacheBuilder.html +++ /dev/null @@ -1,59 +0,0 @@ -CacheBuilder in radarflow::dma::cache - Rust
pub struct CacheBuilder {
-    entity_cache: Option<Vec<CachedEntity>>,
-    map_name: Option<String>,
-    entity_list: Option<Address>,
-}

Fields§

§entity_cache: Option<Vec<CachedEntity>>§map_name: Option<String>§entity_list: Option<Address>

Implementations§

source§

impl CacheBuilder

source

pub fn new() -> CacheBuilder

source

pub fn entity_cache(self, entity_cache: Vec<CachedEntity>) -> CacheBuilder

source

pub fn map_name(self, map_name: String) -> CacheBuilder

source

pub fn entity_list(self, entity_list: Address) -> CacheBuilder

source

pub fn build(self) -> Result<Cache>

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T, F> From2<T> for Fwhere - T: Into<F>,

§

fn from2(other: T) -> F

§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, -the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SelfOps for Twhere - T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> Uwhere - F: FnOnce(Self) -> U, - Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere - F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self -Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere - F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. -Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Selfwhere - F: FnOnce(&mut Self), - Self: Sized,

Mutates self using a closure taking self by mutable reference, -passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Selfwhere - F: FnOnce(&Self), - Self: Sized,

Observes the value of self, passing it along unmodified. -Useful in long method chains. Read more
§

fn into_<T>(self) -> Twhere - Self: Into<T>,

Performs a conversion with Into. -using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &Twhere - Self: AsRef<T>, - T: ?Sized,

Performs a reference to reference conversion with AsRef, -using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut Twhere - Self: AsMut<T>, - T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, -using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)where - Self: Sized,

Drops self using method notation. -Alternative to std::mem::drop. Read more
§

impl<This> TransmuteElement for Thiswhere - This: ?Sized,

§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtrwhere - Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeIdentity for Twhere - T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Typewhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self, Global>) -> Arc<Self::Type, Global>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self, Global>) -> Rc<Self::Type, Global>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Selfwhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type, Global>) -> Arc<Self, Global>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type, Global>) -> Rc<Self, Global>

Converts an Rc back to the original type.
§

impl<V, T> VZip<V> for Twhere - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/radarflow/dma/constant.SECOND_AS_NANO.html b/docs/radarflow/dma/constant.SECOND_AS_NANO.html deleted file mode 100644 index 6128828..0000000 --- a/docs/radarflow/dma/constant.SECOND_AS_NANO.html +++ /dev/null @@ -1 +0,0 @@ -SECOND_AS_NANO in radarflow::dma - Rust

Constant radarflow::dma::SECOND_AS_NANO

source ·
const SECOND_AS_NANO: u64 = _; // 1_000_000_000u64
\ No newline at end of file diff --git a/docs/radarflow/dma/fn.run.html b/docs/radarflow/dma/fn.run.html deleted file mode 100644 index 3cd5eae..0000000 --- a/docs/radarflow/dma/fn.run.html +++ /dev/null @@ -1,6 +0,0 @@ -run in radarflow::dma - Rust

Function radarflow::dma::run

source ·
pub async fn run(
-    connector: Connector,
-    pcileech_device: String,
-    poll_rate: u16,
-    data_lock: Arc<RwLock<RadarData>>
-) -> Result<()>
\ No newline at end of file diff --git a/docs/radarflow/dma/index.html b/docs/radarflow/dma/index.html deleted file mode 100644 index 2301f38..0000000 --- a/docs/radarflow/dma/index.html +++ /dev/null @@ -1 +0,0 @@ -radarflow::dma - Rust
\ No newline at end of file diff --git a/docs/radarflow/dma/sidebar-items.js b/docs/radarflow/dma/sidebar-items.js deleted file mode 100644 index 6bdff19..0000000 --- a/docs/radarflow/dma/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"constant":["SECOND_AS_NANO"],"fn":["run"],"mod":["cache"],"static":["ONCE"]}; \ No newline at end of file diff --git a/docs/radarflow/dma/static.ONCE.html b/docs/radarflow/dma/static.ONCE.html deleted file mode 100644 index ca53242..0000000 --- a/docs/radarflow/dma/static.ONCE.html +++ /dev/null @@ -1 +0,0 @@ -ONCE in radarflow::dma - Rust

Static radarflow::dma::ONCE

source ·
static ONCE: Once
\ No newline at end of file diff --git a/docs/radarflow/fn.main.html b/docs/radarflow/fn.main.html deleted file mode 100644 index 4a5d2dc..0000000 --- a/docs/radarflow/fn.main.html +++ /dev/null @@ -1 +0,0 @@ -main in radarflow - Rust

Function radarflow::main

source ·
pub(crate) fn main() -> Result<()>
\ No newline at end of file diff --git a/docs/radarflow/index.html b/docs/radarflow/index.html deleted file mode 100644 index ce0da34..0000000 --- a/docs/radarflow/index.html +++ /dev/null @@ -1 +0,0 @@ -radarflow - Rust

Crate radarflow

source ·

Modules

Functions

\ No newline at end of file diff --git a/docs/radarflow/sidebar-items.js b/docs/radarflow/sidebar-items.js deleted file mode 100644 index 9542266..0000000 --- a/docs/radarflow/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["main"],"mod":["cli","comms","dma","websocket"]}; \ No newline at end of file diff --git a/docs/radarflow/websocket/fn.handle_socket.html b/docs/radarflow/websocket/fn.handle_socket.html deleted file mode 100644 index 46cc1bf..0000000 --- a/docs/radarflow/websocket/fn.handle_socket.html +++ /dev/null @@ -1 +0,0 @@ -handle_socket in radarflow::websocket - Rust
async fn handle_socket(socket: WebSocket, state: AppState)
\ No newline at end of file diff --git a/docs/radarflow/websocket/fn.run.html b/docs/radarflow/websocket/fn.run.html deleted file mode 100644 index 7f65d05..0000000 --- a/docs/radarflow/websocket/fn.run.html +++ /dev/null @@ -1,5 +0,0 @@ -run in radarflow::websocket - Rust

Function radarflow::websocket::run

source ·
pub async fn run(
-    path: PathBuf,
-    port: u16,
-    data_lock: Arc<RwLock<RadarData>>
-) -> Result<()>
\ No newline at end of file diff --git a/docs/radarflow/websocket/fn.ws_handler.html b/docs/radarflow/websocket/fn.ws_handler.html deleted file mode 100644 index b41a37b..0000000 --- a/docs/radarflow/websocket/fn.ws_handler.html +++ /dev/null @@ -1 +0,0 @@ -ws_handler in radarflow::websocket - Rust
async fn ws_handler(ws: WebSocketUpgrade, __arg1: State<AppState>) -> Response
\ No newline at end of file diff --git a/docs/radarflow/websocket/index.html b/docs/radarflow/websocket/index.html deleted file mode 100644 index e4395b3..0000000 --- a/docs/radarflow/websocket/index.html +++ /dev/null @@ -1 +0,0 @@ -radarflow::websocket - Rust
\ No newline at end of file diff --git a/docs/radarflow/websocket/sidebar-items.js b/docs/radarflow/websocket/sidebar-items.js deleted file mode 100644 index 403b718..0000000 --- a/docs/radarflow/websocket/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["handle_socket","run","ws_handler"],"struct":["AppState"]}; \ No newline at end of file diff --git a/docs/radarflow/websocket/struct.AppState.html b/docs/radarflow/websocket/struct.AppState.html deleted file mode 100644 index 181b4b4..0000000 --- a/docs/radarflow/websocket/struct.AppState.html +++ /dev/null @@ -1,64 +0,0 @@ -AppState in radarflow::websocket - Rust
struct AppState {
-    data_lock: Arc<RwLock<RadarData>>,
-}

Fields§

§data_lock: Arc<RwLock<RadarData>>

Trait Implementations§

source§

impl Clone for AppState

source§

fn clone(&self) -> AppState

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<'a, T> BorrowOwned<'a> for Twhere - T: 'a + Clone,

§

type ROwned = T

The owned type, stored in RCow::Owned
§

type RBorrowed = &'a T

The borrowed type, stored in RCow::Borrowed
§

fn r_borrow( - this: &'a <T as BorrowOwned<'a>>::ROwned -) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn r_to_owned( - this: <T as BorrowOwned<'a>>::RBorrowed -) -> <T as BorrowOwned<'a>>::ROwned

§

fn deref_borrowed(this: &<T as BorrowOwned<'a>>::RBorrowed) -> &T

§

fn deref_owned(this: &<T as BorrowOwned<'a>>::ROwned) -> &T

§

fn from_cow_borrow(this: &'a T) -> <T as BorrowOwned<'a>>::RBorrowed

§

fn from_cow_owned(this: <T as ToOwned>::Owned) -> <T as BorrowOwned<'a>>::ROwned

§

fn into_cow_borrow(this: <T as BorrowOwned<'a>>::RBorrowed) -> &'a T

§

fn into_cow_owned(this: <T as BorrowOwned<'a>>::ROwned) -> <T as ToOwned>::Owned

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T, F> From2<T> for Fwhere - T: Into<F>,

§

fn from2(other: T) -> F

§

impl<T> FromRef<T> for Twhere - T: Clone,

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, -the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, -returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere - F: Copy,

Gets a copy of a field (determined by offset). -The field is determined by offset. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SelfOps for Twhere - T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> Uwhere - F: FnOnce(Self) -> U, - Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere - F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self -Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere - F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. -Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Selfwhere - F: FnOnce(&mut Self), - Self: Sized,

Mutates self using a closure taking self by mutable reference, -passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Selfwhere - F: FnOnce(&Self), - Self: Sized,

Observes the value of self, passing it along unmodified. -Useful in long method chains. Read more
§

fn into_<T>(self) -> Twhere - Self: Into<T>,

Performs a conversion with Into. -using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &Twhere - Self: AsRef<T>, - T: ?Sized,

Performs a reference to reference conversion with AsRef, -using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut Twhere - Self: AsMut<T>, - T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, -using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)where - Self: Sized,

Drops self using method notation. -Alternative to std::mem::drop. Read more
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<This> TransmuteElement for Thiswhere - This: ?Sized,

§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtrwhere - Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeIdentity for Twhere - T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Typewhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self, Global>) -> Arc<Self::Type, Global>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self, Global>) -> Rc<Self::Type, Global>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Selfwhere - Self: Sized, - Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type, Global>) -> Arc<Self, Global>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type, Global>) -> Rc<Self, Global>

Converts an Rc back to the original type.
§

impl<V, T> VZip<V> for Twhere - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/docs/search-index.js b/docs/search-index.js deleted file mode 100644 index 6362572..0000000 --- a/docs/search-index.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchIndex = JSON.parse('{\ -"csflow":{"doc":"","t":"DEENNNNNNNNNNNLLLLLLMLLLLLLLMALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLALLLLALLLLLLLLLLNNNENNNNENLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLIIKKKKK","n":["CheatCtx","Connector","Error","GameVersionMismatch","Kvm","Memflow","MemflowPartialAddress","MemflowPartialString","MemflowPartialVec3","MemflowPartiali32","MemflowPartialu32","MemflowPartialu8","Pcileech","Qemu","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","client_module","clone","clone_into","cmp","compare","default","deref_borrowed","deref_owned","engine_module","enums","eq","equivalent","equivalent","equivalent","f_get","f_get","f_get","f_get_copy","f_get_copy","f_get_copy","f_get_copy","f_get_copy","f_get_copy","f_get_mut","f_get_mut","f_get_mut","f_get_mut_ptr","f_get_mut_ptr","f_get_mut_ptr","f_get_ptr","f_get_ptr","f_get_ptr","f_replace","f_replace","f_replace","f_replace","f_replace","f_replace","f_swap","f_swap","f_swap","f_swap","f_swap","f_swap","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from2","from2","from2","from_cow_borrow","from_cow_owned","get_entity_list","get_globals","get_local","get_plantedc4","highest_entity_index","into","into","into","into_cow_borrow","into_cow_owned","is_bomb_dropped","is_bomb_planted","map_name","network_is_ingame","partial_cmp","process","r_borrow","r_to_owned","setup","source","structs","to_owned","to_possible_value","to_string","to_string","traits","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","value_variants","CT","Enemy","Local","PlayerType","Spectator","Spectator","T","Team","TeamID","Unknown","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","default","deref_borrowed","deref_owned","deserialize","eq","eq","equivalent","equivalent","equivalent","f_get","f_get","f_get_copy","f_get_copy","f_get_copy","f_get_copy","f_get_mut","f_get_mut","f_get_mut_ptr","f_get_mut_ptr","f_get_ptr","f_get_ptr","f_replace","f_replace","f_replace","f_replace","f_swap","f_swap","f_swap","f_swap","fmt","fmt","from","from","from2","from2","from_cow_borrow","from_cow_owned","from_i64","from_u64","into","into","into_cow_borrow","into_cow_owned","r_borrow","r_to_owned","serialize","to_i64","to_owned","to_u64","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","type_id","type_id","CBaseEntity","CPlayerController","CPlayerPawn","Vec3","angles","as_bytes","as_bytes_mut","as_data_view","as_data_view_mut","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","class_name","class_name","clone","clone_into","deref_borrowed","deref_owned","deserialize","f_get","f_get","f_get","f_get","f_get_copy","f_get_copy","f_get_copy","f_get_copy","f_get_copy","f_get_copy","f_get_copy","f_get_copy","f_get_mut","f_get_mut","f_get_mut","f_get_mut","f_get_mut_ptr","f_get_mut_ptr","f_get_mut_ptr","f_get_mut_ptr","f_get_ptr","f_get_ptr","f_get_ptr","f_get_ptr","f_replace","f_replace","f_replace","f_replace","f_replace","f_replace","f_replace","f_replace","f_swap","f_swap","f_swap","f_swap","f_swap","f_swap","f_swap","f_swap","fmt","from","from","from","from","from2","from2","from2","from2","from_cow_borrow","from_cow_owned","from_index","from_index","from_uhandle","get_pawn","get_player_type","get_team","has_c4","health","into","into","into","into","into_cow_borrow","into_cow_owned","is_alive","new","new","new","pos","pos","pos","ptr","ptr","ptr","r_borrow","r_to_owned","serialize","to_owned","to_player_controller","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","x","y","z","zeroed","BaseEntity","MemoryClass","class_name","from_index","new","pos","ptr"],"q":[[0,"csflow"],[117,"csflow::enums"],[196,"csflow::structs"],[316,"csflow::traits"],[323,"core::cmp"],[324,"repr_offset::alignment"],[325,"repr_offset::struct_field_offset"],[326,"repr_offset::alignment"],[327,"core::fmt"],[328,"core::fmt"],[329,"memflow::error"],[330,"alloc::string"],[331,"core::result"],[332,"core::option"],[333,"core::error"],[334,"clap_builder::builder::possible_value"],[335,"core::any"],[336,"serde::de"],[337,"serde::ser"],[338,"dataview::data_view"],[339,"core::marker"]],"d":["","","","Game version mismatch. First arg is the game version, …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","Returns the argument unchanged.","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","Same as ::get_health > 0","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","A trait for basic functions from C_BaseEntity …","A trait that implements basic functions for a class …","","","","",""],"i":[0,0,0,9,1,9,9,9,9,9,9,9,1,1,20,1,9,20,1,9,20,1,1,1,1,1,1,1,20,0,1,1,1,1,20,1,9,20,20,1,1,9,9,20,1,9,20,1,9,20,1,9,20,20,1,1,9,9,20,20,1,1,9,9,9,9,20,1,9,9,9,9,9,9,9,9,20,1,9,1,1,20,20,20,20,20,20,1,9,1,1,20,20,20,20,1,20,1,1,20,9,0,1,1,1,9,0,20,1,9,20,1,9,20,1,9,1,31,29,29,0,29,31,31,29,0,29,29,31,29,31,29,29,29,29,29,29,29,31,31,31,31,29,31,29,29,31,31,29,31,29,31,29,31,29,29,31,31,29,29,31,31,29,31,29,31,29,31,29,29,31,31,29,31,29,29,29,29,29,31,29,31,29,31,31,31,31,31,31,31,31,31,29,31,29,31,0,0,0,0,38,15,15,15,15,23,22,38,15,23,22,38,15,23,22,15,15,15,15,15,23,22,38,15,23,23,22,22,38,38,15,15,23,22,38,15,23,22,38,15,23,22,38,15,23,23,22,22,38,38,15,15,23,23,22,22,38,38,15,15,15,23,22,38,15,23,22,38,15,15,15,23,22,38,22,22,22,38,38,23,22,38,15,15,15,38,23,22,38,23,22,38,23,22,38,15,15,15,15,23,23,22,38,15,23,22,38,15,23,22,38,15,15,15,15,15,0,0,41,41,42,41,42],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,[1,1],[[-1,-2],2,[],[]],[[1,1],3],[[-1,-2],3,[],[]],[[],1],[[],-1,[]],[[],-1,[]],0,0,[[1,1],4],[[-1,-2],4,[],[]],[[-1,-2],4,[],[]],[[-1,-2],4,[],[]],[[-1,[6,[-2,-3,5]]],-3,[],[],[]],[[-1,[6,[-2,-3,5]]],-3,[],[],[]],[[-1,[6,[-2,-3,5]]],-3,[],[],[]],[[-1,[6,[-2,-3,7]]],-3,[],[],8],[[-1,[6,[-2,-3,5]]],-3,[],[],8],[[-1,[6,[-2,-3,5]]],-3,[],[],8],[[-1,[6,[-2,-3,7]]],-3,[],[],8],[[-1,[6,[-2,-3,7]]],-3,[],[],8],[[-1,[6,[-2,-3,5]]],-3,[],[],8],[[-1,[6,[-2,-3,5]]],-3,[],[],[]],[[-1,[6,[-2,-3,5]]],-3,[],[],[]],[[-1,[6,[-2,-3,5]]],-3,[],[],[]],[[-1,[6,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[6,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[6,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[6,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[6,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[6,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[6,[-2,-3,5]],-3],-3,[],[],[]],[[-1,[6,[-2,-3,7]],-3],-3,[],[],[]],[[-1,[6,[-2,-3,5]],-3],-3,[],[],[]],[[-1,[6,[-2,-3,7]],-3],-3,[],[],[]],[[-1,[6,[-2,-3,7]],-3],-3,[],[],[]],[[-1,[6,[-2,-3,5]],-3],-3,[],[],[]],[[-1,[6,[-2,-3,5]],-2],2,[],[],[]],[[-1,[6,[-2,-3,7]],-2],2,[],[],[]],[[-1,[6,[-2,-3,5]],-2],2,[],[],[]],[[-1,[6,[-2,-3,7]],-2],2,[],[],[]],[[-1,[6,[-2,-3,7]],-2],2,[],[],[]],[[-1,[6,[-2,-3,5]],-2],2,[],[],[]],[[9,10],11],[[9,10],11],[-1,-1,[]],[-1,-1,[]],[[[13,[12]]],9],[[[13,[14]]],9],[[[13,[15]]],9],[[[13,[16]]],9],[-1,-1,[]],[17,9],[[[13,[18]]],9],[[[13,[19]]],9],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[],[]],[[]],[20,[[21,[18,9]]]],[20,[[21,[18,9]]]],[20,[[21,[22,9]]]],[20,[[21,[23,9]]]],[20,[[21,[16,9]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[],-1,[]],[[]],[20,[[21,[4,9]]]],[20,[[21,[4,9]]]],[[20,18],[[21,[19,9]]]],[20,[[21,[4,9]]]],[[1,1],[[24,[3]]]],0,[[]],[[]],[[1,19],[[21,[20,9]]]],[9,[[24,[25]]]],0,[-1,-2,[],[]],[1,[[24,[26]]]],[1,19],[-1,19,[]],0,[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[-1,27,[]],[-1,27,[]],[-1,27,[]],[[],[[28,[1]]]],0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[29,29],[[-1,-2],2,[],[]],[[],29],[[],-1,[]],[[],-1,[]],[-1,[[21,[29]]],30],[[29,29],4],[[31,31],4],[[-1,-2],4,[],[]],[[-1,-2],4,[],[]],[[-1,-2],4,[],[]],[[-1,[6,[-2,-3,5]]],-3,[],[],[]],[[-1,[6,[-2,-3,5]]],-3,[],[],[]],[[-1,[6,[-2,-3,5]]],-3,[],[],8],[[-1,[6,[-2,-3,7]]],-3,[],[],8],[[-1,[6,[-2,-3,5]]],-3,[],[],8],[[-1,[6,[-2,-3,7]]],-3,[],[],8],[[-1,[6,[-2,-3,5]]],-3,[],[],[]],[[-1,[6,[-2,-3,5]]],-3,[],[],[]],[[-1,[6,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[6,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[6,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[6,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[6,[-2,-3,5]],-3],-3,[],[],[]],[[-1,[6,[-2,-3,7]],-3],-3,[],[],[]],[[-1,[6,[-2,-3,5]],-3],-3,[],[],[]],[[-1,[6,[-2,-3,7]],-3],-3,[],[],[]],[[-1,[6,[-2,-3,5]],-2],2,[],[],[]],[[-1,[6,[-2,-3,7]],-2],2,[],[],[]],[[-1,[6,[-2,-3,7]],-2],2,[],[],[]],[[-1,[6,[-2,-3,5]],-2],2,[],[],[]],[[29,10],11],[[31,10],11],[-1,-1,[]],[-1,-1,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[],[]],[[]],[32,[[24,[31]]]],[33,[[24,[31]]]],[-1,-2,[],[]],[-1,-2,[],[]],[[],-1,[]],[[]],[[]],[[]],[[29,-1],21,34],[31,[[24,[32]]]],[-1,-2,[],[]],[31,[[24,[33]]]],[-1,[[21,[-2]]],[],[]],[35,[[21,[31]]]],[16,[[21,[31]]]],[33,[[21,[31]]]],[36,[[21,[31]]]],[14,[[21,[31]]]],[12,[[21,[31]]]],[37,[[21,[31]]]],[-1,[[21,[-2]]],[],[]],[32,[[21,[31]]]],[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[-1,27,[]],[-1,27,[]],0,0,0,0,[[38,20],[[21,[15,9]]]],[-1,[[28,[14]]],[]],[-1,[[28,[14]]],[]],[-1,39,[]],[-1,39,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[23,20],[[21,[19,9]]]],[[22,20],[[21,[19,9]]]],[15,15],[[-1,-2],2,[],[]],[[],-1,[]],[[],-1,[]],[-1,[[21,[15]]],30],[[-1,[6,[-2,-3,5]]],-3,[],[],[]],[[-1,[6,[-2,-3,5]]],-3,[],[],[]],[[-1,[6,[-2,-3,5]]],-3,[],[],[]],[[-1,[6,[-2,-3,5]]],-3,[],[],[]],[[-1,[6,[-2,-3,7]]],-3,[],[],8],[[-1,[6,[-2,-3,5]]],-3,[],[],8],[[-1,[6,[-2,-3,5]]],-3,[],[],8],[[-1,[6,[-2,-3,7]]],-3,[],[],8],[[-1,[6,[-2,-3,5]]],-3,[],[],8],[[-1,[6,[-2,-3,7]]],-3,[],[],8],[[-1,[6,[-2,-3,7]]],-3,[],[],8],[[-1,[6,[-2,-3,5]]],-3,[],[],8],[[-1,[6,[-2,-3,5]]],-3,[],[],[]],[[-1,[6,[-2,-3,5]]],-3,[],[],[]],[[-1,[6,[-2,-3,5]]],-3,[],[],[]],[[-1,[6,[-2,-3,5]]],-3,[],[],[]],[[-1,[6,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[6,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[6,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[6,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[6,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[6,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[6,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[6,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[6,[-2,-3,5]],-3],-3,[],[],[]],[[-1,[6,[-2,-3,7]],-3],-3,[],[],[]],[[-1,[6,[-2,-3,7]],-3],-3,[],[],[]],[[-1,[6,[-2,-3,5]],-3],-3,[],[],[]],[[-1,[6,[-2,-3,7]],-3],-3,[],[],[]],[[-1,[6,[-2,-3,5]],-3],-3,[],[],[]],[[-1,[6,[-2,-3,5]],-3],-3,[],[],[]],[[-1,[6,[-2,-3,7]],-3],-3,[],[],[]],[[-1,[6,[-2,-3,5]],-2],2,[],[],[]],[[-1,[6,[-2,-3,7]],-2],2,[],[],[]],[[-1,[6,[-2,-3,7]],-2],2,[],[],[]],[[-1,[6,[-2,-3,5]],-2],2,[],[],[]],[[-1,[6,[-2,-3,7]],-2],2,[],[],[]],[[-1,[6,[-2,-3,5]],-2],2,[],[],[]],[[-1,[6,[-2,-3,5]],-2],2,[],[],[]],[[-1,[6,[-2,-3,7]],-2],2,[],[],[]],[[15,10],11],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[],[]],[[]],[[20,18,16],[[21,[[24,[23]],9]]]],[[20,18,16],[[21,[[24,[22]],9]]]],[[20,18,12],[[21,[[24,[38]],9]]]],[[22,20,18],[[21,[[24,[38]],9]]]],[[22,20,22],[[21,[[24,[29]],9]]]],[[22,20],[[21,[[24,[31]],9]]]],[[38,20,18],[[21,[4,9]]]],[[38,20],[[21,[12,9]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[],-1,[]],[[]],[[38,20],[[21,[4,9]]]],[18,23],[18,22],[18,38],[[23,20],[[21,[15,9]]]],[[22,20],[[21,[15,9]]]],[[38,20],[[21,[15,9]]]],[23,18],[22,18],[38,18],[[]],[[]],[[15,-1],21,34],[-1,-2,[],[]],[23,22],[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[-1,[[21,[-2]]],[],[]],[-1,27,[]],[-1,27,[]],[-1,27,[]],[-1,27,[]],0,0,0,[[],-1,[]],0,0,[[-1,20],[[21,[19,9]]],[]],[[20,18,16],[[21,[[24,[-1]],9]]],40],[18,-1,[]],[[-1,20],[[21,[15,9]]],[]],[-1,18,[]]],"c":[],"p":[[4,"Connector",0],[15,"tuple"],[4,"Ordering",323],[15,"bool"],[3,"Aligned",324],[3,"FieldOffset",325],[3,"Unaligned",324],[8,"Copy",326],[4,"Error",0],[3,"Formatter",327],[6,"Result",327],[15,"u32"],[4,"PartialError",328],[15,"u8"],[3,"Vec3",196],[15,"i32"],[3,"Error",328],[3,"Address",329],[3,"String",330],[3,"CheatCtx",0],[4,"Result",331],[3,"CPlayerController",196],[3,"CBaseEntity",196],[4,"Option",332],[8,"Error",333],[3,"PossibleValue",334],[3,"TypeId",335],[15,"slice"],[4,"PlayerType",117],[8,"Deserializer",336],[4,"TeamID",117],[15,"i64"],[15,"u64"],[8,"Serializer",337],[15,"i8"],[15,"i16"],[15,"u16"],[3,"CPlayerPawn",196],[3,"DataView",338],[8,"Sized",326],[8,"BaseEntity",316],[8,"MemoryClass",316]]},\ -"radarflow":{"doc":"","t":"AAAFADNNNERRNNLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLMFMMFLLLLLLLLLLLLFLFLLMNDENDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLMMLLLMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMHRAFNDDENLLLLLLLLLLLLLMMLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLMLLLLLLLLLLLLLMMMDLLLLMLLLLLLLLLLLLLLLLLFLLLLLFLLLLLF","n":["cli","comms","dma","main","websocket","Cli","Debug","Error","Info","Loglevel","POLL_RANGE","PORT_RANGE","Trace","Warn","augment_args","augment_args_for_update","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","cmp","command","command_for_update","compare","connector","default","deref_borrowed","deref_owned","eq","equivalent","equivalent","equivalent","f_get","f_get","f_get_copy","f_get_copy","f_get_copy","f_get_copy","f_get_mut","f_get_mut","f_get_mut_ptr","f_get_mut_ptr","f_get_ptr","f_get_ptr","f_replace","f_replace","f_replace","f_replace","f_swap","f_swap","f_swap","f_swap","from","from","from2","from2","from_arg_matches","from_arg_matches_mut","from_cow_borrow","from_cow_owned","from_ref","group_id","into","into","into_cow_borrow","into_cow_owned","loglevel","partial_cmp","pcileech_device","poll_in_range","poll_rate","port","port_in_range","r_borrow","r_to_owned","to_owned","to_possible_value","try_from","try_from","try_into","try_into","type_id","type_id","update_from_arg_matches","update_from_arg_matches_mut","valid_path","value_variants","version","vzip","vzip","web_path","Bomb","BombData","EntityData","Player","PlayerData","RadarData","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","deref_borrowed","deref_borrowed","deref_borrowed","deref_borrowed","deref_owned","deref_owned","deref_owned","deref_owned","deserialize","deserialize","deserialize","deserialize","empty","f_get","f_get","f_get","f_get","f_get_copy","f_get_copy","f_get_copy","f_get_copy","f_get_copy","f_get_copy","f_get_copy","f_get_copy","f_get_mut","f_get_mut","f_get_mut","f_get_mut","f_get_mut_ptr","f_get_mut_ptr","f_get_mut_ptr","f_get_mut_ptr","f_get_ptr","f_get_ptr","f_get_ptr","f_get_ptr","f_replace","f_replace","f_replace","f_replace","f_replace","f_replace","f_replace","f_replace","f_swap","f_swap","f_swap","f_swap","f_swap","f_swap","f_swap","f_swap","fmt","fmt","fmt","fmt","from","from","from","from","from2","from2","from2","from2","from_cow_borrow","from_cow_borrow","from_cow_borrow","from_cow_borrow","from_cow_owned","from_cow_owned","from_cow_owned","from_cow_owned","from_ref","from_ref","from_ref","from_ref","has_bomb","ingame","into","into","into","into","into_cow_borrow","into_cow_borrow","into_cow_borrow","into_cow_borrow","into_cow_owned","into_cow_owned","into_cow_owned","into_cow_owned","is_planted","map_name","new","new","new","player_data","player_type","pos","pos","r_borrow","r_borrow","r_borrow","r_borrow","r_to_owned","r_to_owned","r_to_owned","r_to_owned","serialize","serialize","serialize","serialize","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","yaw","ONCE","SECOND_AS_NANO","cache","run","Bomb","Cache","CacheBuilder","CachedEntity","Player","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","build","clone","clone_into","deref_borrowed","deref_owned","entity_cache","entity_cache","entity_cache","entity_cache","entity_list","entity_list","entity_list","entity_list","f_get","f_get","f_get","f_get_copy","f_get_copy","f_get_copy","f_get_copy","f_get_copy","f_get_copy","f_get_mut","f_get_mut","f_get_mut","f_get_mut_ptr","f_get_mut_ptr","f_get_mut_ptr","f_get_ptr","f_get_ptr","f_get_ptr","f_replace","f_replace","f_replace","f_replace","f_replace","f_replace","f_swap","f_swap","f_swap","f_swap","f_swap","f_swap","from","from","from","from2","from2","from2","from_cow_borrow","from_cow_owned","from_ref","into","into","into","into_cow_borrow","into_cow_owned","is_valid","map_name","map_name","map_name","map_name","new","new_invalid","r_borrow","r_to_owned","timestamp","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","player_type","ptr","ptr","AppState","borrow","borrow_mut","clone","clone_into","data_lock","deref_borrowed","deref_owned","f_get","f_get_copy","f_get_copy","f_get_mut","f_get_mut_ptr","f_get_ptr","f_replace","f_replace","f_swap","f_swap","from","from2","from_cow_borrow","from_cow_owned","from_ref","handle_socket","into","into_cow_borrow","into_cow_owned","r_borrow","r_to_owned","run","to_owned","try_from","try_into","type_id","vzip","ws_handler"],"q":[[0,"radarflow"],[5,"radarflow::cli"],[93,"radarflow::comms"],[248,"radarflow::dma"],[252,"radarflow::dma::cache"],[343,"radarflow::dma::cache::CachedEntity"],[346,"radarflow::websocket"],[382,"anyhow"],[383,"clap_builder::builder::command"],[384,"core::cmp"],[385,"repr_offset::alignment"],[386,"repr_offset::struct_field_offset"],[387,"core::marker"],[388,"repr_offset::alignment"],[389,"clap_builder"],[390,"core::result"],[391,"clap_builder::util::id"],[392,"core::option"],[393,"alloc::string"],[394,"clap_builder::builder::possible_value"],[395,"core::any"],[396,"std::path"],[397,"serde::de"],[398,"core::fmt"],[399,"core::fmt"],[400,"csflow::enums::player_type"],[401,"alloc::vec"],[402,"serde::ser"],[403,"csflow::context"],[404,"tokio::sync::rwlock"],[405,"alloc::sync"],[406,"memflow::types::address"],[407,"axum::extract::ws"],[408,"axum::extract::ws"],[409,"axum_core::response"]],"d":["","","","","","","","","","Wrapper because log::LevelFilter doesn’t implement …","","","","","","","","","","","","","","","","","Specifies the connector type for DMA","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","Calls U::from(self).","Calls U::from(self).","","","Verbosity level for logging to the console","","Name of the Pcileech device","","Polling frequency in times per second for the DMA thread","Port number for the Webserver to run on","","","","","","","","","","","","","","","","","","","Path to the directory served by the Webserver","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns empty RadarData, it’s also the same data that …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","","","","Calls U::from(self).","","","","","","","","","","",""],"i":[0,0,0,0,0,0,4,4,4,0,0,0,4,4,12,12,12,4,12,4,4,4,4,12,12,4,12,4,4,4,4,4,4,4,12,4,12,12,4,4,12,4,12,4,12,4,12,12,4,4,12,12,4,4,12,4,12,4,12,12,4,4,4,12,12,4,4,4,12,4,12,0,12,12,0,4,4,4,4,12,4,12,4,12,4,12,12,0,4,0,12,4,12,26,0,0,26,0,0,24,25,26,27,24,25,26,27,24,25,26,27,24,25,26,27,24,25,26,27,24,25,26,27,24,25,26,27,27,24,25,26,27,24,24,25,25,26,26,27,27,24,25,26,27,24,25,26,27,24,25,26,27,24,24,25,25,26,26,27,27,24,24,25,25,26,26,27,27,24,25,26,27,24,25,26,27,24,25,26,27,24,25,26,27,24,25,26,27,24,25,26,27,24,27,24,25,26,27,24,25,26,27,24,25,26,27,25,27,24,25,27,27,24,24,25,24,25,26,27,24,25,26,27,24,25,26,27,24,25,26,27,24,25,26,27,24,25,26,27,24,25,26,27,24,25,26,27,24,0,0,0,0,41,0,0,0,41,40,39,41,40,39,41,39,41,41,41,41,40,39,40,39,40,39,40,39,40,39,41,40,40,39,39,41,41,40,39,41,40,39,41,40,39,41,40,40,39,39,41,41,40,40,39,39,41,41,40,39,41,40,39,41,41,41,41,40,39,41,41,41,40,40,39,40,39,39,40,41,41,40,41,40,39,41,40,39,41,40,39,41,40,39,41,48,49,48,0,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,0,43,43,43,43,43,0,43,43,43,43,43,0],"f":[0,0,0,[[],[[2,[1]]]],0,0,0,0,0,0,0,0,0,0,[3,3],[3,3],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[4,4],[[-1,-2],1,[],[]],[[4,4],5],[[],3],[[],3],[[-1,-2],5,[],[]],0,[[],4],[[],-1,[]],[[],-1,[]],[[4,4],6],[[-1,-2],6,[],[]],[[-1,-2],6,[],[]],[[-1,-2],6,[],[]],[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,7]]],-3,[],[],9],[[-1,[8,[-2,-3,10]]],-3,[],[],9],[[-1,[8,[-2,-3,10]]],-3,[],[],9],[[-1,[8,[-2,-3,7]]],-3,[],[],9],[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,10]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,7]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,7]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,10]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,10]],-2],1,[],[],[]],[[-1,[8,[-2,-3,7]],-2],1,[],[],[]],[[-1,[8,[-2,-3,10]],-2],1,[],[],[]],[[-1,[8,[-2,-3,7]],-2],1,[],[],[]],[-1,-1,[]],[-1,-1,[]],[-1,-2,[],[]],[-1,-2,[],[]],[11,[[14,[12,13]]]],[11,[[14,[12,13]]]],[-1,[],[]],[[]],[-1,-1,[]],[[],[[16,[15]]]],[-1,-2,[],[]],[-1,-2,[],[]],[[],-1,[]],[[]],0,[[4,4],[[16,[5]]]],0,[17,[[14,[18,19]]]],0,0,[17,[[14,[18,19]]]],[[]],[[]],[-1,-2,[],[]],[4,[[16,[20]]]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,21,[]],[-1,21,[]],[[12,11],[[14,[1,13]]]],[[12,11],[[14,[1,13]]]],[17,[[14,[22,19]]]],[[],[[23,[4]]]],[[],19],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[24,24],[25,25],[26,26],[27,27],[[-1,-2],1,[],[]],[[-1,-2],1,[],[]],[[-1,-2],1,[],[]],[[-1,-2],1,[],[]],[[],-1,[]],[[],-1,[]],[[],-1,[]],[[],-1,[]],[[],-1,[]],[[],-1,[]],[[],-1,[]],[[],-1,[]],[-1,[[14,[24]]],28],[-1,[[14,[25]]],28],[-1,[[14,[26]]],28],[-1,[[14,[27]]],28],[[],27],[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,10]]],-3,[],[],9],[[-1,[8,[-2,-3,7]]],-3,[],[],9],[[-1,[8,[-2,-3,7]]],-3,[],[],9],[[-1,[8,[-2,-3,10]]],-3,[],[],9],[[-1,[8,[-2,-3,10]]],-3,[],[],9],[[-1,[8,[-2,-3,7]]],-3,[],[],9],[[-1,[8,[-2,-3,7]]],-3,[],[],9],[[-1,[8,[-2,-3,10]]],-3,[],[],9],[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,7]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,10]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,10]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,7]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,10]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,7]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,10]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,7]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,10]],-2],1,[],[],[]],[[-1,[8,[-2,-3,7]],-2],1,[],[],[]],[[-1,[8,[-2,-3,7]],-2],1,[],[],[]],[[-1,[8,[-2,-3,10]],-2],1,[],[],[]],[[-1,[8,[-2,-3,7]],-2],1,[],[],[]],[[-1,[8,[-2,-3,10]],-2],1,[],[],[]],[[-1,[8,[-2,-3,10]],-2],1,[],[],[]],[[-1,[8,[-2,-3,7]],-2],1,[],[],[]],[[24,29],30],[[25,29],30],[[26,29],30],[[27,29],30],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[],[]],[-1,[],[]],[-1,[],[]],[-1,[],[]],[[]],[[]],[[]],[[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[],-1,[]],[[],-1,[]],[[],-1,[]],[[],-1,[]],[[]],[[]],[[]],[[]],0,0,[[31,32,33,6],24],[[31,6],25],[[6,19,[34,[26]]],27],0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[24,-1],14,35],[[25,-1],14,35],[[26,-1],14,35],[[27,-1],14,35],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,21,[]],[-1,21,[]],[-1,21,[]],[-1,21,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,[[36,19,18,[38,[[37,[27]]]]],[[2,[1]]]],0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[39,[[2,[40]]]],[41,41],[[-1,-2],1,[],[]],[[],-1,[]],[[],-1,[]],[40,[[34,[41]]]],[[39,[34,[41]]],39],0,0,[40,42],[[39,42],39],0,0,[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,10]]],-3,[],[],9],[[-1,[8,[-2,-3,7]]],-3,[],[],9],[[-1,[8,[-2,-3,7]]],-3,[],[],9],[[-1,[8,[-2,-3,10]]],-3,[],[],9],[[-1,[8,[-2,-3,10]]],-3,[],[],9],[[-1,[8,[-2,-3,7]]],-3,[],[],9],[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,7]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,10]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,10]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,7]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,7]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,10]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,7]],-2],1,[],[],[]],[[-1,[8,[-2,-3,10]],-2],1,[],[],[]],[[-1,[8,[-2,-3,10]],-2],1,[],[],[]],[[-1,[8,[-2,-3,7]],-2],1,[],[],[]],[[-1,[8,[-2,-3,10]],-2],1,[],[],[]],[[-1,[8,[-2,-3,7]],-2],1,[],[],[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[],[]],[[]],[-1,-1,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[],-1,[]],[[]],[40,6],[40,19],[[39,19],39],0,0,[[],39],[[],40],[[]],[[]],0,[-1,-2,[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,21,[]],[-1,21,[]],[-1,21,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[43,43],[[-1,-2],1,[],[]],0,[[],-1,[]],[[],-1,[]],[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,7]]],-3,[],[],9],[[-1,[8,[-2,-3,10]]],-3,[],[],9],[[-1,[8,[-2,-3,7]]],-3,[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,-4]]],[],[],[],[],[]],[[-1,[8,[-2,-3,7]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,10]],-3],-3,[],[],[]],[[-1,[8,[-2,-3,7]],-2],1,[],[],[]],[[-1,[8,[-2,-3,10]],-2],1,[],[],[]],[-1,-1,[]],[-1,-2,[],[]],[-1,[],[]],[[]],[-1,-1,[]],[[44,43],1],[-1,-2,[],[]],[[],-1,[]],[[]],[[]],[[]],[[22,18,[38,[[37,[27]]]]],[[2,[1]]]],[-1,-2,[],[]],[-1,[[14,[-2]]],[],[]],[-1,[[14,[-2]]],[],[]],[-1,21,[]],[-1,-2,[],[]],[[45,[46,[43]]],47]],"c":[],"p":[[15,"tuple"],[6,"Result",382],[3,"Command",383],[4,"Loglevel",5],[4,"Ordering",384],[15,"bool"],[3,"Aligned",385],[3,"FieldOffset",386],[8,"Copy",387],[3,"Unaligned",385],[3,"ArgMatches",388],[3,"Cli",5],[6,"Error",389],[4,"Result",390],[3,"Id",391],[4,"Option",392],[15,"str"],[15,"u16"],[3,"String",393],[3,"PossibleValue",394],[3,"TypeId",395],[3,"PathBuf",396],[15,"slice"],[3,"PlayerData",93],[3,"BombData",93],[4,"EntityData",93],[3,"RadarData",93],[8,"Deserializer",397],[3,"Formatter",398],[6,"Result",398],[3,"Vec3",399],[15,"f32"],[4,"PlayerType",400],[3,"Vec",401],[8,"Serializer",402],[4,"Connector",403],[3,"RwLock",404],[3,"Arc",405],[3,"CacheBuilder",252],[3,"Cache",252],[4,"CachedEntity",252],[3,"Address",406],[3,"AppState",346],[3,"WebSocket",407],[3,"WebSocketUpgrade",407],[3,"State",408],[6,"Response",409],[13,"Player",343],[13,"Bomb",343]]}\ -}'); -if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)}; -if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex}; diff --git a/docs/settings.html b/docs/settings.html deleted file mode 100644 index 759e0d5..0000000 --- a/docs/settings.html +++ /dev/null @@ -1 +0,0 @@ -Rustdoc settings

Rustdoc settings

Back
\ No newline at end of file diff --git a/docs/src-files.js b/docs/src-files.js deleted file mode 100644 index f3be137..0000000 --- a/docs/src-files.js +++ /dev/null @@ -1,5 +0,0 @@ -var srcIndex = JSON.parse('{\ -"csflow":["",[["cs2dumper",[],["client.rs","engine2.rs","mod.rs","offsets.rs"]],["enums",[],["mod.rs","player_type.rs","teamid.rs"]],["structs",[["entity",[],["base_entity.rs","mod.rs","player_controller.rs","player_pawn.rs"]]],["mod.rs","vec3.rs"]],["traits",[],["base_entity.rs","memory_class.rs","mod.rs"]]],["context.rs","error.rs","lib.rs"]],\ -"radarflow":["",[["dma",[],["cache.rs","mod.rs"]]],["cli.rs","comms.rs","main.rs","websocket.rs"]]\ -}'); -createSrcSidebar(); diff --git a/docs/src/csflow/context.rs.html b/docs/src/csflow/context.rs.html deleted file mode 100644 index 07829d6..0000000 --- a/docs/src/csflow/context.rs.html +++ /dev/null @@ -1,260 +0,0 @@ -context.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-
use memflow::{plugins::{IntoProcessInstanceArcBox, Inventory, ConnectorArgs, args::Args}, os::{ModuleInfo, Os, Process}, mem::MemoryView, types::Address};
-
-use crate::{error::Error, structs::{CPlayerController, CBaseEntity}, cs2dumper, traits::MemoryClass};
-
-pub struct CheatCtx {
-    pub process: IntoProcessInstanceArcBox<'static>,
-    pub client_module: ModuleInfo,
-    pub engine_module: ModuleInfo,
-}
-
-impl CheatCtx {
-    fn check_version(&mut self) -> Result<(), Error> {
-        let game_build_number: u32 = self.process.read(self.engine_module.base + cs2dumper::offsets::engine2_dll::dwBuildNumber)?;
-        let offset_build_number = cs2dumper::offsets::game_info::buildNumber;
-
-        if game_build_number as usize != offset_build_number {
-            return Err(Error::GameVersionMismatch(game_build_number as usize, offset_build_number))
-        }
-
-        Ok(())
-    }
-
-    pub fn setup(connector: Connector, pcileech_device: String) -> Result<CheatCtx, Error> {
-        let inventory = Inventory::scan();
-
-        let os = { 
-            if connector == Connector::Pcileech {
-                let args = Args::new()
-                    .insert("device", &pcileech_device);
-
-                let connector_args = ConnectorArgs::new(None, args, None);                
-
-                inventory.builder()
-                    .connector(&connector.to_string())
-                    .args(connector_args)
-                    .os("win32")
-                    .build()?
-            } else {
-                inventory.builder()
-                .connector(&connector.to_string())
-                .os("win32")
-                .build()?
-            }
-        };
-
-        let mut process = os.into_process_by_name("cs2.exe")?;
-
-        let client_module = process.module_by_name("client.dll")?;
-
-        let engine_module = process.module_by_name("engine2.dll")?;
-
-        let mut ctx = Self {
-            process,
-            client_module,
-            engine_module,
-        };
-
-        ctx.check_version()?;
-
-        Ok(ctx)
-    }
-
-    pub fn get_local(&mut self) -> Result<CPlayerController, Error> {
-        let ptr = self.process.read_addr64(self.client_module.base + cs2dumper::offsets::client_dll::dwLocalPlayerController)?;
-        Ok(CPlayerController::new(ptr))
-    }
-    
-    pub fn get_plantedc4(&mut self) -> Result<CBaseEntity, Error> {
-        let ptr = self.process.read_addr64(self.client_module.base + cs2dumper::offsets::client_dll::dwPlantedC4)?;
-        let ptr2 = self.process.read_addr64(ptr)?;
-        Ok(CBaseEntity::new(ptr2))
-    }
-    
-    pub fn is_bomb_planted(&mut self) -> Result<bool, Error> {
-        let game_rules = self.process.read_addr64(self.client_module.base + cs2dumper::offsets::client_dll::dwGameRules)?;
-        let data: u8 = self.process.read(game_rules + cs2dumper::client::C_CSGameRules::m_bBombPlanted)?;
-        Ok(data != 0)
-    }
-    
-    pub fn is_bomb_dropped(&mut self) -> Result<bool, Error> {
-        let game_rules = self.process.read_addr64(self.client_module.base + cs2dumper::offsets::client_dll::dwGameRules)?;
-        let data: u8 = self.process.read(game_rules + cs2dumper::client::C_CSGameRules::m_bBombDropped)?;
-        Ok(data != 0)
-    }
-
-    pub fn get_entity_list(&mut self) -> Result<Address, Error> {
-        let ptr = self.process.read_addr64(self.client_module.base + cs2dumper::offsets::client_dll::dwEntityList)?;
-        Ok(ptr)
-    }
-    
-    pub fn get_globals(&mut self) -> Result<Address, Error> {
-        let ptr = self.process.read_addr64(self.client_module.base + cs2dumper::offsets::client_dll::dwGlobalVars)?;
-        Ok(ptr)
-    }
-    
-    pub fn map_name(&mut self, global_vars: Address) -> Result<String, Error> {
-        let ptr = self.process.read_addr64(global_vars + 0x188)?;
-        Ok(self.process.read_char_string_n(ptr, 32)?)
-    }
-    
-    pub fn highest_entity_index(&mut self) -> Result<i32, Error> {
-        let game_entity_system = self.process.read_addr64(self.client_module.base + cs2dumper::offsets::client_dll::dwGameEntitySystem)?;
-        let highest_index = self.process.read(game_entity_system + cs2dumper::offsets::client_dll::dwGameEntitySystem_getHighestEntityIndex)?;
-        Ok(highest_index)
-    }
-    
-    pub fn network_is_ingame(&mut self) -> Result<bool, Error> {
-        let ptr = self.process.read_addr64(self.engine_module.base + cs2dumper::offsets::engine2_dll::dwNetworkGameClient)?;
-        let signonstate: i32 = self.process.read(ptr + cs2dumper::offsets::engine2_dll::dwNetworkGameClient_signOnState)?;
-        Ok(signonstate == 6)
-    }
-}
-
-#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, clap::ValueEnum, Default)]
-pub enum Connector {
-    #[default]
-    Qemu,
-    Kvm,
-    Pcileech
-}
-
-impl ToString for Connector {
-    fn to_string(&self) -> String {
-        match self {
-            Connector::Qemu => String::from("qemu"),
-            Connector::Kvm => String::from("kvm"),
-            Connector::Pcileech => String::from("pcileech"),
-        }
-    }
-}
\ No newline at end of file diff --git a/docs/src/csflow/cs2dumper/client.rs.html b/docs/src/csflow/cs2dumper/client.rs.html deleted file mode 100644 index d4a037b..0000000 --- a/docs/src/csflow/cs2dumper/client.rs.html +++ /dev/null @@ -1,8340 +0,0 @@ -client.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
-178
-179
-180
-181
-182
-183
-184
-185
-186
-187
-188
-189
-190
-191
-192
-193
-194
-195
-196
-197
-198
-199
-200
-201
-202
-203
-204
-205
-206
-207
-208
-209
-210
-211
-212
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-644
-645
-646
-647
-648
-649
-650
-651
-652
-653
-654
-655
-656
-657
-658
-659
-660
-661
-662
-663
-664
-665
-666
-667
-668
-669
-670
-671
-672
-673
-674
-675
-676
-677
-678
-679
-680
-681
-682
-683
-684
-685
-686
-687
-688
-689
-690
-691
-692
-693
-694
-695
-696
-697
-698
-699
-700
-701
-702
-703
-704
-705
-706
-707
-708
-709
-710
-711
-712
-713
-714
-715
-716
-717
-718
-719
-720
-721
-722
-723
-724
-725
-726
-727
-728
-729
-730
-731
-732
-733
-734
-735
-736
-737
-738
-739
-740
-741
-742
-743
-744
-745
-746
-747
-748
-749
-750
-751
-752
-753
-754
-755
-756
-757
-758
-759
-760
-761
-762
-763
-764
-765
-766
-767
-768
-769
-770
-771
-772
-773
-774
-775
-776
-777
-778
-779
-780
-781
-782
-783
-784
-785
-786
-787
-788
-789
-790
-791
-792
-793
-794
-795
-796
-797
-798
-799
-800
-801
-802
-803
-804
-805
-806
-807
-808
-809
-810
-811
-812
-813
-814
-815
-816
-817
-818
-819
-820
-821
-822
-823
-824
-825
-826
-827
-828
-829
-830
-831
-832
-833
-834
-835
-836
-837
-838
-839
-840
-841
-842
-843
-844
-845
-846
-847
-848
-849
-850
-851
-852
-853
-854
-855
-856
-857
-858
-859
-860
-861
-862
-863
-864
-865
-866
-867
-868
-869
-870
-871
-872
-873
-874
-875
-876
-877
-878
-879
-880
-881
-882
-883
-884
-885
-886
-887
-888
-889
-890
-891
-892
-893
-894
-895
-896
-897
-898
-899
-900
-901
-902
-903
-904
-905
-906
-907
-908
-909
-910
-911
-912
-913
-914
-915
-916
-917
-918
-919
-920
-921
-922
-923
-924
-925
-926
-927
-928
-929
-930
-931
-932
-933
-934
-935
-936
-937
-938
-939
-940
-941
-942
-943
-944
-945
-946
-947
-948
-949
-950
-951
-952
-953
-954
-955
-956
-957
-958
-959
-960
-961
-962
-963
-964
-965
-966
-967
-968
-969
-970
-971
-972
-973
-974
-975
-976
-977
-978
-979
-980
-981
-982
-983
-984
-985
-986
-987
-988
-989
-990
-991
-992
-993
-994
-995
-996
-997
-998
-999
-1000
-1001
-1002
-1003
-1004
-1005
-1006
-1007
-1008
-1009
-1010
-1011
-1012
-1013
-1014
-1015
-1016
-1017
-1018
-1019
-1020
-1021
-1022
-1023
-1024
-1025
-1026
-1027
-1028
-1029
-1030
-1031
-1032
-1033
-1034
-1035
-1036
-1037
-1038
-1039
-1040
-1041
-1042
-1043
-1044
-1045
-1046
-1047
-1048
-1049
-1050
-1051
-1052
-1053
-1054
-1055
-1056
-1057
-1058
-1059
-1060
-1061
-1062
-1063
-1064
-1065
-1066
-1067
-1068
-1069
-1070
-1071
-1072
-1073
-1074
-1075
-1076
-1077
-1078
-1079
-1080
-1081
-1082
-1083
-1084
-1085
-1086
-1087
-1088
-1089
-1090
-1091
-1092
-1093
-1094
-1095
-1096
-1097
-1098
-1099
-1100
-1101
-1102
-1103
-1104
-1105
-1106
-1107
-1108
-1109
-1110
-1111
-1112
-1113
-1114
-1115
-1116
-1117
-1118
-1119
-1120
-1121
-1122
-1123
-1124
-1125
-1126
-1127
-1128
-1129
-1130
-1131
-1132
-1133
-1134
-1135
-1136
-1137
-1138
-1139
-1140
-1141
-1142
-1143
-1144
-1145
-1146
-1147
-1148
-1149
-1150
-1151
-1152
-1153
-1154
-1155
-1156
-1157
-1158
-1159
-1160
-1161
-1162
-1163
-1164
-1165
-1166
-1167
-1168
-1169
-1170
-1171
-1172
-1173
-1174
-1175
-1176
-1177
-1178
-1179
-1180
-1181
-1182
-1183
-1184
-1185
-1186
-1187
-1188
-1189
-1190
-1191
-1192
-1193
-1194
-1195
-1196
-1197
-1198
-1199
-1200
-1201
-1202
-1203
-1204
-1205
-1206
-1207
-1208
-1209
-1210
-1211
-1212
-1213
-1214
-1215
-1216
-1217
-1218
-1219
-1220
-1221
-1222
-1223
-1224
-1225
-1226
-1227
-1228
-1229
-1230
-1231
-1232
-1233
-1234
-1235
-1236
-1237
-1238
-1239
-1240
-1241
-1242
-1243
-1244
-1245
-1246
-1247
-1248
-1249
-1250
-1251
-1252
-1253
-1254
-1255
-1256
-1257
-1258
-1259
-1260
-1261
-1262
-1263
-1264
-1265
-1266
-1267
-1268
-1269
-1270
-1271
-1272
-1273
-1274
-1275
-1276
-1277
-1278
-1279
-1280
-1281
-1282
-1283
-1284
-1285
-1286
-1287
-1288
-1289
-1290
-1291
-1292
-1293
-1294
-1295
-1296
-1297
-1298
-1299
-1300
-1301
-1302
-1303
-1304
-1305
-1306
-1307
-1308
-1309
-1310
-1311
-1312
-1313
-1314
-1315
-1316
-1317
-1318
-1319
-1320
-1321
-1322
-1323
-1324
-1325
-1326
-1327
-1328
-1329
-1330
-1331
-1332
-1333
-1334
-1335
-1336
-1337
-1338
-1339
-1340
-1341
-1342
-1343
-1344
-1345
-1346
-1347
-1348
-1349
-1350
-1351
-1352
-1353
-1354
-1355
-1356
-1357
-1358
-1359
-1360
-1361
-1362
-1363
-1364
-1365
-1366
-1367
-1368
-1369
-1370
-1371
-1372
-1373
-1374
-1375
-1376
-1377
-1378
-1379
-1380
-1381
-1382
-1383
-1384
-1385
-1386
-1387
-1388
-1389
-1390
-1391
-1392
-1393
-1394
-1395
-1396
-1397
-1398
-1399
-1400
-1401
-1402
-1403
-1404
-1405
-1406
-1407
-1408
-1409
-1410
-1411
-1412
-1413
-1414
-1415
-1416
-1417
-1418
-1419
-1420
-1421
-1422
-1423
-1424
-1425
-1426
-1427
-1428
-1429
-1430
-1431
-1432
-1433
-1434
-1435
-1436
-1437
-1438
-1439
-1440
-1441
-1442
-1443
-1444
-1445
-1446
-1447
-1448
-1449
-1450
-1451
-1452
-1453
-1454
-1455
-1456
-1457
-1458
-1459
-1460
-1461
-1462
-1463
-1464
-1465
-1466
-1467
-1468
-1469
-1470
-1471
-1472
-1473
-1474
-1475
-1476
-1477
-1478
-1479
-1480
-1481
-1482
-1483
-1484
-1485
-1486
-1487
-1488
-1489
-1490
-1491
-1492
-1493
-1494
-1495
-1496
-1497
-1498
-1499
-1500
-1501
-1502
-1503
-1504
-1505
-1506
-1507
-1508
-1509
-1510
-1511
-1512
-1513
-1514
-1515
-1516
-1517
-1518
-1519
-1520
-1521
-1522
-1523
-1524
-1525
-1526
-1527
-1528
-1529
-1530
-1531
-1532
-1533
-1534
-1535
-1536
-1537
-1538
-1539
-1540
-1541
-1542
-1543
-1544
-1545
-1546
-1547
-1548
-1549
-1550
-1551
-1552
-1553
-1554
-1555
-1556
-1557
-1558
-1559
-1560
-1561
-1562
-1563
-1564
-1565
-1566
-1567
-1568
-1569
-1570
-1571
-1572
-1573
-1574
-1575
-1576
-1577
-1578
-1579
-1580
-1581
-1582
-1583
-1584
-1585
-1586
-1587
-1588
-1589
-1590
-1591
-1592
-1593
-1594
-1595
-1596
-1597
-1598
-1599
-1600
-1601
-1602
-1603
-1604
-1605
-1606
-1607
-1608
-1609
-1610
-1611
-1612
-1613
-1614
-1615
-1616
-1617
-1618
-1619
-1620
-1621
-1622
-1623
-1624
-1625
-1626
-1627
-1628
-1629
-1630
-1631
-1632
-1633
-1634
-1635
-1636
-1637
-1638
-1639
-1640
-1641
-1642
-1643
-1644
-1645
-1646
-1647
-1648
-1649
-1650
-1651
-1652
-1653
-1654
-1655
-1656
-1657
-1658
-1659
-1660
-1661
-1662
-1663
-1664
-1665
-1666
-1667
-1668
-1669
-1670
-1671
-1672
-1673
-1674
-1675
-1676
-1677
-1678
-1679
-1680
-1681
-1682
-1683
-1684
-1685
-1686
-1687
-1688
-1689
-1690
-1691
-1692
-1693
-1694
-1695
-1696
-1697
-1698
-1699
-1700
-1701
-1702
-1703
-1704
-1705
-1706
-1707
-1708
-1709
-1710
-1711
-1712
-1713
-1714
-1715
-1716
-1717
-1718
-1719
-1720
-1721
-1722
-1723
-1724
-1725
-1726
-1727
-1728
-1729
-1730
-1731
-1732
-1733
-1734
-1735
-1736
-1737
-1738
-1739
-1740
-1741
-1742
-1743
-1744
-1745
-1746
-1747
-1748
-1749
-1750
-1751
-1752
-1753
-1754
-1755
-1756
-1757
-1758
-1759
-1760
-1761
-1762
-1763
-1764
-1765
-1766
-1767
-1768
-1769
-1770
-1771
-1772
-1773
-1774
-1775
-1776
-1777
-1778
-1779
-1780
-1781
-1782
-1783
-1784
-1785
-1786
-1787
-1788
-1789
-1790
-1791
-1792
-1793
-1794
-1795
-1796
-1797
-1798
-1799
-1800
-1801
-1802
-1803
-1804
-1805
-1806
-1807
-1808
-1809
-1810
-1811
-1812
-1813
-1814
-1815
-1816
-1817
-1818
-1819
-1820
-1821
-1822
-1823
-1824
-1825
-1826
-1827
-1828
-1829
-1830
-1831
-1832
-1833
-1834
-1835
-1836
-1837
-1838
-1839
-1840
-1841
-1842
-1843
-1844
-1845
-1846
-1847
-1848
-1849
-1850
-1851
-1852
-1853
-1854
-1855
-1856
-1857
-1858
-1859
-1860
-1861
-1862
-1863
-1864
-1865
-1866
-1867
-1868
-1869
-1870
-1871
-1872
-1873
-1874
-1875
-1876
-1877
-1878
-1879
-1880
-1881
-1882
-1883
-1884
-1885
-1886
-1887
-1888
-1889
-1890
-1891
-1892
-1893
-1894
-1895
-1896
-1897
-1898
-1899
-1900
-1901
-1902
-1903
-1904
-1905
-1906
-1907
-1908
-1909
-1910
-1911
-1912
-1913
-1914
-1915
-1916
-1917
-1918
-1919
-1920
-1921
-1922
-1923
-1924
-1925
-1926
-1927
-1928
-1929
-1930
-1931
-1932
-1933
-1934
-1935
-1936
-1937
-1938
-1939
-1940
-1941
-1942
-1943
-1944
-1945
-1946
-1947
-1948
-1949
-1950
-1951
-1952
-1953
-1954
-1955
-1956
-1957
-1958
-1959
-1960
-1961
-1962
-1963
-1964
-1965
-1966
-1967
-1968
-1969
-1970
-1971
-1972
-1973
-1974
-1975
-1976
-1977
-1978
-1979
-1980
-1981
-1982
-1983
-1984
-1985
-1986
-1987
-1988
-1989
-1990
-1991
-1992
-1993
-1994
-1995
-1996
-1997
-1998
-1999
-2000
-2001
-2002
-2003
-2004
-2005
-2006
-2007
-2008
-2009
-2010
-2011
-2012
-2013
-2014
-2015
-2016
-2017
-2018
-2019
-2020
-2021
-2022
-2023
-2024
-2025
-2026
-2027
-2028
-2029
-2030
-2031
-2032
-2033
-2034
-2035
-2036
-2037
-2038
-2039
-2040
-2041
-2042
-2043
-2044
-2045
-2046
-2047
-2048
-2049
-2050
-2051
-2052
-2053
-2054
-2055
-2056
-2057
-2058
-2059
-2060
-2061
-2062
-2063
-2064
-2065
-2066
-2067
-2068
-2069
-2070
-2071
-2072
-2073
-2074
-2075
-2076
-2077
-2078
-2079
-2080
-2081
-2082
-2083
-2084
-2085
-2086
-2087
-2088
-2089
-2090
-2091
-2092
-2093
-2094
-2095
-2096
-2097
-2098
-2099
-2100
-2101
-2102
-2103
-2104
-2105
-2106
-2107
-2108
-2109
-2110
-2111
-2112
-2113
-2114
-2115
-2116
-2117
-2118
-2119
-2120
-2121
-2122
-2123
-2124
-2125
-2126
-2127
-2128
-2129
-2130
-2131
-2132
-2133
-2134
-2135
-2136
-2137
-2138
-2139
-2140
-2141
-2142
-2143
-2144
-2145
-2146
-2147
-2148
-2149
-2150
-2151
-2152
-2153
-2154
-2155
-2156
-2157
-2158
-2159
-2160
-2161
-2162
-2163
-2164
-2165
-2166
-2167
-2168
-2169
-2170
-2171
-2172
-2173
-2174
-2175
-2176
-2177
-2178
-2179
-2180
-2181
-2182
-2183
-2184
-2185
-2186
-2187
-2188
-2189
-2190
-2191
-2192
-2193
-2194
-2195
-2196
-2197
-2198
-2199
-2200
-2201
-2202
-2203
-2204
-2205
-2206
-2207
-2208
-2209
-2210
-2211
-2212
-2213
-2214
-2215
-2216
-2217
-2218
-2219
-2220
-2221
-2222
-2223
-2224
-2225
-2226
-2227
-2228
-2229
-2230
-2231
-2232
-2233
-2234
-2235
-2236
-2237
-2238
-2239
-2240
-2241
-2242
-2243
-2244
-2245
-2246
-2247
-2248
-2249
-2250
-2251
-2252
-2253
-2254
-2255
-2256
-2257
-2258
-2259
-2260
-2261
-2262
-2263
-2264
-2265
-2266
-2267
-2268
-2269
-2270
-2271
-2272
-2273
-2274
-2275
-2276
-2277
-2278
-2279
-2280
-2281
-2282
-2283
-2284
-2285
-2286
-2287
-2288
-2289
-2290
-2291
-2292
-2293
-2294
-2295
-2296
-2297
-2298
-2299
-2300
-2301
-2302
-2303
-2304
-2305
-2306
-2307
-2308
-2309
-2310
-2311
-2312
-2313
-2314
-2315
-2316
-2317
-2318
-2319
-2320
-2321
-2322
-2323
-2324
-2325
-2326
-2327
-2328
-2329
-2330
-2331
-2332
-2333
-2334
-2335
-2336
-2337
-2338
-2339
-2340
-2341
-2342
-2343
-2344
-2345
-2346
-2347
-2348
-2349
-2350
-2351
-2352
-2353
-2354
-2355
-2356
-2357
-2358
-2359
-2360
-2361
-2362
-2363
-2364
-2365
-2366
-2367
-2368
-2369
-2370
-2371
-2372
-2373
-2374
-2375
-2376
-2377
-2378
-2379
-2380
-2381
-2382
-2383
-2384
-2385
-2386
-2387
-2388
-2389
-2390
-2391
-2392
-2393
-2394
-2395
-2396
-2397
-2398
-2399
-2400
-2401
-2402
-2403
-2404
-2405
-2406
-2407
-2408
-2409
-2410
-2411
-2412
-2413
-2414
-2415
-2416
-2417
-2418
-2419
-2420
-2421
-2422
-2423
-2424
-2425
-2426
-2427
-2428
-2429
-2430
-2431
-2432
-2433
-2434
-2435
-2436
-2437
-2438
-2439
-2440
-2441
-2442
-2443
-2444
-2445
-2446
-2447
-2448
-2449
-2450
-2451
-2452
-2453
-2454
-2455
-2456
-2457
-2458
-2459
-2460
-2461
-2462
-2463
-2464
-2465
-2466
-2467
-2468
-2469
-2470
-2471
-2472
-2473
-2474
-2475
-2476
-2477
-2478
-2479
-2480
-2481
-2482
-2483
-2484
-2485
-2486
-2487
-2488
-2489
-2490
-2491
-2492
-2493
-2494
-2495
-2496
-2497
-2498
-2499
-2500
-2501
-2502
-2503
-2504
-2505
-2506
-2507
-2508
-2509
-2510
-2511
-2512
-2513
-2514
-2515
-2516
-2517
-2518
-2519
-2520
-2521
-2522
-2523
-2524
-2525
-2526
-2527
-2528
-2529
-2530
-2531
-2532
-2533
-2534
-2535
-2536
-2537
-2538
-2539
-2540
-2541
-2542
-2543
-2544
-2545
-2546
-2547
-2548
-2549
-2550
-2551
-2552
-2553
-2554
-2555
-2556
-2557
-2558
-2559
-2560
-2561
-2562
-2563
-2564
-2565
-2566
-2567
-2568
-2569
-2570
-2571
-2572
-2573
-2574
-2575
-2576
-2577
-2578
-2579
-2580
-2581
-2582
-2583
-2584
-2585
-2586
-2587
-2588
-2589
-2590
-2591
-2592
-2593
-2594
-2595
-2596
-2597
-2598
-2599
-2600
-2601
-2602
-2603
-2604
-2605
-2606
-2607
-2608
-2609
-2610
-2611
-2612
-2613
-2614
-2615
-2616
-2617
-2618
-2619
-2620
-2621
-2622
-2623
-2624
-2625
-2626
-2627
-2628
-2629
-2630
-2631
-2632
-2633
-2634
-2635
-2636
-2637
-2638
-2639
-2640
-2641
-2642
-2643
-2644
-2645
-2646
-2647
-2648
-2649
-2650
-2651
-2652
-2653
-2654
-2655
-2656
-2657
-2658
-2659
-2660
-2661
-2662
-2663
-2664
-2665
-2666
-2667
-2668
-2669
-2670
-2671
-2672
-2673
-2674
-2675
-2676
-2677
-2678
-2679
-2680
-2681
-2682
-2683
-2684
-2685
-2686
-2687
-2688
-2689
-2690
-2691
-2692
-2693
-2694
-2695
-2696
-2697
-2698
-2699
-2700
-2701
-2702
-2703
-2704
-2705
-2706
-2707
-2708
-2709
-2710
-2711
-2712
-2713
-2714
-2715
-2716
-2717
-2718
-2719
-2720
-2721
-2722
-2723
-2724
-2725
-2726
-2727
-2728
-2729
-2730
-2731
-2732
-2733
-2734
-2735
-2736
-2737
-2738
-2739
-2740
-2741
-2742
-2743
-2744
-2745
-2746
-2747
-2748
-2749
-2750
-2751
-2752
-2753
-2754
-2755
-2756
-2757
-2758
-2759
-2760
-2761
-2762
-2763
-2764
-2765
-2766
-2767
-2768
-2769
-2770
-2771
-2772
-2773
-2774
-2775
-2776
-2777
-2778
-2779
-2780
-2781
-2782
-2783
-2784
-2785
-2786
-2787
-2788
-2789
-2790
-2791
-2792
-2793
-2794
-2795
-2796
-2797
-2798
-2799
-2800
-2801
-2802
-2803
-2804
-2805
-2806
-2807
-2808
-2809
-2810
-2811
-2812
-2813
-2814
-2815
-2816
-2817
-2818
-2819
-2820
-2821
-2822
-2823
-2824
-2825
-2826
-2827
-2828
-2829
-2830
-2831
-2832
-2833
-2834
-2835
-2836
-2837
-2838
-2839
-2840
-2841
-2842
-2843
-2844
-2845
-2846
-2847
-2848
-2849
-2850
-2851
-2852
-2853
-2854
-2855
-2856
-2857
-2858
-2859
-2860
-2861
-2862
-2863
-2864
-2865
-2866
-2867
-2868
-2869
-2870
-2871
-2872
-2873
-2874
-2875
-2876
-2877
-2878
-2879
-2880
-2881
-2882
-2883
-2884
-2885
-2886
-2887
-2888
-2889
-2890
-2891
-2892
-2893
-2894
-2895
-2896
-2897
-2898
-2899
-2900
-2901
-2902
-2903
-2904
-2905
-2906
-2907
-2908
-2909
-2910
-2911
-2912
-2913
-2914
-2915
-2916
-2917
-2918
-2919
-2920
-2921
-2922
-2923
-2924
-2925
-2926
-2927
-2928
-2929
-2930
-2931
-2932
-2933
-2934
-2935
-2936
-2937
-2938
-2939
-2940
-2941
-2942
-2943
-2944
-2945
-2946
-2947
-2948
-2949
-2950
-2951
-2952
-2953
-2954
-2955
-2956
-2957
-2958
-2959
-2960
-2961
-2962
-2963
-2964
-2965
-2966
-2967
-2968
-2969
-2970
-2971
-2972
-2973
-2974
-2975
-2976
-2977
-2978
-2979
-2980
-2981
-2982
-2983
-2984
-2985
-2986
-2987
-2988
-2989
-2990
-2991
-2992
-2993
-2994
-2995
-2996
-2997
-2998
-2999
-3000
-3001
-3002
-3003
-3004
-3005
-3006
-3007
-3008
-3009
-3010
-3011
-3012
-3013
-3014
-3015
-3016
-3017
-3018
-3019
-3020
-3021
-3022
-3023
-3024
-3025
-3026
-3027
-3028
-3029
-3030
-3031
-3032
-3033
-3034
-3035
-3036
-3037
-3038
-3039
-3040
-3041
-3042
-3043
-3044
-3045
-3046
-3047
-3048
-3049
-3050
-3051
-3052
-3053
-3054
-3055
-3056
-3057
-3058
-3059
-3060
-3061
-3062
-3063
-3064
-3065
-3066
-3067
-3068
-3069
-3070
-3071
-3072
-3073
-3074
-3075
-3076
-3077
-3078
-3079
-3080
-3081
-3082
-3083
-3084
-3085
-3086
-3087
-3088
-3089
-3090
-3091
-3092
-3093
-3094
-3095
-3096
-3097
-3098
-3099
-3100
-3101
-3102
-3103
-3104
-3105
-3106
-3107
-3108
-3109
-3110
-3111
-3112
-3113
-3114
-3115
-3116
-3117
-3118
-3119
-3120
-3121
-3122
-3123
-3124
-3125
-3126
-3127
-3128
-3129
-3130
-3131
-3132
-3133
-3134
-3135
-3136
-3137
-3138
-3139
-3140
-3141
-3142
-3143
-3144
-3145
-3146
-3147
-3148
-3149
-3150
-3151
-3152
-3153
-3154
-3155
-3156
-3157
-3158
-3159
-3160
-3161
-3162
-3163
-3164
-3165
-3166
-3167
-3168
-3169
-3170
-3171
-3172
-3173
-3174
-3175
-3176
-3177
-3178
-3179
-3180
-3181
-3182
-3183
-3184
-3185
-3186
-3187
-3188
-3189
-3190
-3191
-3192
-3193
-3194
-3195
-3196
-3197
-3198
-3199
-3200
-3201
-3202
-3203
-3204
-3205
-3206
-3207
-3208
-3209
-3210
-3211
-3212
-3213
-3214
-3215
-3216
-3217
-3218
-3219
-3220
-3221
-3222
-3223
-3224
-3225
-3226
-3227
-3228
-3229
-3230
-3231
-3232
-3233
-3234
-3235
-3236
-3237
-3238
-3239
-3240
-3241
-3242
-3243
-3244
-3245
-3246
-3247
-3248
-3249
-3250
-3251
-3252
-3253
-3254
-3255
-3256
-3257
-3258
-3259
-3260
-3261
-3262
-3263
-3264
-3265
-3266
-3267
-3268
-3269
-3270
-3271
-3272
-3273
-3274
-3275
-3276
-3277
-3278
-3279
-3280
-3281
-3282
-3283
-3284
-3285
-3286
-3287
-3288
-3289
-3290
-3291
-3292
-3293
-3294
-3295
-3296
-3297
-3298
-3299
-3300
-3301
-3302
-3303
-3304
-3305
-3306
-3307
-3308
-3309
-3310
-3311
-3312
-3313
-3314
-3315
-3316
-3317
-3318
-3319
-3320
-3321
-3322
-3323
-3324
-3325
-3326
-3327
-3328
-3329
-3330
-3331
-3332
-3333
-3334
-3335
-3336
-3337
-3338
-3339
-3340
-3341
-3342
-3343
-3344
-3345
-3346
-3347
-3348
-3349
-3350
-3351
-3352
-3353
-3354
-3355
-3356
-3357
-3358
-3359
-3360
-3361
-3362
-3363
-3364
-3365
-3366
-3367
-3368
-3369
-3370
-3371
-3372
-3373
-3374
-3375
-3376
-3377
-3378
-3379
-3380
-3381
-3382
-3383
-3384
-3385
-3386
-3387
-3388
-3389
-3390
-3391
-3392
-3393
-3394
-3395
-3396
-3397
-3398
-3399
-3400
-3401
-3402
-3403
-3404
-3405
-3406
-3407
-3408
-3409
-3410
-3411
-3412
-3413
-3414
-3415
-3416
-3417
-3418
-3419
-3420
-3421
-3422
-3423
-3424
-3425
-3426
-3427
-3428
-3429
-3430
-3431
-3432
-3433
-3434
-3435
-3436
-3437
-3438
-3439
-3440
-3441
-3442
-3443
-3444
-3445
-3446
-3447
-3448
-3449
-3450
-3451
-3452
-3453
-3454
-3455
-3456
-3457
-3458
-3459
-3460
-3461
-3462
-3463
-3464
-3465
-3466
-3467
-3468
-3469
-3470
-3471
-3472
-3473
-3474
-3475
-3476
-3477
-3478
-3479
-3480
-3481
-3482
-3483
-3484
-3485
-3486
-3487
-3488
-3489
-3490
-3491
-3492
-3493
-3494
-3495
-3496
-3497
-3498
-3499
-3500
-3501
-3502
-3503
-3504
-3505
-3506
-3507
-3508
-3509
-3510
-3511
-3512
-3513
-3514
-3515
-3516
-3517
-3518
-3519
-3520
-3521
-3522
-3523
-3524
-3525
-3526
-3527
-3528
-3529
-3530
-3531
-3532
-3533
-3534
-3535
-3536
-3537
-3538
-3539
-3540
-3541
-3542
-3543
-3544
-3545
-3546
-3547
-3548
-3549
-3550
-3551
-3552
-3553
-3554
-3555
-3556
-3557
-3558
-3559
-3560
-3561
-3562
-3563
-3564
-3565
-3566
-3567
-3568
-3569
-3570
-3571
-3572
-3573
-3574
-3575
-3576
-3577
-3578
-3579
-3580
-3581
-3582
-3583
-3584
-3585
-3586
-3587
-3588
-3589
-3590
-3591
-3592
-3593
-3594
-3595
-3596
-3597
-3598
-3599
-3600
-3601
-3602
-3603
-3604
-3605
-3606
-3607
-3608
-3609
-3610
-3611
-3612
-3613
-3614
-3615
-3616
-3617
-3618
-3619
-3620
-3621
-3622
-3623
-3624
-3625
-3626
-3627
-3628
-3629
-3630
-3631
-3632
-3633
-3634
-3635
-3636
-3637
-3638
-3639
-3640
-3641
-3642
-3643
-3644
-3645
-3646
-3647
-3648
-3649
-3650
-3651
-3652
-3653
-3654
-3655
-3656
-3657
-3658
-3659
-3660
-3661
-3662
-3663
-3664
-3665
-3666
-3667
-3668
-3669
-3670
-3671
-3672
-3673
-3674
-3675
-3676
-3677
-3678
-3679
-3680
-3681
-3682
-3683
-3684
-3685
-3686
-3687
-3688
-3689
-3690
-3691
-3692
-3693
-3694
-3695
-3696
-3697
-3698
-3699
-3700
-3701
-3702
-3703
-3704
-3705
-3706
-3707
-3708
-3709
-3710
-3711
-3712
-3713
-3714
-3715
-3716
-3717
-3718
-3719
-3720
-3721
-3722
-3723
-3724
-3725
-3726
-3727
-3728
-3729
-3730
-3731
-3732
-3733
-3734
-3735
-3736
-3737
-3738
-3739
-3740
-3741
-3742
-3743
-3744
-3745
-3746
-3747
-3748
-3749
-3750
-3751
-3752
-3753
-3754
-3755
-3756
-3757
-3758
-3759
-3760
-3761
-3762
-3763
-3764
-3765
-3766
-3767
-3768
-3769
-3770
-3771
-3772
-3773
-3774
-3775
-3776
-3777
-3778
-3779
-3780
-3781
-3782
-3783
-3784
-3785
-3786
-3787
-3788
-3789
-3790
-3791
-3792
-3793
-3794
-3795
-3796
-3797
-3798
-3799
-3800
-3801
-3802
-3803
-3804
-3805
-3806
-3807
-3808
-3809
-3810
-3811
-3812
-3813
-3814
-3815
-3816
-3817
-3818
-3819
-3820
-3821
-3822
-3823
-3824
-3825
-3826
-3827
-3828
-3829
-3830
-3831
-3832
-3833
-3834
-3835
-3836
-3837
-3838
-3839
-3840
-3841
-3842
-3843
-3844
-3845
-3846
-3847
-3848
-3849
-3850
-3851
-3852
-3853
-3854
-3855
-3856
-3857
-3858
-3859
-3860
-3861
-3862
-3863
-3864
-3865
-3866
-3867
-3868
-3869
-3870
-3871
-3872
-3873
-3874
-3875
-3876
-3877
-3878
-3879
-3880
-3881
-3882
-3883
-3884
-3885
-3886
-3887
-3888
-3889
-3890
-3891
-3892
-3893
-3894
-3895
-3896
-3897
-3898
-3899
-3900
-3901
-3902
-3903
-3904
-3905
-3906
-3907
-3908
-3909
-3910
-3911
-3912
-3913
-3914
-3915
-3916
-3917
-3918
-3919
-3920
-3921
-3922
-3923
-3924
-3925
-3926
-3927
-3928
-3929
-3930
-3931
-3932
-3933
-3934
-3935
-3936
-3937
-3938
-3939
-3940
-3941
-3942
-3943
-3944
-3945
-3946
-3947
-3948
-3949
-3950
-3951
-3952
-3953
-3954
-3955
-3956
-3957
-3958
-3959
-3960
-3961
-3962
-3963
-3964
-3965
-3966
-3967
-3968
-3969
-3970
-3971
-3972
-3973
-3974
-3975
-3976
-3977
-3978
-3979
-3980
-3981
-3982
-3983
-3984
-3985
-3986
-3987
-3988
-3989
-3990
-3991
-3992
-3993
-3994
-3995
-3996
-3997
-3998
-3999
-4000
-4001
-4002
-4003
-4004
-4005
-4006
-4007
-4008
-4009
-4010
-4011
-4012
-4013
-4014
-4015
-4016
-4017
-4018
-4019
-4020
-4021
-4022
-4023
-4024
-4025
-4026
-4027
-4028
-4029
-4030
-4031
-4032
-4033
-4034
-4035
-4036
-4037
-4038
-4039
-4040
-4041
-4042
-4043
-4044
-4045
-4046
-4047
-4048
-4049
-4050
-4051
-4052
-4053
-4054
-4055
-4056
-4057
-4058
-4059
-4060
-4061
-4062
-4063
-4064
-4065
-4066
-4067
-4068
-4069
-4070
-4071
-4072
-4073
-4074
-4075
-4076
-4077
-4078
-4079
-4080
-4081
-4082
-4083
-4084
-4085
-4086
-4087
-4088
-4089
-4090
-4091
-4092
-4093
-4094
-4095
-4096
-4097
-4098
-4099
-4100
-4101
-4102
-4103
-4104
-4105
-4106
-4107
-4108
-4109
-4110
-4111
-4112
-4113
-4114
-4115
-4116
-4117
-4118
-4119
-4120
-4121
-4122
-4123
-4124
-4125
-4126
-4127
-4128
-4129
-4130
-4131
-4132
-4133
-4134
-4135
-4136
-4137
-4138
-4139
-4140
-4141
-4142
-4143
-4144
-4145
-4146
-4147
-4148
-4149
-4150
-4151
-4152
-4153
-4154
-4155
-4156
-4157
-4158
-4159
-4160
-4161
-4162
-4163
-4164
-4165
-4166
-4167
-4168
-4169
-4170
-
/*
- * Created using https://github.com/a2x/cs2-dumper
- * Sat, 30 Dec 2023 03:17:26 +0000
- */
-
-#![allow(non_snake_case, non_upper_case_globals)]
-
-pub mod ActiveModelConfig_t {
-    pub const m_Handle: usize = 0x28; // ModelConfigHandle_t
-    pub const m_Name: usize = 0x30; // CUtlSymbolLarge
-    pub const m_AssociatedEntities: usize = 0x38; // C_NetworkUtlVectorBase<CHandle<C_BaseModelEntity>>
-    pub const m_AssociatedEntityNames: usize = 0x50; // C_NetworkUtlVectorBase<CUtlSymbolLarge>
-}
-
-pub mod CAnimGraphNetworkedVariables {
-    pub const m_PredNetBoolVariables: usize = 0x8; // C_NetworkUtlVectorBase<uint32_t>
-    pub const m_PredNetByteVariables: usize = 0x20; // C_NetworkUtlVectorBase<uint8_t>
-    pub const m_PredNetUInt16Variables: usize = 0x38; // C_NetworkUtlVectorBase<uint16_t>
-    pub const m_PredNetIntVariables: usize = 0x50; // C_NetworkUtlVectorBase<int32_t>
-    pub const m_PredNetUInt32Variables: usize = 0x68; // C_NetworkUtlVectorBase<uint32_t>
-    pub const m_PredNetUInt64Variables: usize = 0x80; // C_NetworkUtlVectorBase<uint64_t>
-    pub const m_PredNetFloatVariables: usize = 0x98; // C_NetworkUtlVectorBase<float>
-    pub const m_PredNetVectorVariables: usize = 0xB0; // C_NetworkUtlVectorBase<Vector>
-    pub const m_PredNetQuaternionVariables: usize = 0xC8; // C_NetworkUtlVectorBase<Quaternion>
-    pub const m_OwnerOnlyPredNetBoolVariables: usize = 0xE0; // C_NetworkUtlVectorBase<uint32_t>
-    pub const m_OwnerOnlyPredNetByteVariables: usize = 0xF8; // C_NetworkUtlVectorBase<uint8_t>
-    pub const m_OwnerOnlyPredNetUInt16Variables: usize = 0x110; // C_NetworkUtlVectorBase<uint16_t>
-    pub const m_OwnerOnlyPredNetIntVariables: usize = 0x128; // C_NetworkUtlVectorBase<int32_t>
-    pub const m_OwnerOnlyPredNetUInt32Variables: usize = 0x140; // C_NetworkUtlVectorBase<uint32_t>
-    pub const m_OwnerOnlyPredNetUInt64Variables: usize = 0x158; // C_NetworkUtlVectorBase<uint64_t>
-    pub const m_OwnerOnlyPredNetFloatVariables: usize = 0x170; // C_NetworkUtlVectorBase<float>
-    pub const m_OwnerOnlyPredNetVectorVariables: usize = 0x188; // C_NetworkUtlVectorBase<Vector>
-    pub const m_OwnerOnlyPredNetQuaternionVariables: usize = 0x1A0; // C_NetworkUtlVectorBase<Quaternion>
-    pub const m_nBoolVariablesCount: usize = 0x1B8; // int32_t
-    pub const m_nOwnerOnlyBoolVariablesCount: usize = 0x1BC; // int32_t
-    pub const m_nRandomSeedOffset: usize = 0x1C0; // int32_t
-    pub const m_flLastTeleportTime: usize = 0x1C4; // float
-}
-
-pub mod CAttributeList {
-    pub const m_Attributes: usize = 0x8; // C_UtlVectorEmbeddedNetworkVar<CEconItemAttribute>
-    pub const m_pManager: usize = 0x58; // CAttributeManager*
-}
-
-pub mod CAttributeManager {
-    pub const m_Providers: usize = 0x8; // CUtlVector<CHandle<C_BaseEntity>>
-    pub const m_iReapplyProvisionParity: usize = 0x20; // int32_t
-    pub const m_hOuter: usize = 0x24; // CHandle<C_BaseEntity>
-    pub const m_bPreventLoopback: usize = 0x28; // bool
-    pub const m_ProviderType: usize = 0x2C; // attributeprovidertypes_t
-    pub const m_CachedResults: usize = 0x30; // CUtlVector<CAttributeManager::cached_attribute_float_t>
-}
-
-pub mod CAttributeManager_cached_attribute_float_t {
-    pub const flIn: usize = 0x0; // float
-    pub const iAttribHook: usize = 0x8; // CUtlSymbolLarge
-    pub const flOut: usize = 0x10; // float
-}
-
-pub mod CBaseAnimGraph { // C_BaseModelEntity
-    pub const m_bInitiallyPopulateInterpHistory: usize = 0xCC0; // bool
-    pub const m_bShouldAnimateDuringGameplayPause: usize = 0xCC1; // bool
-    pub const m_bSuppressAnimEventSounds: usize = 0xCC3; // bool
-    pub const m_bAnimGraphUpdateEnabled: usize = 0xCD0; // bool
-    pub const m_flMaxSlopeDistance: usize = 0xCD4; // float
-    pub const m_vLastSlopeCheckPos: usize = 0xCD8; // Vector
-    pub const m_vecForce: usize = 0xCE8; // Vector
-    pub const m_nForceBone: usize = 0xCF4; // int32_t
-    pub const m_pClientsideRagdoll: usize = 0xCF8; // CBaseAnimGraph*
-    pub const m_bBuiltRagdoll: usize = 0xD00; // bool
-    pub const m_pRagdollPose: usize = 0xD18; // PhysicsRagdollPose_t*
-    pub const m_bClientRagdoll: usize = 0xD20; // bool
-    pub const m_bHasAnimatedMaterialAttributes: usize = 0xD30; // bool
-}
-
-pub mod CBaseAnimGraphController { // CSkeletonAnimationController
-    pub const m_baseLayer: usize = 0x18; // CNetworkedSequenceOperation
-    pub const m_animGraphNetworkedVars: usize = 0x40; // CAnimGraphNetworkedVariables
-    pub const m_bSequenceFinished: usize = 0x1320; // bool
-    pub const m_flLastEventCycle: usize = 0x1324; // float
-    pub const m_flLastEventAnimTime: usize = 0x1328; // float
-    pub const m_flPlaybackRate: usize = 0x132C; // CNetworkedQuantizedFloat
-    pub const m_flPrevAnimTime: usize = 0x1334; // float
-    pub const m_bClientSideAnimation: usize = 0x1338; // bool
-    pub const m_bNetworkedAnimationInputsChanged: usize = 0x1339; // bool
-    pub const m_nPrevNewSequenceParity: usize = 0x133A; // uint8_t
-    pub const m_nPrevResetEventsParity: usize = 0x133B; // uint8_t
-    pub const m_nNewSequenceParity: usize = 0x133C; // int32_t
-    pub const m_nResetEventsParity: usize = 0x1340; // int32_t
-    pub const m_nAnimLoopMode: usize = 0x1344; // AnimLoopMode_t
-    pub const m_hAnimationUpdate: usize = 0x13E4; // AnimationUpdateListHandle_t
-    pub const m_hLastAnimEventSequence: usize = 0x13E8; // HSequence
-}
-
-pub mod CBasePlayerController { // C_BaseEntity
-    pub const m_nFinalPredictedTick: usize = 0x548; // int32_t
-    pub const m_CommandContext: usize = 0x550; // C_CommandContext
-    pub const m_nInButtonsWhichAreToggles: usize = 0x600; // uint64_t
-    pub const m_nTickBase: usize = 0x608; // uint32_t
-    pub const m_hPawn: usize = 0x60C; // CHandle<C_BasePlayerPawn>
-    pub const m_hPredictedPawn: usize = 0x610; // CHandle<C_BasePlayerPawn>
-    pub const m_nSplitScreenSlot: usize = 0x614; // CSplitScreenSlot
-    pub const m_hSplitOwner: usize = 0x618; // CHandle<CBasePlayerController>
-    pub const m_hSplitScreenPlayers: usize = 0x620; // CUtlVector<CHandle<CBasePlayerController>>
-    pub const m_bIsHLTV: usize = 0x638; // bool
-    pub const m_iConnected: usize = 0x63C; // PlayerConnectedState
-    pub const m_iszPlayerName: usize = 0x640; // char[128]
-    pub const m_steamID: usize = 0x6C8; // uint64_t
-    pub const m_bIsLocalPlayerController: usize = 0x6D0; // bool
-    pub const m_iDesiredFOV: usize = 0x6D4; // uint32_t
-}
-
-pub mod CBasePlayerVData { // CEntitySubclassVDataBase
-    pub const m_sModelName: usize = 0x28; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeCModel>>
-    pub const m_flHeadDamageMultiplier: usize = 0x108; // CSkillFloat
-    pub const m_flChestDamageMultiplier: usize = 0x118; // CSkillFloat
-    pub const m_flStomachDamageMultiplier: usize = 0x128; // CSkillFloat
-    pub const m_flArmDamageMultiplier: usize = 0x138; // CSkillFloat
-    pub const m_flLegDamageMultiplier: usize = 0x148; // CSkillFloat
-    pub const m_flHoldBreathTime: usize = 0x158; // float
-    pub const m_flDrowningDamageInterval: usize = 0x15C; // float
-    pub const m_nDrowningDamageInitial: usize = 0x160; // int32_t
-    pub const m_nDrowningDamageMax: usize = 0x164; // int32_t
-    pub const m_nWaterSpeed: usize = 0x168; // int32_t
-    pub const m_flUseRange: usize = 0x16C; // float
-    pub const m_flUseAngleTolerance: usize = 0x170; // float
-    pub const m_flCrouchTime: usize = 0x174; // float
-}
-
-pub mod CBasePlayerWeaponVData { // CEntitySubclassVDataBase
-    pub const m_szWorldModel: usize = 0x28; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeCModel>>
-    pub const m_bBuiltRightHanded: usize = 0x108; // bool
-    pub const m_bAllowFlipping: usize = 0x109; // bool
-    pub const m_bIsFullAuto: usize = 0x10A; // bool
-    pub const m_nNumBullets: usize = 0x10C; // int32_t
-    pub const m_sMuzzleAttachment: usize = 0x110; // CUtlString
-    pub const m_szMuzzleFlashParticle: usize = 0x118; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>>
-    pub const m_iFlags: usize = 0x1F8; // ItemFlagTypes_t
-    pub const m_nPrimaryAmmoType: usize = 0x1F9; // AmmoIndex_t
-    pub const m_nSecondaryAmmoType: usize = 0x1FA; // AmmoIndex_t
-    pub const m_iMaxClip1: usize = 0x1FC; // int32_t
-    pub const m_iMaxClip2: usize = 0x200; // int32_t
-    pub const m_iDefaultClip1: usize = 0x204; // int32_t
-    pub const m_iDefaultClip2: usize = 0x208; // int32_t
-    pub const m_iWeight: usize = 0x20C; // int32_t
-    pub const m_bAutoSwitchTo: usize = 0x210; // bool
-    pub const m_bAutoSwitchFrom: usize = 0x211; // bool
-    pub const m_iRumbleEffect: usize = 0x214; // RumbleEffect_t
-    pub const m_aShootSounds: usize = 0x218; // CUtlMap<WeaponSound_t,CSoundEventName>
-    pub const m_iSlot: usize = 0x238; // int32_t
-    pub const m_iPosition: usize = 0x23C; // int32_t
-}
-
-pub mod CBaseProp { // CBaseAnimGraph
-    pub const m_bModelOverrodeBlockLOS: usize = 0xE80; // bool
-    pub const m_iShapeType: usize = 0xE84; // int32_t
-    pub const m_bConformToCollisionBounds: usize = 0xE88; // bool
-    pub const m_mPreferredCatchTransform: usize = 0xE8C; // matrix3x4_t
-}
-
-pub mod CBodyComponent { // CEntityComponent
-    pub const m_pSceneNode: usize = 0x8; // CGameSceneNode*
-    pub const __m_pChainEntity: usize = 0x20; // CNetworkVarChainer
-}
-
-pub mod CBodyComponentBaseAnimGraph { // CBodyComponentSkeletonInstance
-    pub const m_animationController: usize = 0x480; // CBaseAnimGraphController
-    pub const __m_pChainEntity: usize = 0x18C0; // CNetworkVarChainer
-}
-
-pub mod CBodyComponentBaseModelEntity { // CBodyComponentSkeletonInstance
-    pub const __m_pChainEntity: usize = 0x480; // CNetworkVarChainer
-}
-
-pub mod CBodyComponentPoint { // CBodyComponent
-    pub const m_sceneNode: usize = 0x50; // CGameSceneNode
-    pub const __m_pChainEntity: usize = 0x1A0; // CNetworkVarChainer
-}
-
-pub mod CBodyComponentSkeletonInstance { // CBodyComponent
-    pub const m_skeletonInstance: usize = 0x50; // CSkeletonInstance
-    pub const __m_pChainEntity: usize = 0x450; // CNetworkVarChainer
-}
-
-pub mod CBombTarget { // C_BaseTrigger
-    pub const m_bBombPlantedHere: usize = 0xCC8; // bool
-}
-
-pub mod CBreachCharge { // C_CSWeaponBase
-}
-
-pub mod CBreachChargeProjectile { // C_BaseGrenade
-}
-
-pub mod CBumpMine { // C_CSWeaponBase
-}
-
-pub mod CBumpMineProjectile { // C_BaseGrenade
-}
-
-pub mod CBuoyancyHelper {
-    pub const m_flFluidDensity: usize = 0x18; // float
-}
-
-pub mod CCSGO_WingmanIntroCharacterPosition { // C_CSGO_TeamIntroCharacterPosition
-}
-
-pub mod CCSGO_WingmanIntroCounterTerroristPosition { // CCSGO_WingmanIntroCharacterPosition
-}
-
-pub mod CCSGO_WingmanIntroTerroristPosition { // CCSGO_WingmanIntroCharacterPosition
-}
-
-pub mod CCSGameModeRules {
-    pub const __m_pChainEntity: usize = 0x8; // CNetworkVarChainer
-}
-
-pub mod CCSGameModeRules_Deathmatch { // CCSGameModeRules
-    pub const m_bFirstThink: usize = 0x30; // bool
-    pub const m_bFirstThinkAfterConnected: usize = 0x31; // bool
-    pub const m_flDMBonusStartTime: usize = 0x34; // GameTime_t
-    pub const m_flDMBonusTimeLength: usize = 0x38; // float
-    pub const m_nDMBonusWeaponLoadoutSlot: usize = 0x3C; // int16_t
-}
-
-pub mod CCSGameModeRules_Noop { // CCSGameModeRules
-}
-
-pub mod CCSGameModeRules_Scripted { // CCSGameModeRules
-}
-
-pub mod CCSGameModeScript { // CBasePulseGraphInstance
-}
-
-pub mod CCSObserver_CameraServices { // CCSPlayerBase_CameraServices
-}
-
-pub mod CCSObserver_MovementServices { // CPlayer_MovementServices
-}
-
-pub mod CCSObserver_ObserverServices { // CPlayer_ObserverServices
-    pub const m_hLastObserverTarget: usize = 0x58; // CEntityHandle
-    pub const m_vecObserverInterpolateOffset: usize = 0x5C; // Vector
-    pub const m_vecObserverInterpStartPos: usize = 0x68; // Vector
-    pub const m_flObsInterp_PathLength: usize = 0x74; // float
-    pub const m_qObsInterp_OrientationStart: usize = 0x80; // Quaternion
-    pub const m_qObsInterp_OrientationTravelDir: usize = 0x90; // Quaternion
-    pub const m_obsInterpState: usize = 0xA0; // ObserverInterpState_t
-    pub const m_bObserverInterpolationNeedsDeferredSetup: usize = 0xA4; // bool
-}
-
-pub mod CCSObserver_UseServices { // CPlayer_UseServices
-}
-
-pub mod CCSObserver_ViewModelServices { // CPlayer_ViewModelServices
-}
-
-pub mod CCSPlayerBase_CameraServices { // CPlayer_CameraServices
-    pub const m_iFOV: usize = 0x210; // uint32_t
-    pub const m_iFOVStart: usize = 0x214; // uint32_t
-    pub const m_flFOVTime: usize = 0x218; // GameTime_t
-    pub const m_flFOVRate: usize = 0x21C; // float
-    pub const m_hZoomOwner: usize = 0x220; // CHandle<C_BaseEntity>
-    pub const m_flLastShotFOV: usize = 0x224; // float
-}
-
-pub mod CCSPlayerController { // CBasePlayerController
-    pub const m_pInGameMoneyServices: usize = 0x700; // CCSPlayerController_InGameMoneyServices*
-    pub const m_pInventoryServices: usize = 0x708; // CCSPlayerController_InventoryServices*
-    pub const m_pActionTrackingServices: usize = 0x710; // CCSPlayerController_ActionTrackingServices*
-    pub const m_pDamageServices: usize = 0x718; // CCSPlayerController_DamageServices*
-    pub const m_iPing: usize = 0x720; // uint32_t
-    pub const m_bHasCommunicationAbuseMute: usize = 0x724; // bool
-    pub const m_szCrosshairCodes: usize = 0x728; // CUtlSymbolLarge
-    pub const m_iPendingTeamNum: usize = 0x730; // uint8_t
-    pub const m_flForceTeamTime: usize = 0x734; // GameTime_t
-    pub const m_iCompTeammateColor: usize = 0x738; // int32_t
-    pub const m_bEverPlayedOnTeam: usize = 0x73C; // bool
-    pub const m_flPreviousForceJoinTeamTime: usize = 0x740; // GameTime_t
-    pub const m_szClan: usize = 0x748; // CUtlSymbolLarge
-    pub const m_sSanitizedPlayerName: usize = 0x750; // CUtlString
-    pub const m_iCoachingTeam: usize = 0x758; // int32_t
-    pub const m_nPlayerDominated: usize = 0x760; // uint64_t
-    pub const m_nPlayerDominatingMe: usize = 0x768; // uint64_t
-    pub const m_iCompetitiveRanking: usize = 0x770; // int32_t
-    pub const m_iCompetitiveWins: usize = 0x774; // int32_t
-    pub const m_iCompetitiveRankType: usize = 0x778; // int8_t
-    pub const m_iCompetitiveRankingPredicted_Win: usize = 0x77C; // int32_t
-    pub const m_iCompetitiveRankingPredicted_Loss: usize = 0x780; // int32_t
-    pub const m_iCompetitiveRankingPredicted_Tie: usize = 0x784; // int32_t
-    pub const m_nEndMatchNextMapVote: usize = 0x788; // int32_t
-    pub const m_unActiveQuestId: usize = 0x78C; // uint16_t
-    pub const m_nQuestProgressReason: usize = 0x790; // QuestProgress::Reason
-    pub const m_unPlayerTvControlFlags: usize = 0x794; // uint32_t
-    pub const m_iDraftIndex: usize = 0x7C0; // int32_t
-    pub const m_msQueuedModeDisconnectionTimestamp: usize = 0x7C4; // uint32_t
-    pub const m_uiAbandonRecordedReason: usize = 0x7C8; // uint32_t
-    pub const m_bCannotBeKicked: usize = 0x7CC; // bool
-    pub const m_bEverFullyConnected: usize = 0x7CD; // bool
-    pub const m_bAbandonAllowsSurrender: usize = 0x7CE; // bool
-    pub const m_bAbandonOffersInstantSurrender: usize = 0x7CF; // bool
-    pub const m_bDisconnection1MinWarningPrinted: usize = 0x7D0; // bool
-    pub const m_bScoreReported: usize = 0x7D1; // bool
-    pub const m_nDisconnectionTick: usize = 0x7D4; // int32_t
-    pub const m_bControllingBot: usize = 0x7E0; // bool
-    pub const m_bHasControlledBotThisRound: usize = 0x7E1; // bool
-    pub const m_bHasBeenControlledByPlayerThisRound: usize = 0x7E2; // bool
-    pub const m_nBotsControlledThisRound: usize = 0x7E4; // int32_t
-    pub const m_bCanControlObservedBot: usize = 0x7E8; // bool
-    pub const m_hPlayerPawn: usize = 0x7EC; // CHandle<C_CSPlayerPawn>
-    pub const m_hObserverPawn: usize = 0x7F0; // CHandle<C_CSObserverPawn>
-    pub const m_bPawnIsAlive: usize = 0x7F4; // bool
-    pub const m_iPawnHealth: usize = 0x7F8; // uint32_t
-    pub const m_iPawnArmor: usize = 0x7FC; // int32_t
-    pub const m_bPawnHasDefuser: usize = 0x800; // bool
-    pub const m_bPawnHasHelmet: usize = 0x801; // bool
-    pub const m_nPawnCharacterDefIndex: usize = 0x802; // uint16_t
-    pub const m_iPawnLifetimeStart: usize = 0x804; // int32_t
-    pub const m_iPawnLifetimeEnd: usize = 0x808; // int32_t
-    pub const m_iPawnBotDifficulty: usize = 0x80C; // int32_t
-    pub const m_hOriginalControllerOfCurrentPawn: usize = 0x810; // CHandle<CCSPlayerController>
-    pub const m_iScore: usize = 0x814; // int32_t
-    pub const m_vecKills: usize = 0x818; // C_NetworkUtlVectorBase<EKillTypes_t>
-    pub const m_iMVPs: usize = 0x830; // int32_t
-    pub const m_bIsPlayerNameDirty: usize = 0x834; // bool
-}
-
-pub mod CCSPlayerController_ActionTrackingServices { // CPlayerControllerComponent
-    pub const m_perRoundStats: usize = 0x40; // C_UtlVectorEmbeddedNetworkVar<CSPerRoundStats_t>
-    pub const m_matchStats: usize = 0x90; // CSMatchStats_t
-    pub const m_iNumRoundKills: usize = 0x108; // int32_t
-    pub const m_iNumRoundKillsHeadshots: usize = 0x10C; // int32_t
-    pub const m_unTotalRoundDamageDealt: usize = 0x110; // uint32_t
-}
-
-pub mod CCSPlayerController_DamageServices { // CPlayerControllerComponent
-    pub const m_nSendUpdate: usize = 0x40; // int32_t
-    pub const m_DamageList: usize = 0x48; // C_UtlVectorEmbeddedNetworkVar<CDamageRecord>
-}
-
-pub mod CCSPlayerController_InGameMoneyServices { // CPlayerControllerComponent
-    pub const m_iAccount: usize = 0x40; // int32_t
-    pub const m_iStartAccount: usize = 0x44; // int32_t
-    pub const m_iTotalCashSpent: usize = 0x48; // int32_t
-    pub const m_iCashSpentThisRound: usize = 0x4C; // int32_t
-    pub const m_nPreviousAccount: usize = 0x50; // int32_t
-}
-
-pub mod CCSPlayerController_InventoryServices { // CPlayerControllerComponent
-    pub const m_unMusicID: usize = 0x40; // uint16_t
-    pub const m_rank: usize = 0x44; // MedalRank_t[6]
-    pub const m_nPersonaDataPublicLevel: usize = 0x5C; // int32_t
-    pub const m_nPersonaDataPublicCommendsLeader: usize = 0x60; // int32_t
-    pub const m_nPersonaDataPublicCommendsTeacher: usize = 0x64; // int32_t
-    pub const m_nPersonaDataPublicCommendsFriendly: usize = 0x68; // int32_t
-    pub const m_vecServerAuthoritativeWeaponSlots: usize = 0x70; // C_UtlVectorEmbeddedNetworkVar<ServerAuthoritativeWeaponSlot_t>
-}
-
-pub mod CCSPlayer_ActionTrackingServices { // CPlayerPawnComponent
-    pub const m_hLastWeaponBeforeC4AutoSwitch: usize = 0x40; // CHandle<C_BasePlayerWeapon>
-    pub const m_bIsRescuing: usize = 0x44; // bool
-    pub const m_weaponPurchasesThisMatch: usize = 0x48; // WeaponPurchaseTracker_t
-    pub const m_weaponPurchasesThisRound: usize = 0xA0; // WeaponPurchaseTracker_t
-}
-
-pub mod CCSPlayer_BulletServices { // CPlayerPawnComponent
-    pub const m_totalHitsOnServer: usize = 0x40; // int32_t
-}
-
-pub mod CCSPlayer_BuyServices { // CPlayerPawnComponent
-    pub const m_vecSellbackPurchaseEntries: usize = 0x40; // C_UtlVectorEmbeddedNetworkVar<SellbackPurchaseEntry_t>
-}
-
-pub mod CCSPlayer_CameraServices { // CCSPlayerBase_CameraServices
-    pub const m_flDeathCamTilt: usize = 0x228; // float
-}
-
-pub mod CCSPlayer_GlowServices { // CPlayerPawnComponent
-}
-
-pub mod CCSPlayer_HostageServices { // CPlayerPawnComponent
-    pub const m_hCarriedHostage: usize = 0x40; // CHandle<C_BaseEntity>
-    pub const m_hCarriedHostageProp: usize = 0x44; // CHandle<C_BaseEntity>
-}
-
-pub mod CCSPlayer_ItemServices { // CPlayer_ItemServices
-    pub const m_bHasDefuser: usize = 0x40; // bool
-    pub const m_bHasHelmet: usize = 0x41; // bool
-    pub const m_bHasHeavyArmor: usize = 0x42; // bool
-}
-
-pub mod CCSPlayer_MovementServices { // CPlayer_MovementServices_Humanoid
-    pub const m_flMaxFallVelocity: usize = 0x210; // float
-    pub const m_vecLadderNormal: usize = 0x214; // Vector
-    pub const m_nLadderSurfacePropIndex: usize = 0x220; // int32_t
-    pub const m_flDuckAmount: usize = 0x224; // float
-    pub const m_flDuckSpeed: usize = 0x228; // float
-    pub const m_bDuckOverride: usize = 0x22C; // bool
-    pub const m_bDesiresDuck: usize = 0x22D; // bool
-    pub const m_flDuckOffset: usize = 0x230; // float
-    pub const m_nDuckTimeMsecs: usize = 0x234; // uint32_t
-    pub const m_nDuckJumpTimeMsecs: usize = 0x238; // uint32_t
-    pub const m_nJumpTimeMsecs: usize = 0x23C; // uint32_t
-    pub const m_flLastDuckTime: usize = 0x240; // float
-    pub const m_vecLastPositionAtFullCrouchSpeed: usize = 0x250; // Vector2D
-    pub const m_duckUntilOnGround: usize = 0x258; // bool
-    pub const m_bHasWalkMovedSinceLastJump: usize = 0x259; // bool
-    pub const m_bInStuckTest: usize = 0x25A; // bool
-    pub const m_flStuckCheckTime: usize = 0x268; // float[64][2]
-    pub const m_nTraceCount: usize = 0x468; // int32_t
-    pub const m_StuckLast: usize = 0x46C; // int32_t
-    pub const m_bSpeedCropped: usize = 0x470; // bool
-    pub const m_nOldWaterLevel: usize = 0x474; // int32_t
-    pub const m_flWaterEntryTime: usize = 0x478; // float
-    pub const m_vecForward: usize = 0x47C; // Vector
-    pub const m_vecLeft: usize = 0x488; // Vector
-    pub const m_vecUp: usize = 0x494; // Vector
-    pub const m_vecPreviouslyPredictedOrigin: usize = 0x4A0; // Vector
-    pub const m_bOldJumpPressed: usize = 0x4AC; // bool
-    pub const m_flJumpPressedTime: usize = 0x4B0; // float
-    pub const m_flJumpUntil: usize = 0x4B4; // float
-    pub const m_flJumpVel: usize = 0x4B8; // float
-    pub const m_fStashGrenadeParameterWhen: usize = 0x4BC; // GameTime_t
-    pub const m_nButtonDownMaskPrev: usize = 0x4C0; // uint64_t
-    pub const m_flOffsetTickCompleteTime: usize = 0x4C8; // float
-    pub const m_flOffsetTickStashedSpeed: usize = 0x4CC; // float
-    pub const m_flStamina: usize = 0x4D0; // float
-    pub const m_bUpdatePredictedOriginAfterDataUpdate: usize = 0x4D4; // bool
-    pub const m_flHeightAtJumpStart: usize = 0x4D8; // float
-    pub const m_flMaxJumpHeightThisJump: usize = 0x4DC; // float
-}
-
-pub mod CCSPlayer_PingServices { // CPlayerPawnComponent
-    pub const m_hPlayerPing: usize = 0x40; // CHandle<C_BaseEntity>
-}
-
-pub mod CCSPlayer_UseServices { // CPlayer_UseServices
-}
-
-pub mod CCSPlayer_ViewModelServices { // CPlayer_ViewModelServices
-    pub const m_hViewModel: usize = 0x40; // CHandle<C_BaseViewModel>[3]
-}
-
-pub mod CCSPlayer_WaterServices { // CPlayer_WaterServices
-    pub const m_flWaterJumpTime: usize = 0x40; // float
-    pub const m_vecWaterJumpVel: usize = 0x44; // Vector
-    pub const m_flSwimSoundTime: usize = 0x50; // float
-}
-
-pub mod CCSPlayer_WeaponServices { // CPlayer_WeaponServices
-    pub const m_flNextAttack: usize = 0xC0; // GameTime_t
-    pub const m_bIsLookingAtWeapon: usize = 0xC4; // bool
-    pub const m_bIsHoldingLookAtWeapon: usize = 0xC5; // bool
-}
-
-pub mod CCSWeaponBaseVData { // CBasePlayerWeaponVData
-    pub const m_WeaponType: usize = 0x240; // CSWeaponType
-    pub const m_WeaponCategory: usize = 0x244; // CSWeaponCategory
-    pub const m_szViewModel: usize = 0x248; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeCModel>>
-    pub const m_szPlayerModel: usize = 0x328; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeCModel>>
-    pub const m_szWorldDroppedModel: usize = 0x408; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeCModel>>
-    pub const m_szAimsightLensMaskModel: usize = 0x4E8; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeCModel>>
-    pub const m_szMagazineModel: usize = 0x5C8; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeCModel>>
-    pub const m_szHeatEffect: usize = 0x6A8; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>>
-    pub const m_szEjectBrassEffect: usize = 0x788; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>>
-    pub const m_szMuzzleFlashParticleAlt: usize = 0x868; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>>
-    pub const m_szMuzzleFlashThirdPersonParticle: usize = 0x948; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>>
-    pub const m_szMuzzleFlashThirdPersonParticleAlt: usize = 0xA28; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>>
-    pub const m_szTracerParticle: usize = 0xB08; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>>
-    pub const m_GearSlot: usize = 0xBE8; // gear_slot_t
-    pub const m_GearSlotPosition: usize = 0xBEC; // int32_t
-    pub const m_DefaultLoadoutSlot: usize = 0xBF0; // loadout_slot_t
-    pub const m_sWrongTeamMsg: usize = 0xBF8; // CUtlString
-    pub const m_nPrice: usize = 0xC00; // int32_t
-    pub const m_nKillAward: usize = 0xC04; // int32_t
-    pub const m_nPrimaryReserveAmmoMax: usize = 0xC08; // int32_t
-    pub const m_nSecondaryReserveAmmoMax: usize = 0xC0C; // int32_t
-    pub const m_bMeleeWeapon: usize = 0xC10; // bool
-    pub const m_bHasBurstMode: usize = 0xC11; // bool
-    pub const m_bIsRevolver: usize = 0xC12; // bool
-    pub const m_bCannotShootUnderwater: usize = 0xC13; // bool
-    pub const m_szName: usize = 0xC18; // CUtlString
-    pub const m_szAnimExtension: usize = 0xC20; // CUtlString
-    pub const m_eSilencerType: usize = 0xC28; // CSWeaponSilencerType
-    pub const m_nCrosshairMinDistance: usize = 0xC2C; // int32_t
-    pub const m_nCrosshairDeltaDistance: usize = 0xC30; // int32_t
-    pub const m_flCycleTime: usize = 0xC34; // CFiringModeFloat
-    pub const m_flMaxSpeed: usize = 0xC3C; // CFiringModeFloat
-    pub const m_flSpread: usize = 0xC44; // CFiringModeFloat
-    pub const m_flInaccuracyCrouch: usize = 0xC4C; // CFiringModeFloat
-    pub const m_flInaccuracyStand: usize = 0xC54; // CFiringModeFloat
-    pub const m_flInaccuracyJump: usize = 0xC5C; // CFiringModeFloat
-    pub const m_flInaccuracyLand: usize = 0xC64; // CFiringModeFloat
-    pub const m_flInaccuracyLadder: usize = 0xC6C; // CFiringModeFloat
-    pub const m_flInaccuracyFire: usize = 0xC74; // CFiringModeFloat
-    pub const m_flInaccuracyMove: usize = 0xC7C; // CFiringModeFloat
-    pub const m_flRecoilAngle: usize = 0xC84; // CFiringModeFloat
-    pub const m_flRecoilAngleVariance: usize = 0xC8C; // CFiringModeFloat
-    pub const m_flRecoilMagnitude: usize = 0xC94; // CFiringModeFloat
-    pub const m_flRecoilMagnitudeVariance: usize = 0xC9C; // CFiringModeFloat
-    pub const m_nTracerFrequency: usize = 0xCA4; // CFiringModeInt
-    pub const m_flInaccuracyJumpInitial: usize = 0xCAC; // float
-    pub const m_flInaccuracyJumpApex: usize = 0xCB0; // float
-    pub const m_flInaccuracyReload: usize = 0xCB4; // float
-    pub const m_nRecoilSeed: usize = 0xCB8; // int32_t
-    pub const m_nSpreadSeed: usize = 0xCBC; // int32_t
-    pub const m_flTimeToIdleAfterFire: usize = 0xCC0; // float
-    pub const m_flIdleInterval: usize = 0xCC4; // float
-    pub const m_flAttackMovespeedFactor: usize = 0xCC8; // float
-    pub const m_flHeatPerShot: usize = 0xCCC; // float
-    pub const m_flInaccuracyPitchShift: usize = 0xCD0; // float
-    pub const m_flInaccuracyAltSoundThreshold: usize = 0xCD4; // float
-    pub const m_flBotAudibleRange: usize = 0xCD8; // float
-    pub const m_szUseRadioSubtitle: usize = 0xCE0; // CUtlString
-    pub const m_bUnzoomsAfterShot: usize = 0xCE8; // bool
-    pub const m_bHideViewModelWhenZoomed: usize = 0xCE9; // bool
-    pub const m_nZoomLevels: usize = 0xCEC; // int32_t
-    pub const m_nZoomFOV1: usize = 0xCF0; // int32_t
-    pub const m_nZoomFOV2: usize = 0xCF4; // int32_t
-    pub const m_flZoomTime0: usize = 0xCF8; // float
-    pub const m_flZoomTime1: usize = 0xCFC; // float
-    pub const m_flZoomTime2: usize = 0xD00; // float
-    pub const m_flIronSightPullUpSpeed: usize = 0xD04; // float
-    pub const m_flIronSightPutDownSpeed: usize = 0xD08; // float
-    pub const m_flIronSightFOV: usize = 0xD0C; // float
-    pub const m_flIronSightPivotForward: usize = 0xD10; // float
-    pub const m_flIronSightLooseness: usize = 0xD14; // float
-    pub const m_angPivotAngle: usize = 0xD18; // QAngle
-    pub const m_vecIronSightEyePos: usize = 0xD24; // Vector
-    pub const m_nDamage: usize = 0xD30; // int32_t
-    pub const m_flHeadshotMultiplier: usize = 0xD34; // float
-    pub const m_flArmorRatio: usize = 0xD38; // float
-    pub const m_flPenetration: usize = 0xD3C; // float
-    pub const m_flRange: usize = 0xD40; // float
-    pub const m_flRangeModifier: usize = 0xD44; // float
-    pub const m_flFlinchVelocityModifierLarge: usize = 0xD48; // float
-    pub const m_flFlinchVelocityModifierSmall: usize = 0xD4C; // float
-    pub const m_flRecoveryTimeCrouch: usize = 0xD50; // float
-    pub const m_flRecoveryTimeStand: usize = 0xD54; // float
-    pub const m_flRecoveryTimeCrouchFinal: usize = 0xD58; // float
-    pub const m_flRecoveryTimeStandFinal: usize = 0xD5C; // float
-    pub const m_nRecoveryTransitionStartBullet: usize = 0xD60; // int32_t
-    pub const m_nRecoveryTransitionEndBullet: usize = 0xD64; // int32_t
-    pub const m_flThrowVelocity: usize = 0xD68; // float
-    pub const m_vSmokeColor: usize = 0xD6C; // Vector
-    pub const m_szAnimClass: usize = 0xD78; // CUtlString
-}
-
-pub mod CClientAlphaProperty { // IClientAlphaProperty
-    pub const m_nRenderFX: usize = 0x10; // uint8_t
-    pub const m_nRenderMode: usize = 0x11; // uint8_t
-    pub const m_bAlphaOverride: usize = 0x0; // bitfield:1
-    pub const m_bShadowAlphaOverride: usize = 0x0; // bitfield:1
-    pub const m_nReserved: usize = 0x0; // bitfield:6
-    pub const m_nAlpha: usize = 0x13; // uint8_t
-    pub const m_nDesyncOffset: usize = 0x14; // uint16_t
-    pub const m_nReserved2: usize = 0x16; // uint16_t
-    pub const m_nDistFadeStart: usize = 0x18; // uint16_t
-    pub const m_nDistFadeEnd: usize = 0x1A; // uint16_t
-    pub const m_flFadeScale: usize = 0x1C; // float
-    pub const m_flRenderFxStartTime: usize = 0x20; // GameTime_t
-    pub const m_flRenderFxDuration: usize = 0x24; // float
-}
-
-pub mod CCollisionProperty {
-    pub const m_collisionAttribute: usize = 0x10; // VPhysicsCollisionAttribute_t
-    pub const m_vecMins: usize = 0x40; // Vector
-    pub const m_vecMaxs: usize = 0x4C; // Vector
-    pub const m_usSolidFlags: usize = 0x5A; // uint8_t
-    pub const m_nSolidType: usize = 0x5B; // SolidType_t
-    pub const m_triggerBloat: usize = 0x5C; // uint8_t
-    pub const m_nSurroundType: usize = 0x5D; // SurroundingBoundsType_t
-    pub const m_CollisionGroup: usize = 0x5E; // uint8_t
-    pub const m_nEnablePhysics: usize = 0x5F; // uint8_t
-    pub const m_flBoundingRadius: usize = 0x60; // float
-    pub const m_vecSpecifiedSurroundingMins: usize = 0x64; // Vector
-    pub const m_vecSpecifiedSurroundingMaxs: usize = 0x70; // Vector
-    pub const m_vecSurroundingMaxs: usize = 0x7C; // Vector
-    pub const m_vecSurroundingMins: usize = 0x88; // Vector
-    pub const m_vCapsuleCenter1: usize = 0x94; // Vector
-    pub const m_vCapsuleCenter2: usize = 0xA0; // Vector
-    pub const m_flCapsuleRadius: usize = 0xAC; // float
-}
-
-pub mod CComicBook {
-    pub const m_CoverImage: usize = 0x8; // CPanoramaImageName
-    pub const m_XmlFile: usize = 0x18; // CUtlString
-}
-
-pub mod CCompositeMaterialEditorDoc {
-    pub const m_nVersion: usize = 0x8; // int32_t
-    pub const m_Points: usize = 0x10; // CUtlVector<CompositeMaterialEditorPoint_t>
-    pub const m_KVthumbnail: usize = 0x28; // KeyValues3
-}
-
-pub mod CDamageRecord {
-    pub const m_PlayerDamager: usize = 0x28; // CHandle<C_CSPlayerPawnBase>
-    pub const m_PlayerRecipient: usize = 0x2C; // CHandle<C_CSPlayerPawnBase>
-    pub const m_hPlayerControllerDamager: usize = 0x30; // CHandle<CCSPlayerController>
-    pub const m_hPlayerControllerRecipient: usize = 0x34; // CHandle<CCSPlayerController>
-    pub const m_szPlayerDamagerName: usize = 0x38; // CUtlString
-    pub const m_szPlayerRecipientName: usize = 0x40; // CUtlString
-    pub const m_DamagerXuid: usize = 0x48; // uint64_t
-    pub const m_RecipientXuid: usize = 0x50; // uint64_t
-    pub const m_iDamage: usize = 0x58; // int32_t
-    pub const m_iActualHealthRemoved: usize = 0x5C; // int32_t
-    pub const m_iNumHits: usize = 0x60; // int32_t
-    pub const m_iLastBulletUpdate: usize = 0x64; // int32_t
-    pub const m_bIsOtherEnemy: usize = 0x68; // bool
-    pub const m_killType: usize = 0x69; // EKillTypes_t
-}
-
-pub mod CDecalInfo {
-    pub const m_flAnimationScale: usize = 0x0; // float
-    pub const m_flAnimationLifeSpan: usize = 0x4; // float
-    pub const m_flPlaceTime: usize = 0x8; // float
-    pub const m_flFadeStartTime: usize = 0xC; // float
-    pub const m_flFadeDuration: usize = 0x10; // float
-    pub const m_nVBSlot: usize = 0x14; // int32_t
-    pub const m_nBoneIndex: usize = 0x18; // int32_t
-    pub const m_vPosition: usize = 0x28; // Vector
-    pub const m_flBoundingRadiusSqr: usize = 0x34; // float
-    pub const m_pNext: usize = 0x40; // CDecalInfo*
-    pub const m_pPrev: usize = 0x48; // CDecalInfo*
-    pub const m_nDecalMaterialIndex: usize = 0xA8; // int32_t
-}
-
-pub mod CEconItemAttribute {
-    pub const m_iAttributeDefinitionIndex: usize = 0x30; // uint16_t
-    pub const m_flValue: usize = 0x34; // float
-    pub const m_flInitialValue: usize = 0x38; // float
-    pub const m_nRefundableCurrency: usize = 0x3C; // int32_t
-    pub const m_bSetBonus: usize = 0x40; // bool
-}
-
-pub mod CEffectData {
-    pub const m_vOrigin: usize = 0x8; // Vector
-    pub const m_vStart: usize = 0x14; // Vector
-    pub const m_vNormal: usize = 0x20; // Vector
-    pub const m_vAngles: usize = 0x2C; // QAngle
-    pub const m_hEntity: usize = 0x38; // CEntityHandle
-    pub const m_hOtherEntity: usize = 0x3C; // CEntityHandle
-    pub const m_flScale: usize = 0x40; // float
-    pub const m_flMagnitude: usize = 0x44; // float
-    pub const m_flRadius: usize = 0x48; // float
-    pub const m_nSurfaceProp: usize = 0x4C; // CUtlStringToken
-    pub const m_nEffectIndex: usize = 0x50; // CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>
-    pub const m_nDamageType: usize = 0x58; // uint32_t
-    pub const m_nPenetrate: usize = 0x5C; // uint8_t
-    pub const m_nMaterial: usize = 0x5E; // uint16_t
-    pub const m_nHitBox: usize = 0x60; // uint16_t
-    pub const m_nColor: usize = 0x62; // uint8_t
-    pub const m_fFlags: usize = 0x63; // uint8_t
-    pub const m_nAttachmentIndex: usize = 0x64; // AttachmentHandle_t
-    pub const m_nAttachmentName: usize = 0x68; // CUtlStringToken
-    pub const m_iEffectName: usize = 0x6C; // uint16_t
-    pub const m_nExplosionType: usize = 0x6E; // uint8_t
-}
-
-pub mod CEntityComponent {
-}
-
-pub mod CEntityIdentity {
-    pub const m_nameStringableIndex: usize = 0x14; // int32_t
-    pub const m_name: usize = 0x18; // CUtlSymbolLarge
-    pub const m_designerName: usize = 0x20; // CUtlSymbolLarge
-    pub const m_flags: usize = 0x30; // uint32_t
-    pub const m_worldGroupId: usize = 0x38; // WorldGroupId_t
-    pub const m_fDataObjectTypes: usize = 0x3C; // uint32_t
-    pub const m_PathIndex: usize = 0x40; // ChangeAccessorFieldPathIndex_t
-    pub const m_pPrev: usize = 0x58; // CEntityIdentity*
-    pub const m_pNext: usize = 0x60; // CEntityIdentity*
-    pub const m_pPrevByClass: usize = 0x68; // CEntityIdentity*
-    pub const m_pNextByClass: usize = 0x70; // CEntityIdentity*
-}
-
-pub mod CEntityInstance {
-    pub const m_iszPrivateVScripts: usize = 0x8; // CUtlSymbolLarge
-    pub const m_pEntity: usize = 0x10; // CEntityIdentity*
-    pub const m_CScriptComponent: usize = 0x28; // CScriptComponent*
-}
-
-pub mod CFireOverlay { // CGlowOverlay
-    pub const m_pOwner: usize = 0xD0; // C_FireSmoke*
-    pub const m_vBaseColors: usize = 0xD8; // Vector[4]
-    pub const m_flScale: usize = 0x108; // float
-    pub const m_nGUID: usize = 0x10C; // int32_t
-}
-
-pub mod CFlashlightEffect {
-    pub const m_bIsOn: usize = 0x10; // bool
-    pub const m_bMuzzleFlashEnabled: usize = 0x20; // bool
-    pub const m_flMuzzleFlashBrightness: usize = 0x24; // float
-    pub const m_quatMuzzleFlashOrientation: usize = 0x30; // Quaternion
-    pub const m_vecMuzzleFlashOrigin: usize = 0x40; // Vector
-    pub const m_flFov: usize = 0x4C; // float
-    pub const m_flFarZ: usize = 0x50; // float
-    pub const m_flLinearAtten: usize = 0x54; // float
-    pub const m_bCastsShadows: usize = 0x58; // bool
-    pub const m_flCurrentPullBackDist: usize = 0x5C; // float
-    pub const m_FlashlightTexture: usize = 0x60; // CStrongHandle<InfoForResourceTypeCTextureBase>
-    pub const m_MuzzleFlashTexture: usize = 0x68; // CStrongHandle<InfoForResourceTypeCTextureBase>
-    pub const m_textureName: usize = 0x70; // char[64]
-}
-
-pub mod CFuncWater { // C_BaseModelEntity
-    pub const m_BuoyancyHelper: usize = 0xCC0; // CBuoyancyHelper
-}
-
-pub mod CGameSceneNode {
-    pub const m_nodeToWorld: usize = 0x10; // CTransform
-    pub const m_pOwner: usize = 0x30; // CEntityInstance*
-    pub const m_pParent: usize = 0x38; // CGameSceneNode*
-    pub const m_pChild: usize = 0x40; // CGameSceneNode*
-    pub const m_pNextSibling: usize = 0x48; // CGameSceneNode*
-    pub const m_hParent: usize = 0x70; // CGameSceneNodeHandle
-    pub const m_vecOrigin: usize = 0x80; // CNetworkOriginCellCoordQuantizedVector
-    pub const m_angRotation: usize = 0xB8; // QAngle
-    pub const m_flScale: usize = 0xC4; // float
-    pub const m_vecAbsOrigin: usize = 0xC8; // Vector
-    pub const m_angAbsRotation: usize = 0xD4; // QAngle
-    pub const m_flAbsScale: usize = 0xE0; // float
-    pub const m_nParentAttachmentOrBone: usize = 0xE4; // int16_t
-    pub const m_bDebugAbsOriginChanges: usize = 0xE6; // bool
-    pub const m_bDormant: usize = 0xE7; // bool
-    pub const m_bForceParentToBeNetworked: usize = 0xE8; // bool
-    pub const m_bDirtyHierarchy: usize = 0x0; // bitfield:1
-    pub const m_bDirtyBoneMergeInfo: usize = 0x0; // bitfield:1
-    pub const m_bNetworkedPositionChanged: usize = 0x0; // bitfield:1
-    pub const m_bNetworkedAnglesChanged: usize = 0x0; // bitfield:1
-    pub const m_bNetworkedScaleChanged: usize = 0x0; // bitfield:1
-    pub const m_bWillBeCallingPostDataUpdate: usize = 0x0; // bitfield:1
-    pub const m_bNotifyBoneTransformsChanged: usize = 0x0; // bitfield:1
-    pub const m_bBoneMergeFlex: usize = 0x0; // bitfield:1
-    pub const m_nLatchAbsOrigin: usize = 0x0; // bitfield:2
-    pub const m_bDirtyBoneMergeBoneToRoot: usize = 0x0; // bitfield:1
-    pub const m_nHierarchicalDepth: usize = 0xEB; // uint8_t
-    pub const m_nHierarchyType: usize = 0xEC; // uint8_t
-    pub const m_nDoNotSetAnimTimeInInvalidatePhysicsCount: usize = 0xED; // uint8_t
-    pub const m_name: usize = 0xF0; // CUtlStringToken
-    pub const m_hierarchyAttachName: usize = 0x130; // CUtlStringToken
-    pub const m_flZOffset: usize = 0x134; // float
-    pub const m_vRenderOrigin: usize = 0x138; // Vector
-}
-
-pub mod CGameSceneNodeHandle {
-    pub const m_hOwner: usize = 0x8; // CEntityHandle
-    pub const m_name: usize = 0xC; // CUtlStringToken
-}
-
-pub mod CGlobalLightBase {
-    pub const m_bSpotLight: usize = 0x10; // bool
-    pub const m_SpotLightOrigin: usize = 0x14; // Vector
-    pub const m_SpotLightAngles: usize = 0x20; // QAngle
-    pub const m_ShadowDirection: usize = 0x2C; // Vector
-    pub const m_AmbientDirection: usize = 0x38; // Vector
-    pub const m_SpecularDirection: usize = 0x44; // Vector
-    pub const m_InspectorSpecularDirection: usize = 0x50; // Vector
-    pub const m_flSpecularPower: usize = 0x5C; // float
-    pub const m_flSpecularIndependence: usize = 0x60; // float
-    pub const m_SpecularColor: usize = 0x64; // Color
-    pub const m_bStartDisabled: usize = 0x68; // bool
-    pub const m_bEnabled: usize = 0x69; // bool
-    pub const m_LightColor: usize = 0x6A; // Color
-    pub const m_AmbientColor1: usize = 0x6E; // Color
-    pub const m_AmbientColor2: usize = 0x72; // Color
-    pub const m_AmbientColor3: usize = 0x76; // Color
-    pub const m_flSunDistance: usize = 0x7C; // float
-    pub const m_flFOV: usize = 0x80; // float
-    pub const m_flNearZ: usize = 0x84; // float
-    pub const m_flFarZ: usize = 0x88; // float
-    pub const m_bEnableShadows: usize = 0x8C; // bool
-    pub const m_bOldEnableShadows: usize = 0x8D; // bool
-    pub const m_bBackgroundClearNotRequired: usize = 0x8E; // bool
-    pub const m_flCloudScale: usize = 0x90; // float
-    pub const m_flCloud1Speed: usize = 0x94; // float
-    pub const m_flCloud1Direction: usize = 0x98; // float
-    pub const m_flCloud2Speed: usize = 0x9C; // float
-    pub const m_flCloud2Direction: usize = 0xA0; // float
-    pub const m_flAmbientScale1: usize = 0xB0; // float
-    pub const m_flAmbientScale2: usize = 0xB4; // float
-    pub const m_flGroundScale: usize = 0xB8; // float
-    pub const m_flLightScale: usize = 0xBC; // float
-    pub const m_flFoWDarkness: usize = 0xC0; // float
-    pub const m_bEnableSeparateSkyboxFog: usize = 0xC4; // bool
-    pub const m_vFowColor: usize = 0xC8; // Vector
-    pub const m_ViewOrigin: usize = 0xD4; // Vector
-    pub const m_ViewAngles: usize = 0xE0; // QAngle
-    pub const m_flViewFoV: usize = 0xEC; // float
-    pub const m_WorldPoints: usize = 0xF0; // Vector[8]
-    pub const m_vFogOffsetLayer0: usize = 0x4A8; // Vector2D
-    pub const m_vFogOffsetLayer1: usize = 0x4B0; // Vector2D
-    pub const m_hEnvWind: usize = 0x4B8; // CHandle<C_BaseEntity>
-    pub const m_hEnvSky: usize = 0x4BC; // CHandle<C_BaseEntity>
-}
-
-pub mod CGlowOverlay {
-    pub const m_vPos: usize = 0x8; // Vector
-    pub const m_bDirectional: usize = 0x14; // bool
-    pub const m_vDirection: usize = 0x18; // Vector
-    pub const m_bInSky: usize = 0x24; // bool
-    pub const m_skyObstructionScale: usize = 0x28; // float
-    pub const m_Sprites: usize = 0x30; // CGlowSprite[4]
-    pub const m_nSprites: usize = 0xB0; // int32_t
-    pub const m_flProxyRadius: usize = 0xB4; // float
-    pub const m_flHDRColorScale: usize = 0xB8; // float
-    pub const m_flGlowObstructionScale: usize = 0xBC; // float
-    pub const m_bCacheGlowObstruction: usize = 0xC0; // bool
-    pub const m_bCacheSkyObstruction: usize = 0xC1; // bool
-    pub const m_bActivated: usize = 0xC2; // int16_t
-    pub const m_ListIndex: usize = 0xC4; // uint16_t
-    pub const m_queryHandle: usize = 0xC8; // int32_t
-}
-
-pub mod CGlowProperty {
-    pub const m_fGlowColor: usize = 0x8; // Vector
-    pub const m_iGlowType: usize = 0x30; // int32_t
-    pub const m_iGlowTeam: usize = 0x34; // int32_t
-    pub const m_nGlowRange: usize = 0x38; // int32_t
-    pub const m_nGlowRangeMin: usize = 0x3C; // int32_t
-    pub const m_glowColorOverride: usize = 0x40; // Color
-    pub const m_bFlashing: usize = 0x44; // bool
-    pub const m_flGlowTime: usize = 0x48; // float
-    pub const m_flGlowStartTime: usize = 0x4C; // float
-    pub const m_bEligibleForScreenHighlight: usize = 0x50; // bool
-    pub const m_bGlowing: usize = 0x51; // bool
-}
-
-pub mod CGlowSprite {
-    pub const m_vColor: usize = 0x0; // Vector
-    pub const m_flHorzSize: usize = 0xC; // float
-    pub const m_flVertSize: usize = 0x10; // float
-    pub const m_hMaterial: usize = 0x18; // CStrongHandle<InfoForResourceTypeIMaterial2>
-}
-
-pub mod CGrenadeTracer { // C_BaseModelEntity
-    pub const m_flTracerDuration: usize = 0xCE0; // float
-    pub const m_nType: usize = 0xCE4; // GrenadeType_t
-}
-
-pub mod CHitboxComponent { // CEntityComponent
-    pub const m_bvDisabledHitGroups: usize = 0x24; // uint32_t[1]
-}
-
-pub mod CHostageRescueZone { // CHostageRescueZoneShim
-}
-
-pub mod CHostageRescueZoneShim { // C_BaseTrigger
-}
-
-pub mod CInfoDynamicShadowHint { // C_PointEntity
-    pub const m_bDisabled: usize = 0x540; // bool
-    pub const m_flRange: usize = 0x544; // float
-    pub const m_nImportance: usize = 0x548; // int32_t
-    pub const m_nLightChoice: usize = 0x54C; // int32_t
-    pub const m_hLight: usize = 0x550; // CHandle<C_BaseEntity>
-}
-
-pub mod CInfoDynamicShadowHintBox { // CInfoDynamicShadowHint
-    pub const m_vBoxMins: usize = 0x558; // Vector
-    pub const m_vBoxMaxs: usize = 0x564; // Vector
-}
-
-pub mod CInfoOffscreenPanoramaTexture { // C_PointEntity
-    pub const m_bDisabled: usize = 0x540; // bool
-    pub const m_nResolutionX: usize = 0x544; // int32_t
-    pub const m_nResolutionY: usize = 0x548; // int32_t
-    pub const m_szLayoutFileName: usize = 0x550; // CUtlSymbolLarge
-    pub const m_RenderAttrName: usize = 0x558; // CUtlSymbolLarge
-    pub const m_TargetEntities: usize = 0x560; // C_NetworkUtlVectorBase<CHandle<C_BaseModelEntity>>
-    pub const m_nTargetChangeCount: usize = 0x578; // int32_t
-    pub const m_vecCSSClasses: usize = 0x580; // C_NetworkUtlVectorBase<CUtlSymbolLarge>
-    pub const m_bCheckCSSClasses: usize = 0x6F8; // bool
-}
-
-pub mod CInfoParticleTarget { // C_PointEntity
-}
-
-pub mod CInfoTarget { // C_PointEntity
-}
-
-pub mod CInfoWorldLayer { // C_BaseEntity
-    pub const m_pOutputOnEntitiesSpawned: usize = 0x540; // CEntityIOOutput
-    pub const m_worldName: usize = 0x568; // CUtlSymbolLarge
-    pub const m_layerName: usize = 0x570; // CUtlSymbolLarge
-    pub const m_bWorldLayerVisible: usize = 0x578; // bool
-    pub const m_bEntitiesSpawned: usize = 0x579; // bool
-    pub const m_bCreateAsChildSpawnGroup: usize = 0x57A; // bool
-    pub const m_hLayerSpawnGroup: usize = 0x57C; // uint32_t
-    pub const m_bWorldLayerActuallyVisible: usize = 0x580; // bool
-}
-
-pub mod CInterpolatedValue {
-    pub const m_flStartTime: usize = 0x0; // float
-    pub const m_flEndTime: usize = 0x4; // float
-    pub const m_flStartValue: usize = 0x8; // float
-    pub const m_flEndValue: usize = 0xC; // float
-    pub const m_nInterpType: usize = 0x10; // int32_t
-}
-
-pub mod CLightComponent { // CEntityComponent
-    pub const __m_pChainEntity: usize = 0x48; // CNetworkVarChainer
-    pub const m_Color: usize = 0x85; // Color
-    pub const m_SecondaryColor: usize = 0x89; // Color
-    pub const m_flBrightness: usize = 0x90; // float
-    pub const m_flBrightnessScale: usize = 0x94; // float
-    pub const m_flBrightnessMult: usize = 0x98; // float
-    pub const m_flRange: usize = 0x9C; // float
-    pub const m_flFalloff: usize = 0xA0; // float
-    pub const m_flAttenuation0: usize = 0xA4; // float
-    pub const m_flAttenuation1: usize = 0xA8; // float
-    pub const m_flAttenuation2: usize = 0xAC; // float
-    pub const m_flTheta: usize = 0xB0; // float
-    pub const m_flPhi: usize = 0xB4; // float
-    pub const m_hLightCookie: usize = 0xB8; // CStrongHandle<InfoForResourceTypeCTextureBase>
-    pub const m_nCascades: usize = 0xC0; // int32_t
-    pub const m_nCastShadows: usize = 0xC4; // int32_t
-    pub const m_nShadowWidth: usize = 0xC8; // int32_t
-    pub const m_nShadowHeight: usize = 0xCC; // int32_t
-    pub const m_bRenderDiffuse: usize = 0xD0; // bool
-    pub const m_nRenderSpecular: usize = 0xD4; // int32_t
-    pub const m_bRenderTransmissive: usize = 0xD8; // bool
-    pub const m_flOrthoLightWidth: usize = 0xDC; // float
-    pub const m_flOrthoLightHeight: usize = 0xE0; // float
-    pub const m_nStyle: usize = 0xE4; // int32_t
-    pub const m_Pattern: usize = 0xE8; // CUtlString
-    pub const m_nCascadeRenderStaticObjects: usize = 0xF0; // int32_t
-    pub const m_flShadowCascadeCrossFade: usize = 0xF4; // float
-    pub const m_flShadowCascadeDistanceFade: usize = 0xF8; // float
-    pub const m_flShadowCascadeDistance0: usize = 0xFC; // float
-    pub const m_flShadowCascadeDistance1: usize = 0x100; // float
-    pub const m_flShadowCascadeDistance2: usize = 0x104; // float
-    pub const m_flShadowCascadeDistance3: usize = 0x108; // float
-    pub const m_nShadowCascadeResolution0: usize = 0x10C; // int32_t
-    pub const m_nShadowCascadeResolution1: usize = 0x110; // int32_t
-    pub const m_nShadowCascadeResolution2: usize = 0x114; // int32_t
-    pub const m_nShadowCascadeResolution3: usize = 0x118; // int32_t
-    pub const m_bUsesBakedShadowing: usize = 0x11C; // bool
-    pub const m_nShadowPriority: usize = 0x120; // int32_t
-    pub const m_nBakedShadowIndex: usize = 0x124; // int32_t
-    pub const m_bRenderToCubemaps: usize = 0x128; // bool
-    pub const m_nDirectLight: usize = 0x12C; // int32_t
-    pub const m_nIndirectLight: usize = 0x130; // int32_t
-    pub const m_flFadeMinDist: usize = 0x134; // float
-    pub const m_flFadeMaxDist: usize = 0x138; // float
-    pub const m_flShadowFadeMinDist: usize = 0x13C; // float
-    pub const m_flShadowFadeMaxDist: usize = 0x140; // float
-    pub const m_bEnabled: usize = 0x144; // bool
-    pub const m_bFlicker: usize = 0x145; // bool
-    pub const m_bPrecomputedFieldsValid: usize = 0x146; // bool
-    pub const m_vPrecomputedBoundsMins: usize = 0x148; // Vector
-    pub const m_vPrecomputedBoundsMaxs: usize = 0x154; // Vector
-    pub const m_vPrecomputedOBBOrigin: usize = 0x160; // Vector
-    pub const m_vPrecomputedOBBAngles: usize = 0x16C; // QAngle
-    pub const m_vPrecomputedOBBExtent: usize = 0x178; // Vector
-    pub const m_flPrecomputedMaxRange: usize = 0x184; // float
-    pub const m_nFogLightingMode: usize = 0x188; // int32_t
-    pub const m_flFogContributionStength: usize = 0x18C; // float
-    pub const m_flNearClipPlane: usize = 0x190; // float
-    pub const m_SkyColor: usize = 0x194; // Color
-    pub const m_flSkyIntensity: usize = 0x198; // float
-    pub const m_SkyAmbientBounce: usize = 0x19C; // Color
-    pub const m_bUseSecondaryColor: usize = 0x1A0; // bool
-    pub const m_bMixedShadows: usize = 0x1A1; // bool
-    pub const m_flLightStyleStartTime: usize = 0x1A4; // GameTime_t
-    pub const m_flCapsuleLength: usize = 0x1A8; // float
-    pub const m_flMinRoughness: usize = 0x1AC; // float
-}
-
-pub mod CLogicRelay { // CLogicalEntity
-    pub const m_OnTrigger: usize = 0x540; // CEntityIOOutput
-    pub const m_OnSpawn: usize = 0x568; // CEntityIOOutput
-    pub const m_bDisabled: usize = 0x590; // bool
-    pub const m_bWaitForRefire: usize = 0x591; // bool
-    pub const m_bTriggerOnce: usize = 0x592; // bool
-    pub const m_bFastRetrigger: usize = 0x593; // bool
-    pub const m_bPassthoughCaller: usize = 0x594; // bool
-}
-
-pub mod CLogicalEntity { // C_BaseEntity
-}
-
-pub mod CModelState {
-    pub const m_hModel: usize = 0xA0; // CStrongHandle<InfoForResourceTypeCModel>
-    pub const m_ModelName: usize = 0xA8; // CUtlSymbolLarge
-    pub const m_bClientClothCreationSuppressed: usize = 0xE8; // bool
-    pub const m_MeshGroupMask: usize = 0x180; // uint64_t
-    pub const m_nIdealMotionType: usize = 0x222; // int8_t
-    pub const m_nForceLOD: usize = 0x223; // int8_t
-    pub const m_nClothUpdateFlags: usize = 0x224; // int8_t
-}
-
-pub mod CNetworkedSequenceOperation {
-    pub const m_hSequence: usize = 0x8; // HSequence
-    pub const m_flPrevCycle: usize = 0xC; // float
-    pub const m_flCycle: usize = 0x10; // float
-    pub const m_flWeight: usize = 0x14; // CNetworkedQuantizedFloat
-    pub const m_bSequenceChangeNetworked: usize = 0x1C; // bool
-    pub const m_bDiscontinuity: usize = 0x1D; // bool
-    pub const m_flPrevCycleFromDiscontinuity: usize = 0x20; // float
-    pub const m_flPrevCycleForAnimEventDetection: usize = 0x24; // float
-}
-
-pub mod CPlayerSprayDecalRenderHelper {
-}
-
-pub mod CPlayer_AutoaimServices { // CPlayerPawnComponent
-}
-
-pub mod CPlayer_CameraServices { // CPlayerPawnComponent
-    pub const m_vecCsViewPunchAngle: usize = 0x40; // QAngle
-    pub const m_nCsViewPunchAngleTick: usize = 0x4C; // GameTick_t
-    pub const m_flCsViewPunchAngleTickRatio: usize = 0x50; // float
-    pub const m_PlayerFog: usize = 0x58; // C_fogplayerparams_t
-    pub const m_hColorCorrectionCtrl: usize = 0x98; // CHandle<C_ColorCorrection>
-    pub const m_hViewEntity: usize = 0x9C; // CHandle<C_BaseEntity>
-    pub const m_hTonemapController: usize = 0xA0; // CHandle<C_TonemapController2>
-    pub const m_audio: usize = 0xA8; // audioparams_t
-    pub const m_PostProcessingVolumes: usize = 0x120; // C_NetworkUtlVectorBase<CHandle<C_PostProcessingVolume>>
-    pub const m_flOldPlayerZ: usize = 0x138; // float
-    pub const m_flOldPlayerViewOffsetZ: usize = 0x13C; // float
-    pub const m_CurrentFog: usize = 0x140; // fogparams_t
-    pub const m_hOldFogController: usize = 0x1A8; // CHandle<C_FogController>
-    pub const m_bOverrideFogColor: usize = 0x1AC; // bool[5]
-    pub const m_OverrideFogColor: usize = 0x1B1; // Color[5]
-    pub const m_bOverrideFogStartEnd: usize = 0x1C5; // bool[5]
-    pub const m_fOverrideFogStart: usize = 0x1CC; // float[5]
-    pub const m_fOverrideFogEnd: usize = 0x1E0; // float[5]
-    pub const m_hActivePostProcessingVolume: usize = 0x1F4; // CHandle<C_PostProcessingVolume>
-    pub const m_angDemoViewAngles: usize = 0x1F8; // QAngle
-}
-
-pub mod CPlayer_FlashlightServices { // CPlayerPawnComponent
-}
-
-pub mod CPlayer_ItemServices { // CPlayerPawnComponent
-}
-
-pub mod CPlayer_MovementServices { // CPlayerPawnComponent
-    pub const m_nImpulse: usize = 0x40; // int32_t
-    pub const m_nButtons: usize = 0x48; // CInButtonState
-    pub const m_nQueuedButtonDownMask: usize = 0x68; // uint64_t
-    pub const m_nQueuedButtonChangeMask: usize = 0x70; // uint64_t
-    pub const m_nButtonDoublePressed: usize = 0x78; // uint64_t
-    pub const m_pButtonPressedCmdNumber: usize = 0x80; // uint32_t[64]
-    pub const m_nLastCommandNumberProcessed: usize = 0x180; // uint32_t
-    pub const m_nToggleButtonDownMask: usize = 0x188; // uint64_t
-    pub const m_flMaxspeed: usize = 0x190; // float
-    pub const m_arrForceSubtickMoveWhen: usize = 0x194; // float[4]
-    pub const m_flForwardMove: usize = 0x1A4; // float
-    pub const m_flLeftMove: usize = 0x1A8; // float
-    pub const m_flUpMove: usize = 0x1AC; // float
-    pub const m_vecLastMovementImpulses: usize = 0x1B0; // Vector
-    pub const m_vecOldViewAngles: usize = 0x1BC; // QAngle
-}
-
-pub mod CPlayer_MovementServices_Humanoid { // CPlayer_MovementServices
-    pub const m_flStepSoundTime: usize = 0x1D0; // float
-    pub const m_flFallVelocity: usize = 0x1D4; // float
-    pub const m_bInCrouch: usize = 0x1D8; // bool
-    pub const m_nCrouchState: usize = 0x1DC; // uint32_t
-    pub const m_flCrouchTransitionStartTime: usize = 0x1E0; // GameTime_t
-    pub const m_bDucked: usize = 0x1E4; // bool
-    pub const m_bDucking: usize = 0x1E5; // bool
-    pub const m_bInDuckJump: usize = 0x1E6; // bool
-    pub const m_groundNormal: usize = 0x1E8; // Vector
-    pub const m_flSurfaceFriction: usize = 0x1F4; // float
-    pub const m_surfaceProps: usize = 0x1F8; // CUtlStringToken
-    pub const m_nStepside: usize = 0x208; // int32_t
-}
-
-pub mod CPlayer_ObserverServices { // CPlayerPawnComponent
-    pub const m_iObserverMode: usize = 0x40; // uint8_t
-    pub const m_hObserverTarget: usize = 0x44; // CHandle<C_BaseEntity>
-    pub const m_iObserverLastMode: usize = 0x48; // ObserverMode_t
-    pub const m_bForcedObserverMode: usize = 0x4C; // bool
-    pub const m_flObserverChaseDistance: usize = 0x50; // float
-    pub const m_flObserverChaseDistanceCalcTime: usize = 0x54; // GameTime_t
-}
-
-pub mod CPlayer_UseServices { // CPlayerPawnComponent
-}
-
-pub mod CPlayer_ViewModelServices { // CPlayerPawnComponent
-}
-
-pub mod CPlayer_WaterServices { // CPlayerPawnComponent
-}
-
-pub mod CPlayer_WeaponServices { // CPlayerPawnComponent
-    pub const m_bAllowSwitchToNoWeapon: usize = 0x40; // bool
-    pub const m_hMyWeapons: usize = 0x48; // C_NetworkUtlVectorBase<CHandle<C_BasePlayerWeapon>>
-    pub const m_hActiveWeapon: usize = 0x60; // CHandle<C_BasePlayerWeapon>
-    pub const m_hLastWeapon: usize = 0x64; // CHandle<C_BasePlayerWeapon>
-    pub const m_iAmmo: usize = 0x68; // uint16_t[32]
-}
-
-pub mod CPointOffScreenIndicatorUi { // C_PointClientUIWorldPanel
-    pub const m_bBeenEnabled: usize = 0xF20; // bool
-    pub const m_bHide: usize = 0xF21; // bool
-    pub const m_flSeenTargetTime: usize = 0xF24; // float
-    pub const m_pTargetPanel: usize = 0xF28; // C_PointClientUIWorldPanel*
-}
-
-pub mod CPointTemplate { // CLogicalEntity
-    pub const m_iszWorldName: usize = 0x540; // CUtlSymbolLarge
-    pub const m_iszSource2EntityLumpName: usize = 0x548; // CUtlSymbolLarge
-    pub const m_iszEntityFilterName: usize = 0x550; // CUtlSymbolLarge
-    pub const m_flTimeoutInterval: usize = 0x558; // float
-    pub const m_bAsynchronouslySpawnEntities: usize = 0x55C; // bool
-    pub const m_pOutputOnSpawned: usize = 0x560; // CEntityIOOutput
-    pub const m_clientOnlyEntityBehavior: usize = 0x588; // PointTemplateClientOnlyEntityBehavior_t
-    pub const m_ownerSpawnGroupType: usize = 0x58C; // PointTemplateOwnerSpawnGroupType_t
-    pub const m_createdSpawnGroupHandles: usize = 0x590; // CUtlVector<uint32_t>
-    pub const m_SpawnedEntityHandles: usize = 0x5A8; // CUtlVector<CEntityHandle>
-    pub const m_ScriptSpawnCallback: usize = 0x5C0; // HSCRIPT
-    pub const m_ScriptCallbackScope: usize = 0x5C8; // HSCRIPT
-}
-
-pub mod CPrecipitationVData { // CEntitySubclassVDataBase
-    pub const m_szParticlePrecipitationEffect: usize = 0x28; // CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>>
-    pub const m_flInnerDistance: usize = 0x108; // float
-    pub const m_nAttachType: usize = 0x10C; // ParticleAttachment_t
-    pub const m_bBatchSameVolumeType: usize = 0x110; // bool
-    pub const m_nRTEnvCP: usize = 0x114; // int32_t
-    pub const m_nRTEnvCPComponent: usize = 0x118; // int32_t
-    pub const m_szModifier: usize = 0x120; // CUtlString
-}
-
-pub mod CProjectedTextureBase {
-    pub const m_hTargetEntity: usize = 0xC; // CHandle<C_BaseEntity>
-    pub const m_bState: usize = 0x10; // bool
-    pub const m_bAlwaysUpdate: usize = 0x11; // bool
-    pub const m_flLightFOV: usize = 0x14; // float
-    pub const m_bEnableShadows: usize = 0x18; // bool
-    pub const m_bSimpleProjection: usize = 0x19; // bool
-    pub const m_bLightOnlyTarget: usize = 0x1A; // bool
-    pub const m_bLightWorld: usize = 0x1B; // bool
-    pub const m_bCameraSpace: usize = 0x1C; // bool
-    pub const m_flBrightnessScale: usize = 0x20; // float
-    pub const m_LightColor: usize = 0x24; // Color
-    pub const m_flIntensity: usize = 0x28; // float
-    pub const m_flLinearAttenuation: usize = 0x2C; // float
-    pub const m_flQuadraticAttenuation: usize = 0x30; // float
-    pub const m_bVolumetric: usize = 0x34; // bool
-    pub const m_flVolumetricIntensity: usize = 0x38; // float
-    pub const m_flNoiseStrength: usize = 0x3C; // float
-    pub const m_flFlashlightTime: usize = 0x40; // float
-    pub const m_nNumPlanes: usize = 0x44; // uint32_t
-    pub const m_flPlaneOffset: usize = 0x48; // float
-    pub const m_flColorTransitionTime: usize = 0x4C; // float
-    pub const m_flAmbient: usize = 0x50; // float
-    pub const m_SpotlightTextureName: usize = 0x54; // char[512]
-    pub const m_nSpotlightTextureFrame: usize = 0x254; // int32_t
-    pub const m_nShadowQuality: usize = 0x258; // uint32_t
-    pub const m_flNearZ: usize = 0x25C; // float
-    pub const m_flFarZ: usize = 0x260; // float
-    pub const m_flProjectionSize: usize = 0x264; // float
-    pub const m_flRotation: usize = 0x268; // float
-    pub const m_bFlipHorizontal: usize = 0x26C; // bool
-}
-
-pub mod CRenderComponent { // CEntityComponent
-    pub const __m_pChainEntity: usize = 0x10; // CNetworkVarChainer
-    pub const m_bIsRenderingWithViewModels: usize = 0x50; // bool
-    pub const m_nSplitscreenFlags: usize = 0x54; // uint32_t
-    pub const m_bEnableRendering: usize = 0x60; // bool
-    pub const m_bInterpolationReadyToDraw: usize = 0xB0; // bool
-}
-
-pub mod CSMatchStats_t { // CSPerRoundStats_t
-    pub const m_iEnemy5Ks: usize = 0x68; // int32_t
-    pub const m_iEnemy4Ks: usize = 0x6C; // int32_t
-    pub const m_iEnemy3Ks: usize = 0x70; // int32_t
-}
-
-pub mod CSPerRoundStats_t {
-    pub const m_iKills: usize = 0x30; // int32_t
-    pub const m_iDeaths: usize = 0x34; // int32_t
-    pub const m_iAssists: usize = 0x38; // int32_t
-    pub const m_iDamage: usize = 0x3C; // int32_t
-    pub const m_iEquipmentValue: usize = 0x40; // int32_t
-    pub const m_iMoneySaved: usize = 0x44; // int32_t
-    pub const m_iKillReward: usize = 0x48; // int32_t
-    pub const m_iLiveTime: usize = 0x4C; // int32_t
-    pub const m_iHeadShotKills: usize = 0x50; // int32_t
-    pub const m_iObjective: usize = 0x54; // int32_t
-    pub const m_iCashEarned: usize = 0x58; // int32_t
-    pub const m_iUtilityDamage: usize = 0x5C; // int32_t
-    pub const m_iEnemiesFlashed: usize = 0x60; // int32_t
-}
-
-pub mod CScriptComponent { // CEntityComponent
-    pub const m_scriptClassName: usize = 0x30; // CUtlSymbolLarge
-}
-
-pub mod CServerOnlyModelEntity { // C_BaseModelEntity
-}
-
-pub mod CSkeletonInstance { // CGameSceneNode
-    pub const m_modelState: usize = 0x160; // CModelState
-    pub const m_bIsAnimationEnabled: usize = 0x390; // bool
-    pub const m_bUseParentRenderBounds: usize = 0x391; // bool
-    pub const m_bDisableSolidCollisionsForHierarchy: usize = 0x392; // bool
-    pub const m_bDirtyMotionType: usize = 0x0; // bitfield:1
-    pub const m_bIsGeneratingLatchedParentSpaceState: usize = 0x0; // bitfield:1
-    pub const m_materialGroup: usize = 0x394; // CUtlStringToken
-    pub const m_nHitboxSet: usize = 0x398; // uint8_t
-}
-
-pub mod CSkyboxReference { // C_BaseEntity
-    pub const m_worldGroupId: usize = 0x540; // WorldGroupId_t
-    pub const m_hSkyCamera: usize = 0x544; // CHandle<C_SkyCamera>
-}
-
-pub mod CTablet { // C_CSWeaponBase
-}
-
-pub mod CTimeline { // IntervalTimer
-    pub const m_flValues: usize = 0x10; // float[64]
-    pub const m_nValueCounts: usize = 0x110; // int32_t[64]
-    pub const m_nBucketCount: usize = 0x210; // int32_t
-    pub const m_flInterval: usize = 0x214; // float
-    pub const m_flFinalValue: usize = 0x218; // float
-    pub const m_nCompressionType: usize = 0x21C; // TimelineCompression_t
-    pub const m_bStopped: usize = 0x220; // bool
-}
-
-pub mod CTripWireFire { // C_BaseCSGrenade
-}
-
-pub mod CTripWireFireProjectile { // C_BaseGrenade
-}
-
-pub mod CWaterSplasher { // C_BaseModelEntity
-}
-
-pub mod CWeaponZoneRepulsor { // C_CSWeaponBaseGun
-}
-
-pub mod C_AK47 { // C_CSWeaponBaseGun
-}
-
-pub mod C_AttributeContainer { // CAttributeManager
-    pub const m_Item: usize = 0x50; // C_EconItemView
-    pub const m_iExternalItemProviderRegisteredToken: usize = 0x498; // int32_t
-    pub const m_ullRegisteredAsItemID: usize = 0x4A0; // uint64_t
-}
-
-pub mod C_BarnLight { // C_BaseModelEntity
-    pub const m_bEnabled: usize = 0xCC0; // bool
-    pub const m_nColorMode: usize = 0xCC4; // int32_t
-    pub const m_Color: usize = 0xCC8; // Color
-    pub const m_flColorTemperature: usize = 0xCCC; // float
-    pub const m_flBrightness: usize = 0xCD0; // float
-    pub const m_flBrightnessScale: usize = 0xCD4; // float
-    pub const m_nDirectLight: usize = 0xCD8; // int32_t
-    pub const m_nBakedShadowIndex: usize = 0xCDC; // int32_t
-    pub const m_nLuminaireShape: usize = 0xCE0; // int32_t
-    pub const m_flLuminaireSize: usize = 0xCE4; // float
-    pub const m_flLuminaireAnisotropy: usize = 0xCE8; // float
-    pub const m_LightStyleString: usize = 0xCF0; // CUtlString
-    pub const m_flLightStyleStartTime: usize = 0xCF8; // GameTime_t
-    pub const m_QueuedLightStyleStrings: usize = 0xD00; // C_NetworkUtlVectorBase<CUtlString>
-    pub const m_LightStyleEvents: usize = 0xD18; // C_NetworkUtlVectorBase<CUtlString>
-    pub const m_LightStyleTargets: usize = 0xD30; // C_NetworkUtlVectorBase<CHandle<C_BaseModelEntity>>
-    pub const m_StyleEvent: usize = 0xD48; // CEntityIOOutput[4]
-    pub const m_hLightCookie: usize = 0xDE8; // CStrongHandle<InfoForResourceTypeCTextureBase>
-    pub const m_flShape: usize = 0xDF0; // float
-    pub const m_flSoftX: usize = 0xDF4; // float
-    pub const m_flSoftY: usize = 0xDF8; // float
-    pub const m_flSkirt: usize = 0xDFC; // float
-    pub const m_flSkirtNear: usize = 0xE00; // float
-    pub const m_vSizeParams: usize = 0xE04; // Vector
-    pub const m_flRange: usize = 0xE10; // float
-    pub const m_vShear: usize = 0xE14; // Vector
-    pub const m_nBakeSpecularToCubemaps: usize = 0xE20; // int32_t
-    pub const m_vBakeSpecularToCubemapsSize: usize = 0xE24; // Vector
-    pub const m_nCastShadows: usize = 0xE30; // int32_t
-    pub const m_nShadowMapSize: usize = 0xE34; // int32_t
-    pub const m_nShadowPriority: usize = 0xE38; // int32_t
-    pub const m_bContactShadow: usize = 0xE3C; // bool
-    pub const m_nBounceLight: usize = 0xE40; // int32_t
-    pub const m_flBounceScale: usize = 0xE44; // float
-    pub const m_flMinRoughness: usize = 0xE48; // float
-    pub const m_vAlternateColor: usize = 0xE4C; // Vector
-    pub const m_fAlternateColorBrightness: usize = 0xE58; // float
-    pub const m_nFog: usize = 0xE5C; // int32_t
-    pub const m_flFogStrength: usize = 0xE60; // float
-    pub const m_nFogShadows: usize = 0xE64; // int32_t
-    pub const m_flFogScale: usize = 0xE68; // float
-    pub const m_flFadeSizeStart: usize = 0xE6C; // float
-    pub const m_flFadeSizeEnd: usize = 0xE70; // float
-    pub const m_flShadowFadeSizeStart: usize = 0xE74; // float
-    pub const m_flShadowFadeSizeEnd: usize = 0xE78; // float
-    pub const m_bPrecomputedFieldsValid: usize = 0xE7C; // bool
-    pub const m_vPrecomputedBoundsMins: usize = 0xE80; // Vector
-    pub const m_vPrecomputedBoundsMaxs: usize = 0xE8C; // Vector
-    pub const m_vPrecomputedOBBOrigin: usize = 0xE98; // Vector
-    pub const m_vPrecomputedOBBAngles: usize = 0xEA4; // QAngle
-    pub const m_vPrecomputedOBBExtent: usize = 0xEB0; // Vector
-}
-
-pub mod C_BaseButton { // C_BaseToggle
-    pub const m_glowEntity: usize = 0xCC0; // CHandle<C_BaseModelEntity>
-    pub const m_usable: usize = 0xCC4; // bool
-    pub const m_szDisplayText: usize = 0xCC8; // CUtlSymbolLarge
-}
-
-pub mod C_BaseCSGrenade { // C_CSWeaponBase
-    pub const m_bClientPredictDelete: usize = 0x1A10; // bool
-    pub const m_bRedraw: usize = 0x1A11; // bool
-    pub const m_bIsHeldByPlayer: usize = 0x1A12; // bool
-    pub const m_bPinPulled: usize = 0x1A13; // bool
-    pub const m_bJumpThrow: usize = 0x1A14; // bool
-    pub const m_bThrowAnimating: usize = 0x1A15; // bool
-    pub const m_fThrowTime: usize = 0x1A18; // GameTime_t
-    pub const m_flThrowStrength: usize = 0x1A1C; // float
-    pub const m_flThrowStrengthApproach: usize = 0x1A20; // float
-    pub const m_fDropTime: usize = 0x1A24; // GameTime_t
-    pub const m_bJustPulledPin: usize = 0x1A28; // bool
-    pub const m_nNextHoldTick: usize = 0x1A2C; // GameTick_t
-    pub const m_flNextHoldFrac: usize = 0x1A30; // float
-    pub const m_hSwitchToWeaponAfterThrow: usize = 0x1A34; // CHandle<C_CSWeaponBase>
-}
-
-pub mod C_BaseCSGrenadeProjectile { // C_BaseGrenade
-    pub const m_vInitialPosition: usize = 0x1068; // Vector
-    pub const m_vInitialVelocity: usize = 0x1074; // Vector
-    pub const m_nBounces: usize = 0x1080; // int32_t
-    pub const m_nExplodeEffectIndex: usize = 0x1088; // CStrongHandle<InfoForResourceTypeIParticleSystemDefinition>
-    pub const m_nExplodeEffectTickBegin: usize = 0x1090; // int32_t
-    pub const m_vecExplodeEffectOrigin: usize = 0x1094; // Vector
-    pub const m_flSpawnTime: usize = 0x10A0; // GameTime_t
-    pub const vecLastTrailLinePos: usize = 0x10A4; // Vector
-    pub const flNextTrailLineTime: usize = 0x10B0; // GameTime_t
-    pub const m_bExplodeEffectBegan: usize = 0x10B4; // bool
-    pub const m_bCanCreateGrenadeTrail: usize = 0x10B5; // bool
-    pub const m_nSnapshotTrajectoryEffectIndex: usize = 0x10B8; // ParticleIndex_t
-    pub const m_hSnapshotTrajectoryParticleSnapshot: usize = 0x10C0; // CStrongHandle<InfoForResourceTypeIParticleSnapshot>
-    pub const m_arrTrajectoryTrailPoints: usize = 0x10C8; // CUtlVector<Vector>
-    pub const m_arrTrajectoryTrailPointCreationTimes: usize = 0x10E0; // CUtlVector<float>
-    pub const m_flTrajectoryTrailEffectCreationTime: usize = 0x10F8; // float
-}
-
-pub mod C_BaseClientUIEntity { // C_BaseModelEntity
-    pub const m_bEnabled: usize = 0xCC8; // bool
-    pub const m_DialogXMLName: usize = 0xCD0; // CUtlSymbolLarge
-    pub const m_PanelClassName: usize = 0xCD8; // CUtlSymbolLarge
-    pub const m_PanelID: usize = 0xCE0; // CUtlSymbolLarge
-}
-
-pub mod C_BaseCombatCharacter { // C_BaseFlex
-    pub const m_hMyWearables: usize = 0x1018; // C_NetworkUtlVectorBase<CHandle<C_EconWearable>>
-    pub const m_bloodColor: usize = 0x1030; // int32_t
-    pub const m_leftFootAttachment: usize = 0x1034; // AttachmentHandle_t
-    pub const m_rightFootAttachment: usize = 0x1035; // AttachmentHandle_t
-    pub const m_nWaterWakeMode: usize = 0x1038; // C_BaseCombatCharacter::WaterWakeMode_t
-    pub const m_flWaterWorldZ: usize = 0x103C; // float
-    pub const m_flWaterNextTraceTime: usize = 0x1040; // float
-    pub const m_flFieldOfView: usize = 0x1044; // float
-}
-
-pub mod C_BaseDoor { // C_BaseToggle
-    pub const m_bIsUsable: usize = 0xCC0; // bool
-}
-
-pub mod C_BaseEntity { // CEntityInstance
-    pub const m_CBodyComponent: usize = 0x30; // CBodyComponent*
-    pub const m_NetworkTransmitComponent: usize = 0x38; // CNetworkTransmitComponent
-    pub const m_nLastThinkTick: usize = 0x308; // GameTick_t
-    pub const m_pGameSceneNode: usize = 0x310; // CGameSceneNode*
-    pub const m_pRenderComponent: usize = 0x318; // CRenderComponent*
-    pub const m_pCollision: usize = 0x320; // CCollisionProperty*
-    pub const m_iMaxHealth: usize = 0x328; // int32_t
-    pub const m_iHealth: usize = 0x32C; // int32_t
-    pub const m_lifeState: usize = 0x330; // uint8_t
-    pub const m_bTakesDamage: usize = 0x331; // bool
-    pub const m_nTakeDamageFlags: usize = 0x334; // TakeDamageFlags_t
-    pub const m_ubInterpolationFrame: usize = 0x338; // uint8_t
-    pub const m_hSceneObjectController: usize = 0x33C; // CHandle<C_BaseEntity>
-    pub const m_nNoInterpolationTick: usize = 0x340; // int32_t
-    pub const m_nVisibilityNoInterpolationTick: usize = 0x344; // int32_t
-    pub const m_flProxyRandomValue: usize = 0x348; // float
-    pub const m_iEFlags: usize = 0x34C; // int32_t
-    pub const m_nWaterType: usize = 0x350; // uint8_t
-    pub const m_bInterpolateEvenWithNoModel: usize = 0x351; // bool
-    pub const m_bPredictionEligible: usize = 0x352; // bool
-    pub const m_bApplyLayerMatchIDToModel: usize = 0x353; // bool
-    pub const m_tokLayerMatchID: usize = 0x354; // CUtlStringToken
-    pub const m_nSubclassID: usize = 0x358; // CUtlStringToken
-    pub const m_nSimulationTick: usize = 0x368; // int32_t
-    pub const m_iCurrentThinkContext: usize = 0x36C; // int32_t
-    pub const m_aThinkFunctions: usize = 0x370; // CUtlVector<thinkfunc_t>
-    pub const m_flAnimTime: usize = 0x388; // float
-    pub const m_flSimulationTime: usize = 0x38C; // float
-    pub const m_nSceneObjectOverrideFlags: usize = 0x390; // uint8_t
-    pub const m_bHasSuccessfullyInterpolated: usize = 0x391; // bool
-    pub const m_bHasAddedVarsToInterpolation: usize = 0x392; // bool
-    pub const m_bRenderEvenWhenNotSuccessfullyInterpolated: usize = 0x393; // bool
-    pub const m_nInterpolationLatchDirtyFlags: usize = 0x394; // int32_t[2]
-    pub const m_ListEntry: usize = 0x39C; // uint16_t[11]
-    pub const m_flCreateTime: usize = 0x3B4; // GameTime_t
-    pub const m_flSpeed: usize = 0x3B8; // float
-    pub const m_EntClientFlags: usize = 0x3BC; // uint16_t
-    pub const m_bClientSideRagdoll: usize = 0x3BE; // bool
-    pub const m_iTeamNum: usize = 0x3BF; // uint8_t
-    pub const m_spawnflags: usize = 0x3C0; // uint32_t
-    pub const m_nNextThinkTick: usize = 0x3C4; // GameTick_t
-    pub const m_fFlags: usize = 0x3C8; // uint32_t
-    pub const m_vecAbsVelocity: usize = 0x3CC; // Vector
-    pub const m_vecVelocity: usize = 0x3D8; // CNetworkVelocityVector
-    pub const m_vecBaseVelocity: usize = 0x408; // Vector
-    pub const m_hEffectEntity: usize = 0x414; // CHandle<C_BaseEntity>
-    pub const m_hOwnerEntity: usize = 0x418; // CHandle<C_BaseEntity>
-    pub const m_MoveCollide: usize = 0x41C; // MoveCollide_t
-    pub const m_MoveType: usize = 0x41D; // MoveType_t
-    pub const m_flWaterLevel: usize = 0x420; // float
-    pub const m_fEffects: usize = 0x424; // uint32_t
-    pub const m_hGroundEntity: usize = 0x428; // CHandle<C_BaseEntity>
-    pub const m_flFriction: usize = 0x42C; // float
-    pub const m_flElasticity: usize = 0x430; // float
-    pub const m_flGravityScale: usize = 0x434; // float
-    pub const m_flTimeScale: usize = 0x438; // float
-    pub const m_bSimulatedEveryTick: usize = 0x43C; // bool
-    pub const m_bAnimatedEveryTick: usize = 0x43D; // bool
-    pub const m_flNavIgnoreUntilTime: usize = 0x440; // GameTime_t
-    pub const m_hThink: usize = 0x444; // uint16_t
-    pub const m_fBBoxVisFlags: usize = 0x450; // uint8_t
-    pub const m_bPredictable: usize = 0x451; // bool
-    pub const m_bRenderWithViewModels: usize = 0x452; // bool
-    pub const m_nSplitUserPlayerPredictionSlot: usize = 0x454; // CSplitScreenSlot
-    pub const m_nFirstPredictableCommand: usize = 0x458; // int32_t
-    pub const m_nLastPredictableCommand: usize = 0x45C; // int32_t
-    pub const m_hOldMoveParent: usize = 0x460; // CHandle<C_BaseEntity>
-    pub const m_Particles: usize = 0x468; // CParticleProperty
-    pub const m_vecPredictedScriptFloats: usize = 0x490; // CUtlVector<float>
-    pub const m_vecPredictedScriptFloatIDs: usize = 0x4A8; // CUtlVector<int32_t>
-    pub const m_nNextScriptVarRecordID: usize = 0x4D8; // int32_t
-    pub const m_vecAngVelocity: usize = 0x4E8; // QAngle
-    pub const m_DataChangeEventRef: usize = 0x4F4; // int32_t
-    pub const m_dependencies: usize = 0x4F8; // CUtlVector<CEntityHandle>
-    pub const m_nCreationTick: usize = 0x510; // int32_t
-    pub const m_bAnimTimeChanged: usize = 0x529; // bool
-    pub const m_bSimulationTimeChanged: usize = 0x52A; // bool
-    pub const m_sUniqueHammerID: usize = 0x538; // CUtlString
-}
-
-pub mod C_BaseFire { // C_BaseEntity
-    pub const m_flScale: usize = 0x540; // float
-    pub const m_flStartScale: usize = 0x544; // float
-    pub const m_flScaleTime: usize = 0x548; // float
-    pub const m_nFlags: usize = 0x54C; // uint32_t
-}
-
-pub mod C_BaseFlex { // CBaseAnimGraph
-    pub const m_flexWeight: usize = 0xE90; // C_NetworkUtlVectorBase<float>
-    pub const m_vLookTargetPosition: usize = 0xEA8; // Vector
-    pub const m_blinktoggle: usize = 0xEC0; // bool
-    pub const m_nLastFlexUpdateFrameCount: usize = 0xF20; // int32_t
-    pub const m_CachedViewTarget: usize = 0xF24; // Vector
-    pub const m_nNextSceneEventId: usize = 0xF30; // uint32_t
-    pub const m_iBlink: usize = 0xF34; // int32_t
-    pub const m_blinktime: usize = 0xF38; // float
-    pub const m_prevblinktoggle: usize = 0xF3C; // bool
-    pub const m_iJawOpen: usize = 0xF40; // int32_t
-    pub const m_flJawOpenAmount: usize = 0xF44; // float
-    pub const m_flBlinkAmount: usize = 0xF48; // float
-    pub const m_iMouthAttachment: usize = 0xF4C; // AttachmentHandle_t
-    pub const m_iEyeAttachment: usize = 0xF4D; // AttachmentHandle_t
-    pub const m_bResetFlexWeightsOnModelChange: usize = 0xF4E; // bool
-    pub const m_nEyeOcclusionRendererBone: usize = 0xF68; // int32_t
-    pub const m_mEyeOcclusionRendererCameraToBoneTransform: usize = 0xF6C; // matrix3x4_t
-    pub const m_vEyeOcclusionRendererHalfExtent: usize = 0xF9C; // Vector
-    pub const m_PhonemeClasses: usize = 0xFB8; // C_BaseFlex::Emphasized_Phoneme[3]
-}
-
-pub mod C_BaseFlex_Emphasized_Phoneme {
-    pub const m_sClassName: usize = 0x0; // CUtlString
-    pub const m_flAmount: usize = 0x18; // float
-    pub const m_bRequired: usize = 0x1C; // bool
-    pub const m_bBasechecked: usize = 0x1D; // bool
-    pub const m_bValid: usize = 0x1E; // bool
-}
-
-pub mod C_BaseGrenade { // C_BaseFlex
-    pub const m_bHasWarnedAI: usize = 0x1018; // bool
-    pub const m_bIsSmokeGrenade: usize = 0x1019; // bool
-    pub const m_bIsLive: usize = 0x101A; // bool
-    pub const m_DmgRadius: usize = 0x101C; // float
-    pub const m_flDetonateTime: usize = 0x1020; // GameTime_t
-    pub const m_flWarnAITime: usize = 0x1024; // float
-    pub const m_flDamage: usize = 0x1028; // float
-    pub const m_iszBounceSound: usize = 0x1030; // CUtlSymbolLarge
-    pub const m_ExplosionSound: usize = 0x1038; // CUtlString
-    pub const m_hThrower: usize = 0x1044; // CHandle<C_CSPlayerPawn>
-    pub const m_flNextAttack: usize = 0x105C; // GameTime_t
-    pub const m_hOriginalThrower: usize = 0x1060; // CHandle<C_CSPlayerPawn>
-}
-
-pub mod C_BaseModelEntity { // C_BaseEntity
-    pub const m_CRenderComponent: usize = 0xA10; // CRenderComponent*
-    pub const m_CHitboxComponent: usize = 0xA18; // CHitboxComponent
-    pub const m_bInitModelEffects: usize = 0xA60; // bool
-    pub const m_bIsStaticProp: usize = 0xA61; // bool
-    pub const m_nLastAddDecal: usize = 0xA64; // int32_t
-    pub const m_nDecalsAdded: usize = 0xA68; // int32_t
-    pub const m_iOldHealth: usize = 0xA6C; // int32_t
-    pub const m_nRenderMode: usize = 0xA70; // RenderMode_t
-    pub const m_nRenderFX: usize = 0xA71; // RenderFx_t
-    pub const m_bAllowFadeInView: usize = 0xA72; // bool
-    pub const m_clrRender: usize = 0xA73; // Color
-    pub const m_vecRenderAttributes: usize = 0xA78; // C_UtlVectorEmbeddedNetworkVar<EntityRenderAttribute_t>
-    pub const m_bRenderToCubemaps: usize = 0xAE0; // bool
-    pub const m_Collision: usize = 0xAE8; // CCollisionProperty
-    pub const m_Glow: usize = 0xB98; // CGlowProperty
-    pub const m_flGlowBackfaceMult: usize = 0xBF0; // float
-    pub const m_fadeMinDist: usize = 0xBF4; // float
-    pub const m_fadeMaxDist: usize = 0xBF8; // float
-    pub const m_flFadeScale: usize = 0xBFC; // float
-    pub const m_flShadowStrength: usize = 0xC00; // float
-    pub const m_nObjectCulling: usize = 0xC04; // uint8_t
-    pub const m_nAddDecal: usize = 0xC08; // int32_t
-    pub const m_vDecalPosition: usize = 0xC0C; // Vector
-    pub const m_vDecalForwardAxis: usize = 0xC18; // Vector
-    pub const m_flDecalHealBloodRate: usize = 0xC24; // float
-    pub const m_flDecalHealHeightRate: usize = 0xC28; // float
-    pub const m_ConfigEntitiesToPropagateMaterialDecalsTo: usize = 0xC30; // C_NetworkUtlVectorBase<CHandle<C_BaseModelEntity>>
-    pub const m_vecViewOffset: usize = 0xC48; // CNetworkViewOffsetVector
-    pub const m_pClientAlphaProperty: usize = 0xC78; // CClientAlphaProperty*
-    pub const m_ClientOverrideTint: usize = 0xC80; // Color
-    pub const m_bUseClientOverrideTint: usize = 0xC84; // bool
-}
-
-pub mod C_BasePlayerPawn { // C_BaseCombatCharacter
-    pub const m_pWeaponServices: usize = 0x10A8; // CPlayer_WeaponServices*
-    pub const m_pItemServices: usize = 0x10B0; // CPlayer_ItemServices*
-    pub const m_pAutoaimServices: usize = 0x10B8; // CPlayer_AutoaimServices*
-    pub const m_pObserverServices: usize = 0x10C0; // CPlayer_ObserverServices*
-    pub const m_pWaterServices: usize = 0x10C8; // CPlayer_WaterServices*
-    pub const m_pUseServices: usize = 0x10D0; // CPlayer_UseServices*
-    pub const m_pFlashlightServices: usize = 0x10D8; // CPlayer_FlashlightServices*
-    pub const m_pCameraServices: usize = 0x10E0; // CPlayer_CameraServices*
-    pub const m_pMovementServices: usize = 0x10E8; // CPlayer_MovementServices*
-    pub const m_ServerViewAngleChanges: usize = 0x10F8; // C_UtlVectorEmbeddedNetworkVar<ViewAngleServerChange_t>
-    pub const m_nHighestConsumedServerViewAngleChangeIndex: usize = 0x1148; // uint32_t
-    pub const v_angle: usize = 0x114C; // QAngle
-    pub const v_anglePrevious: usize = 0x1158; // QAngle
-    pub const m_iHideHUD: usize = 0x1164; // uint32_t
-    pub const m_skybox3d: usize = 0x1168; // sky3dparams_t
-    pub const m_flDeathTime: usize = 0x11F8; // GameTime_t
-    pub const m_vecPredictionError: usize = 0x11FC; // Vector
-    pub const m_flPredictionErrorTime: usize = 0x1208; // GameTime_t
-    pub const m_vecLastCameraSetupLocalOrigin: usize = 0x120C; // Vector
-    pub const m_flLastCameraSetupTime: usize = 0x1218; // GameTime_t
-    pub const m_flFOVSensitivityAdjust: usize = 0x121C; // float
-    pub const m_flMouseSensitivity: usize = 0x1220; // float
-    pub const m_vOldOrigin: usize = 0x1224; // Vector
-    pub const m_flOldSimulationTime: usize = 0x1230; // float
-    pub const m_nLastExecutedCommandNumber: usize = 0x1234; // int32_t
-    pub const m_nLastExecutedCommandTick: usize = 0x1238; // int32_t
-    pub const m_hController: usize = 0x123C; // CHandle<CBasePlayerController>
-    pub const m_bIsSwappingToPredictableController: usize = 0x1240; // bool
-}
-
-pub mod C_BasePlayerWeapon { // C_EconEntity
-    pub const m_nNextPrimaryAttackTick: usize = 0x1560; // GameTick_t
-    pub const m_flNextPrimaryAttackTickRatio: usize = 0x1564; // float
-    pub const m_nNextSecondaryAttackTick: usize = 0x1568; // GameTick_t
-    pub const m_flNextSecondaryAttackTickRatio: usize = 0x156C; // float
-    pub const m_iClip1: usize = 0x1570; // int32_t
-    pub const m_iClip2: usize = 0x1574; // int32_t
-    pub const m_pReserveAmmo: usize = 0x1578; // int32_t[2]
-}
-
-pub mod C_BasePropDoor { // C_DynamicProp
-    pub const m_eDoorState: usize = 0x10F8; // DoorState_t
-    pub const m_modelChanged: usize = 0x10FC; // bool
-    pub const m_bLocked: usize = 0x10FD; // bool
-    pub const m_closedPosition: usize = 0x1100; // Vector
-    pub const m_closedAngles: usize = 0x110C; // QAngle
-    pub const m_hMaster: usize = 0x1118; // CHandle<C_BasePropDoor>
-    pub const m_vWhereToSetLightingOrigin: usize = 0x111C; // Vector
-}
-
-pub mod C_BaseToggle { // C_BaseModelEntity
-}
-
-pub mod C_BaseTrigger { // C_BaseToggle
-    pub const m_bDisabled: usize = 0xCC0; // bool
-    pub const m_bClientSidePredicted: usize = 0xCC1; // bool
-}
-
-pub mod C_BaseViewModel { // CBaseAnimGraph
-    pub const m_vecLastFacing: usize = 0xE88; // Vector
-    pub const m_nViewModelIndex: usize = 0xE94; // uint32_t
-    pub const m_nAnimationParity: usize = 0xE98; // uint32_t
-    pub const m_flAnimationStartTime: usize = 0xE9C; // float
-    pub const m_hWeapon: usize = 0xEA0; // CHandle<C_BasePlayerWeapon>
-    pub const m_sVMName: usize = 0xEA8; // CUtlSymbolLarge
-    pub const m_sAnimationPrefix: usize = 0xEB0; // CUtlSymbolLarge
-    pub const m_hWeaponModel: usize = 0xEB8; // CHandle<C_ViewmodelWeapon>
-    pub const m_iCameraAttachment: usize = 0xEBC; // AttachmentHandle_t
-    pub const m_vecLastCameraAngles: usize = 0xEC0; // QAngle
-    pub const m_previousElapsedDuration: usize = 0xECC; // float
-    pub const m_previousCycle: usize = 0xED0; // float
-    pub const m_nOldAnimationParity: usize = 0xED4; // int32_t
-    pub const m_hOldLayerSequence: usize = 0xED8; // HSequence
-    pub const m_oldLayer: usize = 0xEDC; // int32_t
-    pub const m_oldLayerStartTime: usize = 0xEE0; // float
-    pub const m_hControlPanel: usize = 0xEE4; // CHandle<C_BaseEntity>
-}
-
-pub mod C_Beam { // C_BaseModelEntity
-    pub const m_flFrameRate: usize = 0xCC0; // float
-    pub const m_flHDRColorScale: usize = 0xCC4; // float
-    pub const m_flFireTime: usize = 0xCC8; // GameTime_t
-    pub const m_flDamage: usize = 0xCCC; // float
-    pub const m_nNumBeamEnts: usize = 0xCD0; // uint8_t
-    pub const m_queryHandleHalo: usize = 0xCD4; // int32_t
-    pub const m_hBaseMaterial: usize = 0xCF8; // CStrongHandle<InfoForResourceTypeIMaterial2>
-    pub const m_nHaloIndex: usize = 0xD00; // CStrongHandle<InfoForResourceTypeIMaterial2>
-    pub const m_nBeamType: usize = 0xD08; // BeamType_t
-    pub const m_nBeamFlags: usize = 0xD0C; // uint32_t
-    pub const m_hAttachEntity: usize = 0xD10; // CHandle<C_BaseEntity>[10]
-    pub const m_nAttachIndex: usize = 0xD38; // AttachmentHandle_t[10]
-    pub const m_fWidth: usize = 0xD44; // float
-    pub const m_fEndWidth: usize = 0xD48; // float
-    pub const m_fFadeLength: usize = 0xD4C; // float
-    pub const m_fHaloScale: usize = 0xD50; // float
-    pub const m_fAmplitude: usize = 0xD54; // float
-    pub const m_fStartFrame: usize = 0xD58; // float
-    pub const m_fSpeed: usize = 0xD5C; // float
-    pub const m_flFrame: usize = 0xD60; // float
-    pub const m_nClipStyle: usize = 0xD64; // BeamClipStyle_t
-    pub const m_bTurnedOff: usize = 0xD68; // bool
-    pub const m_vecEndPos: usize = 0xD6C; // Vector
-    pub const m_hEndEntity: usize = 0xD78; // CHandle<C_BaseEntity>
-}
-
-pub mod C_Breakable { // C_BaseModelEntity
-}
-
-pub mod C_BreakableProp { // CBaseProp
-    pub const m_OnBreak: usize = 0xEC8; // CEntityIOOutput
-    pub const m_OnHealthChanged: usize = 0xEF0; // CEntityOutputTemplate<float>
-    pub const m_OnTakeDamage: usize = 0xF18; // CEntityIOOutput
-    pub const m_impactEnergyScale: usize = 0xF40; // float
-    pub const m_iMinHealthDmg: usize = 0xF44; // int32_t
-    pub const m_flPressureDelay: usize = 0xF48; // float
-    pub const m_hBreaker: usize = 0xF4C; // CHandle<C_BaseEntity>
-    pub const m_PerformanceMode: usize = 0xF50; // PerformanceMode_t
-    pub const m_flDmgModBullet: usize = 0xF54; // float
-    pub const m_flDmgModClub: usize = 0xF58; // float
-    pub const m_flDmgModExplosive: usize = 0xF5C; // float
-    pub const m_flDmgModFire: usize = 0xF60; // float
-    pub const m_iszPhysicsDamageTableName: usize = 0xF68; // CUtlSymbolLarge
-    pub const m_iszBasePropData: usize = 0xF70; // CUtlSymbolLarge
-    pub const m_iInteractions: usize = 0xF78; // int32_t
-    pub const m_flPreventDamageBeforeTime: usize = 0xF7C; // GameTime_t
-    pub const m_bHasBreakPiecesOrCommands: usize = 0xF80; // bool
-    pub const m_explodeDamage: usize = 0xF84; // float
-    pub const m_explodeRadius: usize = 0xF88; // float
-    pub const m_explosionDelay: usize = 0xF90; // float
-    pub const m_explosionBuildupSound: usize = 0xF98; // CUtlSymbolLarge
-    pub const m_explosionCustomEffect: usize = 0xFA0; // CUtlSymbolLarge
-    pub const m_explosionCustomSound: usize = 0xFA8; // CUtlSymbolLarge
-    pub const m_explosionModifier: usize = 0xFB0; // CUtlSymbolLarge
-    pub const m_hPhysicsAttacker: usize = 0xFB8; // CHandle<C_BasePlayerPawn>
-    pub const m_flLastPhysicsInfluenceTime: usize = 0xFBC; // GameTime_t
-    pub const m_flDefaultFadeScale: usize = 0xFC0; // float
-    pub const m_hLastAttacker: usize = 0xFC4; // CHandle<C_BaseEntity>
-    pub const m_hFlareEnt: usize = 0xFC8; // CHandle<C_BaseEntity>
-    pub const m_noGhostCollision: usize = 0xFCC; // bool
-}
-
-pub mod C_BulletHitModel { // CBaseAnimGraph
-    pub const m_matLocal: usize = 0xE80; // matrix3x4_t
-    pub const m_iBoneIndex: usize = 0xEB0; // int32_t
-    pub const m_hPlayerParent: usize = 0xEB4; // CHandle<C_BaseEntity>
-    pub const m_bIsHit: usize = 0xEB8; // bool
-    pub const m_flTimeCreated: usize = 0xEBC; // float
-    pub const m_vecStartPos: usize = 0xEC0; // Vector
-}
-
-pub mod C_C4 { // C_CSWeaponBase
-    pub const m_szScreenText: usize = 0x1A10; // char[32]
-    pub const m_activeLightParticleIndex: usize = 0x1A30; // ParticleIndex_t
-    pub const m_eActiveLightEffect: usize = 0x1A34; // C4LightEffect_t
-    pub const m_bStartedArming: usize = 0x1A38; // bool
-    pub const m_fArmedTime: usize = 0x1A3C; // GameTime_t
-    pub const m_bBombPlacedAnimation: usize = 0x1A40; // bool
-    pub const m_bIsPlantingViaUse: usize = 0x1A41; // bool
-    pub const m_entitySpottedState: usize = 0x1A48; // EntitySpottedState_t
-    pub const m_nSpotRules: usize = 0x1A60; // int32_t
-    pub const m_bPlayedArmingBeeps: usize = 0x1A64; // bool[7]
-    pub const m_bBombPlanted: usize = 0x1A6B; // bool
-    pub const m_bDroppedFromDeath: usize = 0x1A6C; // bool
-}
-
-pub mod C_CSGOViewModel { // C_PredictedViewModel
-    pub const m_bShouldIgnoreOffsetAndAccuracy: usize = 0xF10; // bool
-    pub const m_nWeaponParity: usize = 0xF14; // uint32_t
-    pub const m_nOldWeaponParity: usize = 0xF18; // uint32_t
-    pub const m_nLastKnownAssociatedWeaponEntIndex: usize = 0xF1C; // CEntityIndex
-    pub const m_bNeedToQueueHighResComposite: usize = 0xF20; // bool
-    pub const m_vLoweredWeaponOffset: usize = 0xF64; // QAngle
-}
-
-pub mod C_CSGO_CounterTerroristTeamIntroCamera { // C_CSGO_TeamPreviewCamera
-}
-
-pub mod C_CSGO_CounterTerroristWingmanIntroCamera { // C_CSGO_TeamPreviewCamera
-}
-
-pub mod C_CSGO_EndOfMatchCamera { // C_CSGO_TeamPreviewCamera
-}
-
-pub mod C_CSGO_EndOfMatchCharacterPosition { // C_CSGO_TeamPreviewCharacterPosition
-}
-
-pub mod C_CSGO_EndOfMatchLineupEnd { // C_CSGO_EndOfMatchLineupEndpoint
-}
-
-pub mod C_CSGO_EndOfMatchLineupEndpoint { // C_BaseEntity
-}
-
-pub mod C_CSGO_EndOfMatchLineupStart { // C_CSGO_EndOfMatchLineupEndpoint
-}
-
-pub mod C_CSGO_MapPreviewCameraPath { // C_BaseEntity
-    pub const m_flZFar: usize = 0x540; // float
-    pub const m_flZNear: usize = 0x544; // float
-    pub const m_bLoop: usize = 0x548; // bool
-    pub const m_bVerticalFOV: usize = 0x549; // bool
-    pub const m_bConstantSpeed: usize = 0x54A; // bool
-    pub const m_flDuration: usize = 0x54C; // float
-    pub const m_flPathLength: usize = 0x590; // float
-    pub const m_flPathDuration: usize = 0x594; // float
-}
-
-pub mod C_CSGO_MapPreviewCameraPathNode { // C_BaseEntity
-    pub const m_szParentPathUniqueID: usize = 0x540; // CUtlSymbolLarge
-    pub const m_nPathIndex: usize = 0x548; // int32_t
-    pub const m_vInTangentLocal: usize = 0x54C; // Vector
-    pub const m_vOutTangentLocal: usize = 0x558; // Vector
-    pub const m_flFOV: usize = 0x564; // float
-    pub const m_flSpeed: usize = 0x568; // float
-    pub const m_flEaseIn: usize = 0x56C; // float
-    pub const m_flEaseOut: usize = 0x570; // float
-    pub const m_vInTangentWorld: usize = 0x574; // Vector
-    pub const m_vOutTangentWorld: usize = 0x580; // Vector
-}
-
-pub mod C_CSGO_PreviewModel { // C_BaseFlex
-    pub const m_animgraph: usize = 0x1018; // CUtlString
-    pub const m_animgraphCharacterModeString: usize = 0x1020; // CUtlString
-    pub const m_defaultAnim: usize = 0x1028; // CUtlString
-    pub const m_nDefaultAnimLoopMode: usize = 0x1030; // AnimLoopMode_t
-    pub const m_flInitialModelScale: usize = 0x1034; // float
-}
-
-pub mod C_CSGO_PreviewModelAlias_csgo_item_previewmodel { // C_CSGO_PreviewModel
-}
-
-pub mod C_CSGO_PreviewPlayer { // C_CSPlayerPawn
-    pub const m_animgraph: usize = 0x23B8; // CUtlString
-    pub const m_animgraphCharacterModeString: usize = 0x23C0; // CUtlString
-    pub const m_flInitialModelScale: usize = 0x23C8; // float
-}
-
-pub mod C_CSGO_PreviewPlayerAlias_csgo_player_previewmodel { // C_CSGO_PreviewPlayer
-}
-
-pub mod C_CSGO_TeamIntroCharacterPosition { // C_CSGO_TeamPreviewCharacterPosition
-}
-
-pub mod C_CSGO_TeamIntroCounterTerroristPosition { // C_CSGO_TeamIntroCharacterPosition
-}
-
-pub mod C_CSGO_TeamIntroTerroristPosition { // C_CSGO_TeamIntroCharacterPosition
-}
-
-pub mod C_CSGO_TeamPreviewCamera { // C_CSGO_MapPreviewCameraPath
-    pub const m_nVariant: usize = 0x5A0; // int32_t
-    pub const m_bDofEnabled: usize = 0x5A4; // bool
-    pub const m_flDofNearBlurry: usize = 0x5A8; // float
-    pub const m_flDofNearCrisp: usize = 0x5AC; // float
-    pub const m_flDofFarCrisp: usize = 0x5B0; // float
-    pub const m_flDofFarBlurry: usize = 0x5B4; // float
-    pub const m_flDofTiltToGround: usize = 0x5B8; // float
-}
-
-pub mod C_CSGO_TeamPreviewCharacterPosition { // C_BaseEntity
-    pub const m_nVariant: usize = 0x540; // int32_t
-    pub const m_nRandom: usize = 0x544; // int32_t
-    pub const m_nOrdinal: usize = 0x548; // int32_t
-    pub const m_sWeaponName: usize = 0x550; // CUtlString
-    pub const m_xuid: usize = 0x558; // uint64_t
-    pub const m_agentItem: usize = 0x560; // C_EconItemView
-    pub const m_glovesItem: usize = 0x9A8; // C_EconItemView
-    pub const m_weaponItem: usize = 0xDF0; // C_EconItemView
-}
-
-pub mod C_CSGO_TeamPreviewModel { // C_CSGO_PreviewPlayer
-}
-
-pub mod C_CSGO_TeamSelectCamera { // C_CSGO_TeamPreviewCamera
-}
-
-pub mod C_CSGO_TeamSelectCharacterPosition { // C_CSGO_TeamPreviewCharacterPosition
-}
-
-pub mod C_CSGO_TeamSelectCounterTerroristPosition { // C_CSGO_TeamSelectCharacterPosition
-}
-
-pub mod C_CSGO_TeamSelectTerroristPosition { // C_CSGO_TeamSelectCharacterPosition
-}
-
-pub mod C_CSGO_TerroristTeamIntroCamera { // C_CSGO_TeamPreviewCamera
-}
-
-pub mod C_CSGO_TerroristWingmanIntroCamera { // C_CSGO_TeamPreviewCamera
-}
-
-pub mod C_CSGameRules { // C_TeamplayRules
-    pub const __m_pChainEntity: usize = 0x8; // CNetworkVarChainer
-    pub const m_bFreezePeriod: usize = 0x30; // bool
-    pub const m_bWarmupPeriod: usize = 0x31; // bool
-    pub const m_fWarmupPeriodEnd: usize = 0x34; // GameTime_t
-    pub const m_fWarmupPeriodStart: usize = 0x38; // GameTime_t
-    pub const m_nTotalPausedTicks: usize = 0x3C; // int32_t
-    pub const m_nPauseStartTick: usize = 0x40; // int32_t
-    pub const m_bServerPaused: usize = 0x44; // bool
-    pub const m_bGamePaused: usize = 0x45; // bool
-    pub const m_bTerroristTimeOutActive: usize = 0x46; // bool
-    pub const m_bCTTimeOutActive: usize = 0x47; // bool
-    pub const m_flTerroristTimeOutRemaining: usize = 0x48; // float
-    pub const m_flCTTimeOutRemaining: usize = 0x4C; // float
-    pub const m_nTerroristTimeOuts: usize = 0x50; // int32_t
-    pub const m_nCTTimeOuts: usize = 0x54; // int32_t
-    pub const m_bTechnicalTimeOut: usize = 0x58; // bool
-    pub const m_bMatchWaitingForResume: usize = 0x59; // bool
-    pub const m_iRoundTime: usize = 0x5C; // int32_t
-    pub const m_fMatchStartTime: usize = 0x60; // float
-    pub const m_fRoundStartTime: usize = 0x64; // GameTime_t
-    pub const m_flRestartRoundTime: usize = 0x68; // GameTime_t
-    pub const m_bGameRestart: usize = 0x6C; // bool
-    pub const m_flGameStartTime: usize = 0x70; // float
-    pub const m_timeUntilNextPhaseStarts: usize = 0x74; // float
-    pub const m_gamePhase: usize = 0x78; // int32_t
-    pub const m_totalRoundsPlayed: usize = 0x7C; // int32_t
-    pub const m_nRoundsPlayedThisPhase: usize = 0x80; // int32_t
-    pub const m_nOvertimePlaying: usize = 0x84; // int32_t
-    pub const m_iHostagesRemaining: usize = 0x88; // int32_t
-    pub const m_bAnyHostageReached: usize = 0x8C; // bool
-    pub const m_bMapHasBombTarget: usize = 0x8D; // bool
-    pub const m_bMapHasRescueZone: usize = 0x8E; // bool
-    pub const m_bMapHasBuyZone: usize = 0x8F; // bool
-    pub const m_bIsQueuedMatchmaking: usize = 0x90; // bool
-    pub const m_nQueuedMatchmakingMode: usize = 0x94; // int32_t
-    pub const m_bIsValveDS: usize = 0x98; // bool
-    pub const m_bLogoMap: usize = 0x99; // bool
-    pub const m_bPlayAllStepSoundsOnServer: usize = 0x9A; // bool
-    pub const m_iSpectatorSlotCount: usize = 0x9C; // int32_t
-    pub const m_MatchDevice: usize = 0xA0; // int32_t
-    pub const m_bHasMatchStarted: usize = 0xA4; // bool
-    pub const m_nNextMapInMapgroup: usize = 0xA8; // int32_t
-    pub const m_szTournamentEventName: usize = 0xAC; // char[512]
-    pub const m_szTournamentEventStage: usize = 0x2AC; // char[512]
-    pub const m_szMatchStatTxt: usize = 0x4AC; // char[512]
-    pub const m_szTournamentPredictionsTxt: usize = 0x6AC; // char[512]
-    pub const m_nTournamentPredictionsPct: usize = 0x8AC; // int32_t
-    pub const m_flCMMItemDropRevealStartTime: usize = 0x8B0; // GameTime_t
-    pub const m_flCMMItemDropRevealEndTime: usize = 0x8B4; // GameTime_t
-    pub const m_bIsDroppingItems: usize = 0x8B8; // bool
-    pub const m_bIsQuestEligible: usize = 0x8B9; // bool
-    pub const m_bIsHltvActive: usize = 0x8BA; // bool
-    pub const m_nGuardianModeWaveNumber: usize = 0x8BC; // int32_t
-    pub const m_nGuardianModeSpecialKillsRemaining: usize = 0x8C0; // int32_t
-    pub const m_nGuardianModeSpecialWeaponNeeded: usize = 0x8C4; // int32_t
-    pub const m_nGuardianGrenadesToGiveBots: usize = 0x8C8; // int32_t
-    pub const m_nNumHeaviesToSpawn: usize = 0x8CC; // int32_t
-    pub const m_numGlobalGiftsGiven: usize = 0x8D0; // uint32_t
-    pub const m_numGlobalGifters: usize = 0x8D4; // uint32_t
-    pub const m_numGlobalGiftsPeriodSeconds: usize = 0x8D8; // uint32_t
-    pub const m_arrFeaturedGiftersAccounts: usize = 0x8DC; // uint32_t[4]
-    pub const m_arrFeaturedGiftersGifts: usize = 0x8EC; // uint32_t[4]
-    pub const m_arrProhibitedItemIndices: usize = 0x8FC; // uint16_t[100]
-    pub const m_arrTournamentActiveCasterAccounts: usize = 0x9C4; // uint32_t[4]
-    pub const m_numBestOfMaps: usize = 0x9D4; // int32_t
-    pub const m_nHalloweenMaskListSeed: usize = 0x9D8; // int32_t
-    pub const m_bBombDropped: usize = 0x9DC; // bool
-    pub const m_bBombPlanted: usize = 0x9DD; // bool
-    pub const m_iRoundWinStatus: usize = 0x9E0; // int32_t
-    pub const m_eRoundWinReason: usize = 0x9E4; // int32_t
-    pub const m_bTCantBuy: usize = 0x9E8; // bool
-    pub const m_bCTCantBuy: usize = 0x9E9; // bool
-    pub const m_flGuardianBuyUntilTime: usize = 0x9EC; // GameTime_t
-    pub const m_iMatchStats_RoundResults: usize = 0x9F0; // int32_t[30]
-    pub const m_iMatchStats_PlayersAlive_CT: usize = 0xA68; // int32_t[30]
-    pub const m_iMatchStats_PlayersAlive_T: usize = 0xAE0; // int32_t[30]
-    pub const m_TeamRespawnWaveTimes: usize = 0xB58; // float[32]
-    pub const m_flNextRespawnWave: usize = 0xBD8; // GameTime_t[32]
-    pub const m_nServerQuestID: usize = 0xC58; // int32_t
-    pub const m_vMinimapMins: usize = 0xC5C; // Vector
-    pub const m_vMinimapMaxs: usize = 0xC68; // Vector
-    pub const m_MinimapVerticalSectionHeights: usize = 0xC74; // float[8]
-    pub const m_bDontIncrementCoopWave: usize = 0xC94; // bool
-    pub const m_bSpawnedTerrorHuntHeavy: usize = 0xC95; // bool
-    pub const m_nEndMatchMapGroupVoteTypes: usize = 0xC98; // int32_t[10]
-    pub const m_nEndMatchMapGroupVoteOptions: usize = 0xCC0; // int32_t[10]
-    pub const m_nEndMatchMapVoteWinner: usize = 0xCE8; // int32_t
-    pub const m_iNumConsecutiveCTLoses: usize = 0xCEC; // int32_t
-    pub const m_iNumConsecutiveTerroristLoses: usize = 0xCF0; // int32_t
-    pub const m_bMarkClientStopRecordAtRoundEnd: usize = 0xD10; // bool
-    pub const m_nMatchAbortedEarlyReason: usize = 0xD68; // int32_t
-    pub const m_bHasTriggeredRoundStartMusic: usize = 0xD6C; // bool
-    pub const m_bHasTriggeredCoopSpawnReset: usize = 0xD6D; // bool
-    pub const m_bSwitchingTeamsAtRoundReset: usize = 0xD6E; // bool
-    pub const m_pGameModeRules: usize = 0xD88; // CCSGameModeRules*
-    pub const m_RetakeRules: usize = 0xD90; // C_RetakeGameRules
-    pub const m_nMatchEndCount: usize = 0xEA8; // uint8_t
-    pub const m_nTTeamIntroVariant: usize = 0xEAC; // int32_t
-    pub const m_nCTTeamIntroVariant: usize = 0xEB0; // int32_t
-    pub const m_bTeamIntroPeriod: usize = 0xEB4; // bool
-    pub const m_flLastPerfSampleTime: usize = 0x4EC0; // double
-}
-
-pub mod C_CSGameRulesProxy { // C_GameRulesProxy
-    pub const m_pGameRules: usize = 0x540; // C_CSGameRules*
-}
-
-pub mod C_CSMinimapBoundary { // C_BaseEntity
-}
-
-pub mod C_CSObserverPawn { // C_CSPlayerPawnBase
-    pub const m_hDetectParentChange: usize = 0x16B8; // CEntityHandle
-}
-
-pub mod C_CSPlayerPawn { // C_CSPlayerPawnBase
-    pub const m_pBulletServices: usize = 0x16B8; // CCSPlayer_BulletServices*
-    pub const m_pHostageServices: usize = 0x16C0; // CCSPlayer_HostageServices*
-    pub const m_pBuyServices: usize = 0x16C8; // CCSPlayer_BuyServices*
-    pub const m_pGlowServices: usize = 0x16D0; // CCSPlayer_GlowServices*
-    pub const m_pActionTrackingServices: usize = 0x16D8; // CCSPlayer_ActionTrackingServices*
-    pub const m_flHealthShotBoostExpirationTime: usize = 0x16E0; // GameTime_t
-    pub const m_flLastFiredWeaponTime: usize = 0x16E4; // GameTime_t
-    pub const m_bHasFemaleVoice: usize = 0x16E8; // bool
-    pub const m_flLandseconds: usize = 0x16EC; // float
-    pub const m_flOldFallVelocity: usize = 0x16F0; // float
-    pub const m_szLastPlaceName: usize = 0x16F4; // char[18]
-    pub const m_bPrevDefuser: usize = 0x1706; // bool
-    pub const m_bPrevHelmet: usize = 0x1707; // bool
-    pub const m_nPrevArmorVal: usize = 0x1708; // int32_t
-    pub const m_nPrevGrenadeAmmoCount: usize = 0x170C; // int32_t
-    pub const m_unPreviousWeaponHash: usize = 0x1710; // uint32_t
-    pub const m_unWeaponHash: usize = 0x1714; // uint32_t
-    pub const m_bInBuyZone: usize = 0x1718; // bool
-    pub const m_bPreviouslyInBuyZone: usize = 0x1719; // bool
-    pub const m_aimPunchAngle: usize = 0x171C; // QAngle
-    pub const m_aimPunchAngleVel: usize = 0x1728; // QAngle
-    pub const m_aimPunchTickBase: usize = 0x1734; // int32_t
-    pub const m_aimPunchTickFraction: usize = 0x1738; // float
-    pub const m_aimPunchCache: usize = 0x1740; // CUtlVector<QAngle>
-    pub const m_bInLanding: usize = 0x1760; // bool
-    pub const m_flLandingTime: usize = 0x1764; // float
-    pub const m_bInHostageRescueZone: usize = 0x1768; // bool
-    pub const m_bInBombZone: usize = 0x1769; // bool
-    pub const m_bIsBuyMenuOpen: usize = 0x176A; // bool
-    pub const m_flTimeOfLastInjury: usize = 0x176C; // GameTime_t
-    pub const m_flNextSprayDecalTime: usize = 0x1770; // GameTime_t
-    pub const m_iRetakesOffering: usize = 0x1888; // int32_t
-    pub const m_iRetakesOfferingCard: usize = 0x188C; // int32_t
-    pub const m_bRetakesHasDefuseKit: usize = 0x1890; // bool
-    pub const m_bRetakesMVPLastRound: usize = 0x1891; // bool
-    pub const m_iRetakesMVPBoostItem: usize = 0x1894; // int32_t
-    pub const m_RetakesMVPBoostExtraUtility: usize = 0x1898; // loadout_slot_t
-    pub const m_bNeedToReApplyGloves: usize = 0x18B8; // bool
-    pub const m_EconGloves: usize = 0x18C0; // C_EconItemView
-    pub const m_bMustSyncRagdollState: usize = 0x1D08; // bool
-    pub const m_nRagdollDamageBone: usize = 0x1D0C; // int32_t
-    pub const m_vRagdollDamageForce: usize = 0x1D10; // Vector
-    pub const m_vRagdollDamagePosition: usize = 0x1D1C; // Vector
-    pub const m_szRagdollDamageWeaponName: usize = 0x1D28; // char[64]
-    pub const m_bRagdollDamageHeadshot: usize = 0x1D68; // bool
-    pub const m_vRagdollServerOrigin: usize = 0x1D6C; // Vector
-    pub const m_bLastHeadBoneTransformIsValid: usize = 0x2380; // bool
-    pub const m_lastLandTime: usize = 0x2384; // GameTime_t
-    pub const m_bOnGroundLastTick: usize = 0x2388; // bool
-    pub const m_qDeathEyeAngles: usize = 0x23A4; // QAngle
-    pub const m_bSkipOneHeadConstraintUpdate: usize = 0x23B0; // bool
-}
-
-pub mod C_CSPlayerPawnBase { // C_BasePlayerPawn
-    pub const m_pPingServices: usize = 0x1268; // CCSPlayer_PingServices*
-    pub const m_pViewModelServices: usize = 0x1270; // CPlayer_ViewModelServices*
-    pub const m_fRenderingClipPlane: usize = 0x1280; // float[4]
-    pub const m_nLastClipPlaneSetupFrame: usize = 0x1290; // int32_t
-    pub const m_vecLastClipCameraPos: usize = 0x1294; // Vector
-    pub const m_vecLastClipCameraForward: usize = 0x12A0; // Vector
-    pub const m_bClipHitStaticWorld: usize = 0x12AC; // bool
-    pub const m_bCachedPlaneIsValid: usize = 0x12AD; // bool
-    pub const m_pClippingWeapon: usize = 0x12B0; // C_CSWeaponBase*
-    pub const m_previousPlayerState: usize = 0x12B8; // CSPlayerState
-    pub const m_flLastCollisionCeiling: usize = 0x12BC; // float
-    pub const m_flLastCollisionCeilingChangeTime: usize = 0x12C0; // float
-    pub const m_grenadeParameterStashTime: usize = 0x12E0; // GameTime_t
-    pub const m_bGrenadeParametersStashed: usize = 0x12E4; // bool
-    pub const m_angStashedShootAngles: usize = 0x12E8; // QAngle
-    pub const m_vecStashedGrenadeThrowPosition: usize = 0x12F4; // Vector
-    pub const m_vecStashedVelocity: usize = 0x1300; // Vector
-    pub const m_angShootAngleHistory: usize = 0x130C; // QAngle[2]
-    pub const m_vecThrowPositionHistory: usize = 0x1324; // Vector[2]
-    pub const m_vecVelocityHistory: usize = 0x133C; // Vector[2]
-    pub const m_thirdPersonHeading: usize = 0x1358; // QAngle
-    pub const m_flSlopeDropOffset: usize = 0x1370; // float
-    pub const m_flSlopeDropHeight: usize = 0x1380; // float
-    pub const m_vHeadConstraintOffset: usize = 0x1390; // Vector
-    pub const m_bIsScoped: usize = 0x13A8; // bool
-    pub const m_bIsWalking: usize = 0x13A9; // bool
-    pub const m_bResumeZoom: usize = 0x13AA; // bool
-    pub const m_iPlayerState: usize = 0x13AC; // CSPlayerState
-    pub const m_bIsDefusing: usize = 0x13B0; // bool
-    pub const m_bIsGrabbingHostage: usize = 0x13B1; // bool
-    pub const m_iBlockingUseActionInProgress: usize = 0x13B4; // CSPlayerBlockingUseAction_t
-    pub const m_bIsRescuing: usize = 0x13B8; // bool
-    pub const m_fImmuneToGunGameDamageTime: usize = 0x13BC; // GameTime_t
-    pub const m_fImmuneToGunGameDamageTimeLast: usize = 0x13C0; // GameTime_t
-    pub const m_bGunGameImmunity: usize = 0x13C4; // bool
-    pub const m_bHasMovedSinceSpawn: usize = 0x13C5; // bool
-    pub const m_fMolotovUseTime: usize = 0x13C8; // float
-    pub const m_fMolotovDamageTime: usize = 0x13CC; // float
-    pub const m_nWhichBombZone: usize = 0x13D0; // int32_t
-    pub const m_bInNoDefuseArea: usize = 0x13D4; // bool
-    pub const m_iThrowGrenadeCounter: usize = 0x13D8; // int32_t
-    pub const m_bWaitForNoAttack: usize = 0x13DC; // bool
-    pub const m_flGuardianTooFarDistFrac: usize = 0x13E0; // float
-    pub const m_flDetectedByEnemySensorTime: usize = 0x13E4; // GameTime_t
-    pub const m_flNextGuardianTooFarWarning: usize = 0x13E8; // float
-    pub const m_bSuppressGuardianTooFarWarningAudio: usize = 0x13EC; // bool
-    pub const m_bKilledByTaser: usize = 0x13ED; // bool
-    pub const m_iMoveState: usize = 0x13F0; // int32_t
-    pub const m_bCanMoveDuringFreezePeriod: usize = 0x13F4; // bool
-    pub const m_flLowerBodyYawTarget: usize = 0x13F8; // float
-    pub const m_bStrafing: usize = 0x13FC; // bool
-    pub const m_flLastSpawnTimeIndex: usize = 0x1400; // GameTime_t
-    pub const m_flEmitSoundTime: usize = 0x1404; // GameTime_t
-    pub const m_iAddonBits: usize = 0x1408; // int32_t
-    pub const m_iPrimaryAddon: usize = 0x140C; // int32_t
-    pub const m_iSecondaryAddon: usize = 0x1410; // int32_t
-    pub const m_iProgressBarDuration: usize = 0x1414; // int32_t
-    pub const m_flProgressBarStartTime: usize = 0x1418; // float
-    pub const m_iDirection: usize = 0x141C; // int32_t
-    pub const m_iShotsFired: usize = 0x1420; // int32_t
-    pub const m_bNightVisionOn: usize = 0x1424; // bool
-    pub const m_bHasNightVision: usize = 0x1425; // bool
-    pub const m_flVelocityModifier: usize = 0x1428; // float
-    pub const m_flHitHeading: usize = 0x142C; // float
-    pub const m_nHitBodyPart: usize = 0x1430; // int32_t
-    pub const m_iStartAccount: usize = 0x1434; // int32_t
-    pub const m_vecIntroStartEyePosition: usize = 0x1438; // Vector
-    pub const m_vecIntroStartPlayerForward: usize = 0x1444; // Vector
-    pub const m_flClientDeathTime: usize = 0x1450; // GameTime_t
-    pub const m_flNightVisionAlpha: usize = 0x1454; // float
-    pub const m_bScreenTearFrameCaptured: usize = 0x1458; // bool
-    pub const m_flFlashBangTime: usize = 0x145C; // float
-    pub const m_flFlashScreenshotAlpha: usize = 0x1460; // float
-    pub const m_flFlashOverlayAlpha: usize = 0x1464; // float
-    pub const m_bFlashBuildUp: usize = 0x1468; // bool
-    pub const m_bFlashDspHasBeenCleared: usize = 0x1469; // bool
-    pub const m_bFlashScreenshotHasBeenGrabbed: usize = 0x146A; // bool
-    pub const m_flFlashMaxAlpha: usize = 0x146C; // float
-    pub const m_flFlashDuration: usize = 0x1470; // float
-    pub const m_lastStandingPos: usize = 0x1474; // Vector
-    pub const m_vecLastMuzzleFlashPos: usize = 0x1480; // Vector
-    pub const m_angLastMuzzleFlashAngle: usize = 0x148C; // QAngle
-    pub const m_hMuzzleFlashShape: usize = 0x1498; // CHandle<C_BaseEntity>
-    pub const m_iHealthBarRenderMaskIndex: usize = 0x149C; // int32_t
-    pub const m_flHealthFadeValue: usize = 0x14A0; // float
-    pub const m_flHealthFadeAlpha: usize = 0x14A4; // float
-    pub const m_nMyCollisionGroup: usize = 0x14A8; // int32_t
-    pub const m_ignoreLadderJumpTime: usize = 0x14AC; // float
-    pub const m_ladderSurpressionTimer: usize = 0x14B0; // CountdownTimer
-    pub const m_lastLadderNormal: usize = 0x14C8; // Vector
-    pub const m_lastLadderPos: usize = 0x14D4; // Vector
-    pub const m_flDeathCCWeight: usize = 0x14E8; // float
-    pub const m_bOldIsScoped: usize = 0x14EC; // bool
-    pub const m_flPrevRoundEndTime: usize = 0x14F0; // float
-    pub const m_flPrevMatchEndTime: usize = 0x14F4; // float
-    pub const m_unCurrentEquipmentValue: usize = 0x14F8; // uint16_t
-    pub const m_unRoundStartEquipmentValue: usize = 0x14FA; // uint16_t
-    pub const m_unFreezetimeEndEquipmentValue: usize = 0x14FC; // uint16_t
-    pub const m_vecThirdPersonViewPositionOverride: usize = 0x1500; // Vector
-    pub const m_nHeavyAssaultSuitCooldownRemaining: usize = 0x150C; // int32_t
-    pub const m_ArmorValue: usize = 0x1510; // int32_t
-    pub const m_angEyeAngles: usize = 0x1518; // QAngle
-    pub const m_fNextThinkPushAway: usize = 0x1530; // float
-    pub const m_bShouldAutobuyDMWeapons: usize = 0x1534; // bool
-    pub const m_bShouldAutobuyNow: usize = 0x1535; // bool
-    pub const m_bHud_MiniScoreHidden: usize = 0x1536; // bool
-    pub const m_bHud_RadarHidden: usize = 0x1537; // bool
-    pub const m_nLastKillerIndex: usize = 0x1538; // CEntityIndex
-    pub const m_nLastConcurrentKilled: usize = 0x153C; // int32_t
-    pub const m_nDeathCamMusic: usize = 0x1540; // int32_t
-    pub const m_iIDEntIndex: usize = 0x1544; // CEntityIndex
-    pub const m_delayTargetIDTimer: usize = 0x1548; // CountdownTimer
-    pub const m_iTargetedWeaponEntIndex: usize = 0x1560; // CEntityIndex
-    pub const m_iOldIDEntIndex: usize = 0x1564; // CEntityIndex
-    pub const m_holdTargetIDTimer: usize = 0x1568; // CountdownTimer
-    pub const m_flCurrentMusicStartTime: usize = 0x1584; // float
-    pub const m_flMusicRoundStartTime: usize = 0x1588; // float
-    pub const m_bDeferStartMusicOnWarmup: usize = 0x158C; // bool
-    pub const m_cycleLatch: usize = 0x1590; // int32_t
-    pub const m_serverIntendedCycle: usize = 0x1594; // float
-    pub const m_vecPlayerPatchEconIndices: usize = 0x1598; // uint32_t[5]
-    pub const m_bHideTargetID: usize = 0x15B4; // bool
-    pub const m_nextTaserShakeTime: usize = 0x15B8; // float
-    pub const m_firstTaserShakeTime: usize = 0x15BC; // float
-    pub const m_flLastSmokeOverlayAlpha: usize = 0x15C0; // float
-    pub const m_vLastSmokeOverlayColor: usize = 0x15C4; // Vector
-    pub const m_nPlayerSmokedFx: usize = 0x15D0; // ParticleIndex_t
-    pub const m_flNextMagDropTime: usize = 0x15D4; // float
-    pub const m_nLastMagDropAttachmentIndex: usize = 0x15D8; // int32_t
-    pub const m_vecBulletHitModels: usize = 0x15E0; // CUtlVector<C_BulletHitModel*>
-    pub const m_vecPickupModelSlerpers: usize = 0x15F8; // CUtlVector<C_PickUpModelSlerper*>
-    pub const m_vecLastAliveLocalVelocity: usize = 0x1610; // Vector
-    pub const m_entitySpottedState: usize = 0x1638; // EntitySpottedState_t
-    pub const m_nSurvivalTeamNumber: usize = 0x1650; // int32_t
-    pub const m_bGuardianShouldSprayCustomXMark: usize = 0x1654; // bool
-    pub const m_bHasDeathInfo: usize = 0x1655; // bool
-    pub const m_flDeathInfoTime: usize = 0x1658; // float
-    pub const m_vecDeathInfoOrigin: usize = 0x165C; // Vector
-    pub const m_bKilledByHeadshot: usize = 0x1668; // bool
-    pub const m_hOriginalController: usize = 0x166C; // CHandle<CCSPlayerController>
-}
-
-pub mod C_CSPlayerResource { // C_BaseEntity
-    pub const m_bHostageAlive: usize = 0x540; // bool[12]
-    pub const m_isHostageFollowingSomeone: usize = 0x54C; // bool[12]
-    pub const m_iHostageEntityIDs: usize = 0x558; // CEntityIndex[12]
-    pub const m_bombsiteCenterA: usize = 0x588; // Vector
-    pub const m_bombsiteCenterB: usize = 0x594; // Vector
-    pub const m_hostageRescueX: usize = 0x5A0; // int32_t[4]
-    pub const m_hostageRescueY: usize = 0x5B0; // int32_t[4]
-    pub const m_hostageRescueZ: usize = 0x5C0; // int32_t[4]
-    pub const m_bEndMatchNextMapAllVoted: usize = 0x5D0; // bool
-    pub const m_foundGoalPositions: usize = 0x5D1; // bool
-}
-
-pub mod C_CSTeam { // C_Team
-    pub const m_szTeamMatchStat: usize = 0x5F8; // char[512]
-    pub const m_numMapVictories: usize = 0x7F8; // int32_t
-    pub const m_bSurrendered: usize = 0x7FC; // bool
-    pub const m_scoreFirstHalf: usize = 0x800; // int32_t
-    pub const m_scoreSecondHalf: usize = 0x804; // int32_t
-    pub const m_scoreOvertime: usize = 0x808; // int32_t
-    pub const m_szClanTeamname: usize = 0x80C; // char[129]
-    pub const m_iClanID: usize = 0x890; // uint32_t
-    pub const m_szTeamFlagImage: usize = 0x894; // char[8]
-    pub const m_szTeamLogoImage: usize = 0x89C; // char[8]
-}
-
-pub mod C_CSWeaponBase { // C_BasePlayerWeapon
-    pub const m_flFireSequenceStartTime: usize = 0x15D4; // float
-    pub const m_nFireSequenceStartTimeChange: usize = 0x15D8; // int32_t
-    pub const m_nFireSequenceStartTimeAck: usize = 0x15DC; // int32_t
-    pub const m_ePlayerFireEvent: usize = 0x15E0; // PlayerAnimEvent_t
-    pub const m_ePlayerFireEventAttackType: usize = 0x15E4; // WeaponAttackType_t
-    pub const m_seqIdle: usize = 0x15E8; // HSequence
-    pub const m_seqFirePrimary: usize = 0x15EC; // HSequence
-    pub const m_seqFireSecondary: usize = 0x15F0; // HSequence
-    pub const m_thirdPersonFireSequences: usize = 0x15F8; // CUtlVector<HSequence>
-    pub const m_hCurrentThirdPersonSequence: usize = 0x1610; // HSequence
-    pub const m_nSilencerBoneIndex: usize = 0x1614; // int32_t
-    pub const m_thirdPersonSequences: usize = 0x1618; // HSequence[7]
-    pub const m_ClientPreviousWeaponState: usize = 0x1650; // CSWeaponState_t
-    pub const m_iState: usize = 0x1654; // CSWeaponState_t
-    pub const m_flCrosshairDistance: usize = 0x1658; // float
-    pub const m_iAmmoLastCheck: usize = 0x165C; // int32_t
-    pub const m_iAlpha: usize = 0x1660; // int32_t
-    pub const m_iScopeTextureID: usize = 0x1664; // int32_t
-    pub const m_iCrosshairTextureID: usize = 0x1668; // int32_t
-    pub const m_flGunAccuracyPosition: usize = 0x166C; // float
-    pub const m_nViewModelIndex: usize = 0x1670; // uint32_t
-    pub const m_bReloadsWithClips: usize = 0x1674; // bool
-    pub const m_flTimeWeaponIdle: usize = 0x1678; // GameTime_t
-    pub const m_bFireOnEmpty: usize = 0x167C; // bool
-    pub const m_OnPlayerPickup: usize = 0x1680; // CEntityIOOutput
-    pub const m_weaponMode: usize = 0x16A8; // CSWeaponMode
-    pub const m_flTurningInaccuracyDelta: usize = 0x16AC; // float
-    pub const m_vecTurningInaccuracyEyeDirLast: usize = 0x16B0; // Vector
-    pub const m_flTurningInaccuracy: usize = 0x16BC; // float
-    pub const m_fAccuracyPenalty: usize = 0x16C0; // float
-    pub const m_flLastAccuracyUpdateTime: usize = 0x16C4; // GameTime_t
-    pub const m_fAccuracySmoothedForZoom: usize = 0x16C8; // float
-    pub const m_fScopeZoomEndTime: usize = 0x16CC; // GameTime_t
-    pub const m_iRecoilIndex: usize = 0x16D0; // int32_t
-    pub const m_flRecoilIndex: usize = 0x16D4; // float
-    pub const m_bBurstMode: usize = 0x16D8; // bool
-    pub const m_nPostponeFireReadyTicks: usize = 0x16DC; // GameTick_t
-    pub const m_flPostponeFireReadyFrac: usize = 0x16E0; // float
-    pub const m_bInReload: usize = 0x16E4; // bool
-    pub const m_bReloadVisuallyComplete: usize = 0x16E5; // bool
-    pub const m_flDroppedAtTime: usize = 0x16E8; // GameTime_t
-    pub const m_bIsHauledBack: usize = 0x16EC; // bool
-    pub const m_bSilencerOn: usize = 0x16ED; // bool
-    pub const m_flTimeSilencerSwitchComplete: usize = 0x16F0; // GameTime_t
-    pub const m_iOriginalTeamNumber: usize = 0x16F4; // int32_t
-    pub const m_flNextAttackRenderTimeOffset: usize = 0x16F8; // float
-    pub const m_bVisualsDataSet: usize = 0x1780; // bool
-    pub const m_bOldFirstPersonSpectatedState: usize = 0x1781; // bool
-    pub const m_hOurPing: usize = 0x1784; // CHandle<C_BaseEntity>
-    pub const m_nOurPingIndex: usize = 0x1788; // CEntityIndex
-    pub const m_vecOurPingPos: usize = 0x178C; // Vector
-    pub const m_bGlowForPing: usize = 0x1798; // bool
-    pub const m_bUIWeapon: usize = 0x1799; // bool
-    pub const m_hPrevOwner: usize = 0x17A8; // CHandle<C_CSPlayerPawn>
-    pub const m_nDropTick: usize = 0x17AC; // GameTick_t
-    pub const m_donated: usize = 0x17CC; // bool
-    pub const m_fLastShotTime: usize = 0x17D0; // GameTime_t
-    pub const m_bWasOwnedByCT: usize = 0x17D4; // bool
-    pub const m_bWasOwnedByTerrorist: usize = 0x17D5; // bool
-    pub const m_gunHeat: usize = 0x17D8; // float
-    pub const m_smokeAttachments: usize = 0x17DC; // uint32_t
-    pub const m_lastSmokeTime: usize = 0x17E0; // GameTime_t
-    pub const m_flNextClientFireBulletTime: usize = 0x17E4; // float
-    pub const m_flNextClientFireBulletTime_Repredict: usize = 0x17E8; // float
-    pub const m_IronSightController: usize = 0x18C0; // C_IronSightController
-    pub const m_iIronSightMode: usize = 0x1970; // int32_t
-    pub const m_flLastLOSTraceFailureTime: usize = 0x1980; // GameTime_t
-    pub const m_iNumEmptyAttacks: usize = 0x1984; // int32_t
-    pub const m_flLastMagDropRequestTime: usize = 0x1A00; // GameTime_t
-}
-
-pub mod C_CSWeaponBaseGun { // C_CSWeaponBase
-    pub const m_zoomLevel: usize = 0x1A10; // int32_t
-    pub const m_iBurstShotsRemaining: usize = 0x1A14; // int32_t
-    pub const m_iSilencerBodygroup: usize = 0x1A18; // int32_t
-    pub const m_silencedModelIndex: usize = 0x1A28; // int32_t
-    pub const m_inPrecache: usize = 0x1A2C; // bool
-    pub const m_bNeedsBoltAction: usize = 0x1A2D; // bool
-}
-
-pub mod C_Chicken { // C_DynamicProp
-    pub const m_hHolidayHatAddon: usize = 0x10F0; // CHandle<CBaseAnimGraph>
-    pub const m_jumpedThisFrame: usize = 0x10F4; // bool
-    pub const m_leader: usize = 0x10F8; // CHandle<C_CSPlayerPawnBase>
-    pub const m_AttributeManager: usize = 0x1100; // C_AttributeContainer
-    pub const m_OriginalOwnerXuidLow: usize = 0x15A8; // uint32_t
-    pub const m_OriginalOwnerXuidHigh: usize = 0x15AC; // uint32_t
-    pub const m_bAttributesInitialized: usize = 0x15B0; // bool
-    pub const m_hWaterWakeParticles: usize = 0x15B4; // ParticleIndex_t
-}
-
-pub mod C_ClientRagdoll { // CBaseAnimGraph
-    pub const m_bFadeOut: usize = 0xE80; // bool
-    pub const m_bImportant: usize = 0xE81; // bool
-    pub const m_flEffectTime: usize = 0xE84; // GameTime_t
-    pub const m_gibDespawnTime: usize = 0xE88; // GameTime_t
-    pub const m_iCurrentFriction: usize = 0xE8C; // int32_t
-    pub const m_iMinFriction: usize = 0xE90; // int32_t
-    pub const m_iMaxFriction: usize = 0xE94; // int32_t
-    pub const m_iFrictionAnimState: usize = 0xE98; // int32_t
-    pub const m_bReleaseRagdoll: usize = 0xE9C; // bool
-    pub const m_iEyeAttachment: usize = 0xE9D; // AttachmentHandle_t
-    pub const m_bFadingOut: usize = 0xE9E; // bool
-    pub const m_flScaleEnd: usize = 0xEA0; // float[10]
-    pub const m_flScaleTimeStart: usize = 0xEC8; // GameTime_t[10]
-    pub const m_flScaleTimeEnd: usize = 0xEF0; // GameTime_t[10]
-}
-
-pub mod C_ColorCorrection { // C_BaseEntity
-    pub const m_vecOrigin: usize = 0x540; // Vector
-    pub const m_MinFalloff: usize = 0x54C; // float
-    pub const m_MaxFalloff: usize = 0x550; // float
-    pub const m_flFadeInDuration: usize = 0x554; // float
-    pub const m_flFadeOutDuration: usize = 0x558; // float
-    pub const m_flMaxWeight: usize = 0x55C; // float
-    pub const m_flCurWeight: usize = 0x560; // float
-    pub const m_netlookupFilename: usize = 0x564; // char[512]
-    pub const m_bEnabled: usize = 0x764; // bool
-    pub const m_bMaster: usize = 0x765; // bool
-    pub const m_bClientSide: usize = 0x766; // bool
-    pub const m_bExclusive: usize = 0x767; // bool
-    pub const m_bEnabledOnClient: usize = 0x768; // bool[1]
-    pub const m_flCurWeightOnClient: usize = 0x76C; // float[1]
-    pub const m_bFadingIn: usize = 0x770; // bool[1]
-    pub const m_flFadeStartWeight: usize = 0x774; // float[1]
-    pub const m_flFadeStartTime: usize = 0x778; // float[1]
-    pub const m_flFadeDuration: usize = 0x77C; // float[1]
-}
-
-pub mod C_ColorCorrectionVolume { // C_BaseTrigger
-    pub const m_LastEnterWeight: usize = 0xCC8; // float
-    pub const m_LastEnterTime: usize = 0xCCC; // float
-    pub const m_LastExitWeight: usize = 0xCD0; // float
-    pub const m_LastExitTime: usize = 0xCD4; // float
-    pub const m_bEnabled: usize = 0xCD8; // bool
-    pub const m_MaxWeight: usize = 0xCDC; // float
-    pub const m_FadeDuration: usize = 0xCE0; // float
-    pub const m_Weight: usize = 0xCE4; // float
-    pub const m_lookupFilename: usize = 0xCE8; // char[512]
-}
-
-pub mod C_CommandContext {
-    pub const needsprocessing: usize = 0x0; // bool
-    pub const command_number: usize = 0xA8; // int32_t
-}
-
-pub mod C_CsmFovOverride { // C_BaseEntity
-    pub const m_cameraName: usize = 0x540; // CUtlString
-    pub const m_flCsmFovOverrideValue: usize = 0x548; // float
-}
-
-pub mod C_DEagle { // C_CSWeaponBaseGun
-}
-
-pub mod C_DecoyGrenade { // C_BaseCSGrenade
-}
-
-pub mod C_DecoyProjectile { // C_BaseCSGrenadeProjectile
-    pub const m_nDecoyShotTick: usize = 0x1100; // int32_t
-    pub const m_nClientLastKnownDecoyShotTick: usize = 0x1104; // int32_t
-    pub const m_flTimeParticleEffectSpawn: usize = 0x1128; // GameTime_t
-}
-
-pub mod C_DynamicLight { // C_BaseModelEntity
-    pub const m_Flags: usize = 0xCC0; // uint8_t
-    pub const m_LightStyle: usize = 0xCC1; // uint8_t
-    pub const m_Radius: usize = 0xCC4; // float
-    pub const m_Exponent: usize = 0xCC8; // int32_t
-    pub const m_InnerAngle: usize = 0xCCC; // float
-    pub const m_OuterAngle: usize = 0xCD0; // float
-    pub const m_SpotRadius: usize = 0xCD4; // float
-}
-
-pub mod C_DynamicProp { // C_BreakableProp
-    pub const m_bUseHitboxesForRenderBox: usize = 0xFD0; // bool
-    pub const m_bUseAnimGraph: usize = 0xFD1; // bool
-    pub const m_pOutputAnimBegun: usize = 0xFD8; // CEntityIOOutput
-    pub const m_pOutputAnimOver: usize = 0x1000; // CEntityIOOutput
-    pub const m_pOutputAnimLoopCycleOver: usize = 0x1028; // CEntityIOOutput
-    pub const m_OnAnimReachedStart: usize = 0x1050; // CEntityIOOutput
-    pub const m_OnAnimReachedEnd: usize = 0x1078; // CEntityIOOutput
-    pub const m_iszDefaultAnim: usize = 0x10A0; // CUtlSymbolLarge
-    pub const m_nDefaultAnimLoopMode: usize = 0x10A8; // AnimLoopMode_t
-    pub const m_bAnimateOnServer: usize = 0x10AC; // bool
-    pub const m_bRandomizeCycle: usize = 0x10AD; // bool
-    pub const m_bStartDisabled: usize = 0x10AE; // bool
-    pub const m_bScriptedMovement: usize = 0x10AF; // bool
-    pub const m_bFiredStartEndOutput: usize = 0x10B0; // bool
-    pub const m_bForceNpcExclude: usize = 0x10B1; // bool
-    pub const m_bCreateNonSolid: usize = 0x10B2; // bool
-    pub const m_bIsOverrideProp: usize = 0x10B3; // bool
-    pub const m_iInitialGlowState: usize = 0x10B4; // int32_t
-    pub const m_nGlowRange: usize = 0x10B8; // int32_t
-    pub const m_nGlowRangeMin: usize = 0x10BC; // int32_t
-    pub const m_glowColor: usize = 0x10C0; // Color
-    pub const m_nGlowTeam: usize = 0x10C4; // int32_t
-    pub const m_iCachedFrameCount: usize = 0x10C8; // int32_t
-    pub const m_vecCachedRenderMins: usize = 0x10CC; // Vector
-    pub const m_vecCachedRenderMaxs: usize = 0x10D8; // Vector
-}
-
-pub mod C_DynamicPropAlias_cable_dynamic { // C_DynamicProp
-}
-
-pub mod C_DynamicPropAlias_dynamic_prop { // C_DynamicProp
-}
-
-pub mod C_DynamicPropAlias_prop_dynamic_override { // C_DynamicProp
-}
-
-pub mod C_EconEntity { // C_BaseFlex
-    pub const m_flFlexDelayTime: usize = 0x1028; // float
-    pub const m_flFlexDelayedWeight: usize = 0x1030; // float*
-    pub const m_bAttributesInitialized: usize = 0x1038; // bool
-    pub const m_AttributeManager: usize = 0x1040; // C_AttributeContainer
-    pub const m_OriginalOwnerXuidLow: usize = 0x14E8; // uint32_t
-    pub const m_OriginalOwnerXuidHigh: usize = 0x14EC; // uint32_t
-    pub const m_nFallbackPaintKit: usize = 0x14F0; // int32_t
-    pub const m_nFallbackSeed: usize = 0x14F4; // int32_t
-    pub const m_flFallbackWear: usize = 0x14F8; // float
-    pub const m_nFallbackStatTrak: usize = 0x14FC; // int32_t
-    pub const m_bClientside: usize = 0x1500; // bool
-    pub const m_bParticleSystemsCreated: usize = 0x1501; // bool
-    pub const m_vecAttachedParticles: usize = 0x1508; // CUtlVector<int32_t>
-    pub const m_hViewmodelAttachment: usize = 0x1520; // CHandle<CBaseAnimGraph>
-    pub const m_iOldTeam: usize = 0x1524; // int32_t
-    pub const m_bAttachmentDirty: usize = 0x1528; // bool
-    pub const m_nUnloadedModelIndex: usize = 0x152C; // int32_t
-    pub const m_iNumOwnerValidationRetries: usize = 0x1530; // int32_t
-    pub const m_hOldProvidee: usize = 0x1540; // CHandle<C_BaseEntity>
-    pub const m_vecAttachedModels: usize = 0x1548; // CUtlVector<C_EconEntity::AttachedModelData_t>
-}
-
-pub mod C_EconEntity_AttachedModelData_t {
-    pub const m_iModelDisplayFlags: usize = 0x0; // int32_t
-}
-
-pub mod C_EconItemView { // IEconItemInterface
-    pub const m_bInventoryImageRgbaRequested: usize = 0x60; // bool
-    pub const m_bInventoryImageTriedCache: usize = 0x61; // bool
-    pub const m_nInventoryImageRgbaWidth: usize = 0x80; // int32_t
-    pub const m_nInventoryImageRgbaHeight: usize = 0x84; // int32_t
-    pub const m_szCurrentLoadCachedFileName: usize = 0x88; // char[260]
-    pub const m_bRestoreCustomMaterialAfterPrecache: usize = 0x1B8; // bool
-    pub const m_iItemDefinitionIndex: usize = 0x1BA; // uint16_t
-    pub const m_iEntityQuality: usize = 0x1BC; // int32_t
-    pub const m_iEntityLevel: usize = 0x1C0; // uint32_t
-    pub const m_iItemID: usize = 0x1C8; // uint64_t
-    pub const m_iItemIDHigh: usize = 0x1D0; // uint32_t
-    pub const m_iItemIDLow: usize = 0x1D4; // uint32_t
-    pub const m_iAccountID: usize = 0x1D8; // uint32_t
-    pub const m_iInventoryPosition: usize = 0x1DC; // uint32_t
-    pub const m_bInitialized: usize = 0x1E8; // bool
-    pub const m_bIsStoreItem: usize = 0x1E9; // bool
-    pub const m_bIsTradeItem: usize = 0x1EA; // bool
-    pub const m_iEntityQuantity: usize = 0x1EC; // int32_t
-    pub const m_iRarityOverride: usize = 0x1F0; // int32_t
-    pub const m_iQualityOverride: usize = 0x1F4; // int32_t
-    pub const m_unClientFlags: usize = 0x1F8; // uint8_t
-    pub const m_unOverrideStyle: usize = 0x1F9; // uint8_t
-    pub const m_AttributeList: usize = 0x210; // CAttributeList
-    pub const m_NetworkedDynamicAttributes: usize = 0x270; // CAttributeList
-    pub const m_szCustomName: usize = 0x2D0; // char[161]
-    pub const m_szCustomNameOverride: usize = 0x371; // char[161]
-    pub const m_bInitializedTags: usize = 0x440; // bool
-}
-
-pub mod C_EconWearable { // C_EconEntity
-    pub const m_nForceSkin: usize = 0x1560; // int32_t
-    pub const m_bAlwaysAllow: usize = 0x1564; // bool
-}
-
-pub mod C_EntityDissolve { // C_BaseModelEntity
-    pub const m_flStartTime: usize = 0xCC8; // GameTime_t
-    pub const m_flFadeInStart: usize = 0xCCC; // float
-    pub const m_flFadeInLength: usize = 0xCD0; // float
-    pub const m_flFadeOutModelStart: usize = 0xCD4; // float
-    pub const m_flFadeOutModelLength: usize = 0xCD8; // float
-    pub const m_flFadeOutStart: usize = 0xCDC; // float
-    pub const m_flFadeOutLength: usize = 0xCE0; // float
-    pub const m_flNextSparkTime: usize = 0xCE4; // GameTime_t
-    pub const m_nDissolveType: usize = 0xCE8; // EntityDisolveType_t
-    pub const m_vDissolverOrigin: usize = 0xCEC; // Vector
-    pub const m_nMagnitude: usize = 0xCF8; // uint32_t
-    pub const m_bCoreExplode: usize = 0xCFC; // bool
-    pub const m_bLinkedToServerEnt: usize = 0xCFD; // bool
-}
-
-pub mod C_EntityFlame { // C_BaseEntity
-    pub const m_hEntAttached: usize = 0x540; // CHandle<C_BaseEntity>
-    pub const m_hOldAttached: usize = 0x568; // CHandle<C_BaseEntity>
-    pub const m_bCheapEffect: usize = 0x56C; // bool
-}
-
-pub mod C_EnvCombinedLightProbeVolume { // C_BaseEntity
-    pub const m_Color: usize = 0x1598; // Color
-    pub const m_flBrightness: usize = 0x159C; // float
-    pub const m_hCubemapTexture: usize = 0x15A0; // CStrongHandle<InfoForResourceTypeCTextureBase>
-    pub const m_bCustomCubemapTexture: usize = 0x15A8; // bool
-    pub const m_hLightProbeTexture: usize = 0x15B0; // CStrongHandle<InfoForResourceTypeCTextureBase>
-    pub const m_hLightProbeDirectLightIndicesTexture: usize = 0x15B8; // CStrongHandle<InfoForResourceTypeCTextureBase>
-    pub const m_hLightProbeDirectLightScalarsTexture: usize = 0x15C0; // CStrongHandle<InfoForResourceTypeCTextureBase>
-    pub const m_hLightProbeDirectLightShadowsTexture: usize = 0x15C8; // CStrongHandle<InfoForResourceTypeCTextureBase>
-    pub const m_vBoxMins: usize = 0x15D0; // Vector
-    pub const m_vBoxMaxs: usize = 0x15DC; // Vector
-    pub const m_bMoveable: usize = 0x15E8; // bool
-    pub const m_nHandshake: usize = 0x15EC; // int32_t
-    pub const m_nEnvCubeMapArrayIndex: usize = 0x15F0; // int32_t
-    pub const m_nPriority: usize = 0x15F4; // int32_t
-    pub const m_bStartDisabled: usize = 0x15F8; // bool
-    pub const m_flEdgeFadeDist: usize = 0x15FC; // float
-    pub const m_vEdgeFadeDists: usize = 0x1600; // Vector
-    pub const m_nLightProbeSizeX: usize = 0x160C; // int32_t
-    pub const m_nLightProbeSizeY: usize = 0x1610; // int32_t
-    pub const m_nLightProbeSizeZ: usize = 0x1614; // int32_t
-    pub const m_nLightProbeAtlasX: usize = 0x1618; // int32_t
-    pub const m_nLightProbeAtlasY: usize = 0x161C; // int32_t
-    pub const m_nLightProbeAtlasZ: usize = 0x1620; // int32_t
-    pub const m_bEnabled: usize = 0x1639; // bool
-}
-
-pub mod C_EnvCubemap { // C_BaseEntity
-    pub const m_hCubemapTexture: usize = 0x5C0; // CStrongHandle<InfoForResourceTypeCTextureBase>
-    pub const m_bCustomCubemapTexture: usize = 0x5C8; // bool
-    pub const m_flInfluenceRadius: usize = 0x5CC; // float
-    pub const m_vBoxProjectMins: usize = 0x5D0; // Vector
-    pub const m_vBoxProjectMaxs: usize = 0x5DC; // Vector
-    pub const m_bMoveable: usize = 0x5E8; // bool
-    pub const m_nHandshake: usize = 0x5EC; // int32_t
-    pub const m_nEnvCubeMapArrayIndex: usize = 0x5F0; // int32_t
-    pub const m_nPriority: usize = 0x5F4; // int32_t
-    pub const m_flEdgeFadeDist: usize = 0x5F8; // float
-    pub const m_vEdgeFadeDists: usize = 0x5FC; // Vector
-    pub const m_flDiffuseScale: usize = 0x608; // float
-    pub const m_bStartDisabled: usize = 0x60C; // bool
-    pub const m_bDefaultEnvMap: usize = 0x60D; // bool
-    pub const m_bDefaultSpecEnvMap: usize = 0x60E; // bool
-    pub const m_bIndoorCubeMap: usize = 0x60F; // bool
-    pub const m_bCopyDiffuseFromDefaultCubemap: usize = 0x610; // bool
-    pub const m_bEnabled: usize = 0x620; // bool
-}
-
-pub mod C_EnvCubemapBox { // C_EnvCubemap
-}
-
-pub mod C_EnvCubemapFog { // C_BaseEntity
-    pub const m_flEndDistance: usize = 0x540; // float
-    pub const m_flStartDistance: usize = 0x544; // float
-    pub const m_flFogFalloffExponent: usize = 0x548; // float
-    pub const m_bHeightFogEnabled: usize = 0x54C; // bool
-    pub const m_flFogHeightWidth: usize = 0x550; // float
-    pub const m_flFogHeightEnd: usize = 0x554; // float
-    pub const m_flFogHeightStart: usize = 0x558; // float
-    pub const m_flFogHeightExponent: usize = 0x55C; // float
-    pub const m_flLODBias: usize = 0x560; // float
-    pub const m_bActive: usize = 0x564; // bool
-    pub const m_bStartDisabled: usize = 0x565; // bool
-    pub const m_flFogMaxOpacity: usize = 0x568; // float
-    pub const m_nCubemapSourceType: usize = 0x56C; // int32_t
-    pub const m_hSkyMaterial: usize = 0x570; // CStrongHandle<InfoForResourceTypeIMaterial2>
-    pub const m_iszSkyEntity: usize = 0x578; // CUtlSymbolLarge
-    pub const m_hFogCubemapTexture: usize = 0x580; // CStrongHandle<InfoForResourceTypeCTextureBase>
-    pub const m_bHasHeightFogEnd: usize = 0x588; // bool
-    pub const m_bFirstTime: usize = 0x589; // bool
-}
-
-pub mod C_EnvDecal { // C_BaseModelEntity
-    pub const m_hDecalMaterial: usize = 0xCC0; // CStrongHandle<InfoForResourceTypeIMaterial2>
-    pub const m_flWidth: usize = 0xCC8; // float
-    pub const m_flHeight: usize = 0xCCC; // float
-    pub const m_flDepth: usize = 0xCD0; // float
-    pub const m_nRenderOrder: usize = 0xCD4; // uint32_t
-    pub const m_bProjectOnWorld: usize = 0xCD8; // bool
-    pub const m_bProjectOnCharacters: usize = 0xCD9; // bool
-    pub const m_bProjectOnWater: usize = 0xCDA; // bool
-    pub const m_flDepthSortBias: usize = 0xCDC; // float
-}
-
-pub mod C_EnvDetailController { // C_BaseEntity
-    pub const m_flFadeStartDist: usize = 0x540; // float
-    pub const m_flFadeEndDist: usize = 0x544; // float
-}
-
-pub mod C_EnvLightProbeVolume { // C_BaseEntity
-    pub const m_hLightProbeTexture: usize = 0x1518; // CStrongHandle<InfoForResourceTypeCTextureBase>
-    pub const m_hLightProbeDirectLightIndicesTexture: usize = 0x1520; // CStrongHandle<InfoForResourceTypeCTextureBase>
-    pub const m_hLightProbeDirectLightScalarsTexture: usize = 0x1528; // CStrongHandle<InfoForResourceTypeCTextureBase>
-    pub const m_hLightProbeDirectLightShadowsTexture: usize = 0x1530; // CStrongHandle<InfoForResourceTypeCTextureBase>
-    pub const m_vBoxMins: usize = 0x1538; // Vector
-    pub const m_vBoxMaxs: usize = 0x1544; // Vector
-    pub const m_bMoveable: usize = 0x1550; // bool
-    pub const m_nHandshake: usize = 0x1554; // int32_t
-    pub const m_nPriority: usize = 0x1558; // int32_t
-    pub const m_bStartDisabled: usize = 0x155C; // bool
-    pub const m_nLightProbeSizeX: usize = 0x1560; // int32_t
-    pub const m_nLightProbeSizeY: usize = 0x1564; // int32_t
-    pub const m_nLightProbeSizeZ: usize = 0x1568; // int32_t
-    pub const m_nLightProbeAtlasX: usize = 0x156C; // int32_t
-    pub const m_nLightProbeAtlasY: usize = 0x1570; // int32_t
-    pub const m_nLightProbeAtlasZ: usize = 0x1574; // int32_t
-    pub const m_bEnabled: usize = 0x1581; // bool
-}
-
-pub mod C_EnvParticleGlow { // C_ParticleSystem
-    pub const m_flAlphaScale: usize = 0x1270; // float
-    pub const m_flRadiusScale: usize = 0x1274; // float
-    pub const m_flSelfIllumScale: usize = 0x1278; // float
-    pub const m_ColorTint: usize = 0x127C; // Color
-    pub const m_hTextureOverride: usize = 0x1280; // CStrongHandle<InfoForResourceTypeCTextureBase>
-}
-
-pub mod C_EnvProjectedTexture { // C_ModelPointEntity
-}
-
-pub mod C_EnvScreenOverlay { // C_PointEntity
-    pub const m_iszOverlayNames: usize = 0x540; // CUtlSymbolLarge[10]
-    pub const m_flOverlayTimes: usize = 0x590; // float[10]
-    pub const m_flStartTime: usize = 0x5B8; // GameTime_t
-    pub const m_iDesiredOverlay: usize = 0x5BC; // int32_t
-    pub const m_bIsActive: usize = 0x5C0; // bool
-    pub const m_bWasActive: usize = 0x5C1; // bool
-    pub const m_iCachedDesiredOverlay: usize = 0x5C4; // int32_t
-    pub const m_iCurrentOverlay: usize = 0x5C8; // int32_t
-    pub const m_flCurrentOverlayTime: usize = 0x5CC; // GameTime_t
-}
-
-pub mod C_EnvSky { // C_BaseModelEntity
-    pub const m_hSkyMaterial: usize = 0xCC0; // CStrongHandle<InfoForResourceTypeIMaterial2>
-    pub const m_hSkyMaterialLightingOnly: usize = 0xCC8; // CStrongHandle<InfoForResourceTypeIMaterial2>
-    pub const m_bStartDisabled: usize = 0xCD0; // bool
-    pub const m_vTintColor: usize = 0xCD1; // Color
-    pub const m_vTintColorLightingOnly: usize = 0xCD5; // Color
-    pub const m_flBrightnessScale: usize = 0xCDC; // float
-    pub const m_nFogType: usize = 0xCE0; // int32_t
-    pub const m_flFogMinStart: usize = 0xCE4; // float
-    pub const m_flFogMinEnd: usize = 0xCE8; // float
-    pub const m_flFogMaxStart: usize = 0xCEC; // float
-    pub const m_flFogMaxEnd: usize = 0xCF0; // float
-    pub const m_bEnabled: usize = 0xCF4; // bool
-}
-
-pub mod C_EnvVolumetricFogController { // C_BaseEntity
-    pub const m_flScattering: usize = 0x540; // float
-    pub const m_flAnisotropy: usize = 0x544; // float
-    pub const m_flFadeSpeed: usize = 0x548; // float
-    pub const m_flDrawDistance: usize = 0x54C; // float
-    pub const m_flFadeInStart: usize = 0x550; // float
-    pub const m_flFadeInEnd: usize = 0x554; // float
-    pub const m_flIndirectStrength: usize = 0x558; // float
-    pub const m_nIndirectTextureDimX: usize = 0x55C; // int32_t
-    pub const m_nIndirectTextureDimY: usize = 0x560; // int32_t
-    pub const m_nIndirectTextureDimZ: usize = 0x564; // int32_t
-    pub const m_vBoxMins: usize = 0x568; // Vector
-    pub const m_vBoxMaxs: usize = 0x574; // Vector
-    pub const m_bActive: usize = 0x580; // bool
-    pub const m_flStartAnisoTime: usize = 0x584; // GameTime_t
-    pub const m_flStartScatterTime: usize = 0x588; // GameTime_t
-    pub const m_flStartDrawDistanceTime: usize = 0x58C; // GameTime_t
-    pub const m_flStartAnisotropy: usize = 0x590; // float
-    pub const m_flStartScattering: usize = 0x594; // float
-    pub const m_flStartDrawDistance: usize = 0x598; // float
-    pub const m_flDefaultAnisotropy: usize = 0x59C; // float
-    pub const m_flDefaultScattering: usize = 0x5A0; // float
-    pub const m_flDefaultDrawDistance: usize = 0x5A4; // float
-    pub const m_bStartDisabled: usize = 0x5A8; // bool
-    pub const m_bEnableIndirect: usize = 0x5A9; // bool
-    pub const m_bIsMaster: usize = 0x5AA; // bool
-    pub const m_hFogIndirectTexture: usize = 0x5B0; // CStrongHandle<InfoForResourceTypeCTextureBase>
-    pub const m_nForceRefreshCount: usize = 0x5B8; // int32_t
-    pub const m_bFirstTime: usize = 0x5BC; // bool
-}
-
-pub mod C_EnvVolumetricFogVolume { // C_BaseEntity
-    pub const m_bActive: usize = 0x540; // bool
-    pub const m_vBoxMins: usize = 0x544; // Vector
-    pub const m_vBoxMaxs: usize = 0x550; // Vector
-    pub const m_bStartDisabled: usize = 0x55C; // bool
-    pub const m_flStrength: usize = 0x560; // float
-    pub const m_nFalloffShape: usize = 0x564; // int32_t
-    pub const m_flFalloffExponent: usize = 0x568; // float
-}
-
-pub mod C_EnvWind { // C_BaseEntity
-    pub const m_EnvWindShared: usize = 0x540; // C_EnvWindShared
-}
-
-pub mod C_EnvWindClientside { // C_BaseEntity
-    pub const m_EnvWindShared: usize = 0x540; // C_EnvWindShared
-}
-
-pub mod C_EnvWindShared {
-    pub const m_flStartTime: usize = 0x8; // GameTime_t
-    pub const m_iWindSeed: usize = 0xC; // uint32_t
-    pub const m_iMinWind: usize = 0x10; // uint16_t
-    pub const m_iMaxWind: usize = 0x12; // uint16_t
-    pub const m_windRadius: usize = 0x14; // int32_t
-    pub const m_iMinGust: usize = 0x18; // uint16_t
-    pub const m_iMaxGust: usize = 0x1A; // uint16_t
-    pub const m_flMinGustDelay: usize = 0x1C; // float
-    pub const m_flMaxGustDelay: usize = 0x20; // float
-    pub const m_flGustDuration: usize = 0x24; // float
-    pub const m_iGustDirChange: usize = 0x28; // uint16_t
-    pub const m_location: usize = 0x2C; // Vector
-    pub const m_iszGustSound: usize = 0x38; // int32_t
-    pub const m_iWindDir: usize = 0x3C; // int32_t
-    pub const m_flWindSpeed: usize = 0x40; // float
-    pub const m_currentWindVector: usize = 0x44; // Vector
-    pub const m_CurrentSwayVector: usize = 0x50; // Vector
-    pub const m_PrevSwayVector: usize = 0x5C; // Vector
-    pub const m_iInitialWindDir: usize = 0x68; // uint16_t
-    pub const m_flInitialWindSpeed: usize = 0x6C; // float
-    pub const m_flVariationTime: usize = 0x70; // GameTime_t
-    pub const m_flSwayTime: usize = 0x74; // GameTime_t
-    pub const m_flSimTime: usize = 0x78; // GameTime_t
-    pub const m_flSwitchTime: usize = 0x7C; // GameTime_t
-    pub const m_flAveWindSpeed: usize = 0x80; // float
-    pub const m_bGusting: usize = 0x84; // bool
-    pub const m_flWindAngleVariation: usize = 0x88; // float
-    pub const m_flWindSpeedVariation: usize = 0x8C; // float
-    pub const m_iEntIndex: usize = 0x90; // CEntityIndex
-}
-
-pub mod C_EnvWindShared_WindAveEvent_t {
-    pub const m_flStartWindSpeed: usize = 0x0; // float
-    pub const m_flAveWindSpeed: usize = 0x4; // float
-}
-
-pub mod C_EnvWindShared_WindVariationEvent_t {
-    pub const m_flWindAngleVariation: usize = 0x0; // float
-    pub const m_flWindSpeedVariation: usize = 0x4; // float
-}
-
-pub mod C_FireCrackerBlast { // C_Inferno
-}
-
-pub mod C_FireFromAboveSprite { // C_Sprite
-}
-
-pub mod C_FireSmoke { // C_BaseFire
-    pub const m_nFlameModelIndex: usize = 0x550; // int32_t
-    pub const m_nFlameFromAboveModelIndex: usize = 0x554; // int32_t
-    pub const m_flScaleRegister: usize = 0x558; // float
-    pub const m_flScaleStart: usize = 0x55C; // float
-    pub const m_flScaleEnd: usize = 0x560; // float
-    pub const m_flScaleTimeStart: usize = 0x564; // GameTime_t
-    pub const m_flScaleTimeEnd: usize = 0x568; // GameTime_t
-    pub const m_flChildFlameSpread: usize = 0x56C; // float
-    pub const m_flClipPerc: usize = 0x580; // float
-    pub const m_bClipTested: usize = 0x584; // bool
-    pub const m_bFadingOut: usize = 0x585; // bool
-    pub const m_tParticleSpawn: usize = 0x588; // TimedEvent
-    pub const m_pFireOverlay: usize = 0x590; // CFireOverlay*
-}
-
-pub mod C_FireSprite { // C_Sprite
-    pub const m_vecMoveDir: usize = 0xDF0; // Vector
-    pub const m_bFadeFromAbove: usize = 0xDFC; // bool
-}
-
-pub mod C_Fish { // CBaseAnimGraph
-    pub const m_pos: usize = 0xE80; // Vector
-    pub const m_vel: usize = 0xE8C; // Vector
-    pub const m_angles: usize = 0xE98; // QAngle
-    pub const m_localLifeState: usize = 0xEA4; // int32_t
-    pub const m_deathDepth: usize = 0xEA8; // float
-    pub const m_deathAngle: usize = 0xEAC; // float
-    pub const m_buoyancy: usize = 0xEB0; // float
-    pub const m_wiggleTimer: usize = 0xEB8; // CountdownTimer
-    pub const m_wigglePhase: usize = 0xED0; // float
-    pub const m_wiggleRate: usize = 0xED4; // float
-    pub const m_actualPos: usize = 0xED8; // Vector
-    pub const m_actualAngles: usize = 0xEE4; // QAngle
-    pub const m_poolOrigin: usize = 0xEF0; // Vector
-    pub const m_waterLevel: usize = 0xEFC; // float
-    pub const m_gotUpdate: usize = 0xF00; // bool
-    pub const m_x: usize = 0xF04; // float
-    pub const m_y: usize = 0xF08; // float
-    pub const m_z: usize = 0xF0C; // float
-    pub const m_angle: usize = 0xF10; // float
-    pub const m_errorHistory: usize = 0xF14; // float[20]
-    pub const m_errorHistoryIndex: usize = 0xF64; // int32_t
-    pub const m_errorHistoryCount: usize = 0xF68; // int32_t
-    pub const m_averageError: usize = 0xF6C; // float
-}
-
-pub mod C_Fists { // C_CSWeaponBase
-    pub const m_bPlayingUninterruptableAct: usize = 0x1A10; // bool
-    pub const m_nUninterruptableActivity: usize = 0x1A14; // PlayerAnimEvent_t
-}
-
-pub mod C_Flashbang { // C_BaseCSGrenade
-}
-
-pub mod C_FlashbangProjectile { // C_BaseCSGrenadeProjectile
-}
-
-pub mod C_FogController { // C_BaseEntity
-    pub const m_fog: usize = 0x540; // fogparams_t
-    pub const m_bUseAngles: usize = 0x5A8; // bool
-    pub const m_iChangedVariables: usize = 0x5AC; // int32_t
-}
-
-pub mod C_FootstepControl { // C_BaseTrigger
-    pub const m_source: usize = 0xCC8; // CUtlSymbolLarge
-    pub const m_destination: usize = 0xCD0; // CUtlSymbolLarge
-}
-
-pub mod C_FuncBrush { // C_BaseModelEntity
-}
-
-pub mod C_FuncConveyor { // C_BaseModelEntity
-    pub const m_vecMoveDirEntitySpace: usize = 0xCC8; // Vector
-    pub const m_flTargetSpeed: usize = 0xCD4; // float
-    pub const m_nTransitionStartTick: usize = 0xCD8; // GameTick_t
-    pub const m_nTransitionDurationTicks: usize = 0xCDC; // int32_t
-    pub const m_flTransitionStartSpeed: usize = 0xCE0; // float
-    pub const m_hConveyorModels: usize = 0xCE8; // C_NetworkUtlVectorBase<CHandle<C_BaseEntity>>
-    pub const m_flCurrentConveyorOffset: usize = 0xD00; // float
-    pub const m_flCurrentConveyorSpeed: usize = 0xD04; // float
-}
-
-pub mod C_FuncElectrifiedVolume { // C_FuncBrush
-    pub const m_nAmbientEffect: usize = 0xCC0; // ParticleIndex_t
-    pub const m_EffectName: usize = 0xCC8; // CUtlSymbolLarge
-    pub const m_bState: usize = 0xCD0; // bool
-}
-
-pub mod C_FuncLadder { // C_BaseModelEntity
-    pub const m_vecLadderDir: usize = 0xCC0; // Vector
-    pub const m_Dismounts: usize = 0xCD0; // CUtlVector<CHandle<C_InfoLadderDismount>>
-    pub const m_vecLocalTop: usize = 0xCE8; // Vector
-    pub const m_vecPlayerMountPositionTop: usize = 0xCF4; // Vector
-    pub const m_vecPlayerMountPositionBottom: usize = 0xD00; // Vector
-    pub const m_flAutoRideSpeed: usize = 0xD0C; // float
-    pub const m_bDisabled: usize = 0xD10; // bool
-    pub const m_bFakeLadder: usize = 0xD11; // bool
-    pub const m_bHasSlack: usize = 0xD12; // bool
-}
-
-pub mod C_FuncMonitor { // C_FuncBrush
-    pub const m_targetCamera: usize = 0xCC0; // CUtlString
-    pub const m_nResolutionEnum: usize = 0xCC8; // int32_t
-    pub const m_bRenderShadows: usize = 0xCCC; // bool
-    pub const m_bUseUniqueColorTarget: usize = 0xCCD; // bool
-    pub const m_brushModelName: usize = 0xCD0; // CUtlString
-    pub const m_hTargetCamera: usize = 0xCD8; // CHandle<C_BaseEntity>
-    pub const m_bEnabled: usize = 0xCDC; // bool
-    pub const m_bDraw3DSkybox: usize = 0xCDD; // bool
-}
-
-pub mod C_FuncMoveLinear { // C_BaseToggle
-}
-
-pub mod C_FuncRotating { // C_BaseModelEntity
-}
-
-pub mod C_FuncTrackTrain { // C_BaseModelEntity
-    pub const m_nLongAxis: usize = 0xCC0; // int32_t
-    pub const m_flRadius: usize = 0xCC4; // float
-    pub const m_flLineLength: usize = 0xCC8; // float
-}
-
-pub mod C_GameRules {
-}
-
-pub mod C_GameRulesProxy { // C_BaseEntity
-}
-
-pub mod C_GlobalLight { // C_BaseEntity
-    pub const m_WindClothForceHandle: usize = 0xA00; // uint16_t
-}
-
-pub mod C_GradientFog { // C_BaseEntity
-    pub const m_hGradientFogTexture: usize = 0x540; // CStrongHandle<InfoForResourceTypeCTextureBase>
-    pub const m_flFogStartDistance: usize = 0x548; // float
-    pub const m_flFogEndDistance: usize = 0x54C; // float
-    pub const m_bHeightFogEnabled: usize = 0x550; // bool
-    pub const m_flFogStartHeight: usize = 0x554; // float
-    pub const m_flFogEndHeight: usize = 0x558; // float
-    pub const m_flFarZ: usize = 0x55C; // float
-    pub const m_flFogMaxOpacity: usize = 0x560; // float
-    pub const m_flFogFalloffExponent: usize = 0x564; // float
-    pub const m_flFogVerticalExponent: usize = 0x568; // float
-    pub const m_fogColor: usize = 0x56C; // Color
-    pub const m_flFogStrength: usize = 0x570; // float
-    pub const m_flFadeTime: usize = 0x574; // float
-    pub const m_bStartDisabled: usize = 0x578; // bool
-    pub const m_bIsEnabled: usize = 0x579; // bool
-    pub const m_bGradientFogNeedsTextures: usize = 0x57A; // bool
-}
-
-pub mod C_HEGrenade { // C_BaseCSGrenade
-}
-
-pub mod C_HEGrenadeProjectile { // C_BaseCSGrenadeProjectile
-}
-
-pub mod C_HandleTest { // C_BaseEntity
-    pub const m_Handle: usize = 0x540; // CHandle<C_BaseEntity>
-    pub const m_bSendHandle: usize = 0x544; // bool
-}
-
-pub mod C_Hostage { // C_BaseCombatCharacter
-    pub const m_entitySpottedState: usize = 0x10A8; // EntitySpottedState_t
-    pub const m_leader: usize = 0x10C0; // CHandle<C_BaseEntity>
-    pub const m_reuseTimer: usize = 0x10C8; // CountdownTimer
-    pub const m_vel: usize = 0x10E0; // Vector
-    pub const m_isRescued: usize = 0x10EC; // bool
-    pub const m_jumpedThisFrame: usize = 0x10ED; // bool
-    pub const m_nHostageState: usize = 0x10F0; // int32_t
-    pub const m_bHandsHaveBeenCut: usize = 0x10F4; // bool
-    pub const m_hHostageGrabber: usize = 0x10F8; // CHandle<C_CSPlayerPawn>
-    pub const m_fLastGrabTime: usize = 0x10FC; // GameTime_t
-    pub const m_vecGrabbedPos: usize = 0x1100; // Vector
-    pub const m_flRescueStartTime: usize = 0x110C; // GameTime_t
-    pub const m_flGrabSuccessTime: usize = 0x1110; // GameTime_t
-    pub const m_flDropStartTime: usize = 0x1114; // GameTime_t
-    pub const m_flDeadOrRescuedTime: usize = 0x1118; // GameTime_t
-    pub const m_blinkTimer: usize = 0x1120; // CountdownTimer
-    pub const m_lookAt: usize = 0x1138; // Vector
-    pub const m_lookAroundTimer: usize = 0x1148; // CountdownTimer
-    pub const m_isInit: usize = 0x1160; // bool
-    pub const m_eyeAttachment: usize = 0x1161; // AttachmentHandle_t
-    pub const m_chestAttachment: usize = 0x1162; // AttachmentHandle_t
-    pub const m_pPredictionOwner: usize = 0x1168; // CBasePlayerController*
-    pub const m_fNewestAlphaThinkTime: usize = 0x1170; // GameTime_t
-}
-
-pub mod C_HostageCarriableProp { // CBaseAnimGraph
-}
-
-pub mod C_IncendiaryGrenade { // C_MolotovGrenade
-}
-
-pub mod C_Inferno { // C_BaseModelEntity
-    pub const m_nfxFireDamageEffect: usize = 0xD00; // ParticleIndex_t
-    pub const m_firePositions: usize = 0xD04; // Vector[64]
-    pub const m_fireParentPositions: usize = 0x1004; // Vector[64]
-    pub const m_bFireIsBurning: usize = 0x1304; // bool[64]
-    pub const m_BurnNormal: usize = 0x1344; // Vector[64]
-    pub const m_fireCount: usize = 0x1644; // int32_t
-    pub const m_nInfernoType: usize = 0x1648; // int32_t
-    pub const m_nFireLifetime: usize = 0x164C; // float
-    pub const m_bInPostEffectTime: usize = 0x1650; // bool
-    pub const m_lastFireCount: usize = 0x1654; // int32_t
-    pub const m_nFireEffectTickBegin: usize = 0x1658; // int32_t
-    pub const m_drawableCount: usize = 0x8260; // int32_t
-    pub const m_blosCheck: usize = 0x8264; // bool
-    pub const m_nlosperiod: usize = 0x8268; // int32_t
-    pub const m_maxFireHalfWidth: usize = 0x826C; // float
-    pub const m_maxFireHeight: usize = 0x8270; // float
-    pub const m_minBounds: usize = 0x8274; // Vector
-    pub const m_maxBounds: usize = 0x8280; // Vector
-    pub const m_flLastGrassBurnThink: usize = 0x828C; // float
-}
-
-pub mod C_InfoInstructorHintHostageRescueZone { // C_PointEntity
-}
-
-pub mod C_InfoLadderDismount { // C_BaseEntity
-}
-
-pub mod C_InfoVisibilityBox { // C_BaseEntity
-    pub const m_nMode: usize = 0x544; // int32_t
-    pub const m_vBoxSize: usize = 0x548; // Vector
-    pub const m_bEnabled: usize = 0x554; // bool
-}
-
-pub mod C_IronSightController {
-    pub const m_bIronSightAvailable: usize = 0x10; // bool
-    pub const m_flIronSightAmount: usize = 0x14; // float
-    pub const m_flIronSightAmountGained: usize = 0x18; // float
-    pub const m_flIronSightAmountBiased: usize = 0x1C; // float
-    pub const m_flIronSightAmount_Interpolated: usize = 0x20; // float
-    pub const m_flIronSightAmountGained_Interpolated: usize = 0x24; // float
-    pub const m_flIronSightAmountBiased_Interpolated: usize = 0x28; // float
-    pub const m_flInterpolationLastUpdated: usize = 0x2C; // float
-    pub const m_angDeltaAverage: usize = 0x30; // QAngle[8]
-    pub const m_angViewLast: usize = 0x90; // QAngle
-    pub const m_vecDotCoords: usize = 0x9C; // Vector2D
-    pub const m_flDotBlur: usize = 0xA4; // float
-    pub const m_flSpeedRatio: usize = 0xA8; // float
-}
-
-pub mod C_Item { // C_EconEntity
-    pub const m_bShouldGlow: usize = 0x1560; // bool
-    pub const m_pReticleHintTextName: usize = 0x1561; // char[256]
-}
-
-pub mod C_ItemDogtags { // C_Item
-    pub const m_OwningPlayer: usize = 0x1668; // CHandle<C_CSPlayerPawn>
-    pub const m_KillingPlayer: usize = 0x166C; // CHandle<C_CSPlayerPawn>
-}
-
-pub mod C_Item_Healthshot { // C_WeaponBaseItem
-}
-
-pub mod C_Knife { // C_CSWeaponBase
-}
-
-pub mod C_LightDirectionalEntity { // C_LightEntity
-}
-
-pub mod C_LightEntity { // C_BaseModelEntity
-    pub const m_CLightComponent: usize = 0xCC0; // CLightComponent*
-}
-
-pub mod C_LightEnvironmentEntity { // C_LightDirectionalEntity
-}
-
-pub mod C_LightGlow { // C_BaseModelEntity
-    pub const m_nHorizontalSize: usize = 0xCC0; // uint32_t
-    pub const m_nVerticalSize: usize = 0xCC4; // uint32_t
-    pub const m_nMinDist: usize = 0xCC8; // uint32_t
-    pub const m_nMaxDist: usize = 0xCCC; // uint32_t
-    pub const m_nOuterMaxDist: usize = 0xCD0; // uint32_t
-    pub const m_flGlowProxySize: usize = 0xCD4; // float
-    pub const m_flHDRColorScale: usize = 0xCD8; // float
-    pub const m_Glow: usize = 0xCE0; // C_LightGlowOverlay
-}
-
-pub mod C_LightGlowOverlay { // CGlowOverlay
-    pub const m_vecOrigin: usize = 0xD0; // Vector
-    pub const m_vecDirection: usize = 0xDC; // Vector
-    pub const m_nMinDist: usize = 0xE8; // int32_t
-    pub const m_nMaxDist: usize = 0xEC; // int32_t
-    pub const m_nOuterMaxDist: usize = 0xF0; // int32_t
-    pub const m_bOneSided: usize = 0xF4; // bool
-    pub const m_bModulateByDot: usize = 0xF5; // bool
-}
-
-pub mod C_LightOrthoEntity { // C_LightEntity
-}
-
-pub mod C_LightSpotEntity { // C_LightEntity
-}
-
-pub mod C_LocalTempEntity { // CBaseAnimGraph
-    pub const flags: usize = 0xE98; // int32_t
-    pub const die: usize = 0xE9C; // GameTime_t
-    pub const m_flFrameMax: usize = 0xEA0; // float
-    pub const x: usize = 0xEA4; // float
-    pub const y: usize = 0xEA8; // float
-    pub const fadeSpeed: usize = 0xEAC; // float
-    pub const bounceFactor: usize = 0xEB0; // float
-    pub const hitSound: usize = 0xEB4; // int32_t
-    pub const priority: usize = 0xEB8; // int32_t
-    pub const tentOffset: usize = 0xEBC; // Vector
-    pub const m_vecTempEntAngVelocity: usize = 0xEC8; // QAngle
-    pub const tempent_renderamt: usize = 0xED4; // int32_t
-    pub const m_vecNormal: usize = 0xED8; // Vector
-    pub const m_flSpriteScale: usize = 0xEE4; // float
-    pub const m_nFlickerFrame: usize = 0xEE8; // int32_t
-    pub const m_flFrameRate: usize = 0xEEC; // float
-    pub const m_flFrame: usize = 0xEF0; // float
-    pub const m_pszImpactEffect: usize = 0xEF8; // char*
-    pub const m_pszParticleEffect: usize = 0xF00; // char*
-    pub const m_bParticleCollision: usize = 0xF08; // bool
-    pub const m_iLastCollisionFrame: usize = 0xF0C; // int32_t
-    pub const m_vLastCollisionOrigin: usize = 0xF10; // Vector
-    pub const m_vecTempEntVelocity: usize = 0xF1C; // Vector
-    pub const m_vecPrevAbsOrigin: usize = 0xF28; // Vector
-    pub const m_vecTempEntAcceleration: usize = 0xF34; // Vector
-}
-
-pub mod C_MapPreviewParticleSystem { // C_ParticleSystem
-}
-
-pub mod C_MapVetoPickController { // C_BaseEntity
-    pub const m_nDraftType: usize = 0x550; // int32_t
-    pub const m_nTeamWinningCoinToss: usize = 0x554; // int32_t
-    pub const m_nTeamWithFirstChoice: usize = 0x558; // int32_t[64]
-    pub const m_nVoteMapIdsList: usize = 0x658; // int32_t[7]
-    pub const m_nAccountIDs: usize = 0x674; // int32_t[64]
-    pub const m_nMapId0: usize = 0x774; // int32_t[64]
-    pub const m_nMapId1: usize = 0x874; // int32_t[64]
-    pub const m_nMapId2: usize = 0x974; // int32_t[64]
-    pub const m_nMapId3: usize = 0xA74; // int32_t[64]
-    pub const m_nMapId4: usize = 0xB74; // int32_t[64]
-    pub const m_nMapId5: usize = 0xC74; // int32_t[64]
-    pub const m_nStartingSide0: usize = 0xD74; // int32_t[64]
-    pub const m_nCurrentPhase: usize = 0xE74; // int32_t
-    pub const m_nPhaseStartTick: usize = 0xE78; // int32_t
-    pub const m_nPhaseDurationTicks: usize = 0xE7C; // int32_t
-    pub const m_nPostDataUpdateTick: usize = 0xE80; // int32_t
-    pub const m_bDisabledHud: usize = 0xE84; // bool
-}
-
-pub mod C_Melee { // C_CSWeaponBase
-}
-
-pub mod C_ModelPointEntity { // C_BaseModelEntity
-}
-
-pub mod C_MolotovGrenade { // C_BaseCSGrenade
-}
-
-pub mod C_MolotovProjectile { // C_BaseCSGrenadeProjectile
-    pub const m_bIsIncGrenade: usize = 0x1100; // bool
-}
-
-pub mod C_Multimeter { // CBaseAnimGraph
-    pub const m_hTargetC4: usize = 0xE88; // CHandle<C_PlantedC4>
-}
-
-pub mod C_MultiplayRules { // C_GameRules
-}
-
-pub mod C_NetTestBaseCombatCharacter { // C_BaseCombatCharacter
-}
-
-pub mod C_OmniLight { // C_BarnLight
-    pub const m_flInnerAngle: usize = 0xF08; // float
-    pub const m_flOuterAngle: usize = 0xF0C; // float
-    pub const m_bShowLight: usize = 0xF10; // bool
-}
-
-pub mod C_ParticleSystem { // C_BaseModelEntity
-    pub const m_szSnapshotFileName: usize = 0xCC0; // char[512]
-    pub const m_bActive: usize = 0xEC0; // bool
-    pub const m_bFrozen: usize = 0xEC1; // bool
-    pub const m_flFreezeTransitionDuration: usize = 0xEC4; // float
-    pub const m_nStopType: usize = 0xEC8; // int32_t
-    pub const m_bAnimateDuringGameplayPause: usize = 0xECC; // bool
-    pub const m_iEffectIndex: usize = 0xED0; // CStrongHandle<InfoForResourceTypeIParticleSystemDefinition>
-    pub const m_flStartTime: usize = 0xED8; // GameTime_t
-    pub const m_flPreSimTime: usize = 0xEDC; // float
-    pub const m_vServerControlPoints: usize = 0xEE0; // Vector[4]
-    pub const m_iServerControlPointAssignments: usize = 0xF10; // uint8_t[4]
-    pub const m_hControlPointEnts: usize = 0xF14; // CHandle<C_BaseEntity>[64]
-    pub const m_bNoSave: usize = 0x1014; // bool
-    pub const m_bNoFreeze: usize = 0x1015; // bool
-    pub const m_bNoRamp: usize = 0x1016; // bool
-    pub const m_bStartActive: usize = 0x1017; // bool
-    pub const m_iszEffectName: usize = 0x1018; // CUtlSymbolLarge
-    pub const m_iszControlPointNames: usize = 0x1020; // CUtlSymbolLarge[64]
-    pub const m_nDataCP: usize = 0x1220; // int32_t
-    pub const m_vecDataCPValue: usize = 0x1224; // Vector
-    pub const m_nTintCP: usize = 0x1230; // int32_t
-    pub const m_clrTint: usize = 0x1234; // Color
-    pub const m_bOldActive: usize = 0x1258; // bool
-    pub const m_bOldFrozen: usize = 0x1259; // bool
-}
-
-pub mod C_PathParticleRope { // C_BaseEntity
-    pub const m_bStartActive: usize = 0x540; // bool
-    pub const m_flMaxSimulationTime: usize = 0x544; // float
-    pub const m_iszEffectName: usize = 0x548; // CUtlSymbolLarge
-    pub const m_PathNodes_Name: usize = 0x550; // CUtlVector<CUtlSymbolLarge>
-    pub const m_flParticleSpacing: usize = 0x568; // float
-    pub const m_flSlack: usize = 0x56C; // float
-    pub const m_flRadius: usize = 0x570; // float
-    pub const m_ColorTint: usize = 0x574; // Color
-    pub const m_nEffectState: usize = 0x578; // int32_t
-    pub const m_iEffectIndex: usize = 0x580; // CStrongHandle<InfoForResourceTypeIParticleSystemDefinition>
-    pub const m_PathNodes_Position: usize = 0x588; // C_NetworkUtlVectorBase<Vector>
-    pub const m_PathNodes_TangentIn: usize = 0x5A0; // C_NetworkUtlVectorBase<Vector>
-    pub const m_PathNodes_TangentOut: usize = 0x5B8; // C_NetworkUtlVectorBase<Vector>
-    pub const m_PathNodes_Color: usize = 0x5D0; // C_NetworkUtlVectorBase<Vector>
-    pub const m_PathNodes_PinEnabled: usize = 0x5E8; // C_NetworkUtlVectorBase<bool>
-    pub const m_PathNodes_RadiusScale: usize = 0x600; // C_NetworkUtlVectorBase<float>
-}
-
-pub mod C_PathParticleRopeAlias_path_particle_rope_clientside { // C_PathParticleRope
-}
-
-pub mod C_PhysBox { // C_Breakable
-}
-
-pub mod C_PhysMagnet { // CBaseAnimGraph
-    pub const m_aAttachedObjectsFromServer: usize = 0xE80; // CUtlVector<int32_t>
-    pub const m_aAttachedObjects: usize = 0xE98; // CUtlVector<CHandle<C_BaseEntity>>
-}
-
-pub mod C_PhysPropClientside { // C_BreakableProp
-    pub const m_flTouchDelta: usize = 0xFD0; // GameTime_t
-    pub const m_fDeathTime: usize = 0xFD4; // GameTime_t
-    pub const m_impactEnergyScale: usize = 0xFD8; // float
-    pub const m_inertiaScale: usize = 0xFDC; // float
-    pub const m_flDmgModBullet: usize = 0xFE0; // float
-    pub const m_flDmgModClub: usize = 0xFE4; // float
-    pub const m_flDmgModExplosive: usize = 0xFE8; // float
-    pub const m_flDmgModFire: usize = 0xFEC; // float
-    pub const m_iszPhysicsDamageTableName: usize = 0xFF0; // CUtlSymbolLarge
-    pub const m_iszBasePropData: usize = 0xFF8; // CUtlSymbolLarge
-    pub const m_iInteractions: usize = 0x1000; // int32_t
-    pub const m_bHasBreakPiecesOrCommands: usize = 0x1004; // bool
-    pub const m_vecDamagePosition: usize = 0x1008; // Vector
-    pub const m_vecDamageDirection: usize = 0x1014; // Vector
-    pub const m_nDamageType: usize = 0x1020; // int32_t
-}
-
-pub mod C_PhysicsProp { // C_BreakableProp
-    pub const m_bAwake: usize = 0xFD0; // bool
-}
-
-pub mod C_PhysicsPropMultiplayer { // C_PhysicsProp
-}
-
-pub mod C_PickUpModelSlerper { // CBaseAnimGraph
-    pub const m_hPlayerParent: usize = 0xE80; // CHandle<C_BaseEntity>
-    pub const m_hItem: usize = 0xE84; // CHandle<C_BaseEntity>
-    pub const m_flTimePickedUp: usize = 0xE88; // float
-    pub const m_angOriginal: usize = 0xE8C; // QAngle
-    pub const m_vecPosOriginal: usize = 0xE98; // Vector
-    pub const m_angRandom: usize = 0xEA8; // QAngle
-}
-
-pub mod C_PlantedC4 { // CBaseAnimGraph
-    pub const m_bBombTicking: usize = 0xE80; // bool
-    pub const m_nBombSite: usize = 0xE84; // int32_t
-    pub const m_nSourceSoundscapeHash: usize = 0xE88; // int32_t
-    pub const m_entitySpottedState: usize = 0xE90; // EntitySpottedState_t
-    pub const m_flNextGlow: usize = 0xEA8; // GameTime_t
-    pub const m_flNextBeep: usize = 0xEAC; // GameTime_t
-    pub const m_flC4Blow: usize = 0xEB0; // GameTime_t
-    pub const m_bCannotBeDefused: usize = 0xEB4; // bool
-    pub const m_bHasExploded: usize = 0xEB5; // bool
-    pub const m_flTimerLength: usize = 0xEB8; // float
-    pub const m_bBeingDefused: usize = 0xEBC; // bool
-    pub const m_bTriggerWarning: usize = 0xEC0; // float
-    pub const m_bExplodeWarning: usize = 0xEC4; // float
-    pub const m_bC4Activated: usize = 0xEC8; // bool
-    pub const m_bTenSecWarning: usize = 0xEC9; // bool
-    pub const m_flDefuseLength: usize = 0xECC; // float
-    pub const m_flDefuseCountDown: usize = 0xED0; // GameTime_t
-    pub const m_bBombDefused: usize = 0xED4; // bool
-    pub const m_hBombDefuser: usize = 0xED8; // CHandle<C_CSPlayerPawn>
-    pub const m_hControlPanel: usize = 0xEDC; // CHandle<C_BaseEntity>
-    pub const m_hDefuserMultimeter: usize = 0xEE0; // CHandle<C_Multimeter>
-    pub const m_flNextRadarFlashTime: usize = 0xEE4; // GameTime_t
-    pub const m_bRadarFlash: usize = 0xEE8; // bool
-    pub const m_pBombDefuser: usize = 0xEEC; // CHandle<C_CSPlayerPawn>
-    pub const m_fLastDefuseTime: usize = 0xEF0; // GameTime_t
-    pub const m_pPredictionOwner: usize = 0xEF8; // CBasePlayerController*
-}
-
-pub mod C_PlayerPing { // C_BaseEntity
-    pub const m_hPlayer: usize = 0x570; // CHandle<C_CSPlayerPawn>
-    pub const m_hPingedEntity: usize = 0x574; // CHandle<C_BaseEntity>
-    pub const m_iType: usize = 0x578; // int32_t
-    pub const m_bUrgent: usize = 0x57C; // bool
-    pub const m_szPlaceName: usize = 0x57D; // char[18]
-}
-
-pub mod C_PlayerSprayDecal { // C_ModelPointEntity
-    pub const m_nUniqueID: usize = 0xCC0; // int32_t
-    pub const m_unAccountID: usize = 0xCC4; // uint32_t
-    pub const m_unTraceID: usize = 0xCC8; // uint32_t
-    pub const m_rtGcTime: usize = 0xCCC; // uint32_t
-    pub const m_vecEndPos: usize = 0xCD0; // Vector
-    pub const m_vecStart: usize = 0xCDC; // Vector
-    pub const m_vecLeft: usize = 0xCE8; // Vector
-    pub const m_vecNormal: usize = 0xCF4; // Vector
-    pub const m_nPlayer: usize = 0xD00; // int32_t
-    pub const m_nEntity: usize = 0xD04; // int32_t
-    pub const m_nHitbox: usize = 0xD08; // int32_t
-    pub const m_flCreationTime: usize = 0xD0C; // float
-    pub const m_nTintID: usize = 0xD10; // int32_t
-    pub const m_nVersion: usize = 0xD14; // uint8_t
-    pub const m_ubSignature: usize = 0xD15; // uint8_t[128]
-    pub const m_SprayRenderHelper: usize = 0xDA0; // CPlayerSprayDecalRenderHelper
-}
-
-pub mod C_PlayerVisibility { // C_BaseEntity
-    pub const m_flVisibilityStrength: usize = 0x540; // float
-    pub const m_flFogDistanceMultiplier: usize = 0x544; // float
-    pub const m_flFogMaxDensityMultiplier: usize = 0x548; // float
-    pub const m_flFadeTime: usize = 0x54C; // float
-    pub const m_bStartDisabled: usize = 0x550; // bool
-    pub const m_bIsEnabled: usize = 0x551; // bool
-}
-
-pub mod C_PointCamera { // C_BaseEntity
-    pub const m_FOV: usize = 0x540; // float
-    pub const m_Resolution: usize = 0x544; // float
-    pub const m_bFogEnable: usize = 0x548; // bool
-    pub const m_FogColor: usize = 0x549; // Color
-    pub const m_flFogStart: usize = 0x550; // float
-    pub const m_flFogEnd: usize = 0x554; // float
-    pub const m_flFogMaxDensity: usize = 0x558; // float
-    pub const m_bActive: usize = 0x55C; // bool
-    pub const m_bUseScreenAspectRatio: usize = 0x55D; // bool
-    pub const m_flAspectRatio: usize = 0x560; // float
-    pub const m_bNoSky: usize = 0x564; // bool
-    pub const m_fBrightness: usize = 0x568; // float
-    pub const m_flZFar: usize = 0x56C; // float
-    pub const m_flZNear: usize = 0x570; // float
-    pub const m_bCanHLTVUse: usize = 0x574; // bool
-    pub const m_bDofEnabled: usize = 0x575; // bool
-    pub const m_flDofNearBlurry: usize = 0x578; // float
-    pub const m_flDofNearCrisp: usize = 0x57C; // float
-    pub const m_flDofFarCrisp: usize = 0x580; // float
-    pub const m_flDofFarBlurry: usize = 0x584; // float
-    pub const m_flDofTiltToGround: usize = 0x588; // float
-    pub const m_TargetFOV: usize = 0x58C; // float
-    pub const m_DegreesPerSecond: usize = 0x590; // float
-    pub const m_bIsOn: usize = 0x594; // bool
-    pub const m_pNext: usize = 0x598; // C_PointCamera*
-}
-
-pub mod C_PointCameraVFOV { // C_PointCamera
-    pub const m_flVerticalFOV: usize = 0x5A0; // float
-}
-
-pub mod C_PointClientUIDialog { // C_BaseClientUIEntity
-    pub const m_hActivator: usize = 0xCF0; // CHandle<C_BaseEntity>
-    pub const m_bStartEnabled: usize = 0xCF4; // bool
-}
-
-pub mod C_PointClientUIHUD { // C_BaseClientUIEntity
-    pub const m_bCheckCSSClasses: usize = 0xCF8; // bool
-    pub const m_bIgnoreInput: usize = 0xE80; // bool
-    pub const m_flWidth: usize = 0xE84; // float
-    pub const m_flHeight: usize = 0xE88; // float
-    pub const m_flDPI: usize = 0xE8C; // float
-    pub const m_flInteractDistance: usize = 0xE90; // float
-    pub const m_flDepthOffset: usize = 0xE94; // float
-    pub const m_unOwnerContext: usize = 0xE98; // uint32_t
-    pub const m_unHorizontalAlign: usize = 0xE9C; // uint32_t
-    pub const m_unVerticalAlign: usize = 0xEA0; // uint32_t
-    pub const m_unOrientation: usize = 0xEA4; // uint32_t
-    pub const m_bAllowInteractionFromAllSceneWorlds: usize = 0xEA8; // bool
-    pub const m_vecCSSClasses: usize = 0xEB0; // C_NetworkUtlVectorBase<CUtlSymbolLarge>
-}
-
-pub mod C_PointClientUIWorldPanel { // C_BaseClientUIEntity
-    pub const m_bForceRecreateNextUpdate: usize = 0xCF8; // bool
-    pub const m_bMoveViewToPlayerNextThink: usize = 0xCF9; // bool
-    pub const m_bCheckCSSClasses: usize = 0xCFA; // bool
-    pub const m_anchorDeltaTransform: usize = 0xD00; // CTransform
-    pub const m_pOffScreenIndicator: usize = 0xEA0; // CPointOffScreenIndicatorUi*
-    pub const m_bIgnoreInput: usize = 0xEC8; // bool
-    pub const m_bLit: usize = 0xEC9; // bool
-    pub const m_bFollowPlayerAcrossTeleport: usize = 0xECA; // bool
-    pub const m_flWidth: usize = 0xECC; // float
-    pub const m_flHeight: usize = 0xED0; // float
-    pub const m_flDPI: usize = 0xED4; // float
-    pub const m_flInteractDistance: usize = 0xED8; // float
-    pub const m_flDepthOffset: usize = 0xEDC; // float
-    pub const m_unOwnerContext: usize = 0xEE0; // uint32_t
-    pub const m_unHorizontalAlign: usize = 0xEE4; // uint32_t
-    pub const m_unVerticalAlign: usize = 0xEE8; // uint32_t
-    pub const m_unOrientation: usize = 0xEEC; // uint32_t
-    pub const m_bAllowInteractionFromAllSceneWorlds: usize = 0xEF0; // bool
-    pub const m_vecCSSClasses: usize = 0xEF8; // C_NetworkUtlVectorBase<CUtlSymbolLarge>
-    pub const m_bOpaque: usize = 0xF10; // bool
-    pub const m_bNoDepth: usize = 0xF11; // bool
-    pub const m_bRenderBackface: usize = 0xF12; // bool
-    pub const m_bUseOffScreenIndicator: usize = 0xF13; // bool
-    pub const m_bExcludeFromSaveGames: usize = 0xF14; // bool
-    pub const m_bGrabbable: usize = 0xF15; // bool
-    pub const m_bOnlyRenderToTexture: usize = 0xF16; // bool
-    pub const m_bDisableMipGen: usize = 0xF17; // bool
-    pub const m_nExplicitImageLayout: usize = 0xF18; // int32_t
-}
-
-pub mod C_PointClientUIWorldTextPanel { // C_PointClientUIWorldPanel
-    pub const m_messageText: usize = 0xF20; // char[512]
-}
-
-pub mod C_PointCommentaryNode { // CBaseAnimGraph
-    pub const m_bActive: usize = 0xE88; // bool
-    pub const m_bWasActive: usize = 0xE89; // bool
-    pub const m_flEndTime: usize = 0xE8C; // GameTime_t
-    pub const m_flStartTime: usize = 0xE90; // GameTime_t
-    pub const m_flStartTimeInCommentary: usize = 0xE94; // float
-    pub const m_iszCommentaryFile: usize = 0xE98; // CUtlSymbolLarge
-    pub const m_iszTitle: usize = 0xEA0; // CUtlSymbolLarge
-    pub const m_iszSpeakers: usize = 0xEA8; // CUtlSymbolLarge
-    pub const m_iNodeNumber: usize = 0xEB0; // int32_t
-    pub const m_iNodeNumberMax: usize = 0xEB4; // int32_t
-    pub const m_bListenedTo: usize = 0xEB8; // bool
-    pub const m_hViewPosition: usize = 0xEC8; // CHandle<C_BaseEntity>
-    pub const m_bRestartAfterRestore: usize = 0xECC; // bool
-}
-
-pub mod C_PointEntity { // C_BaseEntity
-}
-
-pub mod C_PointValueRemapper { // C_BaseEntity
-    pub const m_bDisabled: usize = 0x540; // bool
-    pub const m_bDisabledOld: usize = 0x541; // bool
-    pub const m_bUpdateOnClient: usize = 0x542; // bool
-    pub const m_nInputType: usize = 0x544; // ValueRemapperInputType_t
-    pub const m_hRemapLineStart: usize = 0x548; // CHandle<C_BaseEntity>
-    pub const m_hRemapLineEnd: usize = 0x54C; // CHandle<C_BaseEntity>
-    pub const m_flMaximumChangePerSecond: usize = 0x550; // float
-    pub const m_flDisengageDistance: usize = 0x554; // float
-    pub const m_flEngageDistance: usize = 0x558; // float
-    pub const m_bRequiresUseKey: usize = 0x55C; // bool
-    pub const m_nOutputType: usize = 0x560; // ValueRemapperOutputType_t
-    pub const m_hOutputEntities: usize = 0x568; // C_NetworkUtlVectorBase<CHandle<C_BaseEntity>>
-    pub const m_nHapticsType: usize = 0x580; // ValueRemapperHapticsType_t
-    pub const m_nMomentumType: usize = 0x584; // ValueRemapperMomentumType_t
-    pub const m_flMomentumModifier: usize = 0x588; // float
-    pub const m_flSnapValue: usize = 0x58C; // float
-    pub const m_flCurrentMomentum: usize = 0x590; // float
-    pub const m_nRatchetType: usize = 0x594; // ValueRemapperRatchetType_t
-    pub const m_flRatchetOffset: usize = 0x598; // float
-    pub const m_flInputOffset: usize = 0x59C; // float
-    pub const m_bEngaged: usize = 0x5A0; // bool
-    pub const m_bFirstUpdate: usize = 0x5A1; // bool
-    pub const m_flPreviousValue: usize = 0x5A4; // float
-    pub const m_flPreviousUpdateTickTime: usize = 0x5A8; // GameTime_t
-    pub const m_vecPreviousTestPoint: usize = 0x5AC; // Vector
-}
-
-pub mod C_PointWorldText { // C_ModelPointEntity
-    pub const m_bForceRecreateNextUpdate: usize = 0xCC8; // bool
-    pub const m_messageText: usize = 0xCD8; // char[512]
-    pub const m_FontName: usize = 0xED8; // char[64]
-    pub const m_bEnabled: usize = 0xF18; // bool
-    pub const m_bFullbright: usize = 0xF19; // bool
-    pub const m_flWorldUnitsPerPx: usize = 0xF1C; // float
-    pub const m_flFontSize: usize = 0xF20; // float
-    pub const m_flDepthOffset: usize = 0xF24; // float
-    pub const m_Color: usize = 0xF28; // Color
-    pub const m_nJustifyHorizontal: usize = 0xF2C; // PointWorldTextJustifyHorizontal_t
-    pub const m_nJustifyVertical: usize = 0xF30; // PointWorldTextJustifyVertical_t
-    pub const m_nReorientMode: usize = 0xF34; // PointWorldTextReorientMode_t
-}
-
-pub mod C_PostProcessingVolume { // C_BaseTrigger
-    pub const m_hPostSettings: usize = 0xCD8; // CStrongHandle<InfoForResourceTypeCPostProcessingResource>
-    pub const m_flFadeDuration: usize = 0xCE0; // float
-    pub const m_flMinLogExposure: usize = 0xCE4; // float
-    pub const m_flMaxLogExposure: usize = 0xCE8; // float
-    pub const m_flMinExposure: usize = 0xCEC; // float
-    pub const m_flMaxExposure: usize = 0xCF0; // float
-    pub const m_flExposureCompensation: usize = 0xCF4; // float
-    pub const m_flExposureFadeSpeedUp: usize = 0xCF8; // float
-    pub const m_flExposureFadeSpeedDown: usize = 0xCFC; // float
-    pub const m_flTonemapEVSmoothingRange: usize = 0xD00; // float
-    pub const m_bMaster: usize = 0xD04; // bool
-    pub const m_bExposureControl: usize = 0xD05; // bool
-    pub const m_flRate: usize = 0xD08; // float
-    pub const m_flTonemapPercentTarget: usize = 0xD0C; // float
-    pub const m_flTonemapPercentBrightPixels: usize = 0xD10; // float
-    pub const m_flTonemapMinAvgLum: usize = 0xD14; // float
-}
-
-pub mod C_Precipitation { // C_BaseTrigger
-    pub const m_flDensity: usize = 0xCC8; // float
-    pub const m_flParticleInnerDist: usize = 0xCD8; // float
-    pub const m_pParticleDef: usize = 0xCE0; // char*
-    pub const m_tParticlePrecipTraceTimer: usize = 0xD08; // TimedEvent[1]
-    pub const m_bActiveParticlePrecipEmitter: usize = 0xD10; // bool[1]
-    pub const m_bParticlePrecipInitialized: usize = 0xD11; // bool
-    pub const m_bHasSimulatedSinceLastSceneObjectUpdate: usize = 0xD12; // bool
-    pub const m_nAvailableSheetSequencesMaxIndex: usize = 0xD14; // int32_t
-}
-
-pub mod C_PrecipitationBlocker { // C_BaseModelEntity
-}
-
-pub mod C_PredictedViewModel { // C_BaseViewModel
-    pub const m_LagAnglesHistory: usize = 0xEE8; // QAngle
-    pub const m_vPredictedOffset: usize = 0xF00; // Vector
-}
-
-pub mod C_RagdollManager { // C_BaseEntity
-    pub const m_iCurrentMaxRagdollCount: usize = 0x540; // int8_t
-}
-
-pub mod C_RagdollProp { // CBaseAnimGraph
-    pub const m_ragPos: usize = 0xE88; // C_NetworkUtlVectorBase<Vector>
-    pub const m_ragAngles: usize = 0xEA0; // C_NetworkUtlVectorBase<QAngle>
-    pub const m_flBlendWeight: usize = 0xEB8; // float
-    pub const m_hRagdollSource: usize = 0xEBC; // CHandle<C_BaseEntity>
-    pub const m_iEyeAttachment: usize = 0xEC0; // AttachmentHandle_t
-    pub const m_flBlendWeightCurrent: usize = 0xEC4; // float
-    pub const m_parentPhysicsBoneIndices: usize = 0xEC8; // CUtlVector<int32_t>
-    pub const m_worldSpaceBoneComputationOrder: usize = 0xEE0; // CUtlVector<int32_t>
-}
-
-pub mod C_RagdollPropAttached { // C_RagdollProp
-    pub const m_boneIndexAttached: usize = 0xEF8; // uint32_t
-    pub const m_ragdollAttachedObjectIndex: usize = 0xEFC; // uint32_t
-    pub const m_attachmentPointBoneSpace: usize = 0xF00; // Vector
-    pub const m_attachmentPointRagdollSpace: usize = 0xF0C; // Vector
-    pub const m_vecOffset: usize = 0xF18; // Vector
-    pub const m_parentTime: usize = 0xF24; // float
-    pub const m_bHasParent: usize = 0xF28; // bool
-}
-
-pub mod C_RectLight { // C_BarnLight
-    pub const m_bShowLight: usize = 0xF08; // bool
-}
-
-pub mod C_RetakeGameRules {
-    pub const m_nMatchSeed: usize = 0xF8; // int32_t
-    pub const m_bBlockersPresent: usize = 0xFC; // bool
-    pub const m_bRoundInProgress: usize = 0xFD; // bool
-    pub const m_iFirstSecondHalfRound: usize = 0x100; // int32_t
-    pub const m_iBombSite: usize = 0x104; // int32_t
-}
-
-pub mod C_RopeKeyframe { // C_BaseModelEntity
-    pub const m_LinksTouchingSomething: usize = 0xCC8; // CBitVec<10>
-    pub const m_nLinksTouchingSomething: usize = 0xCCC; // int32_t
-    pub const m_bApplyWind: usize = 0xCD0; // bool
-    pub const m_fPrevLockedPoints: usize = 0xCD4; // int32_t
-    pub const m_iForcePointMoveCounter: usize = 0xCD8; // int32_t
-    pub const m_bPrevEndPointPos: usize = 0xCDC; // bool[2]
-    pub const m_vPrevEndPointPos: usize = 0xCE0; // Vector[2]
-    pub const m_flCurScroll: usize = 0xCF8; // float
-    pub const m_flScrollSpeed: usize = 0xCFC; // float
-    pub const m_RopeFlags: usize = 0xD00; // uint16_t
-    pub const m_iRopeMaterialModelIndex: usize = 0xD08; // CStrongHandle<InfoForResourceTypeIMaterial2>
-    pub const m_LightValues: usize = 0xF80; // Vector[10]
-    pub const m_nSegments: usize = 0xFF8; // uint8_t
-    pub const m_hStartPoint: usize = 0xFFC; // CHandle<C_BaseEntity>
-    pub const m_hEndPoint: usize = 0x1000; // CHandle<C_BaseEntity>
-    pub const m_iStartAttachment: usize = 0x1004; // AttachmentHandle_t
-    pub const m_iEndAttachment: usize = 0x1005; // AttachmentHandle_t
-    pub const m_Subdiv: usize = 0x1006; // uint8_t
-    pub const m_RopeLength: usize = 0x1008; // int16_t
-    pub const m_Slack: usize = 0x100A; // int16_t
-    pub const m_TextureScale: usize = 0x100C; // float
-    pub const m_fLockedPoints: usize = 0x1010; // uint8_t
-    pub const m_nChangeCount: usize = 0x1011; // uint8_t
-    pub const m_Width: usize = 0x1014; // float
-    pub const m_PhysicsDelegate: usize = 0x1018; // C_RopeKeyframe::CPhysicsDelegate
-    pub const m_hMaterial: usize = 0x1028; // CStrongHandle<InfoForResourceTypeIMaterial2>
-    pub const m_TextureHeight: usize = 0x1030; // int32_t
-    pub const m_vecImpulse: usize = 0x1034; // Vector
-    pub const m_vecPreviousImpulse: usize = 0x1040; // Vector
-    pub const m_flCurrentGustTimer: usize = 0x104C; // float
-    pub const m_flCurrentGustLifetime: usize = 0x1050; // float
-    pub const m_flTimeToNextGust: usize = 0x1054; // float
-    pub const m_vWindDir: usize = 0x1058; // Vector
-    pub const m_vColorMod: usize = 0x1064; // Vector
-    pub const m_vCachedEndPointAttachmentPos: usize = 0x1070; // Vector[2]
-    pub const m_vCachedEndPointAttachmentAngle: usize = 0x1088; // QAngle[2]
-    pub const m_bConstrainBetweenEndpoints: usize = 0x10A0; // bool
-    pub const m_bEndPointAttachmentPositionsDirty: usize = 0x0; // bitfield:1
-    pub const m_bEndPointAttachmentAnglesDirty: usize = 0x0; // bitfield:1
-    pub const m_bNewDataThisFrame: usize = 0x0; // bitfield:1
-    pub const m_bPhysicsInitted: usize = 0x0; // bitfield:1
-}
-
-pub mod C_RopeKeyframe_CPhysicsDelegate {
-    pub const m_pKeyframe: usize = 0x8; // C_RopeKeyframe*
-}
-
-pub mod C_SceneEntity { // C_PointEntity
-    pub const m_bIsPlayingBack: usize = 0x548; // bool
-    pub const m_bPaused: usize = 0x549; // bool
-    pub const m_bMultiplayer: usize = 0x54A; // bool
-    pub const m_bAutogenerated: usize = 0x54B; // bool
-    pub const m_flForceClientTime: usize = 0x54C; // float
-    pub const m_nSceneStringIndex: usize = 0x550; // uint16_t
-    pub const m_bClientOnly: usize = 0x552; // bool
-    pub const m_hOwner: usize = 0x554; // CHandle<C_BaseFlex>
-    pub const m_hActorList: usize = 0x558; // C_NetworkUtlVectorBase<CHandle<C_BaseFlex>>
-    pub const m_bWasPlaying: usize = 0x570; // bool
-    pub const m_QueuedEvents: usize = 0x580; // CUtlVector<C_SceneEntity::QueuedEvents_t>
-    pub const m_flCurrentTime: usize = 0x598; // float
-}
-
-pub mod C_SceneEntity_QueuedEvents_t {
-    pub const starttime: usize = 0x0; // float
-}
-
-pub mod C_SensorGrenade { // C_BaseCSGrenade
-}
-
-pub mod C_SensorGrenadeProjectile { // C_BaseCSGrenadeProjectile
-}
-
-pub mod C_ShatterGlassShardPhysics { // C_PhysicsProp
-    pub const m_ShardDesc: usize = 0xFE0; // shard_model_desc_t
-}
-
-pub mod C_SingleplayRules { // C_GameRules
-}
-
-pub mod C_SkyCamera { // C_BaseEntity
-    pub const m_skyboxData: usize = 0x540; // sky3dparams_t
-    pub const m_skyboxSlotToken: usize = 0x5D0; // CUtlStringToken
-    pub const m_bUseAngles: usize = 0x5D4; // bool
-    pub const m_pNext: usize = 0x5D8; // C_SkyCamera*
-}
-
-pub mod C_SmokeGrenade { // C_BaseCSGrenade
-}
-
-pub mod C_SmokeGrenadeProjectile { // C_BaseCSGrenadeProjectile
-    pub const m_nSmokeEffectTickBegin: usize = 0x1108; // int32_t
-    pub const m_bDidSmokeEffect: usize = 0x110C; // bool
-    pub const m_nRandomSeed: usize = 0x1110; // int32_t
-    pub const m_vSmokeColor: usize = 0x1114; // Vector
-    pub const m_vSmokeDetonationPos: usize = 0x1120; // Vector
-    pub const m_VoxelFrameData: usize = 0x1130; // CUtlVector<uint8_t>
-    pub const m_bSmokeVolumeDataReceived: usize = 0x1148; // bool
-    pub const m_bSmokeEffectSpawned: usize = 0x1149; // bool
-}
-
-pub mod C_SoundAreaEntityBase { // C_BaseEntity
-    pub const m_bDisabled: usize = 0x540; // bool
-    pub const m_bWasEnabled: usize = 0x548; // bool
-    pub const m_iszSoundAreaType: usize = 0x550; // CUtlSymbolLarge
-    pub const m_vPos: usize = 0x558; // Vector
-}
-
-pub mod C_SoundAreaEntityOrientedBox { // C_SoundAreaEntityBase
-    pub const m_vMin: usize = 0x568; // Vector
-    pub const m_vMax: usize = 0x574; // Vector
-}
-
-pub mod C_SoundAreaEntitySphere { // C_SoundAreaEntityBase
-    pub const m_flRadius: usize = 0x568; // float
-}
-
-pub mod C_SoundOpvarSetAABBEntity { // C_SoundOpvarSetPointEntity
-}
-
-pub mod C_SoundOpvarSetOBBEntity { // C_SoundOpvarSetAABBEntity
-}
-
-pub mod C_SoundOpvarSetOBBWindEntity { // C_SoundOpvarSetPointBase
-}
-
-pub mod C_SoundOpvarSetPathCornerEntity { // C_SoundOpvarSetPointEntity
-}
-
-pub mod C_SoundOpvarSetPointBase { // C_BaseEntity
-    pub const m_iszStackName: usize = 0x540; // CUtlSymbolLarge
-    pub const m_iszOperatorName: usize = 0x548; // CUtlSymbolLarge
-    pub const m_iszOpvarName: usize = 0x550; // CUtlSymbolLarge
-    pub const m_iOpvarIndex: usize = 0x558; // int32_t
-    pub const m_bUseAutoCompare: usize = 0x55C; // bool
-}
-
-pub mod C_SoundOpvarSetPointEntity { // C_SoundOpvarSetPointBase
-}
-
-pub mod C_SpotlightEnd { // C_BaseModelEntity
-    pub const m_flLightScale: usize = 0xCC0; // float
-    pub const m_Radius: usize = 0xCC4; // float
-}
-
-pub mod C_Sprite { // C_BaseModelEntity
-    pub const m_hSpriteMaterial: usize = 0xCD8; // CStrongHandle<InfoForResourceTypeIMaterial2>
-    pub const m_hAttachedToEntity: usize = 0xCE0; // CHandle<C_BaseEntity>
-    pub const m_nAttachment: usize = 0xCE4; // AttachmentHandle_t
-    pub const m_flSpriteFramerate: usize = 0xCE8; // float
-    pub const m_flFrame: usize = 0xCEC; // float
-    pub const m_flDieTime: usize = 0xCF0; // GameTime_t
-    pub const m_nBrightness: usize = 0xD00; // uint32_t
-    pub const m_flBrightnessDuration: usize = 0xD04; // float
-    pub const m_flSpriteScale: usize = 0xD08; // float
-    pub const m_flScaleDuration: usize = 0xD0C; // float
-    pub const m_bWorldSpaceScale: usize = 0xD10; // bool
-    pub const m_flGlowProxySize: usize = 0xD14; // float
-    pub const m_flHDRColorScale: usize = 0xD18; // float
-    pub const m_flLastTime: usize = 0xD1C; // GameTime_t
-    pub const m_flMaxFrame: usize = 0xD20; // float
-    pub const m_flStartScale: usize = 0xD24; // float
-    pub const m_flDestScale: usize = 0xD28; // float
-    pub const m_flScaleTimeStart: usize = 0xD2C; // GameTime_t
-    pub const m_nStartBrightness: usize = 0xD30; // int32_t
-    pub const m_nDestBrightness: usize = 0xD34; // int32_t
-    pub const m_flBrightnessTimeStart: usize = 0xD38; // GameTime_t
-    pub const m_hOldSpriteMaterial: usize = 0xD40; // CWeakHandle<InfoForResourceTypeIMaterial2>
-    pub const m_nSpriteWidth: usize = 0xDE8; // int32_t
-    pub const m_nSpriteHeight: usize = 0xDEC; // int32_t
-}
-
-pub mod C_SpriteOriented { // C_Sprite
-}
-
-pub mod C_Sun { // C_BaseModelEntity
-    pub const m_fxSSSunFlareEffectIndex: usize = 0xCC0; // ParticleIndex_t
-    pub const m_fxSunFlareEffectIndex: usize = 0xCC4; // ParticleIndex_t
-    pub const m_fdistNormalize: usize = 0xCC8; // float
-    pub const m_vSunPos: usize = 0xCCC; // Vector
-    pub const m_vDirection: usize = 0xCD8; // Vector
-    pub const m_iszEffectName: usize = 0xCE8; // CUtlSymbolLarge
-    pub const m_iszSSEffectName: usize = 0xCF0; // CUtlSymbolLarge
-    pub const m_clrOverlay: usize = 0xCF8; // Color
-    pub const m_bOn: usize = 0xCFC; // bool
-    pub const m_bmaxColor: usize = 0xCFD; // bool
-    pub const m_flSize: usize = 0xD00; // float
-    pub const m_flHazeScale: usize = 0xD04; // float
-    pub const m_flRotation: usize = 0xD08; // float
-    pub const m_flHDRColorScale: usize = 0xD0C; // float
-    pub const m_flAlphaHaze: usize = 0xD10; // float
-    pub const m_flAlphaScale: usize = 0xD14; // float
-    pub const m_flAlphaHdr: usize = 0xD18; // float
-    pub const m_flFarZScale: usize = 0xD1C; // float
-}
-
-pub mod C_SunGlowOverlay { // CGlowOverlay
-    pub const m_bModulateByDot: usize = 0xD0; // bool
-}
-
-pub mod C_Team { // C_BaseEntity
-    pub const m_aPlayerControllers: usize = 0x540; // C_NetworkUtlVectorBase<CHandle<CBasePlayerController>>
-    pub const m_aPlayers: usize = 0x558; // C_NetworkUtlVectorBase<CHandle<C_BasePlayerPawn>>
-    pub const m_iScore: usize = 0x570; // int32_t
-    pub const m_szTeamname: usize = 0x574; // char[129]
-}
-
-pub mod C_TeamRoundTimer { // C_BaseEntity
-    pub const m_bTimerPaused: usize = 0x540; // bool
-    pub const m_flTimeRemaining: usize = 0x544; // float
-    pub const m_flTimerEndTime: usize = 0x548; // GameTime_t
-    pub const m_bIsDisabled: usize = 0x54C; // bool
-    pub const m_bShowInHUD: usize = 0x54D; // bool
-    pub const m_nTimerLength: usize = 0x550; // int32_t
-    pub const m_nTimerInitialLength: usize = 0x554; // int32_t
-    pub const m_nTimerMaxLength: usize = 0x558; // int32_t
-    pub const m_bAutoCountdown: usize = 0x55C; // bool
-    pub const m_nSetupTimeLength: usize = 0x560; // int32_t
-    pub const m_nState: usize = 0x564; // int32_t
-    pub const m_bStartPaused: usize = 0x568; // bool
-    pub const m_bInCaptureWatchState: usize = 0x569; // bool
-    pub const m_flTotalTime: usize = 0x56C; // float
-    pub const m_bStopWatchTimer: usize = 0x570; // bool
-    pub const m_bFireFinished: usize = 0x571; // bool
-    pub const m_bFire5MinRemain: usize = 0x572; // bool
-    pub const m_bFire4MinRemain: usize = 0x573; // bool
-    pub const m_bFire3MinRemain: usize = 0x574; // bool
-    pub const m_bFire2MinRemain: usize = 0x575; // bool
-    pub const m_bFire1MinRemain: usize = 0x576; // bool
-    pub const m_bFire30SecRemain: usize = 0x577; // bool
-    pub const m_bFire10SecRemain: usize = 0x578; // bool
-    pub const m_bFire5SecRemain: usize = 0x579; // bool
-    pub const m_bFire4SecRemain: usize = 0x57A; // bool
-    pub const m_bFire3SecRemain: usize = 0x57B; // bool
-    pub const m_bFire2SecRemain: usize = 0x57C; // bool
-    pub const m_bFire1SecRemain: usize = 0x57D; // bool
-    pub const m_nOldTimerLength: usize = 0x580; // int32_t
-    pub const m_nOldTimerState: usize = 0x584; // int32_t
-}
-
-pub mod C_TeamplayRules { // C_MultiplayRules
-}
-
-pub mod C_TextureBasedAnimatable { // C_BaseModelEntity
-    pub const m_bLoop: usize = 0xCC0; // bool
-    pub const m_flFPS: usize = 0xCC4; // float
-    pub const m_hPositionKeys: usize = 0xCC8; // CStrongHandle<InfoForResourceTypeCTextureBase>
-    pub const m_hRotationKeys: usize = 0xCD0; // CStrongHandle<InfoForResourceTypeCTextureBase>
-    pub const m_vAnimationBoundsMin: usize = 0xCD8; // Vector
-    pub const m_vAnimationBoundsMax: usize = 0xCE4; // Vector
-    pub const m_flStartTime: usize = 0xCF0; // float
-    pub const m_flStartFrame: usize = 0xCF4; // float
-}
-
-pub mod C_TintController { // C_BaseEntity
-}
-
-pub mod C_TonemapController2 { // C_BaseEntity
-    pub const m_flAutoExposureMin: usize = 0x540; // float
-    pub const m_flAutoExposureMax: usize = 0x544; // float
-    pub const m_flTonemapPercentTarget: usize = 0x548; // float
-    pub const m_flTonemapPercentBrightPixels: usize = 0x54C; // float
-    pub const m_flTonemapMinAvgLum: usize = 0x550; // float
-    pub const m_flExposureAdaptationSpeedUp: usize = 0x554; // float
-    pub const m_flExposureAdaptationSpeedDown: usize = 0x558; // float
-    pub const m_flTonemapEVSmoothingRange: usize = 0x55C; // float
-}
-
-pub mod C_TonemapController2Alias_env_tonemap_controller2 { // C_TonemapController2
-}
-
-pub mod C_TriggerBuoyancy { // C_BaseTrigger
-    pub const m_BuoyancyHelper: usize = 0xCC8; // CBuoyancyHelper
-    pub const m_flFluidDensity: usize = 0xCE8; // float
-}
-
-pub mod C_TriggerLerpObject { // C_BaseTrigger
-}
-
-pub mod C_TriggerMultiple { // C_BaseTrigger
-}
-
-pub mod C_TriggerVolume { // C_BaseModelEntity
-}
-
-pub mod C_ViewmodelAttachmentModel { // CBaseAnimGraph
-}
-
-pub mod C_ViewmodelWeapon { // CBaseAnimGraph
-    pub const m_worldModel: usize = 0xE80; // char*
-}
-
-pub mod C_VoteController { // C_BaseEntity
-    pub const m_iActiveIssueIndex: usize = 0x550; // int32_t
-    pub const m_iOnlyTeamToVote: usize = 0x554; // int32_t
-    pub const m_nVoteOptionCount: usize = 0x558; // int32_t[5]
-    pub const m_nPotentialVotes: usize = 0x56C; // int32_t
-    pub const m_bVotesDirty: usize = 0x570; // bool
-    pub const m_bTypeDirty: usize = 0x571; // bool
-    pub const m_bIsYesNoVote: usize = 0x572; // bool
-}
-
-pub mod C_WaterBullet { // CBaseAnimGraph
-}
-
-pub mod C_WeaponAWP { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponAug { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponBaseItem { // C_CSWeaponBase
-    pub const m_SequenceCompleteTimer: usize = 0x1A10; // CountdownTimer
-    pub const m_bRedraw: usize = 0x1A28; // bool
-}
-
-pub mod C_WeaponBizon { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponCZ75a { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponElite { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponFamas { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponFiveSeven { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponG3SG1 { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponGalilAR { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponGlock { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponHKP2000 { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponM249 { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponM4A1 { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponM4A1Silencer { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponMAC10 { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponMP5SD { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponMP7 { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponMP9 { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponMag7 { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponNOVA { // C_CSWeaponBase
-}
-
-pub mod C_WeaponNegev { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponP250 { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponP90 { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponRevolver { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponSCAR20 { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponSG556 { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponSSG08 { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponSawedoff { // C_CSWeaponBase
-}
-
-pub mod C_WeaponShield { // C_CSWeaponBaseGun
-    pub const m_flDisplayHealth: usize = 0x1A30; // float
-}
-
-pub mod C_WeaponTaser { // C_CSWeaponBaseGun
-    pub const m_fFireTime: usize = 0x1A30; // GameTime_t
-}
-
-pub mod C_WeaponTec9 { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponUMP45 { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponUSPSilencer { // C_CSWeaponBaseGun
-}
-
-pub mod C_WeaponXM1014 { // C_CSWeaponBase
-}
-
-pub mod C_World { // C_BaseModelEntity
-}
-
-pub mod C_WorldModelGloves { // CBaseAnimGraph
-}
-
-pub mod C_WorldModelNametag { // CBaseAnimGraph
-}
-
-pub mod C_WorldModelStattrak { // CBaseAnimGraph
-}
-
-pub mod C_fogplayerparams_t {
-    pub const m_hCtrl: usize = 0x8; // CHandle<C_FogController>
-    pub const m_flTransitionTime: usize = 0xC; // float
-    pub const m_OldColor: usize = 0x10; // Color
-    pub const m_flOldStart: usize = 0x14; // float
-    pub const m_flOldEnd: usize = 0x18; // float
-    pub const m_flOldMaxDensity: usize = 0x1C; // float
-    pub const m_flOldHDRColorScale: usize = 0x20; // float
-    pub const m_flOldFarZ: usize = 0x24; // float
-    pub const m_NewColor: usize = 0x28; // Color
-    pub const m_flNewStart: usize = 0x2C; // float
-    pub const m_flNewEnd: usize = 0x30; // float
-    pub const m_flNewMaxDensity: usize = 0x34; // float
-    pub const m_flNewHDRColorScale: usize = 0x38; // float
-    pub const m_flNewFarZ: usize = 0x3C; // float
-}
-
-pub mod CompMatMutatorCondition_t {
-    pub const m_nMutatorCondition: usize = 0x0; // CompMatPropertyMutatorConditionType_t
-    pub const m_strMutatorConditionContainerName: usize = 0x8; // CUtlString
-    pub const m_strMutatorConditionContainerVarName: usize = 0x10; // CUtlString
-    pub const m_strMutatorConditionContainerVarValue: usize = 0x18; // CUtlString
-    pub const m_bPassWhenTrue: usize = 0x20; // bool
-}
-
-pub mod CompMatPropertyMutator_t {
-    pub const m_bEnabled: usize = 0x0; // bool
-    pub const m_nMutatorCommandType: usize = 0x4; // CompMatPropertyMutatorType_t
-    pub const m_strInitWith_Container: usize = 0x8; // CUtlString
-    pub const m_strCopyProperty_InputContainerSrc: usize = 0x10; // CUtlString
-    pub const m_strCopyProperty_InputContainerProperty: usize = 0x18; // CUtlString
-    pub const m_strCopyProperty_TargetProperty: usize = 0x20; // CUtlString
-    pub const m_strRandomRollInputVars_SeedInputVar: usize = 0x28; // CUtlString
-    pub const m_vecRandomRollInputVars_InputVarsToRoll: usize = 0x30; // CUtlVector<CUtlString>
-    pub const m_strCopyMatchingKeys_InputContainerSrc: usize = 0x48; // CUtlString
-    pub const m_strCopyKeysWithSuffix_InputContainerSrc: usize = 0x50; // CUtlString
-    pub const m_strCopyKeysWithSuffix_FindSuffix: usize = 0x58; // CUtlString
-    pub const m_strCopyKeysWithSuffix_ReplaceSuffix: usize = 0x60; // CUtlString
-    pub const m_nSetValue_Value: usize = 0x68; // CompositeMaterialInputLooseVariable_t
-    pub const m_strGenerateTexture_TargetParam: usize = 0x2D8; // CUtlString
-    pub const m_strGenerateTexture_InitialContainer: usize = 0x2E0; // CUtlString
-    pub const m_nResolution: usize = 0x2E8; // int32_t
-    pub const m_bIsScratchTarget: usize = 0x2EC; // bool
-    pub const m_bSplatDebugInfo: usize = 0x2ED; // bool
-    pub const m_bCaptureInRenderDoc: usize = 0x2EE; // bool
-    pub const m_vecTexGenInstructions: usize = 0x2F0; // CUtlVector<CompMatPropertyMutator_t>
-    pub const m_vecConditionalMutators: usize = 0x308; // CUtlVector<CompMatPropertyMutator_t>
-    pub const m_strPopInputQueue_Container: usize = 0x320; // CUtlString
-    pub const m_strDrawText_InputContainerSrc: usize = 0x328; // CUtlString
-    pub const m_strDrawText_InputContainerProperty: usize = 0x330; // CUtlString
-    pub const m_vecDrawText_Position: usize = 0x338; // Vector2D
-    pub const m_colDrawText_Color: usize = 0x340; // Color
-    pub const m_strDrawText_Font: usize = 0x348; // CUtlString
-    pub const m_vecConditions: usize = 0x350; // CUtlVector<CompMatMutatorCondition_t>
-}
-
-pub mod CompositeMaterialAssemblyProcedure_t {
-    pub const m_vecCompMatIncludes: usize = 0x0; // CUtlVector<CResourceName>
-    pub const m_vecMatchFilters: usize = 0x18; // CUtlVector<CompositeMaterialMatchFilter_t>
-    pub const m_vecCompositeInputContainers: usize = 0x30; // CUtlVector<CompositeMaterialInputContainer_t>
-    pub const m_vecPropertyMutators: usize = 0x48; // CUtlVector<CompMatPropertyMutator_t>
-}
-
-pub mod CompositeMaterialEditorPoint_t {
-    pub const m_ModelName: usize = 0x0; // CResourceName
-    pub const m_nSequenceIndex: usize = 0xE0; // int32_t
-    pub const m_flCycle: usize = 0xE4; // float
-    pub const m_KVModelStateChoices: usize = 0xE8; // KeyValues3
-    pub const m_bEnableChildModel: usize = 0xF8; // bool
-    pub const m_ChildModelName: usize = 0x100; // CResourceName
-    pub const m_vecCompositeMaterialAssemblyProcedures: usize = 0x1E0; // CUtlVector<CompositeMaterialAssemblyProcedure_t>
-    pub const m_vecCompositeMaterials: usize = 0x1F8; // CUtlVector<CompositeMaterial_t>
-}
-
-pub mod CompositeMaterialInputContainer_t {
-    pub const m_bEnabled: usize = 0x0; // bool
-    pub const m_nCompositeMaterialInputContainerSourceType: usize = 0x4; // CompositeMaterialInputContainerSourceType_t
-    pub const m_strSpecificContainerMaterial: usize = 0x8; // CResourceName
-    pub const m_strAttrName: usize = 0xE8; // CUtlString
-    pub const m_strAlias: usize = 0xF0; // CUtlString
-    pub const m_vecLooseVariables: usize = 0xF8; // CUtlVector<CompositeMaterialInputLooseVariable_t>
-    pub const m_strAttrNameForVar: usize = 0x110; // CUtlString
-    pub const m_bExposeExternally: usize = 0x118; // bool
-}
-
-pub mod CompositeMaterialInputLooseVariable_t {
-    pub const m_strName: usize = 0x0; // CUtlString
-    pub const m_bExposeExternally: usize = 0x8; // bool
-    pub const m_strExposedFriendlyName: usize = 0x10; // CUtlString
-    pub const m_strExposedFriendlyGroupName: usize = 0x18; // CUtlString
-    pub const m_bExposedVariableIsFixedRange: usize = 0x20; // bool
-    pub const m_strExposedVisibleWhenTrue: usize = 0x28; // CUtlString
-    pub const m_strExposedHiddenWhenTrue: usize = 0x30; // CUtlString
-    pub const m_nVariableType: usize = 0x38; // CompositeMaterialInputLooseVariableType_t
-    pub const m_bValueBoolean: usize = 0x3C; // bool
-    pub const m_nValueIntX: usize = 0x40; // int32_t
-    pub const m_nValueIntY: usize = 0x44; // int32_t
-    pub const m_nValueIntZ: usize = 0x48; // int32_t
-    pub const m_nValueIntW: usize = 0x4C; // int32_t
-    pub const m_bHasFloatBounds: usize = 0x50; // bool
-    pub const m_flValueFloatX: usize = 0x54; // float
-    pub const m_flValueFloatX_Min: usize = 0x58; // float
-    pub const m_flValueFloatX_Max: usize = 0x5C; // float
-    pub const m_flValueFloatY: usize = 0x60; // float
-    pub const m_flValueFloatY_Min: usize = 0x64; // float
-    pub const m_flValueFloatY_Max: usize = 0x68; // float
-    pub const m_flValueFloatZ: usize = 0x6C; // float
-    pub const m_flValueFloatZ_Min: usize = 0x70; // float
-    pub const m_flValueFloatZ_Max: usize = 0x74; // float
-    pub const m_flValueFloatW: usize = 0x78; // float
-    pub const m_flValueFloatW_Min: usize = 0x7C; // float
-    pub const m_flValueFloatW_Max: usize = 0x80; // float
-    pub const m_cValueColor4: usize = 0x84; // Color
-    pub const m_nValueSystemVar: usize = 0x88; // CompositeMaterialVarSystemVar_t
-    pub const m_strResourceMaterial: usize = 0x90; // CResourceName
-    pub const m_strTextureContentAssetPath: usize = 0x170; // CUtlString
-    pub const m_strTextureRuntimeResourcePath: usize = 0x178; // CResourceName
-    pub const m_strTextureCompilationVtexTemplate: usize = 0x258; // CUtlString
-    pub const m_nTextureType: usize = 0x260; // CompositeMaterialInputTextureType_t
-    pub const m_strString: usize = 0x268; // CUtlString
-}
-
-pub mod CompositeMaterialMatchFilter_t {
-    pub const m_nCompositeMaterialMatchFilterType: usize = 0x0; // CompositeMaterialMatchFilterType_t
-    pub const m_strMatchFilter: usize = 0x8; // CUtlString
-    pub const m_strMatchValue: usize = 0x10; // CUtlString
-    pub const m_bPassWhenTrue: usize = 0x18; // bool
-}
-
-pub mod CompositeMaterial_t {
-    pub const m_TargetKVs: usize = 0x8; // KeyValues3
-    pub const m_PreGenerationKVs: usize = 0x18; // KeyValues3
-    pub const m_FinalKVs: usize = 0x28; // KeyValues3
-    pub const m_vecGeneratedTextures: usize = 0x40; // CUtlVector<GeneratedTextureHandle_t>
-}
-
-pub mod CountdownTimer {
-    pub const m_duration: usize = 0x8; // float
-    pub const m_timestamp: usize = 0xC; // GameTime_t
-    pub const m_timescale: usize = 0x10; // float
-    pub const m_nWorldGroupId: usize = 0x14; // WorldGroupId_t
-}
-
-pub mod EngineCountdownTimer {
-    pub const m_duration: usize = 0x8; // float
-    pub const m_timestamp: usize = 0xC; // float
-    pub const m_timescale: usize = 0x10; // float
-}
-
-pub mod EntityRenderAttribute_t {
-    pub const m_ID: usize = 0x30; // CUtlStringToken
-    pub const m_Values: usize = 0x34; // Vector4D
-}
-
-pub mod EntitySpottedState_t {
-    pub const m_bSpotted: usize = 0x8; // bool
-    pub const m_bSpottedByMask: usize = 0xC; // uint32_t[2]
-}
-
-pub mod GeneratedTextureHandle_t {
-    pub const m_strBitmapName: usize = 0x0; // CUtlString
-}
-
-pub mod IClientAlphaProperty {
-}
-
-pub mod IntervalTimer {
-    pub const m_timestamp: usize = 0x8; // GameTime_t
-    pub const m_nWorldGroupId: usize = 0xC; // WorldGroupId_t
-}
-
-pub mod PhysicsRagdollPose_t {
-    pub const __m_pChainEntity: usize = 0x8; // CNetworkVarChainer
-    pub const m_Transforms: usize = 0x30; // C_NetworkUtlVectorBase<CTransform>
-    pub const m_hOwner: usize = 0x48; // CHandle<C_BaseEntity>
-    pub const m_bDirty: usize = 0x68; // bool
-}
-
-pub mod SellbackPurchaseEntry_t {
-    pub const m_unDefIdx: usize = 0x30; // uint16_t
-    pub const m_nCost: usize = 0x34; // int32_t
-    pub const m_nPrevArmor: usize = 0x38; // int32_t
-    pub const m_bPrevHelmet: usize = 0x3C; // bool
-    pub const m_hItem: usize = 0x40; // CEntityHandle
-}
-
-pub mod ServerAuthoritativeWeaponSlot_t {
-    pub const unClass: usize = 0x28; // uint16_t
-    pub const unSlot: usize = 0x2A; // uint16_t
-    pub const unItemDefIdx: usize = 0x2C; // uint16_t
-}
-
-pub mod TimedEvent {
-    pub const m_TimeBetweenEvents: usize = 0x0; // float
-    pub const m_fNextEvent: usize = 0x4; // float
-}
-
-pub mod VPhysicsCollisionAttribute_t {
-    pub const m_nInteractsAs: usize = 0x8; // uint64_t
-    pub const m_nInteractsWith: usize = 0x10; // uint64_t
-    pub const m_nInteractsExclude: usize = 0x18; // uint64_t
-    pub const m_nEntityId: usize = 0x20; // uint32_t
-    pub const m_nOwnerId: usize = 0x24; // uint32_t
-    pub const m_nHierarchyId: usize = 0x28; // uint16_t
-    pub const m_nCollisionGroup: usize = 0x2A; // uint8_t
-    pub const m_nCollisionFunctionMask: usize = 0x2B; // uint8_t
-}
-
-pub mod ViewAngleServerChange_t {
-    pub const nType: usize = 0x30; // FixAngleSet_t
-    pub const qAngle: usize = 0x34; // QAngle
-    pub const nIndex: usize = 0x40; // uint32_t
-}
-
-pub mod WeaponPurchaseCount_t {
-    pub const m_nItemDefIndex: usize = 0x30; // uint16_t
-    pub const m_nCount: usize = 0x32; // uint16_t
-}
-
-pub mod WeaponPurchaseTracker_t {
-    pub const m_weaponPurchases: usize = 0x8; // C_UtlVectorEmbeddedNetworkVar<WeaponPurchaseCount_t>
-}
-
-pub mod audioparams_t {
-    pub const localSound: usize = 0x8; // Vector[8]
-    pub const soundscapeIndex: usize = 0x68; // int32_t
-    pub const localBits: usize = 0x6C; // uint8_t
-    pub const soundscapeEntityListIndex: usize = 0x70; // int32_t
-    pub const soundEventHash: usize = 0x74; // uint32_t
-}
-
-pub mod fogparams_t {
-    pub const dirPrimary: usize = 0x8; // Vector
-    pub const colorPrimary: usize = 0x14; // Color
-    pub const colorSecondary: usize = 0x18; // Color
-    pub const colorPrimaryLerpTo: usize = 0x1C; // Color
-    pub const colorSecondaryLerpTo: usize = 0x20; // Color
-    pub const start: usize = 0x24; // float
-    pub const end: usize = 0x28; // float
-    pub const farz: usize = 0x2C; // float
-    pub const maxdensity: usize = 0x30; // float
-    pub const exponent: usize = 0x34; // float
-    pub const HDRColorScale: usize = 0x38; // float
-    pub const skyboxFogFactor: usize = 0x3C; // float
-    pub const skyboxFogFactorLerpTo: usize = 0x40; // float
-    pub const startLerpTo: usize = 0x44; // float
-    pub const endLerpTo: usize = 0x48; // float
-    pub const maxdensityLerpTo: usize = 0x4C; // float
-    pub const lerptime: usize = 0x50; // GameTime_t
-    pub const duration: usize = 0x54; // float
-    pub const blendtobackground: usize = 0x58; // float
-    pub const scattering: usize = 0x5C; // float
-    pub const locallightscale: usize = 0x60; // float
-    pub const enable: usize = 0x64; // bool
-    pub const blend: usize = 0x65; // bool
-    pub const m_bNoReflectionFog: usize = 0x66; // bool
-    pub const m_bPadding: usize = 0x67; // bool
-}
-
-pub mod shard_model_desc_t {
-    pub const m_nModelID: usize = 0x8; // int32_t
-    pub const m_hMaterial: usize = 0x10; // CStrongHandle<InfoForResourceTypeIMaterial2>
-    pub const m_solid: usize = 0x18; // ShardSolid_t
-    pub const m_ShatterPanelMode: usize = 0x19; // ShatterPanelMode
-    pub const m_vecPanelSize: usize = 0x1C; // Vector2D
-    pub const m_vecStressPositionA: usize = 0x24; // Vector2D
-    pub const m_vecStressPositionB: usize = 0x2C; // Vector2D
-    pub const m_vecPanelVertices: usize = 0x38; // C_NetworkUtlVectorBase<Vector2D>
-    pub const m_flGlassHalfThickness: usize = 0x50; // float
-    pub const m_bHasParent: usize = 0x54; // bool
-    pub const m_bParentFrozen: usize = 0x55; // bool
-    pub const m_SurfacePropStringToken: usize = 0x58; // CUtlStringToken
-}
-
-pub mod sky3dparams_t {
-    pub const scale: usize = 0x8; // int16_t
-    pub const origin: usize = 0xC; // Vector
-    pub const bClip3DSkyBoxNearToWorldFar: usize = 0x18; // bool
-    pub const flClip3DSkyBoxNearToWorldFarOffset: usize = 0x1C; // float
-    pub const fog: usize = 0x20; // fogparams_t
-    pub const m_nWorldGroupID: usize = 0x88; // WorldGroupId_t
-}
\ No newline at end of file diff --git a/docs/src/csflow/cs2dumper/engine2.rs.html b/docs/src/csflow/cs2dumper/engine2.rs.html deleted file mode 100644 index 62f16aa..0000000 --- a/docs/src/csflow/cs2dumper/engine2.rs.html +++ /dev/null @@ -1,488 +0,0 @@ -engine2.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
-178
-179
-180
-181
-182
-183
-184
-185
-186
-187
-188
-189
-190
-191
-192
-193
-194
-195
-196
-197
-198
-199
-200
-201
-202
-203
-204
-205
-206
-207
-208
-209
-210
-211
-212
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-
/*
- * Created using https://github.com/a2x/cs2-dumper
- * Sat, 30 Dec 2023 03:17:25 +0000
- */
-
-#![allow(non_snake_case, non_upper_case_globals)]
-
-pub mod CEmptyEntityInstance {
-}
-
-pub mod CEntityComponent {
-}
-
-pub mod CEntityComponentHelper {
-    pub const m_flags: usize = 0x8; // uint32_t
-    pub const m_pInfo: usize = 0x10; // EntComponentInfo_t*
-    pub const m_nPriority: usize = 0x18; // int32_t
-    pub const m_pNext: usize = 0x20; // CEntityComponentHelper*
-}
-
-pub mod CEntityIOOutput {
-    pub const m_Value: usize = 0x18; // CVariantBase<CVariantDefaultAllocator>
-}
-
-pub mod CEntityIdentity {
-    pub const m_nameStringableIndex: usize = 0x14; // int32_t
-    pub const m_name: usize = 0x18; // CUtlSymbolLarge
-    pub const m_designerName: usize = 0x20; // CUtlSymbolLarge
-    pub const m_flags: usize = 0x30; // uint32_t
-    pub const m_worldGroupId: usize = 0x38; // WorldGroupId_t
-    pub const m_fDataObjectTypes: usize = 0x3C; // uint32_t
-    pub const m_PathIndex: usize = 0x40; // ChangeAccessorFieldPathIndex_t
-    pub const m_pPrev: usize = 0x58; // CEntityIdentity*
-    pub const m_pNext: usize = 0x60; // CEntityIdentity*
-    pub const m_pPrevByClass: usize = 0x68; // CEntityIdentity*
-    pub const m_pNextByClass: usize = 0x70; // CEntityIdentity*
-}
-
-pub mod CEntityInstance {
-    pub const m_iszPrivateVScripts: usize = 0x8; // CUtlSymbolLarge
-    pub const m_pEntity: usize = 0x10; // CEntityIdentity*
-    pub const m_CScriptComponent: usize = 0x28; // CScriptComponent*
-}
-
-pub mod CNetworkVarChainer {
-    pub const m_PathIndex: usize = 0x20; // ChangeAccessorFieldPathIndex_t
-}
-
-pub mod CScriptComponent { // CEntityComponent
-    pub const m_scriptClassName: usize = 0x30; // CUtlSymbolLarge
-}
-
-pub mod CVariantDefaultAllocator {
-}
-
-pub mod EngineLoopState_t {
-    pub const m_nPlatWindowWidth: usize = 0x18; // int32_t
-    pub const m_nPlatWindowHeight: usize = 0x1C; // int32_t
-    pub const m_nRenderWidth: usize = 0x20; // int32_t
-    pub const m_nRenderHeight: usize = 0x24; // int32_t
-}
-
-pub mod EntComponentInfo_t {
-    pub const m_pName: usize = 0x0; // char*
-    pub const m_pCPPClassname: usize = 0x8; // char*
-    pub const m_pNetworkDataReferencedDescription: usize = 0x10; // char*
-    pub const m_pNetworkDataReferencedPtrPropDescription: usize = 0x18; // char*
-    pub const m_nRuntimeIndex: usize = 0x20; // int32_t
-    pub const m_nFlags: usize = 0x24; // uint32_t
-    pub const m_pBaseClassComponentHelper: usize = 0x60; // CEntityComponentHelper*
-}
-
-pub mod EntInput_t {
-}
-
-pub mod EntOutput_t {
-}
-
-pub mod EventAdvanceTick_t { // EventSimulate_t
-    pub const m_nCurrentTick: usize = 0x30; // int32_t
-    pub const m_nCurrentTickThisFrame: usize = 0x34; // int32_t
-    pub const m_nTotalTicksThisFrame: usize = 0x38; // int32_t
-    pub const m_nTotalTicks: usize = 0x3C; // int32_t
-}
-
-pub mod EventAppShutdown_t {
-    pub const m_nDummy0: usize = 0x0; // int32_t
-}
-
-pub mod EventClientAdvanceTick_t { // EventAdvanceTick_t
-}
-
-pub mod EventClientFrameSimulate_t {
-    pub const m_LoopState: usize = 0x0; // EngineLoopState_t
-    pub const m_flRealTime: usize = 0x28; // float
-    pub const m_flFrameTime: usize = 0x2C; // float
-}
-
-pub mod EventClientOutput_t {
-    pub const m_LoopState: usize = 0x0; // EngineLoopState_t
-    pub const m_flRenderTime: usize = 0x28; // float
-    pub const m_flRealTime: usize = 0x2C; // float
-    pub const m_flRenderFrameTimeUnbounded: usize = 0x30; // float
-    pub const m_bRenderOnly: usize = 0x34; // bool
-}
-
-pub mod EventClientPauseSimulate_t { // EventSimulate_t
-}
-
-pub mod EventClientPollInput_t {
-    pub const m_LoopState: usize = 0x0; // EngineLoopState_t
-    pub const m_flRealTime: usize = 0x28; // float
-}
-
-pub mod EventClientPollNetworking_t {
-    pub const m_nTickCount: usize = 0x0; // int32_t
-}
-
-pub mod EventClientPostAdvanceTick_t { // EventPostAdvanceTick_t
-}
-
-pub mod EventClientPostOutput_t {
-    pub const m_LoopState: usize = 0x0; // EngineLoopState_t
-    pub const m_flRenderTime: usize = 0x28; // double
-    pub const m_flRenderFrameTime: usize = 0x30; // float
-    pub const m_flRenderFrameTimeUnbounded: usize = 0x34; // float
-    pub const m_bRenderOnly: usize = 0x38; // bool
-}
-
-pub mod EventClientPostSimulate_t { // EventSimulate_t
-}
-
-pub mod EventClientPreOutput_t {
-    pub const m_LoopState: usize = 0x0; // EngineLoopState_t
-    pub const m_flRenderTime: usize = 0x28; // double
-    pub const m_flRenderFrameTime: usize = 0x30; // double
-    pub const m_flRenderFrameTimeUnbounded: usize = 0x38; // double
-    pub const m_flRealTime: usize = 0x40; // float
-    pub const m_bRenderOnly: usize = 0x44; // bool
-}
-
-pub mod EventClientPreSimulate_t { // EventSimulate_t
-}
-
-pub mod EventClientPredictionPostNetupdate_t {
-}
-
-pub mod EventClientProcessGameInput_t {
-    pub const m_LoopState: usize = 0x0; // EngineLoopState_t
-    pub const m_flRealTime: usize = 0x28; // float
-    pub const m_flFrameTime: usize = 0x2C; // float
-}
-
-pub mod EventClientProcessInput_t {
-    pub const m_LoopState: usize = 0x0; // EngineLoopState_t
-    pub const m_flRealTime: usize = 0x28; // float
-    pub const m_flTickInterval: usize = 0x2C; // float
-    pub const m_flTickStartTime: usize = 0x30; // double
-}
-
-pub mod EventClientProcessNetworking_t {
-}
-
-pub mod EventClientSceneSystemThreadStateChange_t {
-    pub const m_bThreadsActive: usize = 0x0; // bool
-}
-
-pub mod EventClientSendInput_t {
-    pub const m_bFinalClientCommandTick: usize = 0x0; // bool
-    pub const m_nAdditionalClientCommandsToCreate: usize = 0x4; // int32_t
-}
-
-pub mod EventClientSimulate_t { // EventSimulate_t
-}
-
-pub mod EventFrameBoundary_t {
-    pub const m_flFrameTime: usize = 0x0; // float
-}
-
-pub mod EventModInitialized_t {
-}
-
-pub mod EventPostAdvanceTick_t { // EventSimulate_t
-    pub const m_nCurrentTick: usize = 0x30; // int32_t
-    pub const m_nCurrentTickThisFrame: usize = 0x34; // int32_t
-    pub const m_nTotalTicksThisFrame: usize = 0x38; // int32_t
-    pub const m_nTotalTicks: usize = 0x3C; // int32_t
-}
-
-pub mod EventPostDataUpdate_t {
-    pub const m_nCount: usize = 0x0; // int32_t
-}
-
-pub mod EventPreDataUpdate_t {
-    pub const m_nCount: usize = 0x0; // int32_t
-}
-
-pub mod EventProfileStorageAvailable_t {
-    pub const m_nSplitScreenSlot: usize = 0x0; // CSplitScreenSlot
-}
-
-pub mod EventServerAdvanceTick_t { // EventAdvanceTick_t
-}
-
-pub mod EventServerPollNetworking_t { // EventSimulate_t
-}
-
-pub mod EventServerPostAdvanceTick_t { // EventPostAdvanceTick_t
-}
-
-pub mod EventServerPostSimulate_t { // EventSimulate_t
-}
-
-pub mod EventServerProcessNetworking_t { // EventSimulate_t
-}
-
-pub mod EventServerSimulate_t { // EventSimulate_t
-}
-
-pub mod EventSetTime_t {
-    pub const m_LoopState: usize = 0x0; // EngineLoopState_t
-    pub const m_nClientOutputFrames: usize = 0x28; // int32_t
-    pub const m_flRealTime: usize = 0x30; // double
-    pub const m_flRenderTime: usize = 0x38; // double
-    pub const m_flRenderFrameTime: usize = 0x40; // double
-    pub const m_flRenderFrameTimeUnbounded: usize = 0x48; // double
-    pub const m_flRenderFrameTimeUnscaled: usize = 0x50; // double
-    pub const m_flTickRemainder: usize = 0x58; // double
-}
-
-pub mod EventSimpleLoopFrameUpdate_t {
-    pub const m_LoopState: usize = 0x0; // EngineLoopState_t
-    pub const m_flRealTime: usize = 0x28; // float
-    pub const m_flFrameTime: usize = 0x2C; // float
-}
-
-pub mod EventSimulate_t {
-    pub const m_LoopState: usize = 0x0; // EngineLoopState_t
-    pub const m_bFirstTick: usize = 0x28; // bool
-    pub const m_bLastTick: usize = 0x29; // bool
-}
-
-pub mod EventSplitScreenStateChanged_t {
-}
\ No newline at end of file diff --git a/docs/src/csflow/cs2dumper/mod.rs.html b/docs/src/csflow/cs2dumper/mod.rs.html deleted file mode 100644 index 8c3216f..0000000 --- a/docs/src/csflow/cs2dumper/mod.rs.html +++ /dev/null @@ -1,9 +0,0 @@ -mod.rs - source
1
-2
-3
-4
-
#![allow(dead_code)]
-pub mod client;
-pub mod engine2;
-pub mod offsets;
-
\ No newline at end of file diff --git a/docs/src/csflow/cs2dumper/offsets.rs.html b/docs/src/csflow/cs2dumper/offsets.rs.html deleted file mode 100644 index 29133fd..0000000 --- a/docs/src/csflow/cs2dumper/offsets.rs.html +++ /dev/null @@ -1,102 +0,0 @@ -offsets.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-
/*
- * Created using https://github.com/a2x/cs2-dumper
- * Sat, 30 Dec 2023 03:17:26 +0000
- */
-
-#![allow(non_snake_case, non_upper_case_globals)]
-
-pub mod client_dll { // client.dll
-    pub const dwEntityList: usize = 0x17C1950;
-    pub const dwForceAttack: usize = 0x16C1E70;
-    pub const dwForceAttack2: usize = 0x16C1F00;
-    pub const dwForceBackward: usize = 0x16C2140;
-    pub const dwForceCrouch: usize = 0x16C2410;
-    pub const dwForceForward: usize = 0x16C20B0;
-    pub const dwForceJump: usize = 0x16C2380;
-    pub const dwForceLeft: usize = 0x16C21D0;
-    pub const dwForceRight: usize = 0x16C2260;
-    pub const dwGameEntitySystem: usize = 0x18ED250;
-    pub const dwGameEntitySystem_getHighestEntityIndex: usize = 0x1510;
-    pub const dwGameRules: usize = 0x181E048;
-    pub const dwGlobalVars: usize = 0x16BDC98;
-    pub const dwGlowManager: usize = 0x181D7B0;
-    pub const dwInterfaceLinkList: usize = 0x191AEE8;
-    pub const dwLocalPlayerController: usize = 0x1810F48;
-    pub const dwLocalPlayerPawn: usize = 0x16C8F38;
-    pub const dwPlantedC4: usize = 0x1824A88;
-    pub const dwPrediction: usize = 0x16C8E00;
-    pub const dwSensitivity: usize = 0x181ED48;
-    pub const dwSensitivity_sensitivity: usize = 0x40;
-    pub const dwViewAngles: usize = 0x1880DC0;
-    pub const dwViewMatrix: usize = 0x1820150;
-    pub const dwViewRender: usize = 0x1820998;
-}
-
-pub mod engine2_dll { // engine2.dll
-    pub const dwBuildNumber: usize = 0x4E03D4;
-    pub const dwNetworkGameClient: usize = 0x4DF988;
-    pub const dwNetworkGameClient_getLocalPlayer: usize = 0xF0;
-    pub const dwNetworkGameClient_maxClients: usize = 0x250;
-    pub const dwNetworkGameClient_signOnState: usize = 0x240;
-    pub const dwWindowHeight: usize = 0x596E1C;
-    pub const dwWindowWidth: usize = 0x596E18;
-}
-
-pub mod game_info { // Some additional information about the game at dump time
-    pub const buildNumber: usize = 0x369F; // Game build number
-}
-
-pub mod inputsystem_dll { // inputsystem.dll
-    pub const dwInputSystem: usize = 0x35760;
-}
\ No newline at end of file diff --git a/docs/src/csflow/enums/mod.rs.html b/docs/src/csflow/enums/mod.rs.html deleted file mode 100644 index cd6f923..0000000 --- a/docs/src/csflow/enums/mod.rs.html +++ /dev/null @@ -1,10 +0,0 @@ -mod.rs - source
1
-2
-3
-4
-5
-
mod player_type;
-mod teamid;
-
-pub use player_type::PlayerType;
-pub use teamid::TeamID;
\ No newline at end of file diff --git a/docs/src/csflow/enums/player_type.rs.html b/docs/src/csflow/enums/player_type.rs.html deleted file mode 100644 index afc5bb5..0000000 --- a/docs/src/csflow/enums/player_type.rs.html +++ /dev/null @@ -1,18 +0,0 @@ -player_type.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-
#[derive(Debug, Clone, Copy, serde::Serialize, serde::Deserialize, Default, PartialEq)]
-pub enum PlayerType {
-    #[default]
-    Unknown,
-    Spectator,
-    Local,
-    Enemy,
-    Team
-}
\ No newline at end of file diff --git a/docs/src/csflow/enums/teamid.rs.html b/docs/src/csflow/enums/teamid.rs.html deleted file mode 100644 index 3a05a5f..0000000 --- a/docs/src/csflow/enums/teamid.rs.html +++ /dev/null @@ -1,14 +0,0 @@ -teamid.rs - source
1
-2
-3
-4
-5
-6
-7
-
#[repr(i32)]
-#[derive(Debug, Eq, PartialEq, enum_primitive_derive::Primitive)]
-pub enum TeamID {
-    Spectator = 1,
-    T = 2,
-    CT = 3
-}
\ No newline at end of file diff --git a/docs/src/csflow/error.rs.html b/docs/src/csflow/error.rs.html deleted file mode 100644 index d5907ba..0000000 --- a/docs/src/csflow/error.rs.html +++ /dev/null @@ -1,66 +0,0 @@ -error.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-
use memflow::types::Address;
-use thiserror::Error;
-
-use crate::structs::Vec3;
-
-#[derive(Error, Debug)]
-pub enum Error {
-    /// Game version mismatch.
-    /// First arg is the game version, second is the offset version.
-    #[error("version mismatch, game has version {0}, but offsets have version {1}")]
-    GameVersionMismatch(usize, usize),
-
-    #[error("memflow error: {0}")]
-    Memflow(#[from] memflow::error::Error),
-
-    #[error("memflow partial error when reading address: {0}")]
-    MemflowPartialAddress(#[from] memflow::error::PartialError<Address>),
-
-    #[error("memflow partial error when reading Vec3: {0}")]
-    MemflowPartialVec3(#[from] memflow::error::PartialError<Vec3>),
-
-    #[error("memflow partial error when reading String: {0}")]
-    MemflowPartialString(#[from] memflow::error::PartialError<String>),
-
-    #[error("memflow partial error when reading i32: {0}")]
-    MemflowPartiali32(#[from] memflow::error::PartialError<i32>),
-
-    #[error("memflow partial error when reading u32: {0}")]
-    MemflowPartialu32(#[from] memflow::error::PartialError<u32>),
-
-    #[error("memflow partial error when reading u8: {0}")]
-    MemflowPartialu8(#[from] memflow::error::PartialError<u8>)
-}
\ No newline at end of file diff --git a/docs/src/csflow/lib.rs.html b/docs/src/csflow/lib.rs.html deleted file mode 100644 index 3a7ffa8..0000000 --- a/docs/src/csflow/lib.rs.html +++ /dev/null @@ -1,28 +0,0 @@ -lib.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-
#![allow(dead_code)]
-
-mod cs2dumper;
-mod context;
-mod error;
-
-pub mod structs;
-pub mod traits;
-pub mod enums;
-
-pub use context::*;
-pub use error::Error;
-
-pub use memflow::prelude as memflow;
\ No newline at end of file diff --git a/docs/src/csflow/structs/entity/base_entity.rs.html b/docs/src/csflow/structs/entity/base_entity.rs.html deleted file mode 100644 index 520d990..0000000 --- a/docs/src/csflow/structs/entity/base_entity.rs.html +++ /dev/null @@ -1,94 +0,0 @@ -base_entity.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-
use memflow::{types::Address, mem::MemoryView};
-use crate::{CheatCtx, Error, cs2dumper, traits::{BaseEntity, MemoryClass}, structs::Vec3};
-
-pub struct CBaseEntity(Address);
-
-impl MemoryClass for CBaseEntity {
-    fn ptr(&self) -> Address {
-        self.0
-    }
-
-    fn new(ptr: Address) -> Self {
-        Self(ptr)
-    }
-}
-
-impl BaseEntity for CBaseEntity {
-    fn from_index(ctx: &mut CheatCtx, entity_list: Address, index: i32) -> Result<Option<CBaseEntity>, Error> {
-        let list_entry = ctx.process.read_addr64(entity_list + 8 * (index >> 9) + 16)?;
-        if list_entry.is_null() && !list_entry.is_valid() {
-            return Ok(None);
-        }
-
-        let player_ptr = ctx.process.read_addr64(list_entry + 120 * (index & 0x1FF))?;
-        if player_ptr.is_null() && !player_ptr.is_valid() {
-            return Ok(None);
-        }
-
-        Ok(Some(Self::new(player_ptr)))
-    }
-
-    fn pos(&self, ctx: &mut CheatCtx) -> Result<Vec3, Error> {
-        let node = ctx.process.read_addr64(self.0 + cs2dumper::client::C_BaseEntity::m_pGameSceneNode)?;
-        Ok(ctx.process.read(node + cs2dumper::client::CGameSceneNode::m_vecAbsOrigin)?)
-    }
-
-    fn class_name(&self, ctx: &mut CheatCtx) -> Result<String, Error> {
-        let entity_identity_ptr = ctx.process.read_addr64(self.0 + cs2dumper::client::CEntityInstance::m_pEntity)?;
-        let class_name_ptr = ctx.process.read_addr64(entity_identity_ptr + cs2dumper::client::CEntityIdentity::m_designerName)?;
-        Ok(ctx.process.read_char_string_n(class_name_ptr, 32)?)
-    }
-}
-
-impl CBaseEntity {
-    pub fn to_player_controller(&self) -> super::CPlayerController {
-        super::CPlayerController::new(self.0)
-    }
-}
\ No newline at end of file diff --git a/docs/src/csflow/structs/entity/mod.rs.html b/docs/src/csflow/structs/entity/mod.rs.html deleted file mode 100644 index d379224..0000000 --- a/docs/src/csflow/structs/entity/mod.rs.html +++ /dev/null @@ -1,14 +0,0 @@ -mod.rs - source
1
-2
-3
-4
-5
-6
-7
-
mod base_entity;
-mod player_controller;
-mod player_pawn;
-
-pub use base_entity::CBaseEntity;
-pub use player_controller::CPlayerController;
-pub use player_pawn::CPlayerPawn;
\ No newline at end of file diff --git a/docs/src/csflow/structs/entity/player_controller.rs.html b/docs/src/csflow/structs/entity/player_controller.rs.html deleted file mode 100644 index 139cddd..0000000 --- a/docs/src/csflow/structs/entity/player_controller.rs.html +++ /dev/null @@ -1,176 +0,0 @@ -player_controller.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-
use memflow::{types::Address, mem::MemoryView};
-use num_traits::FromPrimitive;
-
-use crate::{CheatCtx, Error, cs2dumper, structs::Vec3, traits::{MemoryClass, BaseEntity}, enums::{TeamID, PlayerType}};
-
-pub struct CPlayerController(Address);
-
-impl MemoryClass for CPlayerController {
-    fn ptr(&self) -> Address {
-        self.0
-    }
-
-    fn new(ptr: Address) -> Self {
-        Self(ptr)
-    }
-}
-
-impl BaseEntity for CPlayerController {
-    fn from_index(ctx: &mut CheatCtx, entity_list: Address, index: i32) -> Result<Option<CPlayerController>, Error> {
-        let list_entry = ctx.process.read_addr64(entity_list + 8 * (index >> 9) + 16)?;
-        if list_entry.is_null() && !list_entry.is_valid() {
-            return Ok(None);
-        }
-
-        let player_ptr = ctx.process.read_addr64(list_entry + 120 * (index & 0x1FF))?;
-        if player_ptr.is_null() && !player_ptr.is_valid() {
-            return Ok(None);
-        }
-
-        Ok(Some(Self::new(player_ptr)))
-    }
-
-    fn pos(&self, ctx: &mut CheatCtx) -> Result<Vec3, Error> {
-        let node = ctx.process.read_addr64(self.0 + cs2dumper::client::C_BaseEntity::m_pGameSceneNode)?;
-        Ok(ctx.process.read(node + cs2dumper::client::CGameSceneNode::m_vecAbsOrigin)?)
-    }
-
-    fn class_name(&self, ctx: &mut CheatCtx) -> Result<String, Error> {
-        let entity_identity_ptr = ctx.process.read_addr64(self.0 + cs2dumper::client::CEntityInstance::m_pEntity)?;
-        let class_name_ptr = ctx.process.read_addr64(entity_identity_ptr + cs2dumper::client::CEntityIdentity::m_designerName)?;
-        Ok(ctx.process.read_char_string_n(class_name_ptr, 32)?)
-    }
-}
-
-impl CPlayerController {
-    pub fn get_pawn(&self, ctx: &mut CheatCtx, entity_list: Address) -> Result<Option<super::CPlayerPawn>, Error> {
-        let uhandle = ctx.process.read(self.0 + cs2dumper::client::CCSPlayerController::m_hPlayerPawn)?;
-        super::CPlayerPawn::from_uhandle(ctx, entity_list, uhandle)
-    }
-
-    // Technically something that should be in the BaseEntity trait, but we are only gonna use it on CPlayerController
-    pub fn get_team(&self, ctx: &mut CheatCtx) -> Result<Option<TeamID>, Error> {
-        let team_num: i32 = ctx.process.read(self.0 + cs2dumper::client::C_BaseEntity::m_iTeamNum)?;
-        Ok(TeamID::from_i32(team_num))
-    }
-
-    pub fn get_player_type(&self, ctx: &mut CheatCtx, local: &CPlayerController) -> Result<Option<PlayerType>, Error> {
-        if self.0 == local.0 {
-            return Ok(Some(PlayerType::Local))
-        }
-
-        let team = {
-            match self.get_team(ctx)? {
-                Some(t) => t,
-                None => { return Ok(None) },
-            }
-        };
-        
-        let local_team = {
-            match local.get_team(ctx)? {
-                Some(t) => t,
-                None => { return Ok(None) },
-            }
-        };
-
-        let player_type = {
-            if team == TeamID::Spectator { 
-                PlayerType::Spectator 
-            } else if team != local_team {
-                PlayerType::Enemy
-            } else {
-                PlayerType::Team
-            }
-        };
-
-        Ok(Some(player_type))
-    }
-}
\ No newline at end of file diff --git a/docs/src/csflow/structs/entity/player_pawn.rs.html b/docs/src/csflow/structs/entity/player_pawn.rs.html deleted file mode 100644 index 425f82a..0000000 --- a/docs/src/csflow/structs/entity/player_pawn.rs.html +++ /dev/null @@ -1,160 +0,0 @@ -player_pawn.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-
use memflow::{types::Address, mem::MemoryView};
-
-use crate::{Error, CheatCtx, cs2dumper, structs::Vec3, traits::MemoryClass};
-
-pub struct CPlayerPawn(Address);
-
-impl MemoryClass for CPlayerPawn {
-    fn ptr(&self) -> Address {
-        self.0
-    }
-
-    fn new(ptr: Address) -> Self {
-        Self(ptr)
-    }
-}
-
-impl CPlayerPawn {
-    pub fn from_uhandle(ctx: &mut CheatCtx, entity_list: Address, uhandle: u32) -> Result<Option<Self>, Error> {
-        let list_entry = ctx.process.read_addr64(entity_list + 0x8 * ((uhandle & 0x7FFF) >> 9) + 16)?;
-        
-        if list_entry.is_null() || !list_entry.is_valid() {
-            Ok(None)
-        } else {
-            let ptr = ctx.process.read_addr64(list_entry + 120 * (uhandle & 0x1FF))?;
-            Ok(Some(Self(ptr)))
-        }
-    }
-
-    // Todo: Optimize this function: find another way to do this
-    pub fn has_c4(&self, ctx: &mut CheatCtx, entity_list: Address) -> Result<bool, Error> {
-        let mut has_c4 = false;
-        let wep_services = ctx.process.read_addr64(self.0 + cs2dumper::client::C_BasePlayerPawn::m_pWeaponServices)?;
-        let wep_count: i32  = ctx.process.read(wep_services + cs2dumper::client::CPlayer_WeaponServices::m_hMyWeapons)?;
-        let wep_base = ctx.process.read_addr64(wep_services + cs2dumper::client::CPlayer_WeaponServices::m_hMyWeapons + 0x8)?;
-
-        for wep_idx in 0..wep_count {
-            let handle: i32 = ctx.process.read(wep_base + wep_idx * 0x4)?;
-            if handle == -1 {
-                continue;
-            }
-
-            let list_entry = ctx.process.read_addr64(entity_list + 0x8 * ((handle & 0x7FFF) >> 9) + 16)?;
-            if let Some(wep_ptr) = {
-                if list_entry.is_null() || !list_entry.is_valid() {
-                    None
-                } else {
-                    let ptr = ctx.process.read_addr64(list_entry + 120 * (handle & 0x1FF))?;
-                    Some(ptr)
-                }
-            } {
-                let wep_data = ctx.process.read_addr64(wep_ptr + cs2dumper::client::C_BaseEntity::m_nSubclassID + 0x8)?;
-                let id: i32 = ctx.process.read(wep_data + cs2dumper::client::CCSWeaponBaseVData::m_WeaponType)?;
-
-                if id == 7 {
-                    has_c4 = true;
-                    break;
-                }
-            }
-        }
-
-        Ok(has_c4)
-    }
-
-    pub fn pos(&self, ctx: &mut CheatCtx) -> Result<Vec3, Error> {
-        Ok(ctx.process.read(self.0 + cs2dumper::client::C_BasePlayerPawn::m_vOldOrigin)?)
-    }
-
-    pub fn angles(&self, ctx: &mut CheatCtx) -> Result<Vec3, Error> {
-        Ok(ctx.process.read(self.0 + cs2dumper::client::C_CSPlayerPawnBase::m_angEyeAngles)?)
-    }
-
-    pub fn health(&self, ctx: &mut CheatCtx) -> Result<u32, Error> {
-        Ok(ctx.process.read(self.0 + cs2dumper::client::C_BaseEntity::m_iHealth)?)
-    }
-
-    /// Same as ::get_health > 0
-    pub fn is_alive(&self, ctx: &mut CheatCtx) -> Result<bool, Error> {
-        Ok(self.health(ctx)? > 0)
-    }
-}
\ No newline at end of file diff --git a/docs/src/csflow/structs/mod.rs.html b/docs/src/csflow/structs/mod.rs.html deleted file mode 100644 index bec1a5b..0000000 --- a/docs/src/csflow/structs/mod.rs.html +++ /dev/null @@ -1,10 +0,0 @@ -mod.rs - source
1
-2
-3
-4
-5
-
mod vec3;
-mod entity;
-
-pub use vec3::Vec3;
-pub use entity::{CBaseEntity, CPlayerController, CPlayerPawn};
\ No newline at end of file diff --git a/docs/src/csflow/structs/vec3.rs.html b/docs/src/csflow/structs/vec3.rs.html deleted file mode 100644 index 732d365..0000000 --- a/docs/src/csflow/structs/vec3.rs.html +++ /dev/null @@ -1,22 +0,0 @@ -vec3.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-
use serde::Serialize;
-
-#[derive(Debug, Clone, Copy, Serialize, serde::Deserialize)]
-#[repr(C)]
-pub struct Vec3 {
-    pub x: f32, 
-    pub y: f32,
-    pub z: f32
-}
-
-unsafe impl dataview::Pod for Vec3 {}
\ No newline at end of file diff --git a/docs/src/csflow/traits/base_entity.rs.html b/docs/src/csflow/traits/base_entity.rs.html deleted file mode 100644 index 609e404..0000000 --- a/docs/src/csflow/traits/base_entity.rs.html +++ /dev/null @@ -1,22 +0,0 @@ -base_entity.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-
use memflow::types::Address;
-
-use crate::{CheatCtx, structs::Vec3, Error};
-
-/// A trait for basic functions from C_BaseEntity
-/// CCSPlayerController inherits C_BaseEntity, which is why this trait exists.
-pub trait BaseEntity {
-    fn from_index(ctx: &mut CheatCtx, entity_list: Address, index: i32) -> Result<Option<Self>, Error> where Self: std::marker::Sized;
-    fn pos(&self, ctx: &mut CheatCtx) -> Result<Vec3, Error>;
-    fn class_name(&self, ctx: &mut CheatCtx) -> Result<String, Error>;
-}
\ No newline at end of file diff --git a/docs/src/csflow/traits/memory_class.rs.html b/docs/src/csflow/traits/memory_class.rs.html deleted file mode 100644 index 1ce8c11..0000000 --- a/docs/src/csflow/traits/memory_class.rs.html +++ /dev/null @@ -1,14 +0,0 @@ -memory_class.rs - source
1
-2
-3
-4
-5
-6
-7
-
use memflow::types::Address;
-
-/// A trait that implements basic functions for a class represented by a single pointer
-pub trait MemoryClass {
-    fn ptr(&self) -> Address;
-    fn new(ptr: Address) -> Self;
-}
\ No newline at end of file diff --git a/docs/src/csflow/traits/mod.rs.html b/docs/src/csflow/traits/mod.rs.html deleted file mode 100644 index 09359bc..0000000 --- a/docs/src/csflow/traits/mod.rs.html +++ /dev/null @@ -1,10 +0,0 @@ -mod.rs - source
1
-2
-3
-4
-5
-
mod base_entity;
-mod memory_class;
-
-pub use base_entity::BaseEntity;
-pub use memory_class::MemoryClass;
\ No newline at end of file diff --git a/docs/src/radarflow/cli.rs.html b/docs/src/radarflow/cli.rs.html deleted file mode 100644 index e5736e0..0000000 --- a/docs/src/radarflow/cli.rs.html +++ /dev/null @@ -1,228 +0,0 @@ -cli.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-
use std::path::PathBuf;
-
-use clap::{Parser, ValueEnum};
-use csflow::{Connector, memflow::Inventory};
-
-const PORT_RANGE: std::ops::RangeInclusive<usize> = 8000..=65535;
-const POLL_RANGE: std::ops::RangeInclusive<usize> = 1..=1000;
-
-#[derive(Parser)]
-#[command(author, version = version(), about, long_about = None)]
-pub struct Cli {
-    /// Specifies the connector type for DMA
-    #[clap(value_enum, short, long, ignore_case = true, default_value_t = Connector::Qemu)]
-    pub connector: Connector,
-
-    /// Name of the Pcileech device
-    #[clap(long, default_value_t = String::from("FPGA"))]
-    pub pcileech_device: String,
-
-    /// Port number for the Webserver to run on
-    #[arg(short, long, default_value_t = 8000, value_parser = port_in_range)]
-    pub port: u16,
-
-    /// Path to the directory served by the Webserver
-    #[arg(short, long, default_value = "./webradar", value_parser = valid_path)]
-    pub web_path: PathBuf,
-
-    /// Polling frequency in times per second for the DMA thread
-    #[arg(short = 'r', long, default_value_t = 60, value_parser = poll_in_range)]
-    pub poll_rate: u16,
-
-    /// Verbosity level for logging to the console
-    #[arg(value_enum, long, short,  ignore_case = true, default_value_t = Loglevel::Warn)]
-    pub loglevel: Loglevel,
-}
-
-fn version() -> String {
-    let pkg_ver = env!("CARGO_PKG_VERSION");
-    let git_hash = option_env!("VERGEN_GIT_SHA").unwrap_or("unknown");
-    let commit_date = option_env!("VERGEN_GIT_COMMIT_DATE").unwrap_or("unknown");
-    let avail_cons = {
-        let inventory = Inventory::scan();
-        inventory.available_connectors().join(", ")
-    };
-
-    format!(" {pkg_ver} (rev {git_hash})\nCommit Date: {commit_date}\nAvailable Connectors: {avail_cons}")
-}
-
-fn port_in_range(s: &str) -> Result<u16, String> {
-    let port: usize = s
-        .parse()
-        .map_err(|_| format!("`{s}` isn't a port number"))?;
-    if PORT_RANGE.contains(&port) {
-        Ok(port as u16)
-    } else {
-        Err(format!(
-            "port not in range {}-{}",
-            PORT_RANGE.start(),
-            PORT_RANGE.end()
-        ))
-    }
-}
-
-fn valid_path(s: &str) -> Result<PathBuf, String> {
-    let path = PathBuf::from(s);
-
-    if !path.exists() {
-        return Err("Path does not exist".to_string())
-    }
-
-    if !path.is_dir() {
-        return Err("Path is not a directory".to_string())
-    }
-
-    Ok(path)
-}
-
-fn poll_in_range(s: &str) -> Result<u16, String> {
-    let port: usize = s
-        .parse()
-        .map_err(|_| format!("`{s}` isn't a valid number"))?;
-    if POLL_RANGE.contains(&port) {
-        Ok(port as u16)
-    } else {
-        Err(format!(
-            "not in range {}-{}",
-            POLL_RANGE.start(),
-            POLL_RANGE.end()
-        ))
-    }
-}
-
-/// Wrapper because log::LevelFilter doesn't implement ValueEnum
-#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Default)]
-pub enum Loglevel {
-    Error,
-    #[default]
-    Warn,
-    Info,
-    Debug,
-    Trace,
-}
-
-impl From<Loglevel> for log::LevelFilter {
-    fn from(val: Loglevel) -> Self {
-        match val {
-            Loglevel::Error => log::LevelFilter::Error,
-            Loglevel::Warn => log::LevelFilter::Warn,
-            Loglevel::Info => log::LevelFilter::Info,
-            Loglevel::Debug => log::LevelFilter::Debug,
-            Loglevel::Trace => log::LevelFilter::Trace,
-        }
-    }
-}
\ No newline at end of file diff --git a/docs/src/radarflow/comms.rs.html b/docs/src/radarflow/comms.rs.html deleted file mode 100644 index 608d009..0000000 --- a/docs/src/radarflow/comms.rs.html +++ /dev/null @@ -1,136 +0,0 @@ -comms.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-
use csflow::{enums::PlayerType, structs::Vec3};
-use serde::{Serialize, Deserialize};
-
-#[derive(Debug, Clone, Serialize, Deserialize)]
-pub struct PlayerData {
-    pos: Vec3,
-    yaw: f32,
-    #[serde(rename = "playerType")]
-    player_type: PlayerType,
-
-    #[serde(rename = "hasBomb")]
-    has_bomb: bool
-}
-
-impl PlayerData {
-    pub fn new(pos: Vec3, yaw: f32, player_type: PlayerType, has_bomb: bool) -> PlayerData {
-        PlayerData { pos, yaw, player_type, has_bomb }
-    }
-}
-
-#[derive(Debug, Clone, Serialize, Deserialize)]
-pub struct BombData {
-    pos: Vec3,
-    #[serde(rename = "isPlanted")]
-    is_planted: bool
-}
-
-#[allow(dead_code)]
-impl BombData {
-    pub fn new(pos: Vec3, is_planted: bool) -> BombData {
-        BombData { pos, is_planted }
-    }
-}
-
-#[derive(Debug, Clone, Serialize, Deserialize)]
-pub enum EntityData {
-    Player(PlayerData),
-    Bomb(BombData)
-}
-
-#[derive(Debug, Clone, Serialize, Deserialize)]
-pub struct RadarData {
-    ingame: bool,
-
-    #[serde(rename = "mapName")]
-    map_name: String,
-
-    #[serde(rename(serialize = "entityData"))]
-    player_data: Vec<EntityData>,
-
-    //#[serde(rename(serialize = "localYaw"))]
-    //local_yaw: f32,
-}
-
-impl RadarData {
-    pub fn new(ingame: bool, map_name: String, player_data: Vec<EntityData>) -> RadarData {
-        RadarData { ingame, map_name, player_data }
-    }
-
-    /// Returns empty RadarData, it's also the same data that gets sent to clients when not ingame
-    pub fn empty() -> RadarData {
-        RadarData { 
-            ingame: false,
-            map_name: String::new(),
-            player_data: Vec::new(),
-        }
-    }
-}
\ No newline at end of file diff --git a/docs/src/radarflow/dma/cache.rs.html b/docs/src/radarflow/dma/cache.rs.html deleted file mode 100644 index ca9ab29..0000000 --- a/docs/src/radarflow/dma/cache.rs.html +++ /dev/null @@ -1,170 +0,0 @@ -cache.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-
use csflow::{memflow::Address, enums::PlayerType};
-
-#[derive(Clone, Copy)]
-pub enum CachedEntity {
-    Bomb {ptr: Address},
-    Player {ptr: Address, player_type: PlayerType},
-}
-
-pub struct Cache {
-    timestamp: std::time::Instant,
-    entity_cache: Vec<CachedEntity>,
-    map_name: String,
-    entity_list: Address,
-}
-
-impl Cache {
-    pub fn is_valid(&self) -> bool {
-        if self.timestamp.elapsed() > std::time::Duration::from_millis(250) {
-            return false;
-        }
-
-        true
-    }
-
-    pub fn new_invalid() -> Cache {
-        Cache {
-            timestamp: std::time::Instant::now().checked_sub(std::time::Duration::from_millis(500)).unwrap(),
-            entity_cache: Vec::new(),
-            map_name: String::new(),
-            entity_list: Address::null(),
-        }
-    }
-
-    pub fn entity_cache(&mut self) -> Vec<CachedEntity> {
-        self.entity_cache.clone()
-    }
-
-    pub fn map_name(&self) -> String {
-        self.map_name.clone()
-    }
-
-    pub fn entity_list(&self) -> Address {
-        self.entity_list
-    }
-}
-
-pub struct CacheBuilder {
-    entity_cache: Option<Vec<CachedEntity>>,
-    map_name: Option<String>,
-    entity_list: Option<Address>
-}
-
-impl CacheBuilder {
-    pub fn new() -> CacheBuilder {
-        CacheBuilder {
-            entity_cache: None,
-            map_name: None,
-            entity_list: None,
-        }
-    }
-
-    pub fn entity_cache(mut self, entity_cache: Vec<CachedEntity>) -> CacheBuilder {
-        self.entity_cache = Some(entity_cache);
-        self
-    }
-
-    pub fn map_name(mut self, map_name: String) -> CacheBuilder {
-        self.map_name = Some(map_name);
-        self
-    }
-
-    pub fn entity_list(mut self, entity_list: Address) -> CacheBuilder {
-        self.entity_list = Some(entity_list);
-        self
-    }
-
-    pub fn build(self) -> anyhow::Result<Cache> {
-        Ok(Cache {
-            timestamp: std::time::Instant::now(),
-            entity_cache: self.entity_cache.ok_or(anyhow::anyhow!("entity_cache not set on builder"))?,
-            map_name: self.map_name.ok_or(anyhow::anyhow!("map_name not set on builder"))?,
-            entity_list: self.entity_list.ok_or(anyhow::anyhow!("entity_list not set on builder"))?,
-        })
-    }
-}
\ No newline at end of file diff --git a/docs/src/radarflow/dma/mod.rs.html b/docs/src/radarflow/dma/mod.rs.html deleted file mode 100644 index 2364a8c..0000000 --- a/docs/src/radarflow/dma/mod.rs.html +++ /dev/null @@ -1,405 +0,0 @@ -mod.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
-178
-179
-180
-181
-182
-183
-184
-185
-186
-187
-188
-189
-190
-191
-192
-193
-194
-195
-196
-197
-198
-199
-200
-201
-202
-
use std::sync::Arc;
-
-use csflow::{CheatCtx, Connector, memflow::Process, traits::{MemoryClass, BaseEntity}, enums::PlayerType, structs::{CBaseEntity, CPlayerController}};
-use tokio::{sync::RwLock, time::{Duration, Instant}};
-
-use crate::{comms::{RadarData, EntityData, BombData, PlayerData}, dma::cache::CacheBuilder};
-
-use self::cache::Cache;
-
-mod cache;
-
-const SECOND_AS_NANO: u64 = 1000*1000*1000;
-static ONCE: std::sync::Once = std::sync::Once::new();
-
-pub async fn run(connector: Connector, pcileech_device: String, poll_rate: u16, data_lock: Arc<RwLock<RadarData>>) -> anyhow::Result<()> {
-    let mut ctx = CheatCtx::setup(connector, pcileech_device)?;
-
-    println!("---------------------------------------------------");
-    println!("Found cs2.exe at {:X}", ctx.process.info().address);
-    println!("Found engine module at cs2.exe+{:X}", ctx.engine_module.base);
-    println!("Found client module at cs2.exe+{:X}", ctx.client_module.base);
-    println!("---------------------------------------------------");
-
-    // Avoid printing warnings and other stuff before the initial prints are complete
-    tokio::time::sleep(Duration::from_millis(500)).await;
-
-    // For poll rate timing
-    let should_time = poll_rate != 0;
-
-    let target_interval = Duration::from_nanos(SECOND_AS_NANO / poll_rate as u64);
-    let mut last_iteration_time = Instant::now();
-    let mut missmatch_count = 0;
-
-    let mut cache = Cache::new_invalid();
-
-    loop {
-        if ctx.process.state().is_dead() {
-            break;
-        }
-
-        if !cache.is_valid() {
-            let mut cached_entities = Vec::new();
-
-            let globals = ctx.get_globals()?;
-            let highest_index = ctx.highest_entity_index()?;
-            let map_name = ctx.map_name(globals)?;
-            let entity_list = ctx.get_entity_list()?;
-
-            let local = ctx.get_local()?;
-            
-            if local.get_pawn(&mut ctx, entity_list)?.is_some() {
-                cached_entities.push(cache::CachedEntity::Player {
-                    ptr: local.ptr(),
-                    player_type: PlayerType::Local 
-                });
-
-                for idx in 1..=highest_index {
-                    if let Some(entity) = CBaseEntity::from_index(&mut ctx, entity_list, idx)? {
-
-                        let class_name = entity.class_name(&mut ctx)?;
-
-                        match class_name.as_str() {
-                            "weapon_c4" => {
-                                cached_entities.push(cache::CachedEntity::Bomb {
-                                    ptr: entity.ptr()
-                                })
-                            },
-                            "cs_player_controller" => {
-                                let controller = entity.to_player_controller();
-
-                                let player_type = {
-                                    match controller.get_player_type(&mut ctx, &local)? {
-                                        Some(t) => {
-                                            if t == PlayerType::Spectator { continue } else { t }
-                                        },
-                                        None => { continue },
-                                    }
-                                };
-
-                                cached_entities.push(cache::CachedEntity::Player {
-                                    ptr: entity.ptr(),
-                                    player_type,
-                                })
-                            }
-                            _ => {}
-                        }
-                    }
-                }
-            }
-
-            cache = CacheBuilder::new()
-                .entity_cache(cached_entities)
-                .entity_list(entity_list)
-                .map_name(map_name)
-                .build()?;
-
-            log::debug!("Rebuilt cache.");
-        }
-
-        if ctx.network_is_ingame()? {
-            let mut radar_data = Vec::with_capacity(64);
-
-            if ctx.is_bomb_planted()? {
-                let bomb = ctx.get_plantedc4()?;
-                let bomb_pos = bomb.pos(&mut ctx)?;
-                radar_data.push(
-                    EntityData::Bomb(BombData::new(
-                        bomb_pos,
-                        true
-                    ))
-                );
-            }
-
-            for cached_data in cache.entity_cache() {
-                match cached_data {
-                    cache::CachedEntity::Bomb { ptr } => {
-                        if ctx.is_bomb_dropped()?  {
-                            let bomb_entity = CBaseEntity::new(ptr);
-                            let pos = bomb_entity.pos(&mut ctx)?;
-    
-                            radar_data.push(
-                                EntityData::Bomb(
-                                    BombData::new(
-                                        pos,
-                                        false
-                                    )
-                                )
-                            );
-                        }
-                    },
-                    cache::CachedEntity::Player { ptr, player_type } => {
-                        let controller = CPlayerController::new(ptr);
-                        if let Some(pawn) = controller.get_pawn(&mut ctx, cache.entity_list())? {
-                            if pawn.is_alive(&mut ctx)? {
-                                let pos = pawn.pos(&mut ctx)?;
-                                let yaw = pawn.angles(&mut ctx)?.y;
-                                let has_bomb = pawn.has_c4(&mut ctx, cache.entity_list())?;
-                    
-                                radar_data.push(
-                                    EntityData::Player(
-                                        PlayerData::new(
-                                            pos, 
-                                            yaw,
-                                            player_type,
-                                            has_bomb
-                                        )
-                                    )
-                                );
-                            }
-                        }
-                    },
-                }
-            }
-
-            let mut data = data_lock.write().await;
-            if cache.map_name() == "<empty>" || cache.map_name().is_empty() {
-                *data = RadarData::empty()
-            } else {
-                *data = RadarData::new(true, cache.map_name(), radar_data)
-            }
-        } else {
-            let mut data = data_lock.write().await;
-            *data = RadarData::empty()
-        }
-
-        if should_time {
-            let elapsed = last_iteration_time.elapsed();
-    
-            let remaining = match target_interval.checked_sub(elapsed) {
-                Some(t) => t,
-                None => {
-                    if missmatch_count >= 25 {
-                        ONCE.call_once(|| {
-                            log::warn!("Remaining time till target interval was negative more than 25 times");
-                            log::warn!("You should decrease your poll rate.");
-                            log::warn!("elapsed: {}ns", elapsed.as_nanos());
-                            log::warn!("target: {}ns", target_interval.as_nanos());
-                        });
-                    } else {
-                        missmatch_count += 1;
-                    }
-                    Duration::from_nanos(0)
-                },
-            };
-    
-            #[cfg(target_os = "linux")]
-            tokio_timerfd::sleep(remaining).await?;
-    
-            #[cfg(not(target_os = "linux"))]
-            tokio::time::sleep(remaining).await;
-    
-            log::info!("poll rate: {:.2}Hz", SECOND_AS_NANO as f64 / last_iteration_time.elapsed().as_nanos() as f64);
-            log::trace!("elapsed: {}ns", elapsed.as_nanos());
-            log::trace!("target: {}ns", target_interval.as_nanos());
-            log::trace!("missmatch count: {}", missmatch_count);
-
-            last_iteration_time = Instant::now();
-        }
-    }
-
-    Ok(())
-}
-
\ No newline at end of file diff --git a/docs/src/radarflow/main.rs.html b/docs/src/radarflow/main.rs.html deleted file mode 100644 index 84bb258..0000000 --- a/docs/src/radarflow/main.rs.html +++ /dev/null @@ -1,115 +0,0 @@ -main.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-
use std::sync::Arc;
-
-use clap::Parser;
-use cli::Cli;
-use comms::RadarData;
-use tokio::sync::RwLock;
-
-mod comms;
-mod cli;
-
-mod dma;
-mod websocket;
-
-#[tokio::main]
-async fn main() -> anyhow::Result<()> {
-    let cli = Cli::parse();
-
-    simple_logger::SimpleLogger::new()
-        .with_level(cli.loglevel.into())
-        .init()
-        .expect("Initializing logger");
-
-    let rwlock = Arc::new(
-        RwLock::new(
-            RadarData::empty()
-        )
-    );
-
-    let rwlock_clone = rwlock.clone();
-    let dma_handle = tokio::spawn(async move {
-        if let Err(err) = dma::run(cli.connector, cli.pcileech_device, cli.poll_rate, rwlock_clone).await {
-            log::error!("Error in dma thread: [{}]", err.to_string());
-        }
-    });
-
-    tokio::spawn(async move {
-        let future = websocket::run(cli.web_path, cli.port, rwlock);
-
-        if let Ok(my_local_ip) = local_ip_address::local_ip() {
-            let address = format!("http://{}:{}", my_local_ip, cli.port);
-            println!("Launched webserver at {}", address);
-        } else {
-            let address = format!("http://0.0.0.0:{}", cli.port);
-            println!("launched webserver at! {}", address);
-        }
-
-        if let Err(err) = future.await {
-            log::error!("Error in websocket server: [{}]", err.to_string());
-        }
-    });
-
-    if let Err(err) = dma_handle.await {
-        log::error!("Error when waiting for dma thread: {}", err.to_string());
-    }
-
-    Ok(())
-}
-
\ No newline at end of file diff --git a/docs/src/radarflow/websocket.rs.html b/docs/src/radarflow/websocket.rs.html deleted file mode 100644 index 8026ab7..0000000 --- a/docs/src/radarflow/websocket.rs.html +++ /dev/null @@ -1,132 +0,0 @@ -websocket.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-
use std::{sync::Arc, path::PathBuf};
-
-use axum::{
-    extract::{ws::{WebSocketUpgrade, WebSocket, Message}, State},
-    response::Response,
-    routing::get,
-    Router,
-};
-
-use tokio::sync::RwLock;
-use tower_http::services::ServeDir;
-
-use crate::comms::RadarData;
-
-#[derive(Clone)]
-struct AppState {
-    data_lock: Arc<RwLock<RadarData>>
-}
-
-async fn ws_handler(ws: WebSocketUpgrade, State(state): State<AppState>) -> Response {
-    ws.on_upgrade(|socket| handle_socket(socket, state))
-}
-
-async fn handle_socket(mut socket: WebSocket, state: AppState) {
-    while let Some(msg) = socket.recv().await {
-        if let Ok(msg) = msg {
-            if msg == Message::Text("requestInfo".to_string()) {
-                let data = state.data_lock.read().await;
-
-                let str = {
-                    match serde_json::to_string(&*data) {
-                        Ok(json) => json,
-                        Err(e) => {
-                            log::error!("Could not serialize data into json: {}", e.to_string());
-                            log::error!("Sending \"error\" instead");
-                            "error".to_string()
-                        },
-                    }
-                };
-
-                if socket.send(Message::Text(str)).await.is_err() {
-                    // client disconnected
-                    return;
-                }
-            }
-        } else {
-            // client disconnected
-            return;
-        }
-    }
-}
-
-pub async fn run(path: PathBuf, port: u16, data_lock: Arc<RwLock<RadarData>>) -> anyhow::Result<()> {
-    let app = Router::new()
-        .nest_service("/", ServeDir::new(path))
-        .route("/ws", get(ws_handler))
-        .with_state(AppState { data_lock });
-
-    let address = format!("0.0.0.0:{}", port);
-
-    axum::Server::bind(&address.parse()?)
-        .serve(app.into_make_service())
-        .await?;
-
-    Ok(())
-}
\ No newline at end of file diff --git a/docs/static.files/COPYRIGHT-23e9bde6c69aea69.txt b/docs/static.files/COPYRIGHT-23e9bde6c69aea69.txt deleted file mode 100644 index 1447df7..0000000 --- a/docs/static.files/COPYRIGHT-23e9bde6c69aea69.txt +++ /dev/null @@ -1,50 +0,0 @@ -# REUSE-IgnoreStart - -These documentation pages include resources by third parties. This copyright -file applies only to those resources. The following third party resources are -included, and carry their own copyright notices and license terms: - -* Fira Sans (FiraSans-Regular.woff2, FiraSans-Medium.woff2): - - Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ - with Reserved Font Name Fira Sans. - - Copyright (c) 2014, Telefonica S.A. - - Licensed under the SIL Open Font License, Version 1.1. - See FiraSans-LICENSE.txt. - -* rustdoc.css, main.js, and playpen.js: - - Copyright 2015 The Rust Developers. - Licensed under the Apache License, Version 2.0 (see LICENSE-APACHE.txt) or - the MIT license (LICENSE-MIT.txt) at your option. - -* normalize.css: - - Copyright (c) Nicolas Gallagher and Jonathan Neal. - Licensed under the MIT license (see LICENSE-MIT.txt). - -* Source Code Pro (SourceCodePro-Regular.ttf.woff2, - SourceCodePro-Semibold.ttf.woff2, SourceCodePro-It.ttf.woff2): - - Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), - with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark - of Adobe Systems Incorporated in the United States and/or other countries. - - Licensed under the SIL Open Font License, Version 1.1. - See SourceCodePro-LICENSE.txt. - -* Source Serif 4 (SourceSerif4-Regular.ttf.woff2, SourceSerif4-Bold.ttf.woff2, - SourceSerif4-It.ttf.woff2): - - Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name - 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United - States and/or other countries. - - Licensed under the SIL Open Font License, Version 1.1. - See SourceSerif4-LICENSE.md. - -This copyright file is intended to be distributed with rustdoc output. - -# REUSE-IgnoreEnd diff --git a/docs/static.files/FiraSans-LICENSE-db4b642586e02d97.txt b/docs/static.files/FiraSans-LICENSE-db4b642586e02d97.txt deleted file mode 100644 index d7e9c14..0000000 --- a/docs/static.files/FiraSans-LICENSE-db4b642586e02d97.txt +++ /dev/null @@ -1,98 +0,0 @@ -// REUSE-IgnoreStart - -Digitized data copyright (c) 2012-2015, The Mozilla Foundation and Telefonica S.A. -with Reserved Font Name < Fira >, - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - -// REUSE-IgnoreEnd diff --git a/docs/static.files/FiraSans-Medium-8f9a781e4970d388.woff2 b/docs/static.files/FiraSans-Medium-8f9a781e4970d388.woff2 deleted file mode 100644 index 7a1e5fc..0000000 Binary files a/docs/static.files/FiraSans-Medium-8f9a781e4970d388.woff2 and /dev/null differ diff --git a/docs/static.files/FiraSans-Regular-018c141bf0843ffd.woff2 b/docs/static.files/FiraSans-Regular-018c141bf0843ffd.woff2 deleted file mode 100644 index e766e06..0000000 Binary files a/docs/static.files/FiraSans-Regular-018c141bf0843ffd.woff2 and /dev/null differ diff --git a/docs/static.files/LICENSE-APACHE-b91fa81cba47b86a.txt b/docs/static.files/LICENSE-APACHE-b91fa81cba47b86a.txt deleted file mode 100644 index 16fe87b..0000000 --- a/docs/static.files/LICENSE-APACHE-b91fa81cba47b86a.txt +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/docs/static.files/LICENSE-MIT-65090b722b3f6c56.txt b/docs/static.files/LICENSE-MIT-65090b722b3f6c56.txt deleted file mode 100644 index 31aa793..0000000 --- a/docs/static.files/LICENSE-MIT-65090b722b3f6c56.txt +++ /dev/null @@ -1,23 +0,0 @@ -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. diff --git a/docs/static.files/NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2 b/docs/static.files/NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2 deleted file mode 100644 index 1866ad4..0000000 Binary files a/docs/static.files/NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2 and /dev/null differ diff --git a/docs/static.files/NanumBarunGothic-LICENSE-18c5adf4b52b4041.txt b/docs/static.files/NanumBarunGothic-LICENSE-18c5adf4b52b4041.txt deleted file mode 100644 index 4b3edc2..0000000 --- a/docs/static.files/NanumBarunGothic-LICENSE-18c5adf4b52b4041.txt +++ /dev/null @@ -1,103 +0,0 @@ -// REUSE-IgnoreStart - -Copyright (c) 2010, NAVER Corporation (https://www.navercorp.com/), - -with Reserved Font Name Nanum, Naver Nanum, NanumGothic, Naver NanumGothic, -NanumMyeongjo, Naver NanumMyeongjo, NanumBrush, Naver NanumBrush, NanumPen, -Naver NanumPen, Naver NanumGothicEco, NanumGothicEco, Naver NanumMyeongjoEco, -NanumMyeongjoEco, Naver NanumGothicLight, NanumGothicLight, NanumBarunGothic, -Naver NanumBarunGothic, NanumSquareRound, NanumBarunPen, MaruBuri - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - -// REUSE-IgnoreEnd diff --git a/docs/static.files/SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2 b/docs/static.files/SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2 deleted file mode 100644 index 462c34e..0000000 Binary files a/docs/static.files/SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2 and /dev/null differ diff --git a/docs/static.files/SourceCodePro-LICENSE-d180d465a756484a.txt b/docs/static.files/SourceCodePro-LICENSE-d180d465a756484a.txt deleted file mode 100644 index 0d2941e..0000000 --- a/docs/static.files/SourceCodePro-LICENSE-d180d465a756484a.txt +++ /dev/null @@ -1,97 +0,0 @@ -// REUSE-IgnoreStart - -Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. - -This Font Software is licensed under the SIL Open Font License, Version 1.1. - -This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - -// REUSE-IgnoreEnd diff --git a/docs/static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2 b/docs/static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2 deleted file mode 100644 index 10b558e..0000000 Binary files a/docs/static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2 and /dev/null differ diff --git a/docs/static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2 b/docs/static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2 deleted file mode 100644 index 5ec64ee..0000000 Binary files a/docs/static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2 and /dev/null differ diff --git a/docs/static.files/SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2 b/docs/static.files/SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2 deleted file mode 100644 index 181a07f..0000000 Binary files a/docs/static.files/SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2 and /dev/null differ diff --git a/docs/static.files/SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2 b/docs/static.files/SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2 deleted file mode 100644 index 2ae08a7..0000000 Binary files a/docs/static.files/SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2 and /dev/null differ diff --git a/docs/static.files/SourceSerif4-LICENSE-3bb119e13b1258b7.md b/docs/static.files/SourceSerif4-LICENSE-3bb119e13b1258b7.md deleted file mode 100644 index 175fa4f..0000000 --- a/docs/static.files/SourceSerif4-LICENSE-3bb119e13b1258b7.md +++ /dev/null @@ -1,98 +0,0 @@ - - -Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. -Copyright 2014 - 2023 Adobe (http://www.adobe.com/), with Reserved Font Name ‘Source’. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. - -This Font Software is licensed under the SIL Open Font License, Version 1.1. - -This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - - diff --git a/docs/static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2 b/docs/static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2 deleted file mode 100644 index 0263fc3..0000000 Binary files a/docs/static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2 and /dev/null differ diff --git a/docs/static.files/clipboard-7571035ce49a181d.svg b/docs/static.files/clipboard-7571035ce49a181d.svg deleted file mode 100644 index 8adbd99..0000000 --- a/docs/static.files/clipboard-7571035ce49a181d.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/static.files/favicon-16x16-8b506e7a72182f1c.png b/docs/static.files/favicon-16x16-8b506e7a72182f1c.png deleted file mode 100644 index ea4b45c..0000000 Binary files a/docs/static.files/favicon-16x16-8b506e7a72182f1c.png and /dev/null differ diff --git a/docs/static.files/favicon-2c020d218678b618.svg b/docs/static.files/favicon-2c020d218678b618.svg deleted file mode 100644 index 8b34b51..0000000 --- a/docs/static.files/favicon-2c020d218678b618.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - diff --git a/docs/static.files/favicon-32x32-422f7d1d52889060.png b/docs/static.files/favicon-32x32-422f7d1d52889060.png deleted file mode 100644 index 69b8613..0000000 Binary files a/docs/static.files/favicon-32x32-422f7d1d52889060.png and /dev/null differ diff --git a/docs/static.files/main-c5bd66d33317d69f.js b/docs/static.files/main-c5bd66d33317d69f.js deleted file mode 100644 index 43133d6..0000000 --- a/docs/static.files/main-c5bd66d33317d69f.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict";window.RUSTDOC_TOOLTIP_HOVER_MS=300;window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS=450;function resourcePath(basename,extension){return getVar("root-path")+basename+getVar("resource-suffix")+extension}function hideMain(){addClass(document.getElementById(MAIN_ID),"hidden")}function showMain(){removeClass(document.getElementById(MAIN_ID),"hidden")}function elemIsInParent(elem,parent){while(elem&&elem!==document.body){if(elem===parent){return true}elem=elem.parentElement}return false}function blurHandler(event,parentElem,hideCallback){if(!elemIsInParent(document.activeElement,parentElem)&&!elemIsInParent(event.relatedTarget,parentElem)){hideCallback()}}window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");function setMobileTopbar(){const mobileTopbar=document.querySelector(".mobile-topbar");const locationTitle=document.querySelector(".sidebar h2.location");if(mobileTopbar&&locationTitle){const mobileTitle=document.createElement("h2");mobileTitle.innerHTML=locationTitle.innerHTML;mobileTopbar.appendChild(mobileTitle)}}function getVirtualKey(ev){if("key"in ev&&typeof ev.key!=="undefined"){return ev.key}const c=ev.charCode||ev.keyCode;if(c===27){return"Escape"}return String.fromCharCode(c)}const MAIN_ID="main-content";const SETTINGS_BUTTON_ID="settings-menu";const ALTERNATIVE_DISPLAY_ID="alternative-display";const NOT_DISPLAYED_ID="not-displayed";const HELP_BUTTON_ID="help-button";function getSettingsButton(){return document.getElementById(SETTINGS_BUTTON_ID)}function getHelpButton(){return document.getElementById(HELP_BUTTON_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function insertAfter(newNode,referenceNode){referenceNode.parentNode.insertBefore(newNode,referenceNode.nextSibling)}function getOrCreateSection(id,classes){let el=document.getElementById(id);if(!el){el=document.createElement("section");el.id=id;el.className=classes;insertAfter(el,document.getElementById(MAIN_ID))}return el}function getAlternativeDisplayElem(){return getOrCreateSection(ALTERNATIVE_DISPLAY_ID,"content hidden")}function getNotDisplayedElem(){return getOrCreateSection(NOT_DISPLAYED_ID,"hidden")}function switchDisplayedElement(elemToDisplay){const el=getAlternativeDisplayElem();if(el.children.length>0){getNotDisplayedElem().appendChild(el.firstElementChild)}if(elemToDisplay===null){addClass(el,"hidden");showMain();return}el.appendChild(elemToDisplay);hideMain();removeClass(el,"hidden")}function browserSupportsHistoryApi(){return window.history&&typeof window.history.pushState==="function"}function preLoadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="preload";link.as="style";document.getElementsByTagName("head")[0].appendChild(link)}(function(){const isHelpPage=window.location.pathname.endsWith("/help.html");function loadScript(url){const script=document.createElement("script");script.src=url;document.head.append(script)}getSettingsButton().onclick=event=>{if(event.ctrlKey||event.altKey||event.metaKey){return}window.hideAllModals(false);addClass(getSettingsButton(),"rotate");event.preventDefault();loadScript(getVar("static-root-path")+getVar("settings-js"));setTimeout(()=>{const themes=getVar("themes").split(",");for(const theme of themes){if(theme!==""){preLoadCss(getVar("root-path")+theme+".css")}}},0)};window.searchState={loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:()=>{let el=document.getElementById("search");if(!el){el=document.createElement("section");el.id="search";getNotDisplayedElem().appendChild(el)}return el},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:()=>{if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},isDisplayed:()=>searchState.outputElement().parentElement.id===ALTERNATIVE_DISPLAY_ID,focus:()=>{searchState.input.focus()},defocus:()=>{searchState.input.blur()},showResults:search=>{if(search===null||typeof search==="undefined"){search=searchState.outputElement()}switchDisplayedElement(search);searchState.mouseMovedAfterSearch=false;document.title=searchState.title},removeQueryParameters:()=>{document.title=searchState.titleBeforeSearch;if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.hash)}},hideResults:()=>{switchDisplayedElement(null);searchState.removeQueryParameters()},getQueryStringParams:()=>{const params={};window.location.search.substring(1).split("&").map(s=>{const pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},setup:()=>{const search_input=searchState.input;if(!searchState.input){return}let searchLoaded=false;function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(getVar("static-root-path")+getVar("search-js"));loadScript(resourcePath("search-index",".js"))}}search_input.addEventListener("focus",()=>{search_input.origPlaceholder=search_input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});if(search_input.value!==""){loadSearch()}const params=searchState.getQueryStringParams();if(params.search!==undefined){searchState.setLoadingSearch();loadSearch()}},setLoadingSearch:()=>{const search=searchState.outputElement();search.innerHTML="

"+searchState.loadingText+"

";searchState.showResults(search)},};const toggleAllDocsId="toggle-all-docs";let savedHash="";function handleHashes(ev){if(ev!==null&&searchState.isDisplayed()&&ev.newURL){switchDisplayedElement(null);const hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}const elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}const pageId=window.location.hash.replace(/^#/,"");if(savedHash!==pageId){savedHash=pageId;if(pageId!==""){expandSection(pageId)}}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function handleEscape(ev){searchState.clearInputTimeout();searchState.hideResults();ev.preventDefault();searchState.defocus();window.hideAllModals(true)}function handleShortcut(ev){const disableShortcuts=getSettingValue("disable-shortcuts")==="true";if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"&&document.activeElement.type!=="checkbox"&&document.activeElement.type!=="radio"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":ev.preventDefault();searchState.focus();break;case"+":ev.preventDefault();expandAllDocs();break;case"-":ev.preventDefault();collapseAllDocs();break;case"?":showHelp();break;default:break}}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);function addSidebarItems(){if(!window.SIDEBAR_ITEMS){return}const sidebar=document.getElementsByClassName("sidebar-elems")[0];function block(shortty,id,longty){const filtered=window.SIDEBAR_ITEMS[shortty];if(!filtered){return}const h3=document.createElement("h3");h3.innerHTML=`${longty}`;const ul=document.createElement("ul");ul.className="block "+shortty;for(const name of filtered){let path;if(shortty==="mod"){path=name+"/index.html"}else{path=shortty+"."+name+".html"}const current_page=document.location.href.split("/").pop();const link=document.createElement("a");link.href=path;if(path===current_page){link.className="current"}link.textContent=name;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebar.appendChild(h3);sidebar.appendChild(ul)}if(sidebar){block("primitive","primitives","Primitive Types");block("mod","modules","Modules");block("macro","macros","Macros");block("struct","structs","Structs");block("enum","enums","Enums");block("union","unions","Unions");block("constant","constants","Constants");block("static","static","Statics");block("trait","traits","Traits");block("fn","functions","Functions");block("type","types","Type Aliases");block("foreigntype","foreign-types","Foreign Types");block("keyword","keywords","Keywords");block("traitalias","trait-aliases","Trait Aliases")}}window.register_implementors=imp=>{const implementors=document.getElementById("implementors-list");const synthetic_implementors=document.getElementById("synthetic-implementors-list");const inlined_types=new Set();const TEXT_IDX=0;const SYNTHETIC_IDX=1;const TYPES_IDX=2;if(synthetic_implementors){onEachLazy(synthetic_implementors.getElementsByClassName("impl"),el=>{const aliases=el.getAttribute("data-aliases");if(!aliases){return}aliases.split(",").forEach(alias=>{inlined_types.add(alias)})})}let currentNbImpls=implementors.getElementsByClassName("impl").length;const traitName=document.querySelector(".main-heading h1 > .trait").textContent;const baseIdName="impl-"+traitName+"-";const libs=Object.getOwnPropertyNames(imp);const script=document.querySelector("script[data-ignore-extern-crates]");const ignoreExternCrates=new Set((script?script.getAttribute("data-ignore-extern-crates"):"").split(","));for(const lib of libs){if(lib===window.currentCrate||ignoreExternCrates.has(lib)){continue}const structs=imp[lib];struct_loop:for(const struct of structs){const list=struct[SYNTHETIC_IDX]?synthetic_implementors:implementors;if(struct[SYNTHETIC_IDX]){for(const struct_type of struct[TYPES_IDX]){if(inlined_types.has(struct_type)){continue struct_loop}inlined_types.add(struct_type)}}const code=document.createElement("h3");code.innerHTML=struct[TEXT_IDX];addClass(code,"code-header");onEachLazy(code.getElementsByTagName("a"),elem=>{const href=elem.getAttribute("href");if(href&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});const currentId=baseIdName+currentNbImpls;const anchor=document.createElement("a");anchor.href="#"+currentId;addClass(anchor,"anchor");const display=document.createElement("div");display.id=currentId;addClass(display,"impl");display.appendChild(anchor);display.appendChild(code);list.appendChild(display);currentNbImpls+=1}}};if(window.pending_implementors){window.register_implementors(window.pending_implementors)}function addSidebarCrates(){if(!window.ALL_CRATES){return}const sidebarElems=document.getElementsByClassName("sidebar-elems")[0];if(!sidebarElems){return}const h3=document.createElement("h3");h3.innerHTML="Crates";const ul=document.createElement("ul");ul.className="block crate";for(const crate of window.ALL_CRATES){const link=document.createElement("a");link.href=window.rootPath+crate+"/index.html";if(window.rootPath!=="./"&&crate===window.currentCrate){link.className="current"}link.textContent=crate;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebarElems.appendChild(h3);sidebarElems.appendChild(ul)}function expandAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hasClass(e,"type-contents-toggle")&&!hasClass(e,"more-examples-toggle")){e.open=true}});innerToggle.title="collapse all docs";innerToggle.children[0].innerText="\u2212"}function collapseAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(e.parentNode.id!=="implementations-list"||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false}});innerToggle.title="expand all docs";innerToggle.children[0].innerText="+"}function toggleAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return}if(hasClass(innerToggle,"will-expand")){expandAllDocs()}else{collapseAllDocs()}}(function(){const toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs}const hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";const hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";const hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){const list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),e=>{e.open=open})}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false)}onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false}})}());window.rustdoc_add_line_numbers_to_examples=()=>{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");if(line_numbers.length>0){return}const count=x.textContent.split("\n").length;const elems=[];for(let i=0;i{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");for(const node of line_numbers){parent.removeChild(node)}})};if(getSettingValue("line-numbers")==="true"){window.rustdoc_add_line_numbers_to_examples()}function showSidebar(){window.hideAllModals(false);const sidebar=document.getElementsByClassName("sidebar")[0];addClass(sidebar,"shown")}function hideSidebar(){const sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown")}window.addEventListener("resize",()=>{if(window.CURRENT_TOOLTIP_ELEMENT){const base=window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE;const force_visible=base.TOOLTIP_FORCE_VISIBLE;hideTooltip(false);if(force_visible){showTooltip(base);base.TOOLTIP_FORCE_VISIBLE=true}}});const mainElem=document.getElementById(MAIN_ID);if(mainElem){mainElem.addEventListener("click",hideSidebar)}onEachLazy(document.querySelectorAll("a[href^='#']"),el=>{el.addEventListener("click",()=>{expandSection(el.hash.slice(1));hideSidebar()})});onEachLazy(document.querySelectorAll(".toggle > summary:not(.hideme)"),el=>{el.addEventListener("click",e=>{if(e.target.tagName!=="SUMMARY"&&e.target.tagName!=="A"){e.preventDefault()}})});function showTooltip(e){const notable_ty=e.getAttribute("data-notable-ty");if(!window.NOTABLE_TRAITS&¬able_ty){const data=document.getElementById("notable-traits-data");if(data){window.NOTABLE_TRAITS=JSON.parse(data.innerText)}else{throw new Error("showTooltip() called with notable without any notable traits!")}}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE===e){clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);return}window.hideAllModals(false);const wrapper=document.createElement("div");if(notable_ty){wrapper.innerHTML="
"+window.NOTABLE_TRAITS[notable_ty]+"
"}else{if(e.getAttribute("title")!==null){e.setAttribute("data-title",e.getAttribute("title"));e.removeAttribute("title")}if(e.getAttribute("data-title")!==null){const titleContent=document.createElement("div");titleContent.className="content";titleContent.appendChild(document.createTextNode(e.getAttribute("data-title")));wrapper.appendChild(titleContent)}}wrapper.className="tooltip popover";const focusCatcher=document.createElement("div");focusCatcher.setAttribute("tabindex","0");focusCatcher.onfocus=hideTooltip;wrapper.appendChild(focusCatcher);const pos=e.getBoundingClientRect();wrapper.style.top=(pos.top+window.scrollY+pos.height)+"px";wrapper.style.left=0;wrapper.style.right="auto";wrapper.style.visibility="hidden";const body=document.getElementsByTagName("body")[0];body.appendChild(wrapper);const wrapperPos=wrapper.getBoundingClientRect();const finalPos=pos.left+window.scrollX-wrapperPos.width+24;if(finalPos>0){wrapper.style.left=finalPos+"px"}else{wrapper.style.setProperty("--popover-arrow-offset",(wrapperPos.right-pos.right+4)+"px")}wrapper.style.visibility="";window.CURRENT_TOOLTIP_ELEMENT=wrapper;window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE=e;clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);wrapper.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}clearTooltipHoverTimeout(e)};wrapper.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(ev.relatedTarget,e)){setTooltipHoverTimeout(e,false);addClass(wrapper,"fade-out")}}}function setTooltipHoverTimeout(element,show){clearTooltipHoverTimeout(element);if(!show&&!window.CURRENT_TOOLTIP_ELEMENT){return}if(show&&window.CURRENT_TOOLTIP_ELEMENT){return}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE!==element){return}element.TOOLTIP_HOVER_TIMEOUT=setTimeout(()=>{if(show){showTooltip(element)}else if(!element.TOOLTIP_FORCE_VISIBLE){hideTooltip(false)}},show?window.RUSTDOC_TOOLTIP_HOVER_MS:window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS)}function clearTooltipHoverTimeout(element){if(element.TOOLTIP_HOVER_TIMEOUT!==undefined){removeClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out");clearTimeout(element.TOOLTIP_HOVER_TIMEOUT);delete element.TOOLTIP_HOVER_TIMEOUT}}function tooltipBlurHandler(event){if(window.CURRENT_TOOLTIP_ELEMENT&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)){setTimeout(()=>hideTooltip(false),0)}}function hideTooltip(focus){if(window.CURRENT_TOOLTIP_ELEMENT){if(window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE){if(focus){window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.focus()}window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE=false}const body=document.getElementsByTagName("body")[0];body.removeChild(window.CURRENT_TOOLTIP_ELEMENT);clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);window.CURRENT_TOOLTIP_ELEMENT=null}}onEachLazy(document.getElementsByClassName("tooltip"),e=>{e.onclick=()=>{e.TOOLTIP_FORCE_VISIBLE=e.TOOLTIP_FORCE_VISIBLE?false:true;if(window.CURRENT_TOOLTIP_ELEMENT&&!e.TOOLTIP_FORCE_VISIBLE){hideTooltip(true)}else{showTooltip(e);window.CURRENT_TOOLTIP_ELEMENT.setAttribute("tabindex","0");window.CURRENT_TOOLTIP_ELEMENT.focus();window.CURRENT_TOOLTIP_ELEMENT.onblur=tooltipBlurHandler}return false};e.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointermove=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(ev.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)){setTooltipHoverTimeout(e,false);addClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out")}}});const sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",()=>{const sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){showSidebar()}else{hideSidebar()}})}function helpBlurHandler(event){blurHandler(event,getHelpButton(),window.hidePopoverMenus)}function buildHelpMenu(){const book_info=document.createElement("span");const channel=getVar("channel");book_info.className="top";book_info.innerHTML=`You can find more information in \ -the rustdoc book.`;const shortcuts=[["?","Show this help dialog"],["S","Focus the search field"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(x=>"
"+x[0].split(" ").map((y,index)=>((index&1)===0?""+y+"":" "+y+" ")).join("")+"
"+x[1]+"
").join("");const div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

Keyboard Shortcuts

"+shortcuts+"
";const infos=[`For a full list of all search features, take a look here.`,"Prefix searches with a type followed by a colon (e.g., fn:) to \ - restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \ - enum, trait, type, macro, \ - and const.","Search functions by type signature (e.g., vec -> usize or \ - -> vec or String, enum:Cow -> bool)","You can look for items with an exact name by putting double quotes around \ - your request: \"string\"","Look for functions that accept or return \ - slices and \ - arrays by writing \ - square brackets (e.g., -> [u8] or [] -> Option)","Look for items inside another one by searching for a path: vec::Vec",].map(x=>"

"+x+"

").join("");const div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

Search Tricks

"+infos;const rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";const rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc "+getVar("rustdoc-version");rustdoc_version.appendChild(rustdoc_version_code);const container=document.createElement("div");if(!isHelpPage){container.className="popover"}container.id="help";container.style.display="none";const side_by_side=document.createElement("div");side_by_side.className="side-by-side";side_by_side.appendChild(div_shortcuts);side_by_side.appendChild(div_infos);container.appendChild(book_info);container.appendChild(side_by_side);container.appendChild(rustdoc_version);if(isHelpPage){const help_section=document.createElement("section");help_section.appendChild(container);document.getElementById("main-content").appendChild(help_section);container.style.display="block"}else{const help_button=getHelpButton();help_button.appendChild(container);container.onblur=helpBlurHandler;help_button.onblur=helpBlurHandler;help_button.children[0].onblur=helpBlurHandler}return container}window.hideAllModals=switchFocus=>{hideSidebar();window.hidePopoverMenus();hideTooltip(switchFocus)};window.hidePopoverMenus=()=>{onEachLazy(document.querySelectorAll(".search-form .popover"),elem=>{elem.style.display="none"})};function getHelpMenu(buildNeeded){let menu=getHelpButton().querySelector(".popover");if(!menu&&buildNeeded){menu=buildHelpMenu()}return menu}function showHelp(){getHelpButton().querySelector("a").focus();const menu=getHelpMenu(true);if(menu.style.display==="none"){window.hideAllModals();menu.style.display=""}}if(isHelpPage){showHelp();document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault()})}else{document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault();const menu=getHelpMenu(true);const shouldShowHelp=menu.style.display==="none";if(shouldShowHelp){showHelp()}else{window.hidePopoverMenus()}})}setMobileTopbar();addSidebarItems();addSidebarCrates();onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){let reset_button_timeout=null;const but=document.getElementById("copy-path");if(!but){return}but.onclick=()=>{const parent=but.parentElement;const path=[];onEach(parent.childNodes,child=>{if(child.tagName==="A"){path.push(child.textContent)}});const el=document.createElement("textarea");el.value=path.join("::");el.setAttribute("readonly","");el.style.position="absolute";el.style.left="-9999px";document.body.appendChild(el);el.select();document.execCommand("copy");document.body.removeChild(el);but.children[0].style.display="none";let tmp;if(but.childNodes.length<2){tmp=document.createTextNode("✓");but.appendChild(tmp)}else{onEachLazy(but.childNodes,e=>{if(e.nodeType===Node.TEXT_NODE){tmp=e;return true}});tmp.textContent="✓"}if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){tmp.textContent="";reset_button_timeout=null;but.children[0].style.display=""}reset_button_timeout=window.setTimeout(reset_button,1000)}}()) \ No newline at end of file diff --git a/docs/static.files/normalize-76eba96aa4d2e634.css b/docs/static.files/normalize-76eba96aa4d2e634.css deleted file mode 100644 index 469959f..0000000 --- a/docs/static.files/normalize-76eba96aa4d2e634.css +++ /dev/null @@ -1,2 +0,0 @@ - /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ -html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type="button"],[type="reset"],[type="submit"],button{-webkit-appearance:button}[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none} \ No newline at end of file diff --git a/docs/static.files/noscript-5d8b3c7633ad77ba.css b/docs/static.files/noscript-5d8b3c7633ad77ba.css deleted file mode 100644 index 8c63ef0..0000000 --- a/docs/static.files/noscript-5d8b3c7633ad77ba.css +++ /dev/null @@ -1 +0,0 @@ - #main-content .attributes{margin-left:0 !important;}#copy-path{display:none;}nav.sub{display:none;}.src .sidebar{display:none;}.notable-traits{display:none;}:root{--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--test-arrow-color:#f5f5f5;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#f5f5f5;--test-arrow-hover-background-color:rgb(78,139,202);--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);}@media (prefers-color-scheme:dark){:root{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--test-arrow-color:#dedede;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#dedede;--test-arrow-hover-background-color:#4e8bca;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);}} \ No newline at end of file diff --git a/docs/static.files/rust-logo-151179464ae7ed46.svg b/docs/static.files/rust-logo-151179464ae7ed46.svg deleted file mode 100644 index 62424d8..0000000 --- a/docs/static.files/rust-logo-151179464ae7ed46.svg +++ /dev/null @@ -1,61 +0,0 @@ - - - diff --git a/docs/static.files/rustdoc-fa3bb1812debf86c.css b/docs/static.files/rustdoc-fa3bb1812debf86c.css deleted file mode 100644 index 2dd5ceb..0000000 --- a/docs/static.files/rustdoc-fa3bb1812debf86c.css +++ /dev/null @@ -1,10 +0,0 @@ - :root{--nav-sub-mobile-padding:8px;--search-typename-width:6.75rem;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular-018c141bf0843ffd.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium-8f9a781e4970d388.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular-46f98efaafac5295.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2") format("woff2");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{box-sizing:border-box;}body{font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;font-feature-settings:"kern","liga";background-color:var(--main-background-color);color:var(--main-color);}h1{font-size:1.5rem;}h2{font-size:1.375rem;}h3{font-size:1.25rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:25px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}.docblock>h2:first-child,.docblock>h3:first-child,.docblock>h4:first-child,.docblock>h5:first-child,.docblock>h6:first-child{margin-top:0;}.main-heading h1{margin:0;padding:0;flex-grow:1;overflow-wrap:break-word;overflow-wrap:anywhere;}.main-heading{display:flex;flex-wrap:wrap;padding-bottom:6px;margin-bottom:15px;}.content h2,.top-doc .docblock>h3,.top-doc .docblock>h4{border-bottom:1px solid var(--headings-border-bottom-color);}h1,h2{line-height:1.25;padding-top:3px;padding-bottom:9px;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;margin:0;padding:0;white-space:pre-wrap;}#crate-search,h1,h2,h3,h4,h5,h6,.sidebar,.mobile-topbar,.search-input,.search-results .result-name,.item-name>a,.out-of-band,span.since,a.src,#help-button>a,summary.hideme,.scraped-example-list,ul.all-items{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}#toggle-all-docs,a.anchor,.small-section-header a,#src-sidebar a,.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,h1 a,.search-results a,.stab,.result-name i{color:var(--main-color);}span.enum,a.enum,span.struct,a.struct,span.union,a.union,span.primitive,a.primitive,span.type,a.type,span.foreigntype,a.foreigntype{color:var(--type-link-color);}span.trait,a.trait,span.traitalias,a.traitalias{color:var(--trait-link-color);}span.associatedtype,a.associatedtype,span.constant,a.constant,span.static,a.static{color:var(--assoc-item-link-color);}span.fn,a.fn,span.method,a.method,span.tymethod,a.tymethod{color:var(--function-link-color);}span.attr,a.attr,span.derive,a.derive,span.macro,a.macro{color:var(--macro-link-color);}span.mod,a.mod{color:var(--mod-link-color);}span.keyword,a.keyword{color:var(--keyword-link-color);}a{color:var(--link-color);text-decoration:none;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p,.docblock>.warning{margin:0 0 .75em 0;}p:last-child,.docblock>.warning:last-child{margin:0;}button{padding:1px 6px;cursor:pointer;}button#toggle-all-docs{padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.src main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}details:not(.toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.125em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;line-height:1.5;}pre.item-decl{overflow-x:auto;}.item-decl .type-contents-toggle{contain:initial;}.src .content pre{padding:20px;}.rustdoc.src .example-wrap pre.src-line-numbers{padding:20px 0 20px 4px;}img{max-width:100%;}.sub-logo-container,.logo-container{line-height:0;display:block;}.sub-logo-container{margin-right:32px;}.sub-logo-container>img{height:60px;width:60px;object-fit:contain;}.rust-logo{filter:var(--rust-logo-filter);}.sidebar{font-size:0.875rem;flex:0 0 200px;overflow-y:scroll;overscroll-behavior:contain;position:sticky;height:100vh;top:0;left:0;}.rustdoc.src .sidebar{flex-basis:50px;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;z-index:1;}.sidebar,.mobile-topbar,.sidebar-menu-toggle,#src-sidebar-toggle,#src-sidebar{background-color:var(--sidebar-background-color);}#src-sidebar-toggle>button:hover,#src-sidebar-toggle>button:focus{background-color:var(--sidebar-background-color-hover);}.src .sidebar>*:not(#src-sidebar-toggle){visibility:hidden;}.src-sidebar-expanded .src .sidebar{overflow-y:auto;flex-basis:300px;}.src-sidebar-expanded .src .sidebar>*:not(#src-sidebar-toggle){visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;scrollbar-color:var(--scrollbar-color);}.sidebar{scrollbar-width:thin;scrollbar-color:var(--scrollbar-color);}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;background-color:var(--scrollbar-track-background-color);}.sidebar::-webkit-scrollbar-track{background-color:var(--scrollbar-track-background-color);}::-webkit-scrollbar-thumb,.sidebar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-background-color);}.hidden{display:none !important;}.sidebar .logo-container{margin-top:10px;margin-bottom:10px;text-align:center;}.version{overflow-wrap:break-word;}.logo-container>img{height:100px;width:100px;}ul.block,.block li{padding:0;margin:0;list-style:none;}.sidebar-elems a,.sidebar>h2 a{display:block;padding:0.25rem;margin-left:-0.25rem;}.sidebar h2{overflow-wrap:anywhere;padding:0;margin:0.7rem 0;}.sidebar h3{font-size:1.125rem;padding:0;margin:0;}.sidebar-elems,.sidebar>h2{padding-left:24px;}.sidebar a{color:var(--sidebar-link-color);}.sidebar .current,.sidebar a:hover:not(.logo-container){background-color:var(--sidebar-current-link-background-color);}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}.mobile-topbar{display:none;}.rustdoc .example-wrap{display:flex;position:relative;margin-bottom:10px;}.rustdoc .example-wrap:last-child{margin-bottom:0px;}.rustdoc .example-wrap pre{margin:0;flex-grow:1;}.rustdoc:not(.src) .example-wrap pre{overflow:auto hidden;}.rustdoc .example-wrap pre.example-line-numbers,.rustdoc .example-wrap pre.src-line-numbers{flex-grow:0;min-width:fit-content;overflow:initial;text-align:right;-webkit-user-select:none;user-select:none;padding:14px 8px;color:var(--src-line-numbers-span-color);}.rustdoc .example-wrap pre.src-line-numbers{padding:14px 0;}.src-line-numbers a,.src-line-numbers span{color:var(--src-line-numbers-span-color);padding:0 8px;}.src-line-numbers :target{background-color:transparent;border-right:none;padding:0 8px;}.src-line-numbers .line-highlighted{background-color:var(--src-line-number-highlighted-background-color);}.search-loading{text-align:center;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock :not(pre)>code,.docblock-short code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25rem;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.125rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.875rem;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.more-examples-toggle):not(.example-wrap){max-width:100%;overflow-x:auto;}.out-of-band{flex-grow:0;font-size:1.125rem;}.docblock code,.docblock-short code,pre,.rustdoc.src .example-wrap{background-color:var(--code-block-background-color);}#main-content{position:relative;}.docblock table{margin:.5em 0;border-collapse:collapse;}.docblock table td,.docblock table th{padding:.5em;border:1px solid var(--border-color);}.docblock table tbody tr:nth-child(2n){background:var(--table-alt-row-background-color);}.method .where,.fn .where,.where.fmt-newline{display:block;white-space:pre-wrap;font-size:0.875rem;}.item-info{display:block;margin-left:24px;}.item-info code{font-size:0.875rem;}#main-content>.item-info{margin-left:0;}nav.sub{flex-grow:1;flex-flow:row nowrap;margin:4px 0 25px 0;display:flex;align-items:center;}.search-form{position:relative;display:flex;height:34px;flex-grow:1;}.src nav.sub{margin:0 0 15px 0;}.small-section-header{display:block;position:relative;}.small-section-header:hover>.anchor,.impl:hover>.anchor,.trait-impl:hover>.anchor,.variant:hover>.anchor{display:initial;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-15px;padding-right:8px;}h2.small-section-header>.anchor{padding-right:6px;}.main-heading a:hover,.example-wrap .rust a:hover,.all-items a:hover,.docblock a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.docblock-short a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.item-info a{text-decoration:underline;}.crate.block a.current{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{display:table;padding:0;margin:0;}.item-table>li{display:table-row;}.item-table>li>div{display:table-cell;}.item-table>li>.item-name{padding-right:1.25rem;}.search-results-title{margin-top:0;white-space:nowrap;display:flex;align-items:baseline;}#crate-search-div{position:relative;min-width:5em;}#crate-search{min-width:115px;padding:0 23px 0 4px;max-width:100%;text-overflow:ellipsis;border:1px solid var(--border-color);border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;background-color:var(--main-background-color);color:inherit;line-height:1.5;font-weight:500;}#crate-search:hover,#crate-search:focus{border-color:var(--crate-search-hover-border);}#crate-search-div::after{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0;content:"";background-repeat:no-repeat;background-size:20px;background-position:calc(100% - 2px) 56%;background-image:url('data:image/svg+xml, \ - ');filter:var(--crate-search-div-filter);}#crate-search-div:hover::after,#crate-search-div:focus-within::after{filter:var(--crate-search-div-hover-filter);}#crate-search>option{font-size:1rem;}.search-input{-webkit-appearance:none;outline:none;border:1px solid var(--border-color);border-radius:2px;padding:8px;font-size:1rem;flex-grow:1;background-color:var(--button-background-color);color:var(--search-color);}.search-input:focus{border-color:var(--search-input-focused-border-color);}.search-results{display:none;}.search-results.active{display:block;}.search-results>a{display:flex;margin-left:2px;margin-right:2px;border-bottom:1px solid var(--search-result-border-color);gap:1em;}.search-results>a>div.desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex:2;}.search-results a:hover,.search-results a:focus{background-color:var(--search-result-link-focus-background-color);}.search-results .result-name{display:flex;align-items:center;justify-content:start;flex:3;}.search-results .result-name .alias{color:var(--search-results-alias-color);}.search-results .result-name .grey{color:var(--search-results-grey-color);}.search-results .result-name .typename{color:var(--search-results-grey-color);font-size:0.875rem;width:var(--search-typename-width);}.search-results .result-name .path{word-break:break-all;max-width:calc(100% - var(--search-typename-width));display:inline-block;}.search-results .result-name .path>*{display:inline;}.popover{position:absolute;top:100%;right:0;z-index:2;margin-top:7px;border-radius:3px;border:1px solid var(--border-color);background-color:var(--main-background-color);color:var(--main-color);--popover-arrow-offset:11px;}.popover::before{content:'';position:absolute;right:var(--popover-arrow-offset);border:solid var(--border-color);border-width:1px 1px 0 0;background-color:var(--main-background-color);padding:4px;transform:rotate(-45deg);top:-5px;}.setting-line{margin:1.2em 0.6em;}.setting-radio input,.setting-check input{margin-right:0.3em;height:1.2rem;width:1.2rem;border:2px solid var(--settings-input-border-color);outline:none;-webkit-appearance:none;cursor:pointer;}.setting-radio input{border-radius:50%;}.setting-radio span,.setting-check span{padding-bottom:1px;}.setting-radio{margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;display:inline-flex;align-items:center;cursor:pointer;}.setting-radio+.setting-radio{margin-left:0.5em;}.setting-check{margin-right:20px;display:flex;align-items:center;cursor:pointer;}.setting-radio input:checked{box-shadow:inset 0 0 0 3px var(--main-background-color);background-color:var(--settings-input-color);}.setting-check input:checked{background-color:var(--settings-input-color);border-width:1px;content:url('data:image/svg+xml,\ - \ - ');}.setting-radio input:focus,.setting-check input:focus{box-shadow:0 0 1px 1px var(--settings-input-color);}.setting-radio input:checked:focus{box-shadow:inset 0 0 0 3px var(--main-background-color),0 0 2px 2px var(--settings-input-color);}.setting-radio input:hover,.setting-check input:hover{border-color:var(--settings-input-color) !important;}#help.popover{max-width:600px;--popover-arrow-offset:48px;}#help dt{float:left;clear:left;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;}#help span.top{margin:10px 0;border-bottom:1px solid var(--border-color);padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid var(--border-color);}.side-by-side>div{width:50%;float:left;padding:0 20px 20px 17px;}.item-info .stab{min-height:36px;display:flex;padding:3px;margin-bottom:5px;align-items:center;vertical-align:text-bottom;}.item-name .stab{margin-left:0.3125em;}.stab{padding:0 2px;font-size:0.875rem;font-weight:normal;color:var(--main-color);background-color:var(--stab-background-color);width:fit-content;white-space:pre-wrap;border-radius:3px;display:inline;}.stab.portability>code{background:none;color:var(--stab-code-color);}.stab .emoji{font-size:1.25rem;margin-right:0.3rem;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;float:right;}.rightside:not(a),.out-of-band{color:var(--right-side-color);}pre.rust{tab-size:4;-moz-tab-size:4;}pre.rust .kw{color:var(--code-highlight-kw-color);}pre.rust .kw-2{color:var(--code-highlight-kw-2-color);}pre.rust .lifetime{color:var(--code-highlight-lifetime-color);}pre.rust .prelude-ty{color:var(--code-highlight-prelude-color);}pre.rust .prelude-val{color:var(--code-highlight-prelude-val-color);}pre.rust .string{color:var(--code-highlight-string-color);}pre.rust .number{color:var(--code-highlight-number-color);}pre.rust .bool-val{color:var(--code-highlight-literal-color);}pre.rust .self{color:var(--code-highlight-self-color);}pre.rust .attr{color:var(--code-highlight-attribute-color);}pre.rust .macro,pre.rust .macro-nonterminal{color:var(--code-highlight-macro-color);}pre.rust .question-mark{font-weight:bold;color:var(--code-highlight-question-mark-color);}pre.rust .comment{color:var(--code-highlight-comment-color);}pre.rust .doccomment{color:var(--code-highlight-doc-comment-color);}.rustdoc.src .example-wrap pre.rust a{background:var(--codeblock-link-background);}.example-wrap.compile_fail,.example-wrap.should_panic{border-left:2px solid var(--codeblock-error-color);}.ignore.example-wrap{border-left:2px solid var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover,.example-wrap.should_panic:hover{border-left:2px solid var(--codeblock-error-hover-color);}.example-wrap.ignore:hover{border-left:2px solid var(--codeblock-ignore-hover-color);}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip{color:var(--codeblock-error-color);}.example-wrap.ignore .tooltip{color:var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover .tooltip,.example-wrap.should_panic:hover .tooltip{color:var(--codeblock-error-hover-color);}.example-wrap.ignore:hover .tooltip{color:var(--codeblock-ignore-hover-color);}.example-wrap .tooltip{position:absolute;display:block;left:-25px;top:5px;margin:0;line-height:1;}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip,.example-wrap.ignore .tooltip{font-weight:bold;font-size:1.25rem;}.content .docblock .warning{border-left:2px solid var(--warning-border-color);padding:14px;position:relative;overflow-x:visible !important;}.content .docblock .warning::before{color:var(--warning-border-color);content:"ⓘ";position:absolute;left:-25px;top:5px;font-weight:bold;font-size:1.25rem;}a.test-arrow{visibility:hidden;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:1.375rem;top:5px;right:5px;z-index:1;color:var(--test-arrow-color);background-color:var(--test-arrow-background-color);}a.test-arrow:hover{color:var(--test-arrow-hover-color);background-color:var(--test-arrow-hover-background-color);}.example-wrap:hover .test-arrow{visibility:visible;}.code-attribute{font-weight:300;color:var(--code-attribute-color);}.item-spacer{width:100%;height:12px;display:block;}.out-of-band>span.since{font-size:1.25rem;}.sub-variant h4{font-size:1rem;font-weight:400;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}:target{padding-right:3px;background-color:var(--target-background-color);border-right:3px solid var(--target-border-color);}.code-header a.tooltip{color:inherit;margin-right:15px;position:relative;}.code-header a.tooltip:hover{color:var(--link-color);}a.tooltip:hover::after{position:absolute;top:calc(100% - 10px);left:-15px;right:-15px;height:20px;content:"\00a0";}.fade-out{opacity:0;transition:opacity 0.45s cubic-bezier(0,0,0.1,1.0);}.popover.tooltip .content{margin:0.25em 0.5em;}.popover.tooltip .content pre,.popover.tooltip .content code{background:transparent;margin:0;padding:0;font-size:1.25rem;white-space:pre-wrap;}.popover.tooltip .content>h3:first-child{margin:0 0 5px 0;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#search-tabs{display:flex;flex-direction:row;gap:1px;margin-bottom:4px;}#search-tabs button{text-align:center;font-size:1.125rem;border:0;border-top:2px solid;flex:1;line-height:1.5;color:inherit;}#search-tabs button:not(.selected){background-color:var(--search-tab-button-not-selected-background);border-top-color:var(--search-tab-button-not-selected-border-top-color);}#search-tabs button:hover,#search-tabs button.selected{background-color:var(--search-tab-button-selected-background);border-top-color:var(--search-tab-button-selected-border-top-color);}#search-tabs .count{font-size:1rem;font-variant-numeric:tabular-nums;color:var(--search-tab-title-count-color);}#search .error code{border-radius:3px;background-color:var(--search-error-code-background-color);}.search-corrections{font-weight:normal;}#src-sidebar-toggle{position:sticky;top:0;left:0;font-size:1.25rem;border-bottom:1px solid;display:flex;height:40px;justify-content:stretch;align-items:stretch;z-index:10;}#src-sidebar{width:100%;overflow:auto;}#src-sidebar>.title{font-size:1.5rem;text-align:center;border-bottom:1px solid var(--border-color);margin-bottom:6px;}#src-sidebar div.files>a:hover,details.dir-entry summary:hover,#src-sidebar div.files>a:focus,details.dir-entry summary:focus{background-color:var(--src-sidebar-background-hover);}#src-sidebar div.files>a.selected{background-color:var(--src-sidebar-background-selected);}#src-sidebar-toggle>button{font-size:inherit;font-weight:bold;background:none;color:inherit;text-align:center;border:none;outline:none;flex:1 1;-webkit-appearance:none;opacity:1;}#settings-menu,#help-button{margin-left:4px;display:flex;}#settings-menu>a,#help-button>a{display:flex;align-items:center;justify-content:center;background-color:var(--button-background-color);border:1px solid var(--border-color);border-radius:2px;color:var(--settings-button-color);font-size:20px;width:33px;}#settings-menu>a:hover,#settings-menu>a:focus,#help-button>a:hover,#help-button>a:focus{border-color:var(--settings-button-border-focus);}#copy-path{color:var(--copy-path-button-color);background:var(--main-background-color);height:34px;margin-left:10px;padding:0;padding-left:2px;border:0;width:33px;}#copy-path>img{filter:var(--copy-path-img-filter);}#copy-path:hover>img{filter:var(--copy-path-img-hover-filter);}@keyframes rotating{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}#settings-menu.rotate>a img{animation:rotating 2s linear infinite;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px var(--border-color);border-radius:3px;color:var(--kbd-color);background-color:var(--kbd-background);box-shadow:inset 0 -1px 0 var(--kbd-box-shadow-color);}ul.all-items>li{list-style:none;}details.dir-entry{padding-left:4px;}details.dir-entry>summary{margin:0 0 0 -4px;padding:0 0 0 4px;cursor:pointer;}details.dir-entry div.folders,details.dir-entry div.files{padding-left:23px;}details.dir-entry a{display:block;}details.toggle{contain:layout;position:relative;}details.toggle>summary.hideme{cursor:pointer;font-size:1rem;}details.toggle>summary{list-style:none;outline:none;}details.toggle>summary::-webkit-details-marker,details.toggle>summary::marker{display:none;}details.toggle>summary.hideme>span{margin-left:9px;}details.toggle>summary::before{background:url('data:image/svg+xml,') no-repeat top left;content:"";cursor:pointer;width:16px;height:16px;display:inline-block;vertical-align:middle;opacity:.5;filter:var(--toggle-filter);}details.toggle>summary.hideme>span,.more-examples-toggle summary,.more-examples-toggle .hide-more{color:var(--toggles-color);}details.toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.toggle>summary.hideme::after{content:"";}details.toggle>summary:focus::before,details.toggle>summary:hover::before{opacity:1;}details.toggle>summary:focus-visible::before{outline:1px dotted #000;outline-offset:1px;}details.non-exhaustive{margin-bottom:8px;}details.toggle>summary.hideme::before{position:relative;}details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:4px;}.impl-items>details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}details.toggle[open] >summary.hideme{position:absolute;}details.toggle[open] >summary.hideme>span{display:none;}details.toggle[open] >summary::before{background:url('data:image/svg+xml,') no-repeat top left;}details.toggle[open] >summary::after{content:"Collapse";}.docblock summary>*{display:inline-block;}.docblock>.example-wrap:first-child .tooltip{margin-top:16px;}@media (max-width:850px){#search-tabs .count{display:block;}}@media (max-width:700px){*[id]{scroll-margin-top:45px;}.rustdoc{display:block;}main{padding-left:15px;padding-top:0px;}.main-heading{flex-direction:column;}.out-of-band{text-align:left;margin-left:initial;padding:initial;}.out-of-band .since::before{content:"Since ";}.sidebar .logo-container,.sidebar .location{display:none;}.sidebar{position:fixed;top:45px;left:-1000px;z-index:11;height:calc(100vh - 45px);width:200px;}.src main,.rustdoc.src .sidebar{top:0;padding:0;height:100vh;border:0;}.sidebar.shown,.src-sidebar-expanded .src .sidebar,.rustdoc:not(.src) .sidebar:focus-within{left:0;}.mobile-topbar h2{padding-bottom:0;margin:auto 0.5em auto auto;overflow:hidden;font-size:24px;}.mobile-topbar h2 a{display:block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;}.mobile-topbar .logo-container>img{max-width:35px;max-height:35px;margin:5px 0 5px 20px;}.mobile-topbar{display:flex;flex-direction:row;position:sticky;z-index:10;font-size:2rem;height:45px;width:100%;left:0;top:0;}.sidebar-menu-toggle{width:45px;font-size:32px;border:none;color:var(--main-color);}.sidebar-elems{margin-top:1em;}.anchor{display:none !important;}#main-content>details.toggle>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}#src-sidebar-toggle{position:fixed;left:1px;top:100px;width:30px;font-size:1.5rem;padding:0;z-index:10;border-top-right-radius:3px;border-bottom-right-radius:3px;border:1px solid;border-left:0;}.src-sidebar-expanded #src-sidebar-toggle{left:unset;top:unset;width:unset;border-top-right-radius:unset;border-bottom-right-radius:unset;position:sticky;border:0;border-bottom:1px solid;}#copy-path,#help-button{display:none;}.item-table,.item-row,.item-table>li,.item-table>li>div,.search-results>a,.search-results>a>div{display:block;}.search-results>a{padding:5px 0px;}.search-results>a>div.desc,.item-table>li>div.desc{padding-left:2em;}.search-results .result-name{display:block;}.search-results .result-name .typename{width:initial;margin-right:0;}.search-results .result-name .typename,.search-results .result-name .path{display:inline;}.src-sidebar-expanded .src .sidebar{max-width:100vw;width:100vw;}details.toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.toggle>summary:not(.hideme)::before,#main-content>details.toggle:not(.top-doc)>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}.impl-items>.item-info{margin-left:34px;}.src nav.sub{margin:0;padding:var(--nav-sub-mobile-padding);}}@media (min-width:701px){.scraped-example-title{position:absolute;z-index:10;background:var(--main-background-color);bottom:8px;right:5px;padding:2px 4px;box-shadow:0 0 4px var(--main-background-color);}}@media print{nav.sidebar,nav.sub,.out-of-band,a.src,#copy-path,details.toggle[open] >summary::before,details.toggle>summary::before,details.toggle.top-doc>summary{display:none;}.docblock{margin-left:0;}main{padding:10px;}}@media (max-width:464px){.docblock{margin-left:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}nav.sub{flex-direction:column;}.search-form{align-self:stretch;}.sub-logo-container>img{height:35px;width:35px;margin-bottom:var(--nav-sub-mobile-padding);}}.variant,.implementors-toggle>summary,.impl,#implementors-list>.docblock,.impl-items>section,.impl-items>.toggle>summary,.methods>section,.methods>.toggle>summary{margin-bottom:0.75em;}.variants>.docblock,.implementors-toggle>.docblock,.impl-items>.toggle[open]:not(:last-child),.methods>.toggle[open]:not(:last-child),.implementors-toggle[open]:not(:last-child){margin-bottom:2em;}#trait-implementations-list .impl-items>.toggle:not(:last-child),#synthetic-implementations-list .impl-items>.toggle:not(:last-child),#blanket-implementations-list .impl-items>.toggle:not(:last-child){margin-bottom:1em;}.scraped-example-list .scrape-help{margin-left:10px;padding:0 4px;font-weight:normal;font-size:12px;position:relative;bottom:1px;border:1px solid var(--scrape-example-help-border-color);border-radius:50px;color:var(--scrape-example-help-color);}.scraped-example-list .scrape-help:hover{border-color:var(--scrape-example-help-hover-border-color);color:var(--scrape-example-help-hover-color);}.scraped-example{position:relative;}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper{max-height:calc(1.5em * 5 + 10px);}.scraped-example:not(.expanded) .code-wrapper pre{overflow-y:hidden;padding-bottom:0;max-height:calc(1.5em * 5 + 10px);}.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper,.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper pre{max-height:calc(1.5em * 10 + 10px);}.scraped-example .code-wrapper .next,.scraped-example .code-wrapper .prev,.scraped-example .code-wrapper .expand{color:var(--main-color);position:absolute;top:0.25em;z-index:1;padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.scraped-example .code-wrapper .prev{right:2.25em;}.scraped-example .code-wrapper .next{right:1.25em;}.scraped-example .code-wrapper .expand{right:0.25em;}.scraped-example:not(.expanded) .code-wrapper::before,.scraped-example:not(.expanded) .code-wrapper::after{content:" ";width:100%;height:5px;position:absolute;z-index:1;}.scraped-example:not(.expanded) .code-wrapper::before{top:0;background:linear-gradient(to bottom,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded) .code-wrapper::after{bottom:0;background:linear-gradient(to top,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example .code-wrapper .example-wrap{width:100%;overflow-y:hidden;margin-bottom:0;}.scraped-example:not(.expanded) .code-wrapper .example-wrap{overflow-x:hidden;}.scraped-example .example-wrap .rust span.highlight{background:var(--scrape-example-code-line-highlight);}.scraped-example .example-wrap .rust span.highlight.focus{background:var(--scrape-example-code-line-highlight-focus);}.more-examples-toggle{max-width:calc(100% + 25px);margin-top:10px;margin-left:-25px;}.more-examples-toggle .hide-more{margin-left:25px;cursor:pointer;}.more-scraped-examples{margin-left:25px;position:relative;}.toggle-line{position:absolute;top:5px;bottom:0;right:calc(100% + 10px);padding:0 4px;cursor:pointer;}.toggle-line-inner{min-width:2px;height:100%;background:var(--scrape-example-toggle-line-background);}.toggle-line:hover .toggle-line-inner{background:var(--scrape-example-toggle-line-hover-background);}.more-scraped-examples .scraped-example,.example-links{margin-top:20px;}.more-scraped-examples .scraped-example:first-child{margin-top:5px;}.example-links ul{margin-bottom:0;}:root[data-theme="light"]{--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--test-arrow-color:#f5f5f5;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#f5f5f5;--test-arrow-hover-background-color:rgb(78,139,202);--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);}:root[data-theme="dark"]{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--test-arrow-color:#dedede;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#dedede;--test-arrow-hover-background-color:#4e8bca;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);}:root[data-theme="ayu"]{--main-background-color:#0f1419;--main-color:#c5c5c5;--settings-input-color:#ffb454;--settings-input-border-color:#999;--settings-button-color:#fff;--settings-button-border-focus:#e0e0e0;--sidebar-background-color:#14191f;--sidebar-background-color-hover:rgba(70,70,70,0.33);--code-block-background-color:#191f26;--scrollbar-track-background-color:transparent;--scrollbar-thumb-background-color:#5c6773;--scrollbar-color:#5c6773 #24292f;--headings-border-bottom-color:#5c6773;--border-color:#5c6773;--button-background-color:#141920;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#5c6773;--copy-path-button-color:#fff;--copy-path-img-filter:invert(70%);--copy-path-img-hover-filter:invert(100%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ffa0a5;--trait-link-color:#39afd7;--assoc-item-link-color:#39afd7;--function-link-color:#fdd687;--macro-link-color:#a37acc;--keyword-link-color:#39afd7;--mod-link-color:#39afd7;--link-color:#39afd7;--sidebar-link-color:#53b1db;--sidebar-current-link-background-color:transparent;--search-result-link-focus-background-color:#3c3c3c;--search-result-border-color:#aaa3;--search-color:#fff;--search-error-code-background-color:#4f4c4c;--search-results-alias-color:#c5c5c5;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:none;--search-tab-button-not-selected-background:transparent !important;--search-tab-button-selected-border-top-color:none;--search-tab-button-selected-background:#141920 !important;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ff7733;--code-highlight-kw-2-color:#ff7733;--code-highlight-lifetime-color:#ff7733;--code-highlight-prelude-color:#69f2df;--code-highlight-prelude-val-color:#ff7733;--code-highlight-number-color:#b8cc52;--code-highlight-string-color:#b8cc52;--code-highlight-literal-color:#ff7733;--code-highlight-attribute-color:#e6e1cf;--code-highlight-self-color:#36a3d9;--code-highlight-macro-color:#a37acc;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#788797;--code-highlight-doc-comment-color:#a1ac88;--src-line-numbers-span-color:#5c6773;--src-line-number-highlighted-background-color:rgba(255,236,164,0.06);--test-arrow-color:#788797;--test-arrow-background-color:rgba(57,175,215,0.09);--test-arrow-hover-color:#c5c5c5;--test-arrow-hover-background-color:rgba(57,175,215,0.368);--target-background-color:rgba(255,236,164,0.06);--target-border-color:rgba(255,180,76,0.85);--kbd-color:#c5c5c5;--kbd-background:#314559;--kbd-box-shadow-color:#5c6773;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(41%) sepia(12%) saturate(487%) hue-rotate(171deg) brightness(94%) contrast(94%);--crate-search-div-hover-filter:invert(98%) sepia(12%) saturate(81%) hue-rotate(343deg) brightness(113%) contrast(76%);--crate-search-hover-border:#e0e0e0;--src-sidebar-background-selected:#14191f;--src-sidebar-background-hover:#14191f;--table-alt-row-background-color:#191f26;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(15,20,25,1);--scrape-example-code-wrapper-background-end:rgba(15,20,25,0);}:root[data-theme="ayu"] h1,:root[data-theme="ayu"] h2,:root[data-theme="ayu"] h3,:root[data-theme="ayu"] h4,:where(:root[data-theme="ayu"]) h1 a,:root[data-theme="ayu"] .sidebar h2 a,:root[data-theme="ayu"] .sidebar h3 a,:root[data-theme="ayu"] #source-sidebar>.title{color:#fff;}:root[data-theme="ayu"] .docblock code{color:#ffb454;}:root[data-theme="ayu"] .docblock a>code{color:#39AFD7 !important;}:root[data-theme="ayu"] .code-header,:root[data-theme="ayu"] .docblock pre>code,:root[data-theme="ayu"] pre,:root[data-theme="ayu"] pre>code,:root[data-theme="ayu"] .item-info code,:root[data-theme="ayu"] .rustdoc.source .example-wrap{color:#e6e1cf;}:root[data-theme="ayu"] .sidebar .current,:root[data-theme="ayu"] .sidebar a:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:hover,:root[data-theme="ayu"] details.dir-entry summary:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:focus,:root[data-theme="ayu"] details.dir-entry summary:focus,:root[data-theme="ayu"] #src-sidebar div.files>a.selected{color:#ffb44c;}:root[data-theme="ayu"] .sidebar-elems .location{color:#ff7733;}:root[data-theme="ayu"] .src-line-numbers .line-highlighted{color:#708090;padding-right:7px;border-right:1px solid #ffb44c;}:root[data-theme="ayu"] .search-results a:hover,:root[data-theme="ayu"] .search-results a:focus{color:#fff !important;background-color:#3c3c3c;}:root[data-theme="ayu"] .search-results a{color:#0096cf;}:root[data-theme="ayu"] .search-results a div.desc{color:#c5c5c5;}:root[data-theme="ayu"] .result-name .primitive>i,:root[data-theme="ayu"] .result-name .keyword>i{color:#788797;}:root[data-theme="ayu"] #search-tabs>button.selected{border-bottom:1px solid #ffb44c !important;border-top:none;}:root[data-theme="ayu"] #search-tabs>button:not(.selected){border:none;background-color:transparent !important;}:root[data-theme="ayu"] #search-tabs>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}:root[data-theme="ayu"] #settings-menu>a img{filter:invert(100);} \ No newline at end of file diff --git a/docs/static.files/scrape-examples-ef1e698c1d417c0c.js b/docs/static.files/scrape-examples-ef1e698c1d417c0c.js deleted file mode 100644 index ba830e3..0000000 --- a/docs/static.files/scrape-examples-ef1e698c1d417c0c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(function(){const DEFAULT_MAX_LINES=5;const HIDDEN_MAX_LINES=10;function scrollToLoc(elt,loc,isHidden){const lines=elt.querySelector(".src-line-numbers");let scrollOffset;const maxLines=isHidden?HIDDEN_MAX_LINES:DEFAULT_MAX_LINES;if(loc[1]-loc[0]>maxLines){const line=Math.max(0,loc[0]-1);scrollOffset=lines.children[line].offsetTop}else{const wrapper=elt.querySelector(".code-wrapper");const halfHeight=wrapper.offsetHeight/2;const offsetTop=lines.children[loc[0]].offsetTop;const lastLine=lines.children[loc[1]];const offsetBot=lastLine.offsetTop+lastLine.offsetHeight;const offsetMid=(offsetTop+offsetBot)/2;scrollOffset=offsetMid-halfHeight}lines.scrollTo(0,scrollOffset);elt.querySelector(".rust").scrollTo(0,scrollOffset)}function updateScrapedExample(example,isHidden){const locs=JSON.parse(example.attributes.getNamedItem("data-locs").textContent);let locIndex=0;const highlights=Array.prototype.slice.call(example.querySelectorAll(".highlight"));const link=example.querySelector(".scraped-example-title a");if(locs.length>1){const onChangeLoc=changeIndex=>{removeClass(highlights[locIndex],"focus");changeIndex();scrollToLoc(example,locs[locIndex][0],isHidden);addClass(highlights[locIndex],"focus");const url=locs[locIndex][1];const title=locs[locIndex][2];link.href=url;link.innerHTML=title};example.querySelector(".prev").addEventListener("click",()=>{onChangeLoc(()=>{locIndex=(locIndex-1+locs.length)%locs.length})});example.querySelector(".next").addEventListener("click",()=>{onChangeLoc(()=>{locIndex=(locIndex+1)%locs.length})})}const expandButton=example.querySelector(".expand");if(expandButton){expandButton.addEventListener("click",()=>{if(hasClass(example,"expanded")){removeClass(example,"expanded");scrollToLoc(example,locs[0][0],isHidden)}else{addClass(example,"expanded")}})}scrollToLoc(example,locs[0][0],isHidden)}const firstExamples=document.querySelectorAll(".scraped-example-list > .scraped-example");onEachLazy(firstExamples,el=>updateScrapedExample(el,false));onEachLazy(document.querySelectorAll(".more-examples-toggle"),toggle=>{onEachLazy(toggle.querySelectorAll(".toggle-line, .hide-more"),button=>{button.addEventListener("click",()=>{toggle.open=false})});const moreExamples=toggle.querySelectorAll(".scraped-example");toggle.querySelector("summary").addEventListener("click",()=>{setTimeout(()=>{onEachLazy(moreExamples,el=>updateScrapedExample(el,true))})},{once:true})})})() \ No newline at end of file diff --git a/docs/static.files/search-8be46b629f5f14a8.js b/docs/static.files/search-8be46b629f5f14a8.js deleted file mode 100644 index 4ecf5c5..0000000 --- a/docs/static.files/search-8be46b629f5f14a8.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict";if(!Array.prototype.toSpliced){Array.prototype.toSpliced=function(){const me=this.slice();Array.prototype.splice.apply(me,arguments);return me}}(function(){const itemTypes=["mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","primitive","associatedtype","constant","associatedconstant","union","foreigntype","keyword","existential","attr","derive","traitalias","generic",];const longItemTypes=["module","extern crate","re-export","struct","enum","function","type alias","static","trait","","trait method","method","struct field","enum variant","macro","primitive type","assoc type","constant","assoc const","union","foreign type","keyword","existential type","attribute macro","derive macro","trait alias",];const TY_PRIMITIVE=itemTypes.indexOf("primitive");const TY_KEYWORD=itemTypes.indexOf("keyword");const TY_GENERIC=itemTypes.indexOf("generic");const ROOT_PATH=typeof window!=="undefined"?window.rootPath:"../";function hasOwnPropertyRustdoc(obj,property){return Object.prototype.hasOwnProperty.call(obj,property)}function printTab(nb){let iter=0;let foundCurrentTab=false;let foundCurrentResultSet=false;onEachLazy(document.getElementById("search-tabs").childNodes,elem=>{if(nb===iter){addClass(elem,"selected");foundCurrentTab=true}else{removeClass(elem,"selected")}iter+=1});const isTypeSearch=(nb>0||iter===1);iter=0;onEachLazy(document.getElementById("results").childNodes,elem=>{if(nb===iter){addClass(elem,"active");foundCurrentResultSet=true}else{removeClass(elem,"active")}iter+=1});if(foundCurrentTab&&foundCurrentResultSet){searchState.currentTab=nb;const correctionsElem=document.getElementsByClassName("search-corrections");if(isTypeSearch){removeClass(correctionsElem[0],"hidden")}else{addClass(correctionsElem[0],"hidden")}}else if(nb!==0){printTab(0)}}const editDistanceState={current:[],prev:[],prevPrev:[],calculate:function calculate(a,b,limit){if(a.lengthlimit){return limit+1}while(b.length>0&&b[0]===a[0]){a=a.substring(1);b=b.substring(1)}while(b.length>0&&b[b.length-1]===a[a.length-1]){a=a.substring(0,a.length-1);b=b.substring(0,b.length-1)}if(b.length===0){return minDist}const aLength=a.length;const bLength=b.length;for(let i=0;i<=bLength;++i){this.current[i]=0;this.prev[i]=i;this.prevPrev[i]=Number.MAX_VALUE}for(let i=1;i<=aLength;++i){this.current[0]=i;const aIdx=i-1;for(let j=1;j<=bLength;++j){const bIdx=j-1;const substitutionCost=a[aIdx]===b[bIdx]?0:1;this.current[j]=Math.min(this.prev[j]+1,this.current[j-1]+1,this.prev[j-1]+substitutionCost);if((i>1)&&(j>1)&&(a[aIdx]===b[bIdx-1])&&(a[aIdx-1]===b[bIdx])){this.current[j]=Math.min(this.current[j],this.prevPrev[j-2]+1)}}const prevPrevTmp=this.prevPrev;this.prevPrev=this.prev;this.prev=this.current;this.current=prevPrevTmp}const distance=this.prev[bLength];return distance<=limit?distance:(limit+1)},};function editDistance(a,b,limit){return editDistanceState.calculate(a,b,limit)}function initSearch(rawSearchIndex){const MAX_RESULTS=200;const NO_TYPE_FILTER=-1;let searchIndex;let currentResults;let typeNameIdMap;const ALIASES=new Map();let typeNameIdOfArray;let typeNameIdOfSlice;let typeNameIdOfArrayOrSlice;function buildTypeMapIndex(name){if(name===""||name===null){return null}if(typeNameIdMap.has(name)){return typeNameIdMap.get(name)}else{const id=typeNameIdMap.size;typeNameIdMap.set(name,id);return id}}function isWhitespace(c){return" \t\n\r".indexOf(c)!==-1}function isSpecialStartCharacter(c){return"<\"".indexOf(c)!==-1}function isEndCharacter(c){return",>-]".indexOf(c)!==-1}function isStopCharacter(c){return isEndCharacter(c)}function isErrorCharacter(c){return"()".indexOf(c)!==-1}function itemTypeFromName(typename){const index=itemTypes.findIndex(i=>i===typename);if(index<0){throw["Unknown type filter ",typename]}return index}function getStringElem(query,parserState,isInGenerics){if(isInGenerics){throw["Unexpected ","\""," in generics"]}else if(query.literalSearch){throw["Cannot have more than one literal search element"]}else if(parserState.totalElems-parserState.genericsElems>0){throw["Cannot use literal search when there is more than one element"]}parserState.pos+=1;const start=parserState.pos;const end=getIdentEndPosition(parserState);if(parserState.pos>=parserState.length){throw["Unclosed ","\""]}else if(parserState.userQuery[end]!=="\""){throw["Unexpected ",parserState.userQuery[end]," in a string element"]}else if(start===end){throw["Cannot have empty string element"]}parserState.pos+=1;query.literalSearch=true}function isPathStart(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="::"}function isReturnArrow(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="->"}function isIdentCharacter(c){return(c==="_"||(c>="0"&&c<="9")||(c>="a"&&c<="z")||(c>="A"&&c<="Z"))}function isSeparatorCharacter(c){return c===","}function isPathSeparator(c){return c===":"||isWhitespace(c)}function prevIs(parserState,lookingFor){let pos=parserState.pos;while(pos>0){const c=parserState.userQuery[pos-1];if(c===lookingFor){return true}else if(!isWhitespace(c)){break}pos-=1}return false}function isLastElemGeneric(elems,parserState){return(elems.length>0&&elems[elems.length-1].generics.length>0)||prevIs(parserState,">")}function skipWhitespace(parserState){while(parserState.pos0){throw["Cannot have more than one element if you use quotes"]}const typeFilter=parserState.typeFilter;parserState.typeFilter=null;if(name==="!"){if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive never type ","!"," and ",typeFilter," both specified",]}if(generics.length!==0){throw["Never type ","!"," does not accept generic parameters",]}return{name:"never",id:null,fullPath:["never"],pathWithoutLast:[],pathLast:"never",generics:[],typeFilter:"primitive",}}if(path.startsWith("::")){throw["Paths cannot start with ","::"]}else if(path.endsWith("::")){throw["Paths cannot end with ","::"]}else if(path.includes("::::")){throw["Unexpected ","::::"]}else if(path.includes(" ::")){throw["Unexpected "," ::"]}else if(path.includes(":: ")){throw["Unexpected ",":: "]}const pathSegments=path.split(/::|\s+/);if(pathSegments.length===0||(pathSegments.length===1&&pathSegments[0]==="")){if(generics.length>0||prevIs(parserState,">")){throw["Found generics without a path"]}else{throw["Unexpected ",parserState.userQuery[parserState.pos]]}}for(const[i,pathSegment]of pathSegments.entries()){if(pathSegment==="!"){if(i!==0){throw["Never type ","!"," is not associated item"]}pathSegments[i]="never"}}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}return{name:name.trim(),id:null,fullPath:pathSegments,pathWithoutLast:pathSegments.slice(0,pathSegments.length-1),pathLast:pathSegments[pathSegments.length-1],generics:generics,typeFilter,}}function getIdentEndPosition(parserState){const start=parserState.pos;let end=parserState.pos;let foundExclamation=-1;while(parserState.pos=end){throw["Found generics without a path"]}parserState.pos+=1;getItemsBefore(query,parserState,generics,">")}if(isStringElem){skipWhitespace(parserState)}if(start>=end&&generics.length===0){return}elems.push(createQueryElement(query,parserState,parserState.userQuery.slice(start,end),generics,isInGenerics))}}function getItemsBefore(query,parserState,elems,endChar){let foundStopChar=true;let start=parserState.pos;const oldTypeFilter=parserState.typeFilter;parserState.typeFilter=null;let extra="";if(endChar===">"){extra="<"}else if(endChar==="]"){extra="["}else if(endChar===""){extra="->"}else{extra=endChar}while(parserState.pos"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(endChar!==""){throw["Expected ",","," or ",endChar,...extra,", found ",c,]}throw["Expected ",",",...extra,", found ",c,]}const posBefore=parserState.pos;start=parserState.pos;getNextElem(query,parserState,elems,endChar!=="");if(endChar!==""&&parserState.pos>=parserState.length){throw["Unclosed ",extra]}if(posBefore===parserState.pos){parserState.pos+=1}foundStopChar=false}if(parserState.pos>=parserState.length&&endChar!==""){throw["Unclosed ",extra]}parserState.pos+=1;parserState.typeFilter=oldTypeFilter}function checkExtraTypeFilterCharacters(start,parserState){const query=parserState.userQuery.slice(start,parserState.pos).trim();for(const c in query){if(!isIdentCharacter(query[c])){throw["Unexpected ",query[c]," in type filter (before ",":",")",]}}}function parseInput(query,parserState){let foundStopChar=true;let start=parserState.pos;while(parserState.pos"){if(isReturnArrow(parserState)){break}throw["Unexpected ",c," (did you mean ","->","?)"]}throw["Unexpected ",c]}else if(c===":"&&!isPathStart(parserState)){if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}else if(query.elems.length===0){throw["Expected type filter before ",":"]}else if(query.literalSearch){throw["Cannot use quotes on type filter"]}const typeFilterElem=query.elems.pop();checkExtraTypeFilterCharacters(start,parserState);parserState.typeFilter=typeFilterElem.name;parserState.pos+=1;parserState.totalElems-=1;query.literalSearch=false;foundStopChar=true;continue}else if(isWhitespace(c)){skipWhitespace(parserState);continue}if(!foundStopChar){let extra="";if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(parserState.typeFilter!==null){throw["Expected ",","," or ","->",...extra,", found ",c,]}throw["Expected ",",",", ",":"," or ","->",...extra,", found ",c,]}const before=query.elems.length;start=parserState.pos;getNextElem(query,parserState,query.elems,false);if(query.elems.length===before){parserState.pos+=1}foundStopChar=false}if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}while(parserState.pos"]}break}else{parserState.pos+=1}}}function newParsedQuery(userQuery){return{original:userQuery,userQuery:userQuery.toLowerCase(),elems:[],returned:[],foundElems:0,totalElems:0,literalSearch:false,error:null,correction:null,proposeCorrectionFrom:null,proposeCorrectionTo:null,}}function buildUrl(search,filterCrates){let extra="?search="+encodeURIComponent(search);if(filterCrates!==null){extra+="&filter-crate="+encodeURIComponent(filterCrates)}return getNakedUrl()+extra+window.location.hash}function getFilterCrates(){const elem=document.getElementById("crate-search");if(elem&&elem.value!=="all crates"&&hasOwnPropertyRustdoc(rawSearchIndex,elem.value)){return elem.value}return null}function parseQuery(userQuery){function convertTypeFilterOnElem(elem){if(elem.typeFilter!==null){let typeFilter=elem.typeFilter;if(typeFilter==="const"){typeFilter="constant"}elem.typeFilter=itemTypeFromName(typeFilter)}else{elem.typeFilter=NO_TYPE_FILTER}for(const elem2 of elem.generics){convertTypeFilterOnElem(elem2)}}userQuery=userQuery.trim();const parserState={length:userQuery.length,pos:0,totalElems:0,genericsElems:0,typeFilter:null,userQuery:userQuery.toLowerCase(),};let query=newParsedQuery(userQuery);try{parseInput(query,parserState);for(const elem of query.elems){convertTypeFilterOnElem(elem)}for(const elem of query.returned){convertTypeFilterOnElem(elem)}}catch(err){query=newParsedQuery(userQuery);query.error=err;return query}if(!query.literalSearch){query.literalSearch=parserState.totalElems>1}query.foundElems=query.elems.length+query.returned.length;query.totalElems=parserState.totalElems;return query}function createQueryResults(results_in_args,results_returned,results_others,parsedQuery){return{"in_args":results_in_args,"returned":results_returned,"others":results_others,"query":parsedQuery,}}function execQuery(parsedQuery,searchWords,filterCrates,currentCrate){const results_others=new Map(),results_in_args=new Map(),results_returned=new Map();function transformResults(results){const duplicates=new Set();const out=[];for(const result of results){if(result.id!==-1){const obj=searchIndex[result.id];obj.dist=result.dist;const res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+="|"+obj.ty;if(duplicates.has(obj.fullPath)){continue}duplicates.add(obj.fullPath);obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}function sortResults(results,isType,preferredCrate){if(results.size===0){return[]}const userQuery=parsedQuery.userQuery;const result_list=[];for(const result of results.values()){result.word=searchWords[result.id];result.item=searchIndex[result.id]||{};result_list.push(result)}result_list.sort((aaa,bbb)=>{let a,b;a=(aaa.word!==userQuery);b=(bbb.word!==userQuery);if(a!==b){return a-b}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.path_dist;b=bbb.path_dist;if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}a=(aaa.dist);b=(bbb.dist);if(a!==b){return a-b}a=aaa.item.deprecated;b=bbb.item.deprecated;if(a!==b){return a-b}a=(aaa.item.crate!==preferredCrate);b=(bbb.item.crate!==preferredCrate);if(a!==b){return a-b}a=aaa.word.length;b=bbb.word.length;if(a!==b){return a-b}a=aaa.word;b=bbb.word;if(a!==b){return(a>b?+1:-1)}if((aaa.item.ty===TY_PRIMITIVE&&bbb.item.ty!==TY_KEYWORD)||(aaa.item.ty===TY_KEYWORD&&bbb.item.ty!==TY_PRIMITIVE)){return-1}if((bbb.item.ty===TY_PRIMITIVE&&aaa.item.ty!==TY_PRIMITIVE)||(bbb.item.ty===TY_KEYWORD&&aaa.item.ty!==TY_KEYWORD)){return 1}a=(aaa.item.desc==="");b=(bbb.item.desc==="");if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});let nameSplit=null;if(parsedQuery.elems.length===1){const hasPath=typeof parsedQuery.elems[0].path==="undefined";nameSplit=hasPath?null:parsedQuery.elems[0].path}for(const result of result_list){if(result.dontValidate){continue}const name=result.item.name.toLowerCase(),path=result.item.path.toLowerCase(),parent=result.item.parent;if(!isType&&!validateResult(name,path,nameSplit,parent)){result.id=-1}}return transformResults(result_list)}function checkGenerics(fnType,queryElem,whereClause,mgensInout){return unifyFunctionTypes(fnType.generics,queryElem.generics,whereClause,mgensInout,mgens=>{if(mgensInout){for(const[fid,qid]of mgens.entries()){mgensInout.set(fid,qid)}}return true})}function unifyFunctionTypes(fnTypesIn,queryElems,whereClause,mgensIn,solutionCb){let mgens=new Map(mgensIn);if(queryElems.length===0){return!solutionCb||solutionCb(mgens)}if(!fnTypesIn||fnTypesIn.length===0){return false}const ql=queryElems.length;let fl=fnTypesIn.length;let fnTypes=fnTypesIn.slice();const backtracking=[];let i=0;let j=0;const backtrack=()=>{while(backtracking.length!==0){const{fnTypesScratch,mgensScratch,queryElemsOffset,fnTypesOffset,unbox,}=backtracking.pop();mgens=new Map(mgensScratch);const fnType=fnTypesScratch[fnTypesOffset];const queryElem=queryElems[queryElemsOffset];if(unbox){if(fnType.id<0){if(mgens.has(fnType.id)&&mgens.get(fnType.id)!==0){continue}mgens.set(fnType.id,0)}const generics=fnType.id<0?whereClause[(-fnType.id)-1]:fnType.generics;fnTypes=fnTypesScratch.toSpliced(fnTypesOffset,1,...generics);fl=fnTypes.length;i=queryElemsOffset-1}else{if(fnType.id<0){if(mgens.has(fnType.id)&&mgens.get(fnType.id)!==queryElem.id){continue}mgens.set(fnType.id,queryElem.id)}fnTypes=fnTypesScratch.slice();fl=fnTypes.length;const tmp=fnTypes[queryElemsOffset];fnTypes[queryElemsOffset]=fnTypes[fnTypesOffset];fnTypes[fnTypesOffset]=tmp;i=queryElemsOffset}return true}return false};for(i=0;i!==ql;++i){const queryElem=queryElems[i];const matchCandidates=[];let fnTypesScratch=null;let mgensScratch=null;for(j=i;j!==fl;++j){const fnType=fnTypes[j];if(unifyFunctionTypeIsMatchCandidate(fnType,queryElem,whereClause,mgens)){if(!fnTypesScratch){fnTypesScratch=fnTypes.slice()}unifyFunctionTypes(fnType.generics,queryElem.generics,whereClause,mgens,mgensScratch=>{matchCandidates.push({fnTypesScratch,mgensScratch,queryElemsOffset:i,fnTypesOffset:j,unbox:false,});return false})}if(unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens)){if(!fnTypesScratch){fnTypesScratch=fnTypes.slice()}if(!mgensScratch){mgensScratch=new Map(mgens)}backtracking.push({fnTypesScratch,mgensScratch,queryElemsOffset:i,fnTypesOffset:j,unbox:true,})}}if(matchCandidates.length===0){if(backtrack()){continue}else{return false}}const{fnTypesOffset:candidate,mgensScratch:mgensNew}=matchCandidates.pop();if(fnTypes[candidate].id<0&&queryElems[i].id<0){mgens.set(fnTypes[candidate].id,queryElems[i].id)}for(const[fid,qid]of mgensNew){mgens.set(fid,qid)}const tmp=fnTypes[candidate];fnTypes[candidate]=fnTypes[i];fnTypes[i]=tmp;for(const otherCandidate of matchCandidates){backtracking.push(otherCandidate)}while(i===(ql-1)&&solutionCb&&!solutionCb(mgens)){if(!backtrack()){return false}}}return true}function unifyFunctionTypeIsMatchCandidate(fnType,queryElem,whereClause,mgens){if(!typePassesFilter(queryElem.typeFilter,fnType.ty)){return false}if(fnType.id<0&&queryElem.id<0){if(mgens.has(fnType.id)&&mgens.get(fnType.id)!==queryElem.id){return false}for(const[fid,qid]of mgens.entries()){if(fnType.id!==fid&&queryElem.id===qid){return false}if(fnType.id===fid&&queryElem.id!==qid){return false}}}else if(fnType.id!==null){if(queryElem.id===typeNameIdOfArrayOrSlice&&(fnType.id===typeNameIdOfSlice||fnType.id===typeNameIdOfArray)){}else if(fnType.id!==queryElem.id){return false}if(fnType.generics.length===0&&queryElem.generics.length!==0){return false}const queryElemPathLength=queryElem.pathWithoutLast.length;if(queryElemPathLength>0){const fnTypePath=fnType.path!==undefined&&fnType.path!==null?fnType.path.split("::"):[];if(queryElemPathLength>fnTypePath.length){return false}let i=0;for(const path of fnTypePath){if(path===queryElem.pathWithoutLast[i]){i+=1;if(i>=queryElemPathLength){break}}}if(i=0){if(!whereClause){return false}if(mgens.has(fnType.id)&&mgens.get(fnType.id)!==0){return false}return checkIfInList(whereClause[(-fnType.id)-1],queryElem,whereClause)}else if(fnType.generics&&fnType.generics.length>0){return checkIfInList(fnType.generics,queryElem,whereClause)}return false}function checkIfInList(list,elem,whereClause){for(const entry of list){if(checkType(entry,elem,whereClause)){return true}}return false}function checkType(row,elem,whereClause){if(row.id===null){return row.generics.length>0?checkIfInList(row.generics,elem,whereClause):false}if(row.id<0&&elem.id>=0){const gid=(-row.id)-1;return checkIfInList(whereClause[gid],elem,whereClause)}if(row.id<0&&elem.id<0){return true}const matchesExact=row.id===elem.id;const matchesArrayOrSlice=elem.id===typeNameIdOfArrayOrSlice&&(row.id===typeNameIdOfSlice||row.id===typeNameIdOfArray);if((matchesExact||matchesArrayOrSlice)&&typePassesFilter(elem.typeFilter,row.ty)){if(elem.generics.length>0){return checkGenerics(row,elem,whereClause,new Map())}return true}return checkIfInList(row.generics,elem,whereClause)}function checkPath(contains,ty,maxEditDistance){if(contains.length===0){return 0}let ret_dist=maxEditDistance+1;const path=ty.path.split("::");if(ty.parent&&ty.parent.name){path.push(ty.parent.name.toLowerCase())}const length=path.length;const clength=contains.length;if(clength>length){return maxEditDistance+1}for(let i=0;ilength){break}let dist_total=0;let aborted=false;for(let x=0;xmaxEditDistance){aborted=true;break}dist_total+=dist}if(!aborted){ret_dist=Math.min(ret_dist,Math.round(dist_total/clength))}}return ret_dist}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER||filter===type)return true;const name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,desc:item.desc,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,deprecated:item.deprecated,}}function handleAliases(ret,query,filterCrates,currentCrate){const lowerQuery=query.toLowerCase();const aliases=[];const crateAliases=[];if(filterCrates!==null){if(ALIASES.has(filterCrates)&&ALIASES.get(filterCrates).has(lowerQuery)){const query_aliases=ALIASES.get(filterCrates).get(lowerQuery);for(const alias of query_aliases){aliases.push(createAliasFromItem(searchIndex[alias]))}}}else{for(const[crate,crateAliasesIndex]of ALIASES){if(crateAliasesIndex.has(lowerQuery)){const pushTo=crate===currentCrate?crateAliases:aliases;const query_aliases=crateAliasesIndex.get(lowerQuery);for(const alias of query_aliases){pushTo.push(createAliasFromItem(searchIndex[alias]))}}}}const sortFunc=(aaa,bbb)=>{if(aaa.path{alias.alias=query;const res=buildHrefAndPath(alias);alias.displayPath=pathSplitter(res[0]);alias.fullPath=alias.displayPath+alias.name;alias.href=res[1];ret.others.unshift(alias);if(ret.others.length>MAX_RESULTS){ret.others.pop()}};aliases.forEach(pushFunc);crateAliases.forEach(pushFunc)}function addIntoResults(results,fullId,id,index,dist,path_dist,maxEditDistance){const inBounds=dist<=maxEditDistance||index!==-1;if(dist===0||(!parsedQuery.literalSearch&&inBounds)){if(results.has(fullId)){const result=results.get(fullId);if(result.dontValidate||result.dist<=dist){return}}results.set(fullId,{id:id,index:index,dontValidate:parsedQuery.literalSearch,dist:dist,path_dist:path_dist,})}}function handleSingleArg(row,pos,elem,results_others,results_in_args,results_returned,maxEditDistance){if(!row||(filterCrates!==null&&row.crate!==filterCrates)){return}let index=-1,path_dist=0;const fullId=row.id;const searchWord=searchWords[pos];const in_args=row.type&&row.type.inputs&&checkIfInList(row.type.inputs,elem,row.type.where_clause);if(in_args){addIntoResults(results_in_args,fullId,pos,-1,0,0,maxEditDistance)}const returned=row.type&&row.type.output&&checkIfInList(row.type.output,elem,row.type.where_clause);if(returned){addIntoResults(results_returned,fullId,pos,-1,0,0,maxEditDistance)}if(!typePassesFilter(elem.typeFilter,row.ty)){return}const row_index=row.normalizedName.indexOf(elem.pathLast);const word_index=searchWord.indexOf(elem.pathLast);if(row_index===-1){index=word_index}else if(word_index===-1){index=row_index}else if(word_index1){path_dist=checkPath(elem.pathWithoutLast,row,maxEditDistance);if(path_dist>maxEditDistance){return}}if(parsedQuery.literalSearch){if(searchWord===elem.name){addIntoResults(results_others,fullId,pos,index,0,path_dist)}return}const dist=editDistance(searchWord,elem.pathLast,maxEditDistance);if(index===-1&&dist+path_dist>maxEditDistance){return}addIntoResults(results_others,fullId,pos,index,dist,path_dist,maxEditDistance)}function handleArgs(row,pos,results){if(!row||(filterCrates!==null&&row.crate!==filterCrates)||!row.type){return}if(!unifyFunctionTypes(row.type.inputs,parsedQuery.elems,row.type.where_clause,null,mgens=>{return unifyFunctionTypes(row.type.output,parsedQuery.returned,row.type.where_clause,mgens)})){return}addIntoResults(results,row.id,pos,0,0,0,Number.MAX_VALUE)}function innerRunQuery(){let elem,i,nSearchWords,in_returned,row;let queryLen=0;for(const elem of parsedQuery.elems){queryLen+=elem.name.length}for(const elem of parsedQuery.returned){queryLen+=elem.name.length}const maxEditDistance=Math.floor(queryLen/3);const genericSymbols=new Map();function convertNameToId(elem){if(typeNameIdMap.has(elem.pathLast)){elem.id=typeNameIdMap.get(elem.pathLast)}else if(!parsedQuery.literalSearch){let match=null;let matchDist=maxEditDistance+1;let matchName="";for(const[name,id]of typeNameIdMap){const dist=editDistance(name,elem.pathLast,maxEditDistance);if(dist<=matchDist&&dist<=maxEditDistance){if(dist===matchDist&&matchName>name){continue}match=id;matchDist=dist;matchName=name}}if(match!==null){parsedQuery.correction=matchName}elem.id=match}if((elem.id===null&&parsedQuery.totalElems>1&&elem.typeFilter===-1&&elem.generics.length===0)||elem.typeFilter===TY_GENERIC){if(genericSymbols.has(elem.name)){elem.id=genericSymbols.get(elem.name)}else{elem.id=-(genericSymbols.size+1);genericSymbols.set(elem.name,elem.id)}if(elem.typeFilter===-1&&elem.name.length>=3){const maxPartDistance=Math.floor(elem.name.length/3);let matchDist=maxPartDistance+1;let matchName="";for(const name of typeNameIdMap.keys()){const dist=editDistance(name,elem.name,maxPartDistance);if(dist<=matchDist&&dist<=maxPartDistance){if(dist===matchDist&&matchName>name){continue}matchDist=dist;matchName=name}}if(matchName!==""){parsedQuery.proposeCorrectionFrom=elem.name;parsedQuery.proposeCorrectionTo=matchName}}elem.typeFilter=TY_GENERIC}if(elem.generics.length>0&&elem.typeFilter===TY_GENERIC){parsedQuery.error=["Generic type parameter ",elem.name," does not accept generic parameters",]}for(const elem2 of elem.generics){convertNameToId(elem2)}}for(const elem of parsedQuery.elems){convertNameToId(elem)}for(const elem of parsedQuery.returned){convertNameToId(elem)}if(parsedQuery.foundElems===1){if(parsedQuery.elems.length===1){elem=parsedQuery.elems[0];for(i=0,nSearchWords=searchWords.length;i0){for(i=0,nSearchWords=searchWords.length;i-1||path.indexOf(key)>-1||(parent!==undefined&&parent.name!==undefined&&parent.name.toLowerCase().indexOf(key)>-1)||editDistance(name,key,maxEditDistance)<=maxEditDistance)){return false}}return true}function nextTab(direction){const next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){const target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#search-tabs button").item(searchState.currentTab);searchState.focusedByTab[searchState.currentTab]=null;if(target){target.focus()}}function buildHrefAndPath(item){let displayPath;let href;const type=itemTypes[item.ty];const name=item.name;let path=item.path;if(type==="mod"){displayPath=path+"::";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="import"){displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/index.html#reexport."+name}else if(type==="primitive"||type==="keyword"){displayPath="";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=ROOT_PATH+name+"/index.html"}else if(item.parent!==undefined){const myparent=item.parent;let anchor="#"+type+"."+name;const parentType=itemTypes[myparent.ty];let pageType=parentType;let pageName=myparent.name;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){const enumNameIdx=item.path.lastIndexOf("::");const enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="#variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}href=ROOT_PATH+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html"+anchor}else{displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href]}function pathSplitter(path){const tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){let extraClass="";if(display===true){extraClass=" active"}const output=document.createElement("div");let length=0;if(array.length>0){output.className="search-results "+extraClass;array.forEach(item=>{const name=item.name;const type=itemTypes[item.ty];const longType=longItemTypes[item.ty];const typeName=longType.length!==0?`${longType}`:"?";length+=1;const link=document.createElement("a");link.className="result-"+type;link.href=item.href;const resultName=document.createElement("div");resultName.className="result-name";resultName.insertAdjacentHTML("beforeend",`${typeName}`);link.appendChild(resultName);let alias=" ";if(item.is_alias){alias=`
\ -${item.alias} - see \ -
`}resultName.insertAdjacentHTML("beforeend",`
${alias}\ -${item.displayPath}${name}\ -
`);const description=document.createElement("div");description.className="desc";description.insertAdjacentHTML("beforeend",item.desc);link.appendChild(description);output.appendChild(link)})}else if(query.error===null){output.className="search-failed"+extraClass;output.innerHTML="No results :(
"+"Try on DuckDuckGo?

"+"Or try looking in one of these:"}return[output,length]}function makeTabHeader(tabNb,text,nbElems){const fmtNbElems=nbElems<10?`\u{2007}(${nbElems})\u{2007}\u{2007}`:nbElems<100?`\u{2007}(${nbElems})\u{2007}`:`\u{2007}(${nbElems})`;if(searchState.currentTab===tabNb){return""}return""}function showResults(results,go_to_first,filterCrates){const search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true")){window.onunload=()=>{};searchState.removeQueryParameters();const elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}if(results.query===undefined){results.query=parseQuery(searchState.input.value)}currentResults=results.query.userQuery;const ret_others=addTab(results.others,results.query,true);const ret_in_args=addTab(results.in_args,results.query,false);const ret_returned=addTab(results.returned,results.query,false);let currentTab=searchState.currentTab;if((currentTab===0&&ret_others[1]===0)||(currentTab===1&&ret_in_args[1]===0)||(currentTab===2&&ret_returned[1]===0)){if(ret_others[1]!==0){currentTab=0}else if(ret_in_args[1]!==0){currentTab=1}else if(ret_returned[1]!==0){currentTab=2}}let crates="";const crates_list=Object.keys(rawSearchIndex);if(crates_list.length>1){crates=" in 
"}let output=`

Results${crates}

`;if(results.query.error!==null){const error=results.query.error;error.forEach((value,index)=>{value=value.split("<").join("<").split(">").join(">");if(index%2!==0){error[index]=`${value.replaceAll(" ", " ")}`}else{error[index]=value}});output+=`

Query parser error: "${error.join("")}".

`;output+="
"+makeTabHeader(0,"In Names",ret_others[1])+"
";currentTab=0}else if(results.query.foundElems<=1&&results.query.returned.length===0){output+="
"+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
"}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="
"+makeTabHeader(0,signatureTabTitle,ret_others[1])+"
";currentTab=0}if(results.query.correction!==null){const orig=results.query.returned.length>0?results.query.returned[0].name:results.query.elems[0].name;output+="

"+`Type "${orig}" not found. `+"Showing results for closest type name "+`"${results.query.correction}" instead.

`}if(results.query.proposeCorrectionFrom!==null){const orig=results.query.proposeCorrectionFrom;const targ=results.query.proposeCorrectionTo;output+="

"+`Type "${orig}" not found and used as generic parameter. `+`Consider searching for "${targ}" instead.

`}const resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others[0]);resultsElem.appendChild(ret_in_args[0]);resultsElem.appendChild(ret_returned[0]);search.innerHTML=output;const crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.showResults(search);const elems=document.getElementById("search-tabs").childNodes;searchState.focusedByTab=[];let i=0;for(const elem of elems){const j=i;elem.onclick=()=>printTab(j);searchState.focusedByTab.push(null);i+=1}printTab(currentTab)}function updateSearchHistory(url){if(!browserSupportsHistoryApi()){return}const params=searchState.getQueryStringParams();if(!history.state&&!params.search){history.pushState(null,"",url)}else{history.replaceState(null,"",url)}}function search(e,forced){if(e){e.preventDefault()}const query=parseQuery(searchState.input.value.trim());let filterCrates=getFilterCrates();if(!forced&&query.userQuery===currentResults){if(query.userQuery.length>0){putBackSearch()}return}searchState.setLoadingSearch();const params=searchState.getQueryStringParams();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="Results for "+query.original+" - Rust";updateSearchHistory(buildUrl(query.original,filterCrates));showResults(execQuery(query,searchWords,filterCrates,window.currentCrate),params.go_to_first,filterCrates)}function buildItemSearchTypeAll(types,lowercasePaths){return types.map(type=>buildItemSearchType(type,lowercasePaths))}function buildItemSearchType(type,lowercasePaths){const PATH_INDEX_DATA=0;const GENERICS_DATA=1;let pathIndex,generics;if(typeof type==="number"){pathIndex=type;generics=[]}else{pathIndex=type[PATH_INDEX_DATA];generics=buildItemSearchTypeAll(type[GENERICS_DATA],lowercasePaths)}if(pathIndex<0){return{id:pathIndex,ty:TY_GENERIC,path:null,generics,}}if(pathIndex===0){return{id:null,ty:null,path:null,generics,}}const item=lowercasePaths[pathIndex-1];return{id:buildTypeMapIndex(item.name),ty:item.ty,path:item.path,generics,}}function buildFunctionSearchType(functionSearchType,lowercasePaths){const INPUTS_DATA=0;const OUTPUT_DATA=1;if(functionSearchType===0){return null}let inputs,output;if(typeof functionSearchType[INPUTS_DATA]==="number"){inputs=[buildItemSearchType(functionSearchType[INPUTS_DATA],lowercasePaths)]}else{inputs=buildItemSearchTypeAll(functionSearchType[INPUTS_DATA],lowercasePaths)}if(functionSearchType.length>1){if(typeof functionSearchType[OUTPUT_DATA]==="number"){output=[buildItemSearchType(functionSearchType[OUTPUT_DATA],lowercasePaths)]}else{output=buildItemSearchTypeAll(functionSearchType[OUTPUT_DATA],lowercasePaths)}}else{output=[]}const where_clause=[];const l=functionSearchType.length;for(let i=2;i2){path=itemPaths.has(elem[2])?itemPaths.get(elem[2]):lastPath;lastPath=path}lowercasePaths.push({ty:ty,name:name.toLowerCase(),path:path});paths[i]={ty:ty,name:name,path:path}}lastPath="";len=itemTypes.length;for(let i=0;i0?paths[itemParentIdxs[i]-1]:undefined,type:buildFunctionSearchType(itemFunctionSearchTypes[i],lowercasePaths),id:id,normalizedName:word.indexOf("_")===-1?word:word.replace(/_/g,""),deprecated:deprecatedItems.has(i),};id+=1;searchIndex.push(row);lastPath=row.path;crateSize+=1}if(aliases){const currentCrateAliases=new Map();ALIASES.set(crate,currentCrateAliases);for(const alias_name in aliases){if(!hasOwnPropertyRustdoc(aliases,alias_name)){continue}let currentNameAliases;if(currentCrateAliases.has(alias_name)){currentNameAliases=currentCrateAliases.get(alias_name)}else{currentNameAliases=[];currentCrateAliases.set(alias_name,currentNameAliases)}for(const local_alias of aliases[alias_name]){currentNameAliases.push(local_alias+currentIndex)}}}currentIndex+=crateSize}return searchWords}function onSearchSubmit(e){e.preventDefault();searchState.clearInputTimeout();search()}function putBackSearch(){const search_input=searchState.input;if(!searchState.input){return}if(search_input.value!==""&&!searchState.isDisplayed()){searchState.showResults();if(browserSupportsHistoryApi()){history.replaceState(null,"",buildUrl(search_input.value,getFilterCrates()))}document.title=searchState.title}}function registerSearchEvents(){const params=searchState.getQueryStringParams();if(searchState.input.value===""){searchState.input.value=params.search||""}const searchAfter500ms=()=>{searchState.clearInputTimeout();if(searchState.input.value.length===0){searchState.hideResults()}else{searchState.timeout=setTimeout(search,500)}};searchState.input.onkeyup=searchAfter500ms;searchState.input.oninput=searchAfter500ms;document.getElementsByClassName("search-form")[0].onsubmit=onSearchSubmit;searchState.input.onchange=e=>{if(e.target!==document.activeElement){return}searchState.clearInputTimeout();setTimeout(search,0)};searchState.input.onpaste=searchState.input.onchange;searchState.outputElement().addEventListener("keydown",e=>{if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){return}if(e.which===38){const previous=document.activeElement.previousElementSibling;if(previous){previous.focus()}else{searchState.focus()}e.preventDefault()}else if(e.which===40){const next=document.activeElement.nextElementSibling;if(next){next.focus()}const rect=document.activeElement.getBoundingClientRect();if(window.innerHeight-rect.bottom{if(e.which===40){focusSearchResult();e.preventDefault()}});searchState.input.addEventListener("focus",()=>{putBackSearch()});searchState.input.addEventListener("blur",()=>{searchState.input.placeholder=searchState.input.origPlaceholder});if(browserSupportsHistoryApi()){const previousTitle=document.title;window.addEventListener("popstate",e=>{const params=searchState.getQueryStringParams();document.title=previousTitle;currentResults=null;if(params.search&¶ms.search.length>0){searchState.input.value=params.search;search(e)}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=()=>{const qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="all crates"){const query=searchState.input.value.trim();updateSearchHistory(buildUrl(query,null))}currentResults=null;search(undefined,true)}const searchWords=buildIndex(rawSearchIndex);if(typeof window!=="undefined"){registerSearchEvents();if(window.searchState.getQueryStringParams().search){search()}}if(typeof exports!=="undefined"){exports.initSearch=initSearch;exports.execQuery=execQuery;exports.parseQuery=parseQuery}return searchWords}if(typeof window!=="undefined"){window.initSearch=initSearch;if(window.searchIndex!==undefined){initSearch(window.searchIndex)}}else{initSearch({})}})() \ No newline at end of file diff --git a/docs/static.files/settings-74424d7eec62a23e.js b/docs/static.files/settings-74424d7eec62a23e.js deleted file mode 100644 index 3014f75..0000000 --- a/docs/static.files/settings-74424d7eec62a23e.js +++ /dev/null @@ -1,17 +0,0 @@ -"use strict";(function(){const isSettingsPage=window.location.pathname.endsWith("/settings.html");function changeSetting(settingName,value){if(settingName==="theme"){const useSystem=value==="system preference"?"true":"false";updateLocalStorage("use-system-theme",useSystem)}updateLocalStorage(settingName,value);switch(settingName){case"theme":case"preferred-dark-theme":case"preferred-light-theme":updateTheme();updateLightAndDark();break;case"line-numbers":if(value===true){window.rustdoc_add_line_numbers_to_examples()}else{window.rustdoc_remove_line_numbers_from_examples()}break}}function showLightAndDark(){removeClass(document.getElementById("preferred-light-theme"),"hidden");removeClass(document.getElementById("preferred-dark-theme"),"hidden")}function hideLightAndDark(){addClass(document.getElementById("preferred-light-theme"),"hidden");addClass(document.getElementById("preferred-dark-theme"),"hidden")}function updateLightAndDark(){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||(useSystem===null&&getSettingValue("theme")===null)){showLightAndDark()}else{hideLightAndDark()}}function setEvents(settingsElement){updateLightAndDark();onEachLazy(settingsElement.querySelectorAll("input[type=\"checkbox\"]"),toggle=>{const settingId=toggle.id;const settingValue=getSettingValue(settingId);if(settingValue!==null){toggle.checked=settingValue==="true"}toggle.onchange=()=>{changeSetting(toggle.id,toggle.checked)}});onEachLazy(settingsElement.querySelectorAll("input[type=\"radio\"]"),elem=>{const settingId=elem.name;let settingValue=getSettingValue(settingId);if(settingId==="theme"){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||settingValue===null){settingValue=useSystem==="false"?"light":"system preference"}}if(settingValue!==null&&settingValue!=="null"){elem.checked=settingValue===elem.value}elem.addEventListener("change",ev=>{changeSetting(ev.target.name,ev.target.value)})})}function buildSettingsPageSections(settings){let output="";for(const setting of settings){const js_data_name=setting["js_name"];const setting_name=setting["name"];if(setting["options"]!==undefined){output+=`\ -
-
${setting_name}
-
`;onEach(setting["options"],option=>{const checked=option===setting["default"]?" checked":"";const full=`${js_data_name}-${option.replace(/ /g,"-")}`;output+=`\ - `});output+=`\ -
-
`}else{const checked=setting["default"]===true?" checked":"";output+=`\ -
\ - \ -
`}}return output}function buildSettingsPage(){const theme_names=getVar("themes").split(",").filter(t=>t);theme_names.push("light","dark","ayu");const settings=[{"name":"Theme","js_name":"theme","default":"system preference","options":theme_names.concat("system preference"),},{"name":"Preferred light theme","js_name":"preferred-light-theme","default":"light","options":theme_names,},{"name":"Preferred dark theme","js_name":"preferred-dark-theme","default":"dark","options":theme_names,},{"name":"Auto-hide item contents for large items","js_name":"auto-hide-large-items","default":true,},{"name":"Auto-hide item methods' documentation","js_name":"auto-hide-method-docs","default":false,},{"name":"Auto-hide trait implementation documentation","js_name":"auto-hide-trait-implementations","default":false,},{"name":"Directly go to item in search if there is only one result","js_name":"go-to-only-result","default":false,},{"name":"Show line numbers on code examples","js_name":"line-numbers","default":false,},{"name":"Disable keyboard shortcuts","js_name":"disable-shortcuts","default":false,},];const elementKind=isSettingsPage?"section":"div";const innerHTML=`
${buildSettingsPageSections(settings)}
`;const el=document.createElement(elementKind);el.id="settings";if(!isSettingsPage){el.className="popover"}el.innerHTML=innerHTML;if(isSettingsPage){document.getElementById(MAIN_ID).appendChild(el)}else{el.setAttribute("tabindex","-1");getSettingsButton().appendChild(el)}return el}const settingsMenu=buildSettingsPage();function displaySettings(){settingsMenu.style.display=""}function settingsBlurHandler(event){blurHandler(event,getSettingsButton(),window.hidePopoverMenus)}if(isSettingsPage){getSettingsButton().onclick=event=>{event.preventDefault()}}else{const settingsButton=getSettingsButton();const settingsMenu=document.getElementById("settings");settingsButton.onclick=event=>{if(elemIsInParent(event.target,settingsMenu)){return}event.preventDefault();const shouldDisplaySettings=settingsMenu.style.display==="none";window.hideAllModals();if(shouldDisplaySettings){displaySettings()}};settingsButton.onblur=settingsBlurHandler;settingsButton.querySelector("a").onblur=settingsBlurHandler;onEachLazy(settingsMenu.querySelectorAll("input"),el=>{el.onblur=settingsBlurHandler});settingsMenu.onblur=settingsBlurHandler}setTimeout(()=>{setEvents(settingsMenu);if(!isSettingsPage){displaySettings()}removeClass(getSettingsButton(),"rotate")},0)})() \ No newline at end of file diff --git a/docs/static.files/src-script-3280b574d94e47b4.js b/docs/static.files/src-script-3280b574d94e47b4.js deleted file mode 100644 index 9ea8892..0000000 --- a/docs/static.files/src-script-3280b574d94e47b4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(function(){const rootPath=getVar("root-path");const NAME_OFFSET=0;const DIRS_OFFSET=1;const FILES_OFFSET=2;const RUSTDOC_MOBILE_BREAKPOINT=700;function closeSidebarIfMobile(){if(window.innerWidth"){addClass(document.documentElement,"src-sidebar-expanded");child.innerText="<";updateLocalStorage("source-sidebar-show","true")}else{removeClass(document.documentElement,"src-sidebar-expanded");child.innerText=">";updateLocalStorage("source-sidebar-show","false")}}function createSidebarToggle(){const sidebarToggle=document.createElement("div");sidebarToggle.id="src-sidebar-toggle";const inner=document.createElement("button");if(getCurrentValue("source-sidebar-show")==="true"){inner.innerText="<"}else{inner.innerText=">"}inner.onclick=toggleSidebar;sidebarToggle.appendChild(inner);return sidebarToggle}function createSrcSidebar(){const container=document.querySelector("nav.sidebar");const sidebarToggle=createSidebarToggle();container.insertBefore(sidebarToggle,container.firstChild);const sidebar=document.createElement("div");sidebar.id="src-sidebar";let hasFoundFile=false;const title=document.createElement("div");title.className="title";title.innerText="Files";sidebar.appendChild(title);Object.keys(srcIndex).forEach(key=>{srcIndex[key][NAME_OFFSET]=key;hasFoundFile=createDirEntry(srcIndex[key],sidebar,"",hasFoundFile)});container.appendChild(sidebar);const selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus()}}const lineNumbersRegex=/^#?(\d+)(?:-(\d+))?$/;function highlightSrcLines(match){if(typeof match==="undefined"){match=window.location.hash.match(lineNumbersRegex)}if(!match){return}let from=parseInt(match[1],10);let to=from;if(typeof match[2]!=="undefined"){to=parseInt(match[2],10)}if(to{onEachLazy(e.getElementsByTagName("a"),i_e=>{removeClass(i_e,"line-highlighted")})});for(let i=from;i<=to;++i){elem=document.getElementById(i);if(!elem){break}addClass(elem,"line-highlighted")}}const handleSrcHighlight=(function(){let prev_line_id=0;const set_fragment=name=>{const x=window.scrollX,y=window.scrollY;if(browserSupportsHistoryApi()){history.replaceState(null,null,"#"+name);highlightSrcLines()}else{location.replace("#"+name)}window.scrollTo(x,y)};return ev=>{let cur_line_id=parseInt(ev.target.id,10);if(isNaN(cur_line_id)||ev.ctrlKey||ev.altKey||ev.metaKey){return}ev.preventDefault();if(ev.shiftKey&&prev_line_id){if(prev_line_id>cur_line_id){const tmp=prev_line_id;prev_line_id=cur_line_id;cur_line_id=tmp}set_fragment(prev_line_id+"-"+cur_line_id)}else{prev_line_id=cur_line_id;set_fragment(cur_line_id)}}}());window.addEventListener("hashchange",()=>{const match=window.location.hash.match(lineNumbersRegex);if(match){return highlightSrcLines(match)}});onEachLazy(document.getElementsByClassName("src-line-numbers"),el=>{el.addEventListener("click",handleSrcHighlight)});highlightSrcLines();window.createSrcSidebar=createSrcSidebar})() \ No newline at end of file diff --git a/docs/static.files/storage-fec3eaa3851e447d.js b/docs/static.files/storage-fec3eaa3851e447d.js deleted file mode 100644 index a687118..0000000 --- a/docs/static.files/storage-fec3eaa3851e447d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";const builtinThemes=["light","dark","ayu"];const darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");const settingsDataset=(function(){const settingsElement=document.getElementById("default-settings");return settingsElement&&settingsElement.dataset?settingsElement.dataset:null})();function getSettingValue(settingName){const current=getCurrentValue(settingName);if(current===null&&settingsDataset!==null){const def=settingsDataset[settingName.replace(/-/g,"_")];if(def!==undefined){return def}}return current}const localStoredTheme=getSettingValue("theme");function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(elem&&elem.classList){elem.classList.add(className)}}function removeClass(elem,className){if(elem&&elem.classList){elem.classList.remove(className)}}function onEach(arr,func,reversed){if(arr&&arr.length>0){if(reversed){for(let i=arr.length-1;i>=0;--i){if(func(arr[i])){return true}}}else{for(const elem of arr){if(func(elem)){return true}}}}return false}function onEachLazy(lazyArray,func,reversed){return onEach(Array.prototype.slice.call(lazyArray),func,reversed)}function updateLocalStorage(name,value){try{window.localStorage.setItem("rustdoc-"+name,value)}catch(e){}}function getCurrentValue(name){try{return window.localStorage.getItem("rustdoc-"+name)}catch(e){return null}}const getVar=(function getVar(name){const el=document.querySelector("head > meta[name='rustdoc-vars']");return el?el.attributes["data-"+name].value:null});function switchTheme(newThemeName,saveTheme){if(saveTheme){updateLocalStorage("theme",newThemeName)}document.documentElement.setAttribute("data-theme",newThemeName);if(builtinThemes.indexOf(newThemeName)!==-1){if(window.currentTheme){window.currentTheme.parentNode.removeChild(window.currentTheme);window.currentTheme=null}}else{const newHref=getVar("root-path")+newThemeName+getVar("resource-suffix")+".css";if(!window.currentTheme){if(document.readyState==="loading"){document.write(``);window.currentTheme=document.getElementById("themeStyle")}else{window.currentTheme=document.createElement("link");window.currentTheme.rel="stylesheet";window.currentTheme.id="themeStyle";window.currentTheme.href=newHref;document.documentElement.appendChild(window.currentTheme)}}else if(newHref!==window.currentTheme.href){window.currentTheme.href=newHref}}}const updateTheme=(function(){const mql=window.matchMedia("(prefers-color-scheme: dark)");function updateTheme(){if(getSettingValue("use-system-theme")!=="false"){const lightTheme=getSettingValue("preferred-light-theme")||"light";const darkTheme=getSettingValue("preferred-dark-theme")||"dark";updateLocalStorage("use-system-theme","true");switchTheme(mql.matches?darkTheme:lightTheme,true)}else{switchTheme(getSettingValue("theme"),false)}}mql.addEventListener("change",updateTheme);return updateTheme})();if(getSettingValue("use-system-theme")!=="false"&&window.matchMedia){if(getSettingValue("use-system-theme")===null&&getSettingValue("preferred-dark-theme")===null&&darkThemes.indexOf(localStoredTheme)>=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}}updateTheme();if(getSettingValue("source-sidebar-show")==="true"){addClass(document.documentElement,"src-sidebar-expanded")}window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(updateTheme,0)}}) \ No newline at end of file diff --git a/docs/static.files/wheel-7b819b6101059cd0.svg b/docs/static.files/wheel-7b819b6101059cd0.svg deleted file mode 100644 index 83c07f6..0000000 --- a/docs/static.files/wheel-7b819b6101059cd0.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/radarflow/Cargo.toml b/radarflow/Cargo.toml deleted file mode 100644 index 347295e..0000000 --- a/radarflow/Cargo.toml +++ /dev/null @@ -1,40 +0,0 @@ -[package] -name = "radarflow" -version = "0.2.1" -authors = ["Janek S "] -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -csflow = { path = "../csflow" } - -# cli -clap = { version = "4.3.19", features = ["derive", "string"] } - -# tokio -tokio = { version = "1.29.1", features = ["full"] } -tokio-timerfd = "0.2.0" - -# serde -serde = { version = "1.0.181", features = ["derive"] } -serde_json = "1.0.104" - -# networking -axum = { version = "0.6.20", features = ["ws"] } -tower-http = { version = "0.4.3", features = ["fs"] } -tower = "0.4.13" -local-ip-address = "0.5.4" - -# other - - -# error handling -anyhow = "1.0.77" - -# logging -log = "0.4.19" -simple_logger = "4.2.0" - -[build-dependencies] -vergen = { version = "8.0.0", features = ["build", "cargo", "git", "gitcl", "rustc", "si"] } diff --git a/radarflow/README.md b/radarflow/README.md deleted file mode 100644 index b95ab2e..0000000 --- a/radarflow/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# radarflow -A Web radar for CS2 using [memflow](https://github.com/memflow/memflow) - -## How can I run this? -There is two ways to run this, first way is using a KVM/QEMU setup to target a running VM to read memory out of it. The second way is using pcileech hardware, like a PCIe Screamer. - -> [!NOTE] -> The pcileech method is untested. However, I have ordered hardware, and will test soon. - -### The KVM/QEMU method -First, you need to set up a virtual machine on linux using qemu. -How to set up a VM on linux is way out of scope for this. You can find plenty of information online on how to do it. - -Before you begin, install the necessary memflow plugins using memflowup from the *stable 0.2.0 channel!* - -Clone the repo on your vm host: -`git clone https://github.com/superyu1337/radarflow2.git` - -Run radarflow: -`cargo run --release` - -For an overview of CLI commands, run this: -`cargo run --release -- --help` - -### The pcileech method - -> [!WARNING] -> The pcileech method is untested. - -Install your pcileech hardware in your target pc. On your attacking pc, install the necessary memflow plugins using memflowup from the *stable 0.2.0 channel!* - -Clone the repo on your attacking pc: -`git clone https://github.com/superyu1337/radarflow2.git` - -Run radarflow: -`cargo run --release` - -For an overview of CLI commands, run this: -`cargo run --release -- --help` - -## Detection Status -VAC: ✅ (Undetected) -FaceIt: ❓ (Unknown, could work with proper spoofing on pcileech method) -ESEA: ❓ (Unknown, could work with proper spoofing on pcileech method) diff --git a/radarflow/build.rs b/radarflow/build.rs deleted file mode 100644 index 87e5841..0000000 --- a/radarflow/build.rs +++ /dev/null @@ -1,14 +0,0 @@ -use std::error::Error; -use vergen::EmitBuilder; - -fn main() -> Result<(), Box> { - EmitBuilder::builder() - .git_sha(true) - .git_commit_date() - .cargo_debug() - .cargo_target_triple() - .rustc_semver() - .rustc_llvm_version() - .emit()?; - Ok(()) -} \ No newline at end of file diff --git a/radarflow/src/dma/cache.rs b/radarflow/src/dma/cache.rs deleted file mode 100644 index 8d4026e..0000000 --- a/radarflow/src/dma/cache.rs +++ /dev/null @@ -1,210 +0,0 @@ -use csflow::{memflow::Address, enums::PlayerType, structs::{GlobalVars, GameRules, CBaseEntity}, traits::{MemoryClass, BaseEntity}, CheatCtx}; - -#[derive(Clone, Copy)] -pub enum CachedEntity { - Bomb {ptr: Address}, - Player {ptr: Address, player_type: PlayerType}, -} - -pub struct Cache { - timestamp: std::time::Instant, - valid: bool, - entity_cache: Vec, - entity_list: Address, - globals: GlobalVars, - gamerules: GameRules, -} - -impl Cache { - pub fn is_valid(&self) -> bool { - if self.valid { - if self.timestamp.elapsed() > std::time::Duration::from_secs(60 * 3) { - log::info!("Invalidated cache! Reason: time"); - return false - } - - true - } else { false } - } - - pub fn new_invalid() -> Cache { - Cache { - timestamp: std::time::Instant::now().checked_sub(std::time::Duration::from_millis(500)).unwrap(), - valid: false, - entity_cache: Vec::new(), - entity_list: Address::null(), - globals: GlobalVars::new(Address::null()), - gamerules: GameRules::new(Address::null()), - } - } - - pub fn invalidate(&mut self) { - self.valid = false; - } - - pub fn entity_cache(&mut self) -> Vec { - self.entity_cache.clone() - } - - pub fn entity_list(&self) -> Address { - self.entity_list - } - - pub fn globals(&self) -> GlobalVars { - self.globals - } - - pub fn gamerules(&self) -> GameRules { - self.gamerules - } - - pub fn build(&self, ctx: &mut CheatCtx) -> anyhow::Result { - let mut cached_entities = Vec::new(); - - let globals = ctx.get_globals()?; - let highest_index = ctx.highest_entity_index()?; - let entity_list = ctx.get_entity_list()?; - let gamerules = ctx.get_gamerules()?; - - let local = ctx.get_local()?; - - if local.get_pawn(ctx, entity_list)?.is_some() { - - cached_entities.push(CachedEntity::Player { - ptr: local.ptr(), - player_type: PlayerType::Local, - }); - - // If the bomb is dropped, do a reverse entity list loop with early exit when we found the bomb. - if gamerules.bomb_dropped(ctx)? { - for idx in (0..=highest_index).rev() { - if let Some(entity) = CBaseEntity::from_index(ctx, entity_list, idx)? { - if entity.is_dropped_c4(ctx)? { - cached_entities.push(CachedEntity::Bomb { - ptr: entity.ptr() - }); - break; - } - } - } - } - - //let mut next = local.next_by_class(ctx)?; - //println!("next: {:X}", next.ptr()); - - for idx in 0..=64 { - if let Some(entity) = CBaseEntity::from_index(ctx, entity_list, idx)? { - if entity.is_cs_player_controller(ctx)? { - let controller = entity.to_player_controller(); - - let player_type = { - match controller.get_player_type(ctx, &local)? { - Some(t) => { - if t == PlayerType::Spectator { - continue; - } else { t } - }, - None => { - continue; - }, - } - }; - - cached_entities.push(CachedEntity::Player { - ptr: entity.ptr(), - player_type - }); - } - } - } - - - /* - while !next.ptr().is_null() && next.ptr().is_valid() { - let player_type = { - match next.get_player_type(ctx, &local)? { - Some(t) => { - if t == PlayerType::Spectator { - next = next.next_by_class(ctx)?; - continue; - } else { t } - }, - None => { - next = next.next_by_class(ctx)?; - continue; - }, - } - }; - - cached_entities.push(CachedEntity::Player { - ptr: next.ptr(), - player_type, - }); - - next = next.next_by_class(ctx)?; - println!("next: {:X}", next.ptr()); - } - */ - } - - let cache = CacheBuilder::new() - .entity_cache(cached_entities) - .entity_list(entity_list) - .globals(globals) - .gamerules(gamerules) - .build()?; - - log::info!("Rebuilt cache."); - - Ok(cache) - } -} - -pub struct CacheBuilder { - entity_cache: Option>, - entity_list: Option
, - globals: Option, - gamerules: Option -} - -impl CacheBuilder { - pub fn new() -> CacheBuilder { - CacheBuilder { - entity_cache: None, - entity_list: None, - globals: None, - gamerules: None, - } - } - - pub fn entity_cache(mut self, entity_cache: Vec) -> CacheBuilder { - self.entity_cache = Some(entity_cache); - self - } - - pub fn entity_list(mut self, entity_list: Address) -> CacheBuilder { - self.entity_list = Some(entity_list); - self - } - - pub fn globals(mut self, globals: GlobalVars) -> CacheBuilder { - self.globals = Some(globals); - self - } - - pub fn gamerules(mut self, gamerules: GameRules) -> CacheBuilder { - self.gamerules = Some(gamerules); - self - } - - pub fn build(self) -> anyhow::Result { - Ok(Cache { - timestamp: std::time::Instant::now(), - valid: true, - entity_cache: self.entity_cache.ok_or(anyhow::anyhow!("entity_cache not set on builder"))?, - entity_list: self.entity_list.ok_or(anyhow::anyhow!("entity_list not set on builder"))?, - globals: self.globals.ok_or(anyhow::anyhow!("globals not set on builder"))?, - gamerules: self.gamerules.ok_or(anyhow::anyhow!("gamerules not set on builder"))?, - }) - } -} \ No newline at end of file diff --git a/radarflow/src/dma/mod.rs b/radarflow/src/dma/mod.rs deleted file mode 100644 index eb23599..0000000 --- a/radarflow/src/dma/mod.rs +++ /dev/null @@ -1,188 +0,0 @@ -use std::sync::Arc; - -use csflow::{CheatCtx, Connector, memflow::Process, traits::{MemoryClass, BaseEntity}, structs::{CBaseEntity, CPlayerController}, enums::{PlayerType, TeamID}}; -use tokio::{sync::RwLock, time::Duration}; - -use crate::comms::{RadarData, EntityData, BombData, PlayerData}; - -use self::cache::Cache; - -mod cache; - -const SECOND_AS_NANO: u64 = 1000*1000*1000; - -pub async fn run(connector: Connector, pcileech_device: String, data_lock: Arc>) -> anyhow::Result<()> { - let mut ctx = CheatCtx::setup(connector, pcileech_device)?; - - let mut cache = Cache::new_invalid(); - - let mut last_tickcount = -1; - let mut last_round = -1; - let mut last_gamephase = -1; - let mut last_bomb_dropped = false; - - // Duration for a single tick on 128 ticks. I'm assuming 128 ticks because I don't fucking know how to read the current tickrate off cs2 memory lol - let target_interval = Duration::from_nanos(SECOND_AS_NANO / 128); - - loop { - let start_stamp = tokio::time::Instant::now(); - - if ctx.process.state().is_dead() { - break; - } - - if !cache.is_valid() { - log::debug!("Rebuilding cache!"); - let cache_start_stamp = tokio::time::Instant::now(); - cache = cache.build(&mut ctx)?; - let elapsed = cache_start_stamp.elapsed(); - log::info!("cache rebuild rate: {:.2}Hz", SECOND_AS_NANO as f64 / start_stamp.elapsed().as_nanos() as f64); - log::info!("cache rebuilt took: {}ns", elapsed.as_nanos()); - log::info!("loop target: {}ns", target_interval.as_nanos()); - } - - if ctx.network_is_ingame()? { - let cur_tickcount = cache.globals().tick_count(&mut ctx)?; - //println!("tick_count: {}", tick_count); - ctx.cache_controller.set_tick_count(cur_tickcount); - - // Check if mapname is "" - // That means we are not in-game, so we can just write empty radar data and run the next loop. - let map_name = cache.globals().map_name(&mut ctx)?; - - if map_name == "" { - last_round = -1; - last_gamephase = -1; - - let mut data = data_lock.write().await; - *data = RadarData::empty(); - } else if map_name.is_empty() { // Check if mapname is empty, this usually means a bad globals pointer -> rebuild our cache - cache.invalidate(); - log::info!("Invalidated cache! Reason: invalid globals pointer"); - } - - let cur_round = cache.gamerules().total_rounds_played(&mut ctx)?; - - // New round started, invalidate cache and run next loop - if cur_round != last_round { - last_round = cur_round; - cache.invalidate(); - log::info!("Invalidated cache! Reason: new round"); - } - - let cur_gamephase = cache.gamerules().game_phase(&mut ctx)?; - - // New game phase, invalidate cache and run next loop - if cur_gamephase != last_gamephase { - last_gamephase = cur_gamephase; - cache.invalidate(); - log::info!("Invalidated cache! Reason: new gamephase"); - } - - let cur_bomb_dropped = cache.gamerules().bomb_dropped(&mut ctx)?; - - if cur_bomb_dropped != last_bomb_dropped { - last_bomb_dropped = cur_bomb_dropped; - cache.invalidate(); - log::info!("Invalidated cache! Reason: bomb drop status changed"); - } - - if cur_tickcount != last_tickcount { - // We don't expect more than 16 entries in our radar data. - let mut radar_data = Vec::with_capacity(16); - - if cache.gamerules().bomb_planted(&mut ctx)? { - let bomb = ctx.get_plantedc4()?; - let bomb_pos = bomb.pos(&mut ctx)?; - radar_data.push( - EntityData::Bomb(BombData::new( - bomb_pos, - true - )) - ); - } - - for cached_data in cache.entity_cache() { - match cached_data { - cache::CachedEntity::Bomb { ptr } => { - if cache.gamerules().bomb_dropped(&mut ctx)? { - let bomb_entity = CBaseEntity::new(ptr); - let pos = bomb_entity.pos(&mut ctx)?; - - radar_data.push( - EntityData::Bomb( - BombData::new( - pos, - false - ) - ) - ); - } - }, - cache::CachedEntity::Player { ptr, player_type } => { - let controller = CPlayerController::new(ptr); - if let Some(pawn) = controller.get_pawn(&mut ctx, cache.entity_list())? { - if pawn.is_alive(&mut ctx)? { - let pos = pawn.pos(&mut ctx)?; - let yaw = pawn.angles(&mut ctx)?.y; - - let has_bomb = { - if controller.get_team(&mut ctx)? == Some(TeamID::T) { - pawn.has_c4(&mut ctx, cache.entity_list())? - } else {false} - }; - - radar_data.push( - EntityData::Player( - PlayerData::new( - pos, - yaw, - player_type, - has_bomb - ) - ) - ); - } - } - }, - } - } - - last_tickcount = cur_tickcount; - - let mut data = data_lock.write().await; - *data = RadarData::new( - true, - map_name, - radar_data - ); - } - } - - // Elapsed time since we started our loop - let elapsed = start_stamp.elapsed(); - - let remaining = match target_interval.checked_sub(elapsed) { - // This gives us the remaining time we can sleep in our loop - Some(t) => t, - // No time left, start next loop. - None => { Duration::ZERO } - }; - - if !remaining.is_zero() || true { - // On linux we may use tokio_timerfd for a more finely grained sleep function - #[cfg(target_os = "linux")] - tokio_timerfd::sleep(remaining).await?; - - // On non linux build targets we need to use the regular sleep function, this one is only accurate to millisecond precision - #[cfg(not(target_os = "linux"))] - tokio::time::sleep(remaining).await; - } - - log::debug!("poll rate: {:.2}Hz", SECOND_AS_NANO as f64 / start_stamp.elapsed().as_nanos() as f64); - log::debug!("elapsed: {}ns", elapsed.as_nanos()); - log::debug!("target: {}ns", target_interval.as_nanos()); - } - - Ok(()) -} diff --git a/radarflow/src/cli.rs b/src/cli.rs old mode 100644 new mode 100755 similarity index 97% rename from radarflow/src/cli.rs rename to src/cli.rs index f3b51b7..8ccfe9c --- a/radarflow/src/cli.rs +++ b/src/cli.rs @@ -1,8 +1,9 @@ use std::path::PathBuf; use clap::{Parser, ValueEnum}; -use csflow::{Connector, memflow::Inventory}; +use memflow::plugins::Inventory; +use crate::dma::Connector; const PORT_RANGE: std::ops::RangeInclusive = 8000..=65535; #[derive(Parser)] diff --git a/radarflow/src/comms.rs b/src/comms.rs old mode 100644 new mode 100755 similarity index 81% rename from radarflow/src/comms.rs rename to src/comms.rs index 8bcc701..e979c61 --- a/radarflow/src/comms.rs +++ b/src/comms.rs @@ -1,6 +1,7 @@ -use csflow::{enums::PlayerType, structs::Vec3}; use serde::{Serialize, Deserialize}; +use crate::{structs::Vec3, enums::PlayerType}; + #[derive(Debug, Clone, Serialize, Deserialize)] pub struct PlayerData { pos: Vec3, @@ -40,6 +41,7 @@ pub enum EntityData { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct RadarData { + freq: usize, ingame: bool, #[serde(rename = "mapName")] @@ -53,16 +55,21 @@ pub struct RadarData { } impl RadarData { - pub fn new(ingame: bool, map_name: String, player_data: Vec) -> RadarData { - RadarData { ingame, map_name, player_data } + pub fn new(ingame: bool, map_name: String, player_data: Vec, freq: usize) -> RadarData { + RadarData { ingame, map_name, player_data, freq } } /// Returns empty RadarData, it's also the same data that gets sent to clients when not ingame - pub fn empty() -> RadarData { + pub fn empty(freq: usize) -> RadarData { RadarData { ingame: false, map_name: String::new(), player_data: Vec::new(), + freq } } -} \ No newline at end of file +} + +unsafe impl Send for RadarData {} + +pub type ArcRwlockRadarData = std::sync::Arc>; \ No newline at end of file diff --git a/src/dma/context/connector.rs b/src/dma/context/connector.rs new file mode 100755 index 0000000..e9dbcd1 --- /dev/null +++ b/src/dma/context/connector.rs @@ -0,0 +1,17 @@ +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, clap::ValueEnum, Default)] +pub enum Connector { + #[default] + Qemu, + Kvm, + Pcileech +} + +impl ToString for Connector { + fn to_string(&self) -> String { + match self { + Connector::Qemu => String::from("qemu"), + Connector::Kvm => String::from("kvm"), + Connector::Pcileech => String::from("pcileech"), + } + } +} diff --git a/src/dma/context/mod.rs b/src/dma/context/mod.rs new file mode 100755 index 0000000..0449841 --- /dev/null +++ b/src/dma/context/mod.rs @@ -0,0 +1,182 @@ +use memflow::prelude::v1::*; + +mod connector; + +pub use connector::Connector; +use num_traits::FromPrimitive; + +use crate::{structs::Vec3, enums::TeamID}; + +use super::cs2dumper; + +pub struct DmaCtx { + pub process: IntoProcessInstanceArcBox<'static>, + pub client_module: ModuleInfo, + pub engine_module: ModuleInfo, +} + +impl DmaCtx { + fn check_version(&mut self) -> anyhow::Result<()> { + let game_build_number: u32 = self.process.read(self.engine_module.base + cs2dumper::offsets::engine2_dll::dwBuildNumber)?; + let offset_build_number = cs2dumper::offsets::game_info::buildNumber; + + if game_build_number as usize != offset_build_number { + return Err(anyhow::anyhow!( + "game build is {}, but offsets are for {}", + game_build_number, + offset_build_number + )); + } + + Ok(()) + } + + pub fn setup(connector: Connector, pcileech_device: String) -> anyhow::Result { + let inventory = Inventory::scan(); + + let os = { + if connector == Connector::Pcileech { + let args = Args::new() + .insert("device", &pcileech_device); + + let connector_args = ConnectorArgs::new(None, args, None); + + inventory.builder() + .connector(&connector.to_string()) + .args(connector_args) + .os("win32") + .build()? + } else { + inventory.builder() + .connector(&connector.to_string()) + .os("win32") + .build()? + } + }; + + let mut process = os.into_process_by_name("cs2.exe")?; + + let client_module = process.module_by_name("client.dll")?; + + let engine_module = process.module_by_name("engine2.dll")?; + + let mut ctx = Self { + process, + client_module, + engine_module, + }; + + ctx.check_version()?; + + Ok(ctx) + } + + pub fn pawn_from_controller(&mut self, controller: Address, entity_list: Address) -> anyhow::Result> { + let uhandle: u32 = self.process.read(controller + cs2dumper::client::CCSPlayerController::m_hPlayerPawn)?; + + let list_entry = self.process.read_addr64(entity_list + 0x8 * ((uhandle & 0x7FFF) >> 9) + 16)?; + + if list_entry.is_null() || !list_entry.is_valid() { + Ok(None) + } else { + let ptr = self.process.read_addr64(list_entry + 120 * (uhandle & 0x1FF))?; + Ok(Some(ptr)) + } + + //super::CPlayerPawn::from_uhandle(ctx, entity_list, uhandle) + } + + pub fn batched_player_read(&mut self, controller: Address, pawn: Address) -> anyhow::Result { + let mut pos = Vec3::default(); + let mut yaw = 0f32; + let mut health = 0u32; + let mut team = 0i32; + + { + let mut batcher = MemoryViewBatcher::new(&mut self.process); + batcher.read_into(pawn + cs2dumper::client::C_BasePlayerPawn::m_vOldOrigin, &mut pos); + batcher.read_into(pawn + cs2dumper::client::C_CSPlayerPawnBase::m_angEyeAngles + 4, &mut yaw); + batcher.read_into(pawn + cs2dumper::client::C_BaseEntity::m_iHealth, &mut health); + batcher.read_into(controller + cs2dumper::client::C_BaseEntity::m_iTeamNum, &mut team); + } + + let team = TeamID::from_i32(team); + + Ok(BatchedPlayerData { + pos, + yaw, + team, + health + }) + } + + pub fn get_plantedc4(&mut self) -> anyhow::Result
{ + let ptr = self.process.read_addr64(self.client_module.base + cs2dumper::offsets::client_dll::dwPlantedC4)?; + let ptr2 = self.process.read_addr64(ptr)?; + Ok(ptr2) + } + + /// Professionally engineered function to quickly check if the entity has class name "weapon_c4" + pub fn is_dropped_c4(&mut self, entity_ptr: Address) -> anyhow::Result { + let entity_identity_ptr = self.process.read_addr64(entity_ptr + cs2dumper::client::CEntityInstance::m_pEntity)?; + let class_name_ptr = self.process.read_addr64(entity_identity_ptr + cs2dumper::client::CEntityIdentity::m_designerName)?; + + let data = self.process.read_raw(class_name_ptr + 7, 2)?; + let is_c4 = data == "c4".as_bytes(); + Ok(is_c4) + } + + /// Professionally engineered function to quickly check if the entity has class name "cs_player_controller" + pub fn is_cs_player_controller(&mut self, entity_ptr: Address) -> anyhow::Result { + let entity_identity_ptr = self.process.read_addr64(entity_ptr + cs2dumper::client::CEntityInstance::m_pEntity)?; + let class_name_ptr = self.process.read_addr64(entity_identity_ptr + cs2dumper::client::CEntityIdentity::m_designerName)?; + + let data = self.process.read_raw(class_name_ptr, 20)?; + let is_controller = data == "cs_player_controller".as_bytes(); + Ok(is_controller) + } + + // Todo: Optimize this function: find another way to do this + pub fn has_c4(&mut self, pawn: Address, entity_list: Address) -> anyhow::Result { + let mut has_c4 = false; + let wep_services = self.process.read_addr64(pawn + cs2dumper::client::C_BasePlayerPawn::m_pWeaponServices)?; + let wep_count: i32 = self.process.read(wep_services + cs2dumper::client::CPlayer_WeaponServices::m_hMyWeapons)?; + let wep_base = self.process.read_addr64(wep_services + cs2dumper::client::CPlayer_WeaponServices::m_hMyWeapons + 0x8)?; + + for wep_idx in 0..wep_count { + let handle: i32 = self.process.read(wep_base + wep_idx * 0x4)?; + if handle == -1 { + continue; + } + + let list_entry = self.process.read_addr64(entity_list + 0x8 * ((handle & 0x7FFF) >> 9) + 16)?; + if let Some(wep_ptr) = { + if list_entry.is_null() || !list_entry.is_valid() { + None + } else { + let ptr = self.process.read_addr64(list_entry + 120 * (handle & 0x1FF))?; + Some(ptr) + } + } { + let wep_data = self.process.read_addr64(wep_ptr + cs2dumper::client::C_BaseEntity::m_nSubclassID + 0x8)?; + let id: i32 = self.process.read(wep_data + cs2dumper::client::CCSWeaponBaseVData::m_WeaponType)?; + + if id == 7 { + has_c4 = true; + break; + } + } + } + + Ok(has_c4) + } + +} + + +pub struct BatchedPlayerData { + pub pos: Vec3, + pub yaw: f32, + pub team: Option, + pub health: u32, +} \ No newline at end of file diff --git a/csflow/src/cs2dumper/mod.rs b/src/dma/cs2dumper/mod.rs old mode 100644 new mode 100755 similarity index 76% rename from csflow/src/cs2dumper/mod.rs rename to src/dma/cs2dumper/mod.rs index dc63cf0..0429f69 --- a/csflow/src/cs2dumper/mod.rs +++ b/src/dma/cs2dumper/mod.rs @@ -1,4 +1,4 @@ #![allow(dead_code)] pub mod client; pub mod engine2; -pub mod offsets; +pub mod offsets; \ No newline at end of file diff --git a/src/dma/mod.rs b/src/dma/mod.rs new file mode 100755 index 0000000..d4b4d5d --- /dev/null +++ b/src/dma/mod.rs @@ -0,0 +1,190 @@ +use std::{thread, time::{Duration, Instant}}; + +use memflow::{os::Process, types::Address, mem::MemoryView}; + +use crate::{enums::{TeamID, PlayerType}, comms::{EntityData, PlayerData, RadarData, ArcRwlockRadarData, BombData}}; + +use self::{context::DmaCtx, threaddata::CsData}; + +mod context; +mod threaddata; +mod cs2dumper; + +pub use context::Connector; + +pub async fn run(radar_data: ArcRwlockRadarData, connector: Connector, pcileech_device: String) -> anyhow::Result<()> { + let mut ctx = DmaCtx::setup(connector, pcileech_device)?; + let mut data = CsData::default(); + + // For read timing + let mut last_bomb_dropped = false; + let mut last_bomb_planted = false; + let mut last_tick_count = 0; + let mut last_big_read = Instant::now(); + + // For frequency info + let mut start_stamp = Instant::now(); + let mut iters = 0; + let mut freq = 0; + + data.update_pointers(&mut ctx); + data.update_common(&mut ctx); + data.update_players(&mut ctx); + data.update_bomb(&mut ctx); + + loop { + if ctx.process.state().is_dead() { + break; + } + + if last_big_read.elapsed().as_millis() > 10000 { + data.update_pointers(&mut ctx); + data.update_players(&mut ctx); + last_big_read = Instant::now(); + } + + data.update_common(&mut ctx); + + // Bomb update + if (data.bomb_dropped && !last_bomb_dropped) || (data.bomb_planted && !last_bomb_planted) { + data.update_bomb(&mut ctx); + } + + if (!data.bomb_dropped && last_bomb_dropped) || !data.bomb_planted { + data.recheck_bomb_holder = true; + } + + last_bomb_dropped = data.bomb_dropped; + last_bomb_planted = data.bomb_planted; + + // Poll entity data + let ingame = !data.map.is_empty() && data.map != ""; + let update_data = data.tick_count != last_tick_count; + + if ingame { + if !update_data { + continue; + } + + let mut entity_data = Vec::new(); + + // Bomb + if data.bomb_dropped || data.bomb_planted { + let node = ctx.process.read_addr64( + data.bomb + cs2dumper::client::C_BaseEntity::m_pGameSceneNode as u64 + ).unwrap(); + let pos = ctx.process.read(node + cs2dumper::client::CGameSceneNode::m_vecAbsOrigin).unwrap(); + + entity_data.push(EntityData::Bomb(BombData::new(pos, data.bomb_planted))); + } + + // Local player + let local_data = ctx.batched_player_read( + data.local.into(), data.local_pawn.into() + ).unwrap(); + + if local_data.health > 0 { + let has_bomb = { + if data.bomb_planted { + false + } else if data.recheck_bomb_holder { + if local_data.team == Some(TeamID::T) && !data.bomb_dropped && !data.bomb_planted { + let is_holder = ctx.has_c4( + data.local_pawn.into(), data.entity_list.into() + ).unwrap_or(false); + + if is_holder { + data.bomb_holder = data.local.into(); + data.recheck_bomb_holder = false; + } + + is_holder + } else { false } + } else { Address::from(data.local) == data.bomb_holder } + }; + + entity_data.push( + EntityData::Player( + PlayerData::new( + local_data.pos, + local_data.yaw, + PlayerType::Local, + has_bomb + ) + ) + ); + } + + // Other players + for (controller, pawn) in &data.players { + let player_data = ctx.batched_player_read(*controller, *pawn).unwrap(); + + if player_data.health < 1 { + continue; + } + + let has_bomb = { + if data.bomb_planted { + false + } else if data.recheck_bomb_holder { + if player_data.team == Some(TeamID::T) && !data.bomb_dropped && !data.bomb_planted { + let is_holder = ctx.has_c4(*pawn, data.entity_list.into()).unwrap_or(false); + + if is_holder { + data.bomb_holder = *controller; + data.recheck_bomb_holder = false; + } + + is_holder + } else { false } + } else { *controller == data.bomb_holder } + }; + + let player_type = { + if local_data.team != player_data.team { + PlayerType::Enemy + } else if local_data.team == player_data.team { + PlayerType::Team + } else { + PlayerType::Unknown + } + }; + + entity_data.push( + EntityData::Player( + PlayerData::new( + player_data.pos, + player_data.yaw, + player_type, + has_bomb + ) + ) + ); + } + + let mut radar = radar_data.write().await; + *radar = RadarData::new( + true, + data.map.clone(), + entity_data, + freq + ); + } else { + let mut radar = radar_data.write().await; + *radar = RadarData::empty(freq); + } + + last_tick_count = data.tick_count; + iters += 1; + + if start_stamp.elapsed().as_secs() > 1 { + freq = iters; + iters = 0; + start_stamp = Instant::now(); + } + + thread::sleep(Duration::from_millis(1)); + } + + Ok(()) +} \ No newline at end of file diff --git a/src/dma/threaddata/mod.rs b/src/dma/threaddata/mod.rs new file mode 100755 index 0000000..5bc02f2 --- /dev/null +++ b/src/dma/threaddata/mod.rs @@ -0,0 +1,175 @@ +use itertools::Itertools; +use memflow::{mem::MemoryView, types::Address}; + +use super::{context::DmaCtx, cs2dumper}; + +#[derive(Clone, Debug, Default)] +pub struct CsData { + // Entities + pub players: Vec<(Address, Address)>, + pub bomb: Address, + pub bomb_holder: Address, + pub recheck_bomb_holder: bool, + + // Pointers + pub globals: u64, + pub gamerules: u64, + pub entity_list: u64, + pub game_ent_sys: u64, + + // Common + pub local: u64, + pub local_pawn: u64, + pub is_dead: bool, + pub tick_count: i32, + pub bomb_dropped: bool, + pub bomb_planted: bool, + pub highest_index: i32, + pub map: String +} + + +impl CsData { + pub fn update_bomb(&mut self, ctx: &mut DmaCtx) { + // If the bomb is dropped, do a reverse entity list loop with early exit when we found the bomb. ( Now with BATCHING!!! :O ) + if self.bomb_dropped { + + // We search 16 entities at a time. + for chunk in &(0..=self.highest_index).rev().chunks(16) { + + let indexes: Vec = chunk.collect(); + + let mut data_array = [(0u64, 0i32); 16]; + { + let mut batcher = ctx.process.batcher(); + let ent_list: Address = self.entity_list.into(); + + data_array.iter_mut().zip(indexes).for_each(|((data_ptr, data_idx), index)| { + batcher.read_into(ent_list + 8 * (index >> 9) + 16, data_ptr); + *data_idx = index; + }); + } + + { + let mut batcher = ctx.process.batcher(); + + data_array.iter_mut().for_each(|(ptr, index)| { + let handle: Address = (*ptr).into(); + batcher.read_into(handle + 120 * (*index & 0x1FF), ptr); + }); + } + + // You can actually optimize this EVEN more + let bomb = data_array.into_iter().find(|(ptr, _)| { + // By doing this with a batcher too... + ctx.is_dropped_c4((*ptr).into()).unwrap_or(false) + }); + + if let Some(bomb) = bomb { + self.bomb = bomb.0.into(); + } + } + } else if self.bomb_planted { + let bomb = ctx.get_plantedc4() + .expect("Failed to get planted bomb"); + + self.bomb = bomb; + } + } + + pub fn update_players(&mut self, ctx: &mut DmaCtx) { + let mut list_entries = [0u64; 64]; + { + let mut batcher = ctx.process.batcher(); + let ent_list: Address = self.entity_list.into(); + + list_entries.iter_mut().enumerate().for_each(|(idx, data)| { + let index = idx as i32; + batcher.read_into(ent_list + 8 * (index >> 9) + 16, data); + }); + } + + let mut player_ptrs = [0u64; 64]; + { + let mut batcher = ctx.process.batcher(); + + player_ptrs.iter_mut().enumerate().for_each(|(idx, data)| { + let list_entry: Address = list_entries[idx].into(); + batcher.read_into(list_entry + 120 * (idx & 0x1FF), data); + }); + } + + let mut new_players: Vec = Vec::new(); + player_ptrs + .into_iter() + .for_each(|ptr| { + if ctx.is_cs_player_controller(ptr.into()).unwrap_or(false) { + new_players.push(ptr) + } + }); + + let new_players: Vec<(Address, Address)> = new_players + .into_iter() + .map(Address::from) + .filter(|ptr| !ptr.is_null()) + .filter(|ptr| *ptr != self.local.into()) + .map(|ptr| { + let pawn = ctx.pawn_from_controller(ptr, self.entity_list.into()).unwrap(); + (ptr, pawn) + }) + .filter(|(_, pawn)| pawn.is_some()) + .map(|(controller, pawn)| (controller, pawn.unwrap())) + .collect(); + + self.players = new_players; + } + + pub fn update_common(&mut self, ctx: &mut DmaCtx) { + let mut bomb_dropped = 0u8; + let mut bomb_planted = 0u8; + let mut map_ptr = 0u64; + + { + // Globals + let tick_count_addr = (self.globals + 0x40).into(); + let map_addr = (self.globals + 0x188).into(); + + // Gamerules + let bomb_dropped_addr = (self.gamerules + cs2dumper::client::C_CSGameRules::m_bBombDropped as u64).into(); + let bomb_planted_addr = (self.gamerules + cs2dumper::client::C_CSGameRules::m_bBombPlanted as u64).into(); + + // Game Entity System + let highest_index_addr = (self.game_ent_sys + cs2dumper::offsets::client_dll::dwGameEntitySystem_getHighestEntityIndex as u64).into(); + + let mut batcher = ctx.process.batcher(); + batcher.read_into( + ctx.client_module.base + cs2dumper::offsets::client_dll::dwLocalPlayerController, + &mut self.local + ); + batcher.read_into( + ctx.client_module.base + cs2dumper::offsets::client_dll::dwLocalPlayerPawn, + &mut self.local_pawn + ); + + batcher.read_into(tick_count_addr, &mut self.tick_count); + batcher.read_into(bomb_dropped_addr, &mut bomb_dropped); + batcher.read_into(bomb_planted_addr, &mut bomb_planted); + batcher.read_into(highest_index_addr, &mut self.highest_index); + batcher.read_into(map_addr, &mut map_ptr); + } + + let map_string = ctx.process.read_char_string_n(map_ptr.into(), 32).unwrap_or(String::from("")); + + self.map = map_string; + self.bomb_dropped = bomb_dropped != 0; + self.bomb_planted = bomb_planted != 0; + } + + pub fn update_pointers(&mut self, ctx: &mut DmaCtx) { + let mut batcher = ctx.process.batcher(); + batcher.read_into(ctx.client_module.base + cs2dumper::offsets::client_dll::dwGlobalVars, &mut self.globals); + batcher.read_into(ctx.client_module.base + cs2dumper::offsets::client_dll::dwGameRules, &mut self.gamerules); + batcher.read_into(ctx.client_module.base + cs2dumper::offsets::client_dll::dwEntityList, &mut self.entity_list); + batcher.read_into(ctx.client_module.base + cs2dumper::offsets::client_dll::dwGameEntitySystem, &mut self.game_ent_sys); + } +} \ No newline at end of file diff --git a/src/enums/mod.rs b/src/enums/mod.rs new file mode 100755 index 0000000..a246ab8 --- /dev/null +++ b/src/enums/mod.rs @@ -0,0 +1,5 @@ +mod teamid; +mod player_type; + +pub use teamid::TeamID; +pub use player_type::PlayerType; \ No newline at end of file diff --git a/csflow/src/enums/player_type.rs b/src/enums/player_type.rs old mode 100644 new mode 100755 similarity index 100% rename from csflow/src/enums/player_type.rs rename to src/enums/player_type.rs diff --git a/csflow/src/enums/teamid.rs b/src/enums/teamid.rs old mode 100644 new mode 100755 similarity index 100% rename from csflow/src/enums/teamid.rs rename to src/enums/teamid.rs diff --git a/radarflow/src/main.rs b/src/main.rs old mode 100644 new mode 100755 similarity index 57% rename from radarflow/src/main.rs rename to src/main.rs index beb9a8a..caa9d9b --- a/radarflow/src/main.rs +++ b/src/main.rs @@ -5,53 +5,52 @@ use cli::Cli; use comms::RadarData; use tokio::sync::RwLock; -mod comms; mod cli; +mod structs; +mod enums; +mod comms; mod dma; mod websocket; #[tokio::main] async fn main() -> anyhow::Result<()> { - let cli = Cli::parse(); + let cli: Cli = Cli::parse(); simple_logger::SimpleLogger::new() .with_level(cli.loglevel.into()) .init() .expect("Initializing logger"); - let rwlock = Arc::new( + let radar_data = Arc::new( RwLock::new( - RadarData::empty() + RadarData::empty(0) ) ); - let rwlock_clone = rwlock.clone(); + let radar_clone = radar_data.clone(); let dma_handle = tokio::spawn(async move { - if let Err(err) = dma::run(cli.connector, cli.pcileech_device, rwlock_clone).await { + if let Err(err) = dma::run(radar_clone, cli.connector, cli.pcileech_device).await { log::error!("Error in dma thread: [{}]", err.to_string()); + } else { + println!("CS2 Process exited, exiting program...") } }); - tokio::spawn(async move { - let future = websocket::run(cli.web_path, cli.port, rwlock); - + let _websocket_handle = tokio::spawn(async move { if let Ok(my_local_ip) = local_ip_address::local_ip() { let address = format!("http://{}:{}", my_local_ip, cli.port); println!("Launched webserver at {}", address); } else { let address = format!("http://0.0.0.0:{}", cli.port); - println!("launched webserver at! {}", address); + println!("launched webserver at {}", address); } - if let Err(err) = future.await { - log::error!("Error in websocket server: [{}]", err.to_string()); + if let Err(err) = websocket::run(cli.web_path, cli.port, radar_data).await { + log::error!("Error in ws server: [{}]", err.to_string()); } }); - if let Err(err) = dma_handle.await { - log::error!("Error when waiting for dma thread: {}", err.to_string()); - } - + dma_handle.await?; Ok(()) } diff --git a/src/structs/mod.rs b/src/structs/mod.rs new file mode 100755 index 0000000..149b20f --- /dev/null +++ b/src/structs/mod.rs @@ -0,0 +1,3 @@ +mod vec3; + +pub use vec3::Vec3; \ No newline at end of file diff --git a/csflow/src/structs/vec3.rs b/src/structs/vec3.rs old mode 100644 new mode 100755 similarity index 54% rename from csflow/src/structs/vec3.rs rename to src/structs/vec3.rs index 8b8cc8d..2d2c40d --- a/csflow/src/structs/vec3.rs +++ b/src/structs/vec3.rs @@ -1,6 +1,6 @@ -use serde::Serialize; +use serde::{Serialize, Deserialize}; -#[derive(Debug, Clone, Copy, Serialize, serde::Deserialize)] +#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize)] #[repr(C)] pub struct Vec3 { pub x: f32, diff --git a/radarflow/src/websocket.rs b/src/websocket.rs similarity index 90% rename from radarflow/src/websocket.rs rename to src/websocket.rs index b59bcf0..090ec16 100644 --- a/radarflow/src/websocket.rs +++ b/src/websocket.rs @@ -18,16 +18,17 @@ struct AppState { } async fn ws_handler(ws: WebSocketUpgrade, State(state): State) -> Response { - ws.on_upgrade(|socket| handle_socket(socket, state)) + let clone = state.clone(); + ws.on_upgrade(|socket| handle_socket(socket, clone)) } async fn handle_socket(mut socket: WebSocket, state: AppState) { while let Some(msg) = socket.recv().await { if let Ok(msg) = msg { if msg == Message::Text("requestInfo".to_string()) { - let data = state.data_lock.read().await; - let str = { + let data = state.data_lock.read().await; + match serde_json::to_string(&*data) { Ok(json) => json, Err(e) => { @@ -38,6 +39,8 @@ async fn handle_socket(mut socket: WebSocket, state: AppState) { } }; + //println!("{str}"); + if socket.send(Message::Text(str)).await.is_err() { // client disconnected return; diff --git a/webradar/assets/image/cs_italy_radar_psd.png b/webradar/assets/image/cs_italy_radar_psd.png old mode 100644 new mode 100755 diff --git a/webradar/assets/image/cs_office_radar_psd.png b/webradar/assets/image/cs_office_radar_psd.png old mode 100644 new mode 100755 diff --git a/webradar/assets/image/de_ancient_radar_psd.png b/webradar/assets/image/de_ancient_radar_psd.png old mode 100644 new mode 100755 diff --git a/webradar/assets/image/de_anubis_radar_psd.png b/webradar/assets/image/de_anubis_radar_psd.png old mode 100644 new mode 100755 diff --git a/webradar/assets/image/de_dust2_radar_psd.png b/webradar/assets/image/de_dust2_radar_psd.png old mode 100644 new mode 100755 diff --git a/webradar/assets/image/de_inferno_radar_psd.png b/webradar/assets/image/de_inferno_radar_psd.png old mode 100644 new mode 100755 diff --git a/webradar/assets/image/de_mirage_radar_psd.png b/webradar/assets/image/de_mirage_radar_psd.png old mode 100644 new mode 100755 diff --git a/webradar/assets/image/de_nuke_radar_psd.png b/webradar/assets/image/de_nuke_radar_psd.png old mode 100644 new mode 100755 diff --git a/webradar/assets/image/de_overpass_radar_psd.png b/webradar/assets/image/de_overpass_radar_psd.png old mode 100644 new mode 100755 diff --git a/webradar/assets/image/de_vertigo_radar_psd.png b/webradar/assets/image/de_vertigo_radar_psd.png old mode 100644 new mode 100755 diff --git a/webradar/assets/json/cs_italy.json b/webradar/assets/json/cs_italy.json old mode 100644 new mode 100755 diff --git a/webradar/assets/json/cs_office.json b/webradar/assets/json/cs_office.json old mode 100644 new mode 100755 diff --git a/webradar/assets/json/de_ancient.json b/webradar/assets/json/de_ancient.json old mode 100644 new mode 100755 diff --git a/webradar/assets/json/de_anubis.json b/webradar/assets/json/de_anubis.json old mode 100644 new mode 100755 diff --git a/webradar/assets/json/de_dust2.json b/webradar/assets/json/de_dust2.json old mode 100644 new mode 100755 diff --git a/webradar/assets/json/de_inferno.json b/webradar/assets/json/de_inferno.json old mode 100644 new mode 100755 diff --git a/webradar/assets/json/de_mirage.json b/webradar/assets/json/de_mirage.json old mode 100644 new mode 100755 diff --git a/webradar/assets/json/de_nuke.json b/webradar/assets/json/de_nuke.json old mode 100644 new mode 100755 diff --git a/webradar/assets/json/de_overpass.json b/webradar/assets/json/de_overpass.json old mode 100644 new mode 100755 diff --git a/webradar/assets/json/de_vertigo.json b/webradar/assets/json/de_vertigo.json old mode 100644 new mode 100755 diff --git a/webradar/index.html b/webradar/index.html old mode 100644 new mode 100755 index 1e70b45..4bd6f5e --- a/webradar/index.html +++ b/webradar/index.html @@ -11,6 +11,7 @@
+
diff --git a/webradar/script.js b/webradar/script.js old mode 100644 new mode 100755 index 2812a2b..4e6ddea --- a/webradar/script.js +++ b/webradar/script.js @@ -5,14 +5,16 @@ const enemyColor = "#ec040b" const bombColor = "#eda338" const textColor = "#d1d1d1" -// Should zoom or not +// Settings shouldZoom = true +drawStats = true // Common canvas = null ctx = null // radarflow specific +freq = 0 image = null map = null mapName = null @@ -32,6 +34,7 @@ if (location.protocol == 'https:') { } else { websocketAddr = `ws://${window.location.host}/ws` } +//websocketAddr = "ws://localhost:8001/ws" // Util functions const clamp = (num, min, max) => Math.min(Math.max(num, min), max); @@ -186,6 +189,16 @@ function render() { ctx.fillText("Disconnected", 1024/2, 1024/2); } } + + if (drawStats) { + ctx.font = "16px Arial"; + ctx.textAlign = "left" + ctx.fillStyle = textColor + ctx.lineWidth = 2; + ctx.strokeStyle = "black" + ctx.strokeText(`${freq} Hz`, 2, 18) + ctx.fillText(`${freq} Hz`, 2, 18) + } } if (websocket != null) { @@ -355,6 +368,8 @@ function connect() { } else { let data = JSON.parse(event.data); + freq = data.freq; + if (data.ingame == false) { mapName = null entityData = null @@ -417,4 +432,8 @@ addEventListener("DOMContentLoaded", (e) => { function toggleZoom() { shouldZoom = !shouldZoom +} + +function toggleStats() { + drawStats = !drawStats } \ No newline at end of file diff --git a/webradar/styles.css b/webradar/styles.css old mode 100644 new mode 100755 index f999d16..4dd06c5 --- a/webradar/styles.css +++ b/webradar/styles.css @@ -10,6 +10,7 @@ body { #canvasContainer { aspect-ratio: 1 / 1; + height: 100vh; position: relative; overflow: hidden; transition: width 0.5s ease; /* Smooth transition */