[INFO] fetching crate redbpf-probes 2.3.0...
[INFO] documenting redbpf-probes-2.3.0 against 1.69.0 for beta-1.70-rustdoc-1
[INFO] extracting crate redbpf-probes 2.3.0 into /workspace/builds/worker-3-tc1/source
[INFO] validating manifest of crates.io crate redbpf-probes 2.3.0 on toolchain 1.69.0
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.69.0" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] started tweaking crates.io crate redbpf-probes 2.3.0
[INFO] finished tweaking crates.io crate redbpf-probes 2.3.0
[INFO] tweaked toml for crates.io crate redbpf-probes 2.3.0 written to /workspace/builds/worker-3-tc1/source/Cargo.toml
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" __CARGO_TEST_CHANNEL_OVERRIDE_DO_NOT_USE_THIS="nightly" "/workspace/cargo-home/bin/cargo" "+1.69.0" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update", kill_on_drop: false }`
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.69.0" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded zero v0.1.3
[INFO] [stderr]   Downloaded cargo-bpf v2.3.0
[INFO] [stderr]   Downloaded redbpf-macros v2.3.0
[INFO] [stderr]   Downloaded ufmt-macros v0.2.0
[INFO] [stderr]   Downloaded ufmt v0.1.2
[INFO] [stderr]   Downloaded bpf-sys v2.3.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:5ff2268d62e97bff2cde7d5815dd6ed5b47097566f13b8d0ca110b04b60e07ed" "/opt/rustwide/cargo-home/bin/cargo" "+1.69.0" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 25cce74f05284d3f9d6ddbbe482867e574902b989e6c7ed4376447c3c669b470
[INFO] running `Command { std: "docker" "start" "-a" "25cce74f05284d3f9d6ddbbe482867e574902b989e6c7ed4376447c3c669b470", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "25cce74f05284d3f9d6ddbbe482867e574902b989e6c7ed4376447c3c669b470", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "25cce74f05284d3f9d6ddbbe482867e574902b989e6c7ed4376447c3c669b470", kill_on_drop: false }`
[INFO] [stdout] 25cce74f05284d3f9d6ddbbe482867e574902b989e6c7ed4376447c3c669b470
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:5ff2268d62e97bff2cde7d5815dd6ed5b47097566f13b8d0ca110b04b60e07ed" "/opt/rustwide/cargo-home/bin/cargo" "+1.69.0" "doc" "--frozen" "--no-deps" "--document-private-items" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 8d582d711a23f3f2a441c808269bdc851485102da32ab995b4ba67ef79653f92
[INFO] running `Command { std: "docker" "start" "-a" "8d582d711a23f3f2a441c808269bdc851485102da32ab995b4ba67ef79653f92", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.56
[INFO] [stderr]    Compiling glob v0.3.1
[INFO] [stderr]    Compiling lazy_static v1.4.0
[INFO] [stderr]    Compiling minimal-lexical v0.2.1
[INFO] [stderr]    Compiling bitflags v1.3.2
[INFO] [stderr]    Compiling bindgen v0.59.2
[INFO] [stderr]    Compiling once_cell v1.17.1
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]    Compiling libc v0.2.142
[INFO] [stderr]    Compiling memchr v2.5.0
[INFO] [stderr]    Compiling libloading v0.7.4
[INFO] [stderr]    Compiling peeking_take_while v0.1.2
[INFO] [stderr]    Compiling lazycell v1.3.0
[INFO] [stderr]    Compiling rustc-hash v1.1.0
[INFO] [stderr]    Compiling shlex v1.1.0
[INFO] [stderr]    Compiling serde v1.0.160
[INFO] [stderr]    Compiling num-traits v0.2.15
[INFO] [stderr]    Compiling io-lifetimes v1.0.10
[INFO] [stderr]    Compiling rustix v0.37.18
[INFO] [stderr]    Compiling log v0.4.17
[INFO] [stderr]    Compiling num-integer v0.1.45
[INFO] [stderr]    Compiling tracing-core v0.1.30
[INFO] [stderr]    Compiling linux-raw-sys v0.3.6
[INFO] [stderr]    Compiling anyhow v1.0.71
[INFO] [stderr]    Compiling rustversion v1.0.12
[INFO] [stderr]    Compiling regex-syntax v0.6.29
[INFO] [stderr]    Compiling serde_json v1.0.96
[INFO] [stderr]    Compiling pin-project-lite v0.2.9
[INFO] [stderr]    Compiling itoa v1.0.6
[INFO] [stderr]    Compiling zero v0.1.3
[INFO] [stderr]    Compiling ryu v1.0.13
[INFO] [stderr]    Compiling aho-corasick v1.0.1
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling clang-sys v1.6.1
[INFO] [stderr]    Compiling fastrand v1.9.0
[INFO] [stderr]    Compiling iana-time-zone v0.1.56
[INFO] [stderr]    Compiling tracing-log v0.1.3
[INFO] [stderr]    Compiling thread_local v1.1.7
[INFO] [stderr]    Compiling sharded-slab v0.1.4
[INFO] [stderr]    Compiling ansi_term v0.12.1
[INFO] [stderr]    Compiling smallvec v1.10.0
[INFO] [stderr]     Checking ufmt-write v0.1.0
[INFO] [stderr]    Compiling quote v1.0.26
[INFO] [stderr]    Compiling syn v2.0.15
[INFO] [stderr]    Compiling regex v1.8.1
[INFO] [stderr]    Compiling getrandom v0.2.9
[INFO] [stderr]    Compiling chrono v0.4.24
[INFO] [stderr]    Compiling uuid v0.8.2
[INFO] [stderr]    Compiling regex-automata v0.1.10
[INFO] [stderr]    Compiling cexpr v0.6.0
[INFO] [stderr]    Compiling matchers v0.0.1
[INFO] [stderr]    Compiling tracing-serde v0.1.3
[INFO] [stderr]    Compiling tempfile v3.5.0
[INFO] [stderr]    Compiling ufmt-macros v0.2.0
[INFO] [stderr]     Checking ufmt v0.1.2
[INFO] [stderr]    Compiling thiserror-impl v1.0.40
[INFO] [stderr]    Compiling tracing-attributes v0.1.24
[INFO] [stderr]    Compiling thiserror v1.0.40
[INFO] [stderr]    Compiling tracing v0.1.37
[INFO] [stderr]    Compiling pest v2.6.0
[INFO] [stderr]    Compiling tracing-subscriber v0.2.25
[INFO] [stderr]    Compiling bpf-sys v2.3.0
[INFO] [stderr]    Compiling semver-parser v0.10.2
[INFO] [stderr]    Compiling semver v0.11.0
[INFO] [stderr]    Compiling rustc_version v0.3.3
[INFO] [stderr]    Compiling redbpf-macros v2.3.0
[INFO] [stderr]    Compiling cargo-bpf v2.3.0
[INFO] [stderr]    Compiling redbpf-probes v2.3.0 (/opt/rustwide/workdir)
[INFO] [stderr]  Documenting redbpf-probes v2.3.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unnecessary parentheses around match arm expression
[INFO] [stdout]    --> src/net.rs:147:32
[INFO] [stdout]     |
[INFO] [stdout] 147 |                 IPPROTO_TCP => (Transport::TCP(self.ptr_at(addr)?)),
[INFO] [stdout]     |                                ^                                  ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 147 -                 IPPROTO_TCP => (Transport::TCP(self.ptr_at(addr)?)),
[INFO] [stdout] 147 +                 IPPROTO_TCP => Transport::TCP(self.ptr_at(addr)?),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around match arm expression
[INFO] [stdout]    --> src/net.rs:148:32
[INFO] [stdout]     |
[INFO] [stdout] 148 |                 IPPROTO_UDP => (Transport::UDP(self.ptr_at(addr)?)),
[INFO] [stdout]     |                                ^                                  ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 148 -                 IPPROTO_UDP => (Transport::UDP(self.ptr_at(addr)?)),
[INFO] [stdout] 148 +                 IPPROTO_UDP => Transport::UDP(self.ptr_at(addr)?),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: 2 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished dev [unoptimized + debuginfo] target(s) in 2m 02s
[INFO] running `Command { std: "docker" "inspect" "8d582d711a23f3f2a441c808269bdc851485102da32ab995b4ba67ef79653f92", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "8d582d711a23f3f2a441c808269bdc851485102da32ab995b4ba67ef79653f92", kill_on_drop: false }`
[INFO] [stdout] 8d582d711a23f3f2a441c808269bdc851485102da32ab995b4ba67ef79653f92
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "DOCS_RS=1" "-e" "RUSTC_BOOTSTRAP=1" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:5ff2268d62e97bff2cde7d5815dd6ed5b47097566f13b8d0ca110b04b60e07ed" "/opt/rustwide/cargo-home/bin/cargo" "+1.69.0" "rustdoc" "--lib" "-Zrustdoc-map" "--all-features" "-Z" "unstable-options" "--config" "build.rustdocflags=[\"-Z\", \"unstable-options\", \"--document-private-items\"]" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 6e5764f402debc6852398148ce8e3bf5ed2988d3c68cbcb5659c522dc156d1ce
[INFO] running `Command { std: "docker" "start" "-a" "6e5764f402debc6852398148ce8e3bf5ed2988d3c68cbcb5659c522dc156d1ce", kill_on_drop: false }`
[INFO] [stderr]    Compiling redbpf-probes v2.3.0 (/opt/rustwide/workdir)
[INFO] [stderr]  Documenting redbpf-probes v2.3.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unnecessary parentheses around match arm expression
[INFO] [stdout]    --> src/net.rs:147:32
[INFO] [stdout]     |
[INFO] [stdout] 147 |                 IPPROTO_TCP => (Transport::TCP(self.ptr_at(addr)?)),
[INFO] [stdout]     |                                ^                                  ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 147 -                 IPPROTO_TCP => (Transport::TCP(self.ptr_at(addr)?)),
[INFO] [stdout] 147 +                 IPPROTO_TCP => Transport::TCP(self.ptr_at(addr)?),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around match arm expression
[INFO] [stdout]    --> src/net.rs:148:32
[INFO] [stdout]     |
[INFO] [stdout] 148 |                 IPPROTO_UDP => (Transport::UDP(self.ptr_at(addr)?)),
[INFO] [stdout]     |                                ^                                  ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 148 -                 IPPROTO_UDP => (Transport::UDP(self.ptr_at(addr)?)),
[INFO] [stdout] 148 +                 IPPROTO_UDP => Transport::UDP(self.ptr_at(addr)?),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `ATTR_FOO`
[INFO] [stdout]   --> /opt/rustwide/target/debug/build/redbpf-probes-feec72bc5f8fa049/out/gen_bindings.rs:10:2282481
[INFO] [stdout]    |
[INFO] [stdout] 10 | ... } # [doc = " struct nla_policy - attribute validation policy"] # [doc = " @type: Type of attribute or NLA_UNSPEC"] # [doc = " @validation_type: type of attribute validation done in addition to"] # [doc = "\ttype-specific validation (e.g. range, function call), see"] # [doc = "\t&enum nla_policy_validation"] # [doc = " @len: Type specific length of payload"] # [doc = ""] # [doc = " Policies are defined as arrays of this struct, the array must be"] # [doc = " accessible by attribute type up to the highest identifier to be expected."] # [doc = ""] # [doc = " Meaning of `len' field:"] # [doc = "    NLA_STRING           Maximum length of string"] # [doc = "    NLA_NUL_STRING       Maximum length of string (excluding NUL)"] # [doc = "    NLA_FLAG             Unused"] # [doc = "    NLA_BINARY           Maximum length of attribute payload"] # [doc = "                         (but see also below with the validation type)"] # [doc = "    NLA_NESTED,"] # [doc = "    NLA_NESTED_ARRAY     Length verification is done by checking len of"] # [doc = "                         nested header (or empty); len field is used if"] # [doc = "                         nested_policy is also used, for the max attr"] # [doc = "                         number in the nested policy."] # [doc = "    NLA_U8, NLA_U16,"] # [doc = "    NLA_U32, NLA_U64,"] # [doc = "    NLA_S8, NLA_S16,"] # [doc = "    NLA_S32, NLA_S64,"] # [doc = "    NLA_MSECS            Leaving the length field zero will verify the"] # [doc = "                         given type fits, using it verifies minimum length"] # [doc = "                         just like \"All other\""] # [doc = "    NLA_BITFIELD32       Unused"] # [doc = "    NLA_REJECT           Unused"] # [doc = "    All other            Minimum length of attribute payload"] # [doc = ""] # [doc = " Meaning of validation union:"] # [doc = "    NLA_BITFIELD32       This is a 32-bit bitmap/bitselector attribute and"] # [doc = "                         `bitfield32_valid' is the u32 value of valid flags"] # [doc = "    NLA_REJECT           This attribute is always rejected and `reject_message'"] # [doc = "                         may point to a string to report as the error instead"] # [doc = "                         of the generic one in extended ACK."] # [doc = "    NLA_NESTED           `nested_policy' to a nested policy to validate, must"] # [doc = "                         also set `len' to the max attribute number. Use the"] # [doc = "                         provided NLA_POLICY_NESTED() macro."] # [doc = "                         Note that nla_parse() will validate, but of course not"] # [doc = "                         parse, the nested sub-policies."] # [doc = "    NLA_NESTED_ARRAY     `nested_policy' points to a nested policy to validate,"] # [doc = "                         must also set `len' to the max attribute number. Use"] # [doc = "                         the provided NLA_POLICY_NESTED_ARRAY() macro."] # [doc = "                         The difference to NLA_NESTED is the structure:"] # [doc = "                         NLA_NESTED has the nested attributes directly inside"] # [doc = "                         while an array has the nested attributes at another"] # [doc = "                         level down and the attribute types directly in the"] # [doc = "                         nesting don't matter."] # [doc = "    NLA_U8,"] # [doc = "    NLA_U16,"] # [doc = "    NLA_U32,"] # [doc = "    NLA_U64,"] # [doc = "    NLA_S8,"] # [doc = "    NLA_S16,"] # [doc = "    NLA_S32,"] # [doc = "    NLA_S64              The `min' and `max' fields are used depending on the"] # [doc = "                         validation_type field, if that is min/max/range then"] # [doc = "                         the min, max or both are used (respectively) to check"] # [doc = "                         the value of the integer attribute."] # [doc = "                         Note that in the interest of code simplicity and"] # [doc = "                         struct size both limits are s16, so you cannot"] # [doc = "                         enforce a range that doesn't fall within the range"] # [doc = "                         of s16 - do that as usual in the code instead."] # [doc = "                         Use the NLA_POLICY_MIN(), NLA_POLICY_MAX() and"] # [doc = "                         NLA_POLICY_RANGE() macros."] # [doc = "    NLA_U8,"] # [doc = "    NLA_U16,"] # [doc = "    NLA_U32,"] # [doc = "    NLA_U64              If the validation_type field instead is set to"] # [doc = "                         NLA_VALIDATE_RANGE_PTR, `range' must be a pointer"] # [doc = "                         to a struct netlink_range_validation that indicates"] # [doc = "                         the min/max values."] # [doc = "                         Use NLA_POLICY_FULL_RANGE()."] # [doc = "    NLA_S8,"] # [doc = "    NLA_S16,"] # [doc = "    NLA_S32,"] # [doc = "    NLA_S64              If the validation_type field instead is set to"] # [doc = "                         NLA_VALIDATE_RANGE_PTR, `range_signed' must be a"] # [doc = "                         pointer to a struct netlink_range_validation_signed"] # [doc = "                         that indicates the min/max values."] # [doc = "                         Use NLA_POLICY_FULL_RANGE_SIGNED()."] # [doc = ""] # [doc = "    NLA_BINARY           If the validation type is like the ones for integers"] # [doc = "                         above, then the min/max length (not value like for"] # [doc = "                         integers) of the attribute is enforced."] # [doc = ""] # [doc = "    All other            Unused - but note that it's a union"] # [doc = ""] # [doc = " Meaning of `validate' field, use via NLA_POLICY_VALIDATE_FN:"] # [doc = "    NLA_BINARY           Validation function called for the attribute."] # [doc = "    All other            Unused - but note that it's a union"] # [doc = ""] # [doc = " Example:"] # [doc = ""] # [doc = " static const u32 myvalidflags = 0xff231023;"] # [doc = ""] # [doc = " static const struct nla_policy my_policy[ATTR_MAX+1] = {"] # [doc = " \t[ATTR_FOO] = { .type = NLA_U16 },"] # [doc = "\t[ATTR_BAR] = { .type = NLA_STRING, .len = BARSIZ },"] # [doc = "\t[ATTR_BAZ] = NLA_POLICY_EXACT_LEN(sizeof(struct mystruct)),"] # [doc = "\t[ATTR_GOO] = NLA_POLICY_BITFIELD32(myvalidflags),"] # [doc = " };"] # ...
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: the link appears in this line:
[INFO] [stdout]            
[INFO] [stdout]            [ATTR_FOO] = { .type = NLA_U16 },
[INFO] [stdout]              ^^^^^^^^
[INFO] [stdout]    = note: no item named `ATTR_FOO` in scope
[INFO] [stdout]    = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
[INFO] [stdout]    = note: `#[warn(rustdoc::broken_intra_doc_links)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `ATTR_BAR`
[INFO] [stdout]   --> /opt/rustwide/target/debug/build/redbpf-probes-feec72bc5f8fa049/out/gen_bindings.rs:10:2282481
[INFO] [stdout]    |
[INFO] [stdout] 10 | ... } # [doc = " struct nla_policy - attribute validation policy"] # [doc = " @type: Type of attribute or NLA_UNSPEC"] # [doc = " @validation_type: type of attribute validation done in addition to"] # [doc = "\ttype-specific validation (e.g. range, function call), see"] # [doc = "\t&enum nla_policy_validation"] # [doc = " @len: Type specific length of payload"] # [doc = ""] # [doc = " Policies are defined as arrays of this struct, the array must be"] # [doc = " accessible by attribute type up to the highest identifier to be expected."] # [doc = ""] # [doc = " Meaning of `len' field:"] # [doc = "    NLA_STRING           Maximum length of string"] # [doc = "    NLA_NUL_STRING       Maximum length of string (excluding NUL)"] # [doc = "    NLA_FLAG             Unused"] # [doc = "    NLA_BINARY           Maximum length of attribute payload"] # [doc = "                         (but see also below with the validation type)"] # [doc = "    NLA_NESTED,"] # [doc = "    NLA_NESTED_ARRAY     Length verification is done by checking len of"] # [doc = "                         nested header (or empty); len field is used if"] # [doc = "                         nested_policy is also used, for the max attr"] # [doc = "                         number in the nested policy."] # [doc = "    NLA_U8, NLA_U16,"] # [doc = "    NLA_U32, NLA_U64,"] # [doc = "    NLA_S8, NLA_S16,"] # [doc = "    NLA_S32, NLA_S64,"] # [doc = "    NLA_MSECS            Leaving the length field zero will verify the"] # [doc = "                         given type fits, using it verifies minimum length"] # [doc = "                         just like \"All other\""] # [doc = "    NLA_BITFIELD32       Unused"] # [doc = "    NLA_REJECT           Unused"] # [doc = "    All other            Minimum length of attribute payload"] # [doc = ""] # [doc = " Meaning of validation union:"] # [doc = "    NLA_BITFIELD32       This is a 32-bit bitmap/bitselector attribute and"] # [doc = "                         `bitfield32_valid' is the u32 value of valid flags"] # [doc = "    NLA_REJECT           This attribute is always rejected and `reject_message'"] # [doc = "                         may point to a string to report as the error instead"] # [doc = "                         of the generic one in extended ACK."] # [doc = "    NLA_NESTED           `nested_policy' to a nested policy to validate, must"] # [doc = "                         also set `len' to the max attribute number. Use the"] # [doc = "                         provided NLA_POLICY_NESTED() macro."] # [doc = "                         Note that nla_parse() will validate, but of course not"] # [doc = "                         parse, the nested sub-policies."] # [doc = "    NLA_NESTED_ARRAY     `nested_policy' points to a nested policy to validate,"] # [doc = "                         must also set `len' to the max attribute number. Use"] # [doc = "                         the provided NLA_POLICY_NESTED_ARRAY() macro."] # [doc = "                         The difference to NLA_NESTED is the structure:"] # [doc = "                         NLA_NESTED has the nested attributes directly inside"] # [doc = "                         while an array has the nested attributes at another"] # [doc = "                         level down and the attribute types directly in the"] # [doc = "                         nesting don't matter."] # [doc = "    NLA_U8,"] # [doc = "    NLA_U16,"] # [doc = "    NLA_U32,"] # [doc = "    NLA_U64,"] # [doc = "    NLA_S8,"] # [doc = "    NLA_S16,"] # [doc = "    NLA_S32,"] # [doc = "    NLA_S64              The `min' and `max' fields are used depending on the"] # [doc = "                         validation_type field, if that is min/max/range then"] # [doc = "                         the min, max or both are used (respectively) to check"] # [doc = "                         the value of the integer attribute."] # [doc = "                         Note that in the interest of code simplicity and"] # [doc = "                         struct size both limits are s16, so you cannot"] # [doc = "                         enforce a range that doesn't fall within the range"] # [doc = "                         of s16 - do that as usual in the code instead."] # [doc = "                         Use the NLA_POLICY_MIN(), NLA_POLICY_MAX() and"] # [doc = "                         NLA_POLICY_RANGE() macros."] # [doc = "    NLA_U8,"] # [doc = "    NLA_U16,"] # [doc = "    NLA_U32,"] # [doc = "    NLA_U64              If the validation_type field instead is set to"] # [doc = "                         NLA_VALIDATE_RANGE_PTR, `range' must be a pointer"] # [doc = "                         to a struct netlink_range_validation that indicates"] # [doc = "                         the min/max values."] # [doc = "                         Use NLA_POLICY_FULL_RANGE()."] # [doc = "    NLA_S8,"] # [doc = "    NLA_S16,"] # [doc = "    NLA_S32,"] # [doc = "    NLA_S64              If the validation_type field instead is set to"] # [doc = "                         NLA_VALIDATE_RANGE_PTR, `range_signed' must be a"] # [doc = "                         pointer to a struct netlink_range_validation_signed"] # [doc = "                         that indicates the min/max values."] # [doc = "                         Use NLA_POLICY_FULL_RANGE_SIGNED()."] # [doc = ""] # [doc = "    NLA_BINARY           If the validation type is like the ones for integers"] # [doc = "                         above, then the min/max length (not value like for"] # [doc = "                         integers) of the attribute is enforced."] # [doc = ""] # [doc = "    All other            Unused - but note that it's a union"] # [doc = ""] # [doc = " Meaning of `validate' field, use via NLA_POLICY_VALIDATE_FN:"] # [doc = "    NLA_BINARY           Validation function called for the attribute."] # [doc = "    All other            Unused - but note that it's a union"] # [doc = ""] # [doc = " Example:"] # [doc = ""] # [doc = " static const u32 myvalidflags = 0xff231023;"] # [doc = ""] # [doc = " static const struct nla_policy my_policy[ATTR_MAX+1] = {"] # [doc = " \t[ATTR_FOO] = { .type = NLA_U16 },"] # [doc = "\t[ATTR_BAR] = { .type = NLA_STRING, .len = BARSIZ },"] # [doc = "\t[ATTR_BAZ] = NLA_POLICY_EXACT_LEN(sizeof(struct mystruct)),"] # [doc = "\t[ATTR_GOO] = NLA_POLICY_BITFIELD32(myvalidflags),"] # [doc = " };"] # ...
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: the link appears in this line:
[INFO] [stdout]            
[INFO] [stdout]            [ATTR_BAR] = { .type = NLA_STRING, .len = BARSIZ },
[INFO] [stdout]             ^^^^^^^^
[INFO] [stdout]    = note: no item named `ATTR_BAR` in scope
[INFO] [stdout]    = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `ATTR_BAZ`
[INFO] [stdout]   --> /opt/rustwide/target/debug/build/redbpf-probes-feec72bc5f8fa049/out/gen_bindings.rs:10:2282481
[INFO] [stdout]    |
[INFO] [stdout] 10 | ... } # [doc = " struct nla_policy - attribute validation policy"] # [doc = " @type: Type of attribute or NLA_UNSPEC"] # [doc = " @validation_type: type of attribute validation done in addition to"] # [doc = "\ttype-specific validation (e.g. range, function call), see"] # [doc = "\t&enum nla_policy_validation"] # [doc = " @len: Type specific length of payload"] # [doc = ""] # [doc = " Policies are defined as arrays of this struct, the array must be"] # [doc = " accessible by attribute type up to the highest identifier to be expected."] # [doc = ""] # [doc = " Meaning of `len' field:"] # [doc = "    NLA_STRING           Maximum length of string"] # [doc = "    NLA_NUL_STRING       Maximum length of string (excluding NUL)"] # [doc = "    NLA_FLAG             Unused"] # [doc = "    NLA_BINARY           Maximum length of attribute payload"] # [doc = "                         (but see also below with the validation type)"] # [doc = "    NLA_NESTED,"] # [doc = "    NLA_NESTED_ARRAY     Length verification is done by checking len of"] # [doc = "                         nested header (or empty); len field is used if"] # [doc = "                         nested_policy is also used, for the max attr"] # [doc = "                         number in the nested policy."] # [doc = "    NLA_U8, NLA_U16,"] # [doc = "    NLA_U32, NLA_U64,"] # [doc = "    NLA_S8, NLA_S16,"] # [doc = "    NLA_S32, NLA_S64,"] # [doc = "    NLA_MSECS            Leaving the length field zero will verify the"] # [doc = "                         given type fits, using it verifies minimum length"] # [doc = "                         just like \"All other\""] # [doc = "    NLA_BITFIELD32       Unused"] # [doc = "    NLA_REJECT           Unused"] # [doc = "    All other            Minimum length of attribute payload"] # [doc = ""] # [doc = " Meaning of validation union:"] # [doc = "    NLA_BITFIELD32       This is a 32-bit bitmap/bitselector attribute and"] # [doc = "                         `bitfield32_valid' is the u32 value of valid flags"] # [doc = "    NLA_REJECT           This attribute is always rejected and `reject_message'"] # [doc = "                         may point to a string to report as the error instead"] # [doc = "                         of the generic one in extended ACK."] # [doc = "    NLA_NESTED           `nested_policy' to a nested policy to validate, must"] # [doc = "                         also set `len' to the max attribute number. Use the"] # [doc = "                         provided NLA_POLICY_NESTED() macro."] # [doc = "                         Note that nla_parse() will validate, but of course not"] # [doc = "                         parse, the nested sub-policies."] # [doc = "    NLA_NESTED_ARRAY     `nested_policy' points to a nested policy to validate,"] # [doc = "                         must also set `len' to the max attribute number. Use"] # [doc = "                         the provided NLA_POLICY_NESTED_ARRAY() macro."] # [doc = "                         The difference to NLA_NESTED is the structure:"] # [doc = "                         NLA_NESTED has the nested attributes directly inside"] # [doc = "                         while an array has the nested attributes at another"] # [doc = "                         level down and the attribute types directly in the"] # [doc = "                         nesting don't matter."] # [doc = "    NLA_U8,"] # [doc = "    NLA_U16,"] # [doc = "    NLA_U32,"] # [doc = "    NLA_U64,"] # [doc = "    NLA_S8,"] # [doc = "    NLA_S16,"] # [doc = "    NLA_S32,"] # [doc = "    NLA_S64              The `min' and `max' fields are used depending on the"] # [doc = "                         validation_type field, if that is min/max/range then"] # [doc = "                         the min, max or both are used (respectively) to check"] # [doc = "                         the value of the integer attribute."] # [doc = "                         Note that in the interest of code simplicity and"] # [doc = "                         struct size both limits are s16, so you cannot"] # [doc = "                         enforce a range that doesn't fall within the range"] # [doc = "                         of s16 - do that as usual in the code instead."] # [doc = "                         Use the NLA_POLICY_MIN(), NLA_POLICY_MAX() and"] # [doc = "                         NLA_POLICY_RANGE() macros."] # [doc = "    NLA_U8,"] # [doc = "    NLA_U16,"] # [doc = "    NLA_U32,"] # [doc = "    NLA_U64              If the validation_type field instead is set to"] # [doc = "                         NLA_VALIDATE_RANGE_PTR, `range' must be a pointer"] # [doc = "                         to a struct netlink_range_validation that indicates"] # [doc = "                         the min/max values."] # [doc = "                         Use NLA_POLICY_FULL_RANGE()."] # [doc = "    NLA_S8,"] # [doc = "    NLA_S16,"] # [doc = "    NLA_S32,"] # [doc = "    NLA_S64              If the validation_type field instead is set to"] # [doc = "                         NLA_VALIDATE_RANGE_PTR, `range_signed' must be a"] # [doc = "                         pointer to a struct netlink_range_validation_signed"] # [doc = "                         that indicates the min/max values."] # [doc = "                         Use NLA_POLICY_FULL_RANGE_SIGNED()."] # [doc = ""] # [doc = "    NLA_BINARY           If the validation type is like the ones for integers"] # [doc = "                         above, then the min/max length (not value like for"] # [doc = "                         integers) of the attribute is enforced."] # [doc = ""] # [doc = "    All other            Unused - but note that it's a union"] # [doc = ""] # [doc = " Meaning of `validate' field, use via NLA_POLICY_VALIDATE_FN:"] # [doc = "    NLA_BINARY           Validation function called for the attribute."] # [doc = "    All other            Unused - but note that it's a union"] # [doc = ""] # [doc = " Example:"] # [doc = ""] # [doc = " static const u32 myvalidflags = 0xff231023;"] # [doc = ""] # [doc = " static const struct nla_policy my_policy[ATTR_MAX+1] = {"] # [doc = " \t[ATTR_FOO] = { .type = NLA_U16 },"] # [doc = "\t[ATTR_BAR] = { .type = NLA_STRING, .len = BARSIZ },"] # [doc = "\t[ATTR_BAZ] = NLA_POLICY_EXACT_LEN(sizeof(struct mystruct)),"] # [doc = "\t[ATTR_GOO] = NLA_POLICY_BITFIELD32(myvalidflags),"] # [doc = " };"] # ...
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: the link appears in this line:
[INFO] [stdout]            
[INFO] [stdout]            [ATTR_BAZ] = NLA_POLICY_EXACT_LEN(sizeof(struct mystruct)),
[INFO] [stdout]             ^^^^^^^^
[INFO] [stdout]    = note: no item named `ATTR_BAZ` in scope
[INFO] [stdout]    = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `ATTR_GOO`
[INFO] [stdout]   --> /opt/rustwide/target/debug/build/redbpf-probes-feec72bc5f8fa049/out/gen_bindings.rs:10:2282481
[INFO] [stdout]    |
[INFO] [stdout] 10 | ... } # [doc = " struct nla_policy - attribute validation policy"] # [doc = " @type: Type of attribute or NLA_UNSPEC"] # [doc = " @validation_type: type of attribute validation done in addition to"] # [doc = "\ttype-specific validation (e.g. range, function call), see"] # [doc = "\t&enum nla_policy_validation"] # [doc = " @len: Type specific length of payload"] # [doc = ""] # [doc = " Policies are defined as arrays of this struct, the array must be"] # [doc = " accessible by attribute type up to the highest identifier to be expected."] # [doc = ""] # [doc = " Meaning of `len' field:"] # [doc = "    NLA_STRING           Maximum length of string"] # [doc = "    NLA_NUL_STRING       Maximum length of string (excluding NUL)"] # [doc = "    NLA_FLAG             Unused"] # [doc = "    NLA_BINARY           Maximum length of attribute payload"] # [doc = "                         (but see also below with the validation type)"] # [doc = "    NLA_NESTED,"] # [doc = "    NLA_NESTED_ARRAY     Length verification is done by checking len of"] # [doc = "                         nested header (or empty); len field is used if"] # [doc = "                         nested_policy is also used, for the max attr"] # [doc = "                         number in the nested policy."] # [doc = "    NLA_U8, NLA_U16,"] # [doc = "    NLA_U32, NLA_U64,"] # [doc = "    NLA_S8, NLA_S16,"] # [doc = "    NLA_S32, NLA_S64,"] # [doc = "    NLA_MSECS            Leaving the length field zero will verify the"] # [doc = "                         given type fits, using it verifies minimum length"] # [doc = "                         just like \"All other\""] # [doc = "    NLA_BITFIELD32       Unused"] # [doc = "    NLA_REJECT           Unused"] # [doc = "    All other            Minimum length of attribute payload"] # [doc = ""] # [doc = " Meaning of validation union:"] # [doc = "    NLA_BITFIELD32       This is a 32-bit bitmap/bitselector attribute and"] # [doc = "                         `bitfield32_valid' is the u32 value of valid flags"] # [doc = "    NLA_REJECT           This attribute is always rejected and `reject_message'"] # [doc = "                         may point to a string to report as the error instead"] # [doc = "                         of the generic one in extended ACK."] # [doc = "    NLA_NESTED           `nested_policy' to a nested policy to validate, must"] # [doc = "                         also set `len' to the max attribute number. Use the"] # [doc = "                         provided NLA_POLICY_NESTED() macro."] # [doc = "                         Note that nla_parse() will validate, but of course not"] # [doc = "                         parse, the nested sub-policies."] # [doc = "    NLA_NESTED_ARRAY     `nested_policy' points to a nested policy to validate,"] # [doc = "                         must also set `len' to the max attribute number. Use"] # [doc = "                         the provided NLA_POLICY_NESTED_ARRAY() macro."] # [doc = "                         The difference to NLA_NESTED is the structure:"] # [doc = "                         NLA_NESTED has the nested attributes directly inside"] # [doc = "                         while an array has the nested attributes at another"] # [doc = "                         level down and the attribute types directly in the"] # [doc = "                         nesting don't matter."] # [doc = "    NLA_U8,"] # [doc = "    NLA_U16,"] # [doc = "    NLA_U32,"] # [doc = "    NLA_U64,"] # [doc = "    NLA_S8,"] # [doc = "    NLA_S16,"] # [doc = "    NLA_S32,"] # [doc = "    NLA_S64              The `min' and `max' fields are used depending on the"] # [doc = "                         validation_type field, if that is min/max/range then"] # [doc = "                         the min, max or both are used (respectively) to check"] # [doc = "                         the value of the integer attribute."] # [doc = "                         Note that in the interest of code simplicity and"] # [doc = "                         struct size both limits are s16, so you cannot"] # [doc = "                         enforce a range that doesn't fall within the range"] # [doc = "                         of s16 - do that as usual in the code instead."] # [doc = "                         Use the NLA_POLICY_MIN(), NLA_POLICY_MAX() and"] # [doc = "                         NLA_POLICY_RANGE() macros."] # [doc = "    NLA_U8,"] # [doc = "    NLA_U16,"] # [doc = "    NLA_U32,"] # [doc = "    NLA_U64              If the validation_type field instead is set to"] # [doc = "                         NLA_VALIDATE_RANGE_PTR, `range' must be a pointer"] # [doc = "                         to a struct netlink_range_validation that indicates"] # [doc = "                         the min/max values."] # [doc = "                         Use NLA_POLICY_FULL_RANGE()."] # [doc = "    NLA_S8,"] # [doc = "    NLA_S16,"] # [doc = "    NLA_S32,"] # [doc = "    NLA_S64              If the validation_type field instead is set to"] # [doc = "                         NLA_VALIDATE_RANGE_PTR, `range_signed' must be a"] # [doc = "                         pointer to a struct netlink_range_validation_signed"] # [doc = "                         that indicates the min/max values."] # [doc = "                         Use NLA_POLICY_FULL_RANGE_SIGNED()."] # [doc = ""] # [doc = "    NLA_BINARY           If the validation type is like the ones for integers"] # [doc = "                         above, then the min/max length (not value like for"] # [doc = "                         integers) of the attribute is enforced."] # [doc = ""] # [doc = "    All other            Unused - but note that it's a union"] # [doc = ""] # [doc = " Meaning of `validate' field, use via NLA_POLICY_VALIDATE_FN:"] # [doc = "    NLA_BINARY           Validation function called for the attribute."] # [doc = "    All other            Unused - but note that it's a union"] # [doc = ""] # [doc = " Example:"] # [doc = ""] # [doc = " static const u32 myvalidflags = 0xff231023;"] # [doc = ""] # [doc = " static const struct nla_policy my_policy[ATTR_MAX+1] = {"] # [doc = " \t[ATTR_FOO] = { .type = NLA_U16 },"] # [doc = "\t[ATTR_BAR] = { .type = NLA_STRING, .len = BARSIZ },"] # [doc = "\t[ATTR_BAZ] = NLA_POLICY_EXACT_LEN(sizeof(struct mystruct)),"] # [doc = "\t[ATTR_GOO] = NLA_POLICY_BITFIELD32(myvalidflags),"] # [doc = " };"] # ...
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: the link appears in this line:
[INFO] [stdout]            
[INFO] [stdout]            [ATTR_GOO] = NLA_POLICY_BITFIELD32(myvalidflags),
[INFO] [stdout]             ^^^^^^^^
[INFO] [stdout]    = note: no item named `ATTR_GOO` in scope
[INFO] [stdout]    = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unknown disambiguator `union with `
[INFO] [stdout]   --> /opt/rustwide/target/debug/build/redbpf-probes-feec72bc5f8fa049/out/gen_bindings.rs:10:2455545
[INFO] [stdout]    |
[INFO] [stdout] 10 | ... ; # [doc = "\tstruct sock_common - minimal network layer representation of sockets"] # [doc = "\t@skc_daddr: Foreign IPv4 addr"] # [doc = "\t@skc_rcv_saddr: Bound local IPv4 addr"] # [doc = "\t@skc_addrpair: 8-byte-aligned __u64 union of @skc_daddr & @skc_rcv_saddr"] # [doc = "\t@skc_hash: hash value used with various protocol lookup tables"] # [doc = "\t@skc_u16hashes: two u16 hash values used by UDP lookup tables"] # [doc = "\t@skc_dport: placeholder for inet_dport/tw_dport"] # [doc = "\t@skc_num: placeholder for inet_num/tw_num"] # [doc = "\t@skc_portpair: __u32 union of @skc_dport & @skc_num"] # [doc = "\t@skc_family: network address family"] # [doc = "\t@skc_state: Connection state"] # [doc = "\t@skc_reuse: %SO_REUSEADDR setting"] # [doc = "\t@skc_reuseport: %SO_REUSEPORT setting"] # [doc = "\t@skc_ipv6only: socket is IPV6 only"] # [doc = "\t@skc_net_refcnt: socket is using net ref counting"] # [doc = "\t@skc_bound_dev_if: bound device index if != 0"] # [doc = "\t@skc_bind_node: bind hash linkage for various protocol lookup tables"] # [doc = "\t@skc_portaddr_node: second hash linkage for UDP/UDP-Lite protocol"] # [doc = "\t@skc_prot: protocol handlers inside a network family"] # [doc = "\t@skc_net: reference to the network namespace of this socket"] # [doc = "\t@skc_v6_daddr: IPV6 destination address"] # [doc = "\t@skc_v6_rcv_saddr: IPV6 source address"] # [doc = "\t@skc_cookie: socket's cookie value"] # [doc = "\t@skc_node: main hash linkage for various protocol lookup tables"] # [doc = "\t@skc_nulls_node: main hash linkage for TCP/UDP/UDP-Lite protocol"] # [doc = "\t@skc_tx_queue_mapping: tx queue number for this connection"] # [doc = "\t@skc_rx_queue_mapping: rx queue number for this connection"] # [doc = "\t@skc_flags: place holder for sk_flags"] # [doc = "\t\t%SO_LINGER (l_onoff), %SO_BROADCAST, %SO_KEEPALIVE,"] # [doc = "\t\t%SO_OOBINLINE settings, %SO_TIMESTAMPING settings"] # [doc = "\t@skc_listener: connection request listener socket (aka rsk_listener)"] # [doc = "\t\t[union with @skc_flags]"] # [doc = "\t@skc_tw_dr: (aka tw_dr) ptr to &struct inet_timewait_death_row"] # [doc = "\t\t[union with @skc_flags]"] # [doc = "\t@skc_incoming_cpu: record/match cpu processing incoming packets"] # [doc = "\t@skc_rcv_wnd: (aka rsk_rcv_wnd) TCP receive window size (possibly scaled)"] # [doc = "\t\t[union with @skc_incoming_cpu]"] # [doc = "\t@skc_tw_rcv_nxt: (aka tw_rcv_nxt) TCP window next expected seq number"] # [doc = "\t\t[union with @skc_incoming_cpu]"] # [doc = "\t@skc_refcnt: reference count"] # [doc = ""] # [doc = "\tThis is the minimal network layer representation of sockets, the header"] # [doc = "\tfor struct sock and struct inet_timewait_sock."] # ...
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: the link appears in this line:
[INFO] [stdout]            
[INFO] [stdout]            [union with @skc_flags]
[INFO] [stdout]              ^^^^^^^^^^^
[INFO] [stdout]    = note: see https://doc.rust-lang.org/1.69.0/rustdoc/write-documentation/linking-to-items-by-name.html#namespaces-and-disambiguators for more info about disambiguators
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unknown disambiguator `union with `
[INFO] [stdout]   --> /opt/rustwide/target/debug/build/redbpf-probes-feec72bc5f8fa049/out/gen_bindings.rs:10:2475919
[INFO] [stdout]    |
[INFO] [stdout] 10 | ... } # [doc = "\tstruct sock - network layer representation of sockets"] # [doc = "\t@__sk_common: shared layout with inet_timewait_sock"] # [doc = "\t@sk_shutdown: mask of %SEND_SHUTDOWN and/or %RCV_SHUTDOWN"] # [doc = "\t@sk_userlocks: %SO_SNDBUF and %SO_RCVBUF settings"] # [doc = "\t@sk_lock:\tsynchronizer"] # [doc = "\t@sk_kern_sock: True if sock is using kernel lock classes"] # [doc = "\t@sk_rcvbuf: size of receive buffer in bytes"] # [doc = "\t@sk_wq: sock wait queue and async head"] # [doc = "\t@sk_rx_dst: receive input route used by early demux"] # [doc = "\t@sk_rx_dst_ifindex: ifindex for @sk_rx_dst"] # [doc = "\t@sk_rx_dst_cookie: cookie for @sk_rx_dst"] # [doc = "\t@sk_dst_cache: destination cache"] # [doc = "\t@sk_dst_pending_confirm: need to confirm neighbour"] # [doc = "\t@sk_policy: flow policy"] # [doc = "\t@sk_rx_skb_cache: cache copy of recently accessed RX skb"] # [doc = "\t@sk_receive_queue: incoming packets"] # [doc = "\t@sk_wmem_alloc: transmit queue bytes committed"] # [doc = "\t@sk_tsq_flags: TCP Small Queues flags"] # [doc = "\t@sk_write_queue: Packet sending queue"] # [doc = "\t@sk_omem_alloc: \"o\" is \"option\" or \"other\""] # [doc = "\t@sk_wmem_queued: persistent queue size"] # [doc = "\t@sk_forward_alloc: space allocated forward"] # [doc = "\t@sk_napi_id: id of the last napi context to receive data for sk"] # [doc = "\t@sk_ll_usec: usecs to busypoll when there is no data"] # [doc = "\t@sk_allocation: allocation mode"] # [doc = "\t@sk_pacing_rate: Pacing rate (if supported by transport/packet scheduler)"] # [doc = "\t@sk_pacing_status: Pacing status (requested, handled by sch_fq)"] # [doc = "\t@sk_max_pacing_rate: Maximum pacing rate (%SO_MAX_PACING_RATE)"] # [doc = "\t@sk_sndbuf: size of send buffer in bytes"] # [doc = "\t@__sk_flags_offset: empty field used to determine location of bitfield"] # [doc = "\t@sk_padding: unused element for alignment"] # [doc = "\t@sk_no_check_tx: %SO_NO_CHECK setting, set checksum in TX packets"] # [doc = "\t@sk_no_check_rx: allow zero checksum in RX packets"] # [doc = "\t@sk_route_caps: route capabilities (e.g. %NETIF_F_TSO)"] # [doc = "\t@sk_route_nocaps: forbidden route capabilities (e.g NETIF_F_GSO_MASK)"] # [doc = "\t@sk_route_forced_caps: static, forced route capabilities"] # [doc = "\t\t(set in tcp_init_sock())"] # [doc = "\t@sk_gso_type: GSO type (e.g. %SKB_GSO_TCPV4)"] # [doc = "\t@sk_gso_max_size: Maximum GSO segment size to build"] # [doc = "\t@sk_gso_max_segs: Maximum number of GSO segments"] # [doc = "\t@sk_pacing_shift: scaling factor for TCP Small Queues"] # [doc = "\t@sk_lingertime: %SO_LINGER l_linger setting"] # [doc = "\t@sk_backlog: always used with the per-socket spinlock held"] # [doc = "\t@sk_callback_lock: used with the callbacks in the end of this struct"] # [doc = "\t@sk_error_queue: rarely used"] # [doc = "\t@sk_prot_creator: sk_prot of original sock creator (see ipv6_setsockopt,"] # [doc = "\t\t\t  IPV6_ADDRFORM for instance)"] # [doc = "\t@sk_err: last error"] # [doc = "\t@sk_err_soft: errors that don't cause failure but are the cause of a"] # [doc = "\t\t      persistent failure not just 'timed out'"] # [doc = "\t@sk_drops: raw/udp drops counter"] # [doc = "\t@sk_ack_backlog: current listen backlog"] # [doc = "\t@sk_max_ack_backlog: listen backlog set in listen()"] # [doc = "\t@sk_uid: user id of owner"] # [doc = "\t@sk_prefer_busy_poll: prefer busypolling over softirq processing"] # [doc = "\t@sk_busy_poll_budget: napi processing budget when busypolling"] # [doc = "\t@sk_priority: %SO_PRIORITY setting"] # [doc = "\t@sk_type: socket type (%SOCK_STREAM, etc)"] # [doc = "\t@sk_protocol: which protocol this socket belongs in this network family"] # [doc = "\t@sk_peer_lock: lock protecting @sk_peer_pid and @sk_peer_cred"] # [doc = "\t@sk_peer_pid: &struct pid for this socket's peer"] # [doc = "\t@sk_peer_cred: %SO_PEERCRED setting"] # [doc = "\t@sk_rcvlowat: %SO_RCVLOWAT setting"] # [doc = "\t@sk_rcvtimeo: %SO_RCVTIMEO setting"] # [doc = "\t@sk_sndtimeo: %SO_SNDTIMEO setting"] # [doc = "\t@sk_txhash: computed flow hash for use on transmit"] # [doc = "\t@sk_filter: socket filtering instructions"] # [doc = "\t@sk_timer: sock cleanup timer"] # [doc = "\t@sk_stamp: time stamp of last packet received"] # [doc = "\t@sk_stamp_seq: lock for accessing sk_stamp on 32 bit architectures only"] # [doc = "\t@sk_tsflags: SO_TIMESTAMPING flags"] # [doc = "\t@sk_bind_phc: SO_TIMESTAMPING bind PHC index of PTP virtual clock"] # [doc = "\t              for timestamping"] # [doc = "\t@sk_tskey: counter to disambiguate concurrent tstamp requests"] # [doc = "\t@sk_zckey: counter to order MSG_ZEROCOPY notifications"] # [doc = "\t@sk_socket: Identd and reporting IO signals"] # [doc = "\t@sk_user_data: RPC layer private data. Write-protected by @sk_callback_lock."] # [doc = "\t@sk_frag: cached page frag"] # [doc = "\t@sk_peek_off: current peek_offset value"] # [doc = "\t@sk_send_head: front of stuff to transmit"] # [doc = "\t@tcp_rtx_queue: TCP re-transmit queue [union with @sk_send_head]"] # [doc = "\t@sk_tx_skb_cache: cache copy of recently accessed TX skb"] # [doc = "\t@sk_security: used by security modules"] # [doc = "\t@sk_mark: generic packet mark"] # [doc = "\t@sk_cgrp_data: cgroup data for this cgroup"] # [doc = "\t@sk_memcg: this socket's memory cgroup association"] # [doc = "\t@sk_write_pending: a write to stream socket waits to start"] # [doc = "\t@sk_state_change: callback to indicate change in the state of the sock"] # [doc = "\t@sk_data_ready: callback to indicate there is data to be processed"] # [doc = "\t@sk_write_space: callback to indicate there is bf sending space available"] # [doc = "\t@sk_error_report: callback to indicate errors (e.g. %MSG_ERRQUEUE)"] # [doc = "\t@sk_backlog_rcv: callback to process the backlog"] # [doc = "\t@sk_validate_xmit_skb: ptr to an optional validate function"] # [doc = "\t@sk_destruct: called at sock freeing time, i.e. when all refcnt == 0"] # [doc = "\t@sk_reuseport_cb: reuseport group container"] # [doc = "\t@sk_bpf_storage: ptr to cache and control for bpf_sk_storage"] # [doc = "\t@sk_rcu: used during RCU grace period"] # [doc = "\t@sk_clockid: clockid used by time-based scheduling (SO_TXTIME)"] # [doc = "\t@sk_txtime_deadline_mode: set deadline mode for SO_TXTIME"] # [doc = "\t@sk_txtime_report_errors: set report errors mode for SO_TXTIME"] # [doc = "\t@sk_txtime_unused: unused txtime flags"] # ...
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: the link appears in this line:
[INFO] [stdout]            
[INFO] [stdout]            @tcp_rtx_queue: TCP re-transmit queue [union with @sk_send_head]
[INFO] [stdout]                                                   ^^^^^^^^^^^
[INFO] [stdout]    = note: see https://doc.rust-lang.org/1.69.0/rustdoc/write-documentation/linking-to-items-by-name.html#namespaces-and-disambiguators for more info about disambiguators
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unresolved link to `RTO`
[INFO] [stdout]   --> /opt/rustwide/target/debug/build/redbpf-probes-feec72bc5f8fa049/out/gen_bindings.rs:10:2606914
[INFO] [stdout]    |
[INFO] [stdout] 10 | ... } # [doc = " inet_connection_sock - INET connection oriented sock"] # [doc = ""] # [doc = " @icsk_accept_queue:\t   FIFO of established children"] # [doc = " @icsk_bind_hash:\t   Bind node"] # [doc = " @icsk_timeout:\t   Timeout"] # [doc = " @icsk_retransmit_timer: Resend (no ack)"] # [doc = " @icsk_rto:\t\t   Retransmit timeout"] # [doc = " @icsk_pmtu_cookie\t   Last pmtu seen by socket"] # [doc = " @icsk_ca_ops\t\t   Pluggable congestion control hook"] # [doc = " @icsk_af_ops\t\t   Operations which are AF_INET{4,6} specific"] # [doc = " @icsk_ulp_ops\t   Pluggable ULP control hook"] # [doc = " @icsk_ulp_data\t   ULP private data"] # [doc = " @icsk_clean_acked\t   Clean acked data hook"] # [doc = " @icsk_listen_portaddr_node\thash to the portaddr listener hashtable"] # [doc = " @icsk_ca_state:\t   Congestion control state"] # [doc = " @icsk_retransmits:\t   Number of unrecovered [RTO] timeouts"] # [doc = " @icsk_pending:\t   Scheduled timer event"] # [doc = " @icsk_backoff:\t   Backoff"] # [doc = " @icsk_syn_retries:      Number of allowed SYN (or equivalent) retries"] # [doc = " @icsk_probes_out:\t   unanswered 0 window probes"] # [doc = " @icsk_ext_hdr_len:\t   Network protocol overhead (IP/IPv6 options)"] # [doc = " @icsk_ack:\t\t   Delayed ACK control data"] # [doc = " @icsk_mtup;\t\t   MTU probing control data"] # [doc = " @icsk_probes_tstamp:    Probe timestamp (cleared by non-zero window ack)"] # [doc = " @icsk_user_timeout:\t   TCP_USER_TIMEOUT value"] # ...
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: the link appears in this line:
[INFO] [stdout]            
[INFO] [stdout]            @icsk_retransmits:   Number of unrecovered [RTO] timeouts
[INFO] [stdout]                                                         ^^^
[INFO] [stdout]    = note: no item named `RTO` in scope
[INFO] [stdout]    = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: this URL is not a hyperlink
[INFO] [stdout]   --> /opt/rustwide/target/debug/build/redbpf-probes-feec72bc5f8fa049/out/gen_bindings.rs:10:81655
[INFO] [stdout]    |
[INFO] [stdout] 10 | ... ; # [doc = " DOC: eBPF Syscall Preamble"] # [doc = ""] # [doc = " The operation to be performed by the **bpf**\\ () system call is determined"] # [doc = " by the *cmd* argument. Each operation takes an accompanying argument,"] # [doc = " provided via *attr*, which is a pointer to a union of type *bpf_attr* (see"] # [doc = " below). The size argument is the size of the union pointed to by *attr*."] # [doc = " DOC: eBPF Syscall Commands"] # [doc = ""] # [doc = " BPF_MAP_CREATE"] # [doc = "\tDescription"] # [doc = "\t\tCreate a map and return a file descriptor that refers to the"] # [doc = "\t\tmap. The close-on-exec file descriptor flag (see **fcntl**\\ (2))"] # [doc = "\t\tis automatically enabled for the new file descriptor."] # [doc = ""] # [doc = "\t\tApplying **close**\\ (2) to the file descriptor returned by"] # [doc = "\t\t**BPF_MAP_CREATE** will delete the map (but see NOTES)."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_MAP_LOOKUP_ELEM"] # [doc = "\tDescription"] # [doc = "\t\tLook up an element with a given *key* in the map referred to"] # [doc = "\t\tby the file descriptor *map_fd*."] # [doc = ""] # [doc = "\t\tThe *flags* argument may be specified as one of the"] # [doc = "\t\tfollowing:"] # [doc = ""] # [doc = "\t\t**BPF_F_LOCK**"] # [doc = "\t\t\tLook up the value of a spin-locked map without"] # [doc = "\t\t\treturning the lock. This must be specified if the"] # [doc = "\t\t\telements contain a spinlock."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_MAP_UPDATE_ELEM"] # [doc = "\tDescription"] # [doc = "\t\tCreate or update an element (key/value pair) in a specified map."] # [doc = ""] # [doc = "\t\tThe *flags* argument should be specified as one of the"] # [doc = "\t\tfollowing:"] # [doc = ""] # [doc = "\t\t**BPF_ANY**"] # [doc = "\t\t\tCreate a new element or update an existing element."] # [doc = "\t\t**BPF_NOEXIST**"] # [doc = "\t\t\tCreate a new element only if it did not exist."] # [doc = "\t\t**BPF_EXIST**"] # [doc = "\t\t\tUpdate an existing element."] # [doc = "\t\t**BPF_F_LOCK**"] # [doc = "\t\t\tUpdate a spin_lock-ed map element."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = "\t\tMay set *errno* to **EINVAL**, **EPERM**, **ENOMEM**,"] # [doc = "\t\t**E2BIG**, **EEXIST**, or **ENOENT**."] # [doc = ""] # [doc = "\t\t**E2BIG**"] # [doc = "\t\t\tThe number of elements in the map reached the"] # [doc = "\t\t\t*max_entries* limit specified at map creation time."] # [doc = "\t\t**EEXIST**"] # [doc = "\t\t\tIf *flags* specifies **BPF_NOEXIST** and the element"] # [doc = "\t\t\twith *key* already exists in the map."] # [doc = "\t\t**ENOENT**"] # [doc = "\t\t\tIf *flags* specifies **BPF_EXIST** and the element with"] # [doc = "\t\t\t*key* does not exist in the map."] # [doc = ""] # [doc = " BPF_MAP_DELETE_ELEM"] # [doc = "\tDescription"] # [doc = "\t\tLook up and delete an element by key in a specified map."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_MAP_GET_NEXT_KEY"] # [doc = "\tDescription"] # [doc = "\t\tLook up an element by key in a specified map and return the key"] # [doc = "\t\tof the next element. Can be used to iterate over all elements"] # [doc = "\t\tin the map."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = "\t\tThe following cases can be used to iterate over all elements of"] # [doc = "\t\tthe map:"] # [doc = ""] # [doc = "\t\t* If *key* is not found, the operation returns zero and sets"] # [doc = "\t\t  the *next_key* pointer to the key of the first element."] # [doc = "\t\t* If *key* is found, the operation returns zero and sets the"] # [doc = "\t\t  *next_key* pointer to the key of the next element."] # [doc = "\t\t* If *key* is the last element, returns -1 and *errno* is set"] # [doc = "\t\t  to **ENOENT**."] # [doc = ""] # [doc = "\t\tMay set *errno* to **ENOMEM**, **EFAULT**, **EPERM**, or"] # [doc = "\t\t**EINVAL** on error."] # [doc = ""] # [doc = " BPF_PROG_LOAD"] # [doc = "\tDescription"] # [doc = "\t\tVerify and load an eBPF program, returning a new file"] # [doc = "\t\tdescriptor associated with the program."] # [doc = ""] # [doc = "\t\tApplying **close**\\ (2) to the file descriptor returned by"] # [doc = "\t\t**BPF_PROG_LOAD** will unload the eBPF program (but see NOTES)."] # [doc = ""] # [doc = "\t\tThe close-on-exec file descriptor flag (see **fcntl**\\ (2)) is"] # [doc = "\t\tautomatically enabled for the new file descriptor."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_OBJ_PIN"] # [doc = "\tDescription"] # [doc = "\t\tPin an eBPF program or map referred by the specified *bpf_fd*"] # [doc = "\t\tto the provided *pathname* on the filesystem."] # [doc = ""] # [doc = "\t\tThe *pathname* argument must not contain a dot (\".\")."] # [doc = ""] # [doc = "\t\tOn success, *pathname* retains a reference to the eBPF object,"] # [doc = "\t\tpreventing deallocation of the object when the original"] # [doc = "\t\t*bpf_fd* is closed. This allow the eBPF object to live beyond"] # [doc = "\t\t**close**\\ (\\ *bpf_fd*\\ ), and hence the lifetime of the parent"] # [doc = "\t\tprocess."] # [doc = ""] # [doc = "\t\tApplying **unlink**\\ (2) or similar calls to the *pathname*"] # [doc = "\t\tunpins the object from the filesystem, removing the reference."] # [doc = "\t\tIf no other file descriptors or filesystem nodes refer to the"] # [doc = "\t\tsame object, it will be deallocated (see NOTES)."] # [doc = ""] # [doc = "\t\tThe filesystem type for the parent directory of *pathname* must"] # [doc = "\t\tbe **BPF_FS_MAGIC**."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_OBJ_GET"] # [doc = "\tDescription"] # [doc = "\t\tOpen a file descriptor for the eBPF object pinned to the"] # [doc = "\t\tspecified *pathname*."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_PROG_ATTACH"] # [doc = "\tDescription"] # [doc = "\t\tAttach an eBPF program to a *target_fd* at the specified"] # [doc = "\t\t*attach_type* hook."] # [doc = ""] # [doc = "\t\tThe *attach_type* specifies the eBPF attachment point to"] # [doc = "\t\tattach the program to, and must be one of *bpf_attach_type*"] # [doc = "\t\t(see below)."] # [doc = ""] # [doc = "\t\tThe *attach_bpf_fd* must be a valid file descriptor for a"] # [doc = "\t\tloaded eBPF program of a cgroup, flow dissector, LIRC, sockmap"] # [doc = "\t\tor sock_ops type corresponding to the specified *attach_type*."] # [doc = ""] # [doc = "\t\tThe *target_fd* must be a valid file descriptor for a kernel"] # [doc = "\t\tobject which depends on the attach type of *attach_bpf_fd*:"] # [doc = ""] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_DEVICE**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SKB**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SOCK**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SOCK_ADDR**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SOCKOPT**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SYSCTL**,"] # [doc = "\t\t**BPF_PROG_TYPE_SOCK_OPS**"] # [doc = ""] # [doc = "\t\t\tControl Group v2 hierarchy with the eBPF controller"] # [doc = "\t\t\tenabled. Requires the kernel to be compiled with"] # [doc = "\t\t\t**CONFIG_CGROUP_BPF**."] # [doc = ""] # [doc = "\t\t**BPF_PROG_TYPE_FLOW_DISSECTOR**"] # [doc = ""] # [doc = "\t\t\tNetwork namespace (eg /proc/self/ns/net)."] # [doc = ""] # [doc = "\t\t**BPF_PROG_TYPE_LIRC_MODE2**"] # [doc = ""] # [doc = "\t\t\tLIRC device path (eg /dev/lircN). Requires the kernel"] # [doc = "\t\t\tto be compiled with **CONFIG_BPF_LIRC_MODE2**."] # [doc = ""] # [doc = "\t\t**BPF_PROG_TYPE_SK_SKB**,"] # [doc = "\t\t**BPF_PROG_TYPE_SK_MSG**"] # [doc = ""] # [doc = "\t\t\teBPF map of socket type (eg **BPF_MAP_TYPE_SOCKHASH**)."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_PROG_DETACH"] # [doc = "\tDescription"] # [doc = "\t\tDetach the eBPF program associated with the *target_fd* at the"] # [doc = "\t\thook specified by *attach_type*. The program must have been"] # [doc = "\t\tpreviously attached using **BPF_PROG_ATTACH**."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_PROG_TEST_RUN"] # [doc = "\tDescription"] # [doc = "\t\tRun the eBPF program associated with the *prog_fd* a *repeat*"] # [doc = "\t\tnumber of times against a provided program context *ctx_in* and"] # [doc = "\t\tdata *data_in*, and return the modified program context"] # [doc = "\t\t*ctx_out*, *data_out* (for example, packet data), result of the"] # [doc = "\t\texecution *retval*, and *duration* of the test run."] # [doc = ""] # [doc = "\t\tThe sizes of the buffers provided as input and output"] # [doc = "\t\tparameters *ctx_in*, *ctx_out*, *data_in*, and *data_out* must"] # [doc = "\t\tbe provided in the corresponding variables *ctx_size_in*,"] # [doc = "\t\t*ctx_size_out*, *data_size_in*, and/or *data_size_out*. If any"] # [doc = "\t\tof these parameters are not provided (ie set to NULL), the"] # [doc = "\t\tcorresponding size field must be zero."] # [doc = ""] # [doc = "\t\tSome program types have particular requirements:"] # [doc = ""] # [doc = "\t\t**BPF_PROG_TYPE_SK_LOOKUP**"] # [doc = "\t\t\t*data_in* and *data_out* must be NULL."] # [doc = ""] # [doc = "\t\t**BPF_PROG_TYPE_RAW_TRACEPOINT**,"] # [doc = "\t\t**BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE**"] # [doc = ""] # [doc = "\t\t\t*ctx_out*, *data_in* and *data_out* must be NULL."] # [doc = "\t\t\t*repeat* must be zero."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = "\t\t**ENOSPC**"] # [doc = "\t\t\tEither *data_size_out* or *ctx_size_out* is too small."] # [doc = "\t\t**ENOTSUPP**"] # [doc = "\t\t\tThis command is not supported by the program type of"] # [doc = "\t\t\tthe program referred to by *prog_fd*."] # [doc = ""] # [doc = " BPF_PROG_GET_NEXT_ID"] # [doc = "\tDescription"] # [doc = "\t\tFetch the next eBPF program currently loaded into the kernel."] # [doc = ""] # [doc = "\t\tLooks for the eBPF program with an id greater than *start_id*"] # [doc = "\t\tand updates *next_id* on success. If no other eBPF programs"] # [doc = "\t\tremain with ids higher than *start_id*, returns -1 and sets"] # [doc = "\t\t*errno* to **ENOENT**."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, or when no id remains, -1"] # [doc = "\t\tis returned and *errno* is set appropriately."] # [doc = ""] # [doc = " BPF_MAP_GET_NEXT_ID"] # [doc = "\tDescription"] # [doc = "\t\tFetch the next eBPF map currently loaded into the kernel."] # [doc = ""] # [doc = "\t\tLooks for the eBPF map with an id greater than *start_id*"] # [doc = "\t\tand updates *next_id* on success. If no other eBPF maps"] # [doc = "\t\tremain with ids higher than *start_id*, returns -1 and sets"] # [doc = "\t\t*errno* to **ENOENT**."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, or when no id remains, -1"] # [doc = "\t\tis returned and *errno* is set appropriately."] # [doc = ""] # [doc = " BPF_PROG_GET_FD_BY_ID"] # [doc = "\tDescription"] # [doc = "\t\tOpen a file descriptor for the eBPF program corresponding to"] # [doc = "\t\t*prog_id*."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_MAP_GET_FD_BY_ID"] # [doc = "\tDescription"] # [doc = "\t\tOpen a file descriptor for the eBPF map corresponding to"] # [doc = "\t\t*map_id*."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_OBJ_GET_INFO_BY_FD"] # [doc = "\tDescription"] # [doc = "\t\tObtain information about the eBPF object corresponding to"] # [doc = "\t\t*bpf_fd*."] # [doc = ""] # [doc = "\t\tPopulates up to *info_len* bytes of *info*, which will be in"] # [doc = "\t\tone of the following formats depending on the eBPF object type"] # [doc = "\t\tof *bpf_fd*:"] # [doc = ""] # [doc = "\t\t* **struct bpf_prog_info**"] # [doc = "\t\t* **struct bpf_map_info**"] # [doc = "\t\t* **struct bpf_btf_info**"] # [doc = "\t\t* **struct bpf_link_info**"] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_PROG_QUERY"] # [doc = "\tDescription"] # [doc = "\t\tObtain information about eBPF programs associated with the"] # [doc = "\t\tspecified *attach_type* hook."] # [doc = ""] # [doc = "\t\tThe *target_fd* must be a valid file descriptor for a kernel"] # [doc = "\t\tobject which depends on the attach type of *attach_bpf_fd*:"] # [doc = ""] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_DEVICE**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SKB**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SOCK**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SOCK_ADDR**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SOCKOPT**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SYSCTL**,"] # [doc = "\t\t**BPF_PROG_TYPE_SOCK_OPS**"] # [doc = ""] # [doc = "\t\t\tControl Group v2 hierarchy with the eBPF controller"] # [doc = "\t\t\tenabled. Requires the kernel to be compiled with"] # [doc = "\t\t\t**CONFIG_CGROUP_BPF**."] # [doc = ""] # [doc = "\t\t**BPF_PROG_TYPE_FLOW_DISSECTOR**"] # [doc = ""] # [doc = "\t\t\tNetwork namespace (eg /proc/self/ns/net)."] # [doc = ""] # [doc = "\t\t**BPF_PROG_TYPE_LIRC_MODE2**"] # [doc = ""] # [doc = "\t\t\tLIRC device path (eg /dev/lircN). Requires the kernel"] # [doc = "\t\t\tto be compiled with **CONFIG_BPF_LIRC_MODE2**."] # [doc = ""] # [doc = "\t\t**BPF_PROG_QUERY** always fetches the number of programs"] # [doc = "\t\tattached and the *attach_flags* which were used to attach those"] # [doc = "\t\tprograms. Additionally, if *prog_ids* is nonzero and the number"] # [doc = "\t\tof attached programs is less than *prog_cnt*, populates"] # [doc = "\t\t*prog_ids* with the eBPF program ids of the programs attached"] # [doc = "\t\tat *target_fd*."] # [doc = ""] # [doc = "\t\tThe following flags may alter the result:"] # [doc = ""] # [doc = "\t\t**BPF_F_QUERY_EFFECTIVE**"] # [doc = "\t\t\tOnly return information regarding programs which are"] # [doc = "\t\t\tcurrently effective at the specified *target_fd*."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_RAW_TRACEPOINT_OPEN"] # [doc = "\tDescription"] # [doc = "\t\tAttach an eBPF program to a tracepoint *name* to access kernel"] # [doc = "\t\tinternal arguments of the tracepoint in their raw form."] # [doc = ""] # [doc = "\t\tThe *prog_fd* must be a valid file descriptor associated with"] # [doc = "\t\ta loaded eBPF program of type **BPF_PROG_TYPE_RAW_TRACEPOINT**."] # [doc = ""] # [doc = "\t\tNo ABI guarantees are made about the content of tracepoint"] # [doc = "\t\targuments exposed to the corresponding eBPF program."] # [doc = ""] # [doc = "\t\tApplying **close**\\ (2) to the file descriptor returned by"] # [doc = "\t\t**BPF_RAW_TRACEPOINT_OPEN** will delete the map (but see NOTES)."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_BTF_LOAD"] # [doc = "\tDescription"] # [doc = "\t\tVerify and load BPF Type Format (BTF) metadata into the kernel,"] # [doc = "\t\treturning a new file descriptor associated with the metadata."] # [doc = "\t\tBTF is described in more detail at"] # [doc = "\t\thttps://www.kernel.org/doc/html/latest/bpf/btf.html."] # [doc = ""] # [doc = "\t\tThe *btf* parameter must point to valid memory providing"] # [doc = "\t\t*btf_size* bytes of BTF binary metadata."] # [doc = ""] # [doc = "\t\tThe returned file descriptor can be passed to other **bpf**\\ ()"] # [doc = "\t\tsubcommands such as **BPF_PROG_LOAD** or **BPF_MAP_CREATE** to"] # [doc = "\t\tassociate the BTF with those objects."] # [doc = ""] # [doc = "\t\tSimilar to **BPF_PROG_LOAD**, **BPF_BTF_LOAD** has optional"] # [doc = "\t\tparameters to specify a *btf_log_buf*, *btf_log_size* and"] # [doc = "\t\t*btf_log_level* which allow the kernel to return freeform log"] # [doc = "\t\toutput regarding the BTF verification process."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_BTF_GET_FD_BY_ID"] # [doc = "\tDescription"] # [doc = "\t\tOpen a file descriptor for the BPF Type Format (BTF)"] # [doc = "\t\tcorresponding to *btf_id*."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_TASK_FD_QUERY"] # [doc = "\tDescription"] # [doc = "\t\tObtain information about eBPF programs associated with the"] # [doc = "\t\ttarget process identified by *pid* and *fd*."] # [doc = ""] # [doc = "\t\tIf the *pid* and *fd* are associated with a tracepoint, kprobe"] # [doc = "\t\tor uprobe perf event, then the *prog_id* and *fd_type* will"] # [doc = "\t\tbe populated with the eBPF program id and file descriptor type"] # [doc = "\t\tof type **bpf_task_fd_type**. If associated with a kprobe or"] # [doc = "\t\tuprobe, the  *probe_offset* and *probe_addr* will also be"] # [doc = "\t\tpopulated. Optionally, if *buf* is provided, then up to"] # [doc = "\t\t*buf_len* bytes of *buf* will be populated with the name of"] # [doc = "\t\tthe tracepoint, kprobe or uprobe."] # [doc = ""] # [doc = "\t\tThe resulting *prog_id* may be introspected in deeper detail"] # [doc = "\t\tusing **BPF_PROG_GET_FD_BY_ID** and **BPF_OBJ_GET_INFO_BY_FD**."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_MAP_LOOKUP_AND_DELETE_ELEM"] # [doc = "\tDescription"] # [doc = "\t\tLook up an element with the given *key* in the map referred to"] # [doc = "\t\tby the file descriptor *fd*, and if found, delete the element."] # [doc = ""] # [doc = "\t\tFor **BPF_MAP_TYPE_QUEUE** and **BPF_MAP_TYPE_STACK** map"] # [doc = "\t\ttypes, the *flags* argument needs to be set to 0, but for other"] # [doc = "\t\tmap types, it may be specified as:"] # [doc = ""] # [doc = "\t\t**BPF_F_LOCK**"] # [doc = "\t\t\tLook up and delete the value of a spin-locked map"] # [doc = "\t\t\twithout returning the lock. This must be specified if"] # [doc = "\t\t\tthe elements contain a spinlock."] # [doc = ""] # [doc = "\t\tThe **BPF_MAP_TYPE_QUEUE** and **BPF_MAP_TYPE_STACK** map types"] # [doc = "\t\timplement this command as a \"pop\" operation, deleting the top"] # [doc = "\t\telement rather than one corresponding to *key*."] # [doc = "\t\tThe *key* and *key_len* parameters should be zeroed when"] # [doc = "\t\tissuing this operation for these map types."] # [doc = ""] # [doc = "\t\tThis command is only valid for the following map types:"] # [doc = "\t\t* **BPF_MAP_TYPE_QUEUE**"] # [doc = "\t\t* **BPF_MAP_TYPE_STACK**"] # [doc = "\t\t* **BPF_MAP_TYPE_HASH**"] # [doc = "\t\t* **BPF_MAP_TYPE_PERCPU_HASH**"] # [doc = "\t\t* **BPF_MAP_TYPE_LRU_HASH**"] # [doc = "\t\t* **BPF_MAP_TYPE_LRU_PERCPU_HASH**"] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_MAP_FREEZE"] # [doc = "\tDescription"] # [doc = "\t\tFreeze the permissions of the specified map."] # [doc = ""] # [doc = "\t\tWrite permissions may be frozen by passing zero *flags*."] # [doc = "\t\tUpon success, no future syscall invocations may alter the"] # [doc = "\t\tmap state of *map_fd*. Write operations from eBPF programs"] # [doc = "\t\tare still possible for a frozen map."] # [doc = ""] # [doc = "\t\tNot supported for maps of type **BPF_MAP_TYPE_STRUCT_OPS**."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_BTF_GET_NEXT_ID"] # [doc = "\tDescription"] # [doc = "\t\tFetch the next BPF Type Format (BTF) object currently loaded"] # [doc = "\t\tinto the kernel."] # [doc = ""] # [doc = "\t\tLooks for the BTF object with an id greater than *start_id*"] # [doc = "\t\tand updates *next_id* on success. If no other BTF objects"] # [doc = "\t\tremain with ids higher than *start_id*, returns -1 and sets"] # [doc = "\t\t*errno* to **ENOENT**."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, or when no id remains, -1"] # [doc = "\t\tis returned and *errno* is set appropriately."] # [doc = ""] # [doc = " BPF_MAP_LOOKUP_BATCH"] # [doc = "\tDescription"] # [doc = "\t\tIterate and fetch multiple elements in a map."] # [doc = ""] # [doc = "\t\tTwo opaque values are used to manage batch operations,"] # [doc = "\t\t*in_batch* and *out_batch*. Initially, *in_batch* must be set"] # [doc = "\t\tto NULL to begin the batched operation. After each subsequent"] # [doc = "\t\t**BPF_MAP_LOOKUP_BATCH**, the caller should pass the resultant"] # [doc = "\t\t*out_batch* as the *in_batch* for the next operation to"] # [doc = "\t\tcontinue iteration from the current point."] # [doc = ""] # [doc = "\t\tThe *keys* and *values* are output parameters which must point"] # [doc = "\t\tto memory large enough to hold *count* items based on the key"] # [doc = "\t\tand value size of the map *map_fd*. The *keys* buffer must be"] # [doc = "\t\tof *key_size* * *count*. The *values* buffer must be of"] # [doc = "\t\t*value_size* * *count*."] # [doc = ""] # [doc = "\t\tThe *elem_flags* argument may be specified as one of the"] # [doc = "\t\tfollowing:"] # [doc = ""] # [doc = "\t\t**BPF_F_LOCK**"] # [doc = "\t\t\tLook up the value of a spin-locked map without"] # [doc = "\t\t\treturning the lock. This must be specified if the"] # [doc = "\t\t\telements contain a spinlock."] # [doc = ""] # [doc = "\t\tOn success, *count* elements from the map are copied into the"] # [doc = "\t\tuser buffer, with the keys copied into *keys* and the values"] # [doc = "\t\tcopied into the corresponding indices in *values*."] # [doc = ""] # [doc = "\t\tIf an error is returned and *errno* is not **EFAULT**, *count*"] # [doc = "\t\tis set to the number of successfully processed elements."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = "\t\tMay set *errno* to **ENOSPC** to indicate that *keys* or"] # [doc = "\t\t*values* is too small to dump an entire bucket during"] # [doc = "\t\titeration of a hash-based map type."] # [doc = ""] # [doc = " BPF_MAP_LOOKUP_AND_DELETE_BATCH"] # [doc = "\tDescription"] # [doc = "\t\tIterate and delete all elements in a map."] # [doc = ""] # [doc = "\t\tThis operation has the same behavior as"] # [doc = "\t\t**BPF_MAP_LOOKUP_BATCH** with two exceptions:"] # [doc = ""] # [doc = "\t\t* Every element that is successfully returned is also deleted"] # [doc = "\t\t  from the map. This is at least *count* elements. Note that"] # [doc = "\t\t  *count* is both an input and an output parameter."] # [doc = "\t\t* Upon returning with *errno* set to **EFAULT**, up to"] # [doc = "\t\t  *count* elements may be deleted without returning the keys"] # [doc = "\t\t  and values of the deleted elements."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_MAP_UPDATE_BATCH"] # [doc = "\tDescription"] # [doc = "\t\tUpdate multiple elements in a map by *key*."] # [doc = ""] # [doc = "\t\tThe *keys* and *values* are input parameters which must point"] # [doc = "\t\tto memory large enough to hold *count* items based on the key"] # [doc = "\t\tand value size of the map *map_fd*. The *keys* buffer must be"] # [doc = "\t\tof *key_size* * *count*. The *values* buffer must be of"] # [doc = "\t\t*value_size* * *count*."] # [doc = ""] # [doc = "\t\tEach element specified in *keys* is sequentially updated to the"] # [doc = "\t\tvalue in the corresponding index in *values*. The *in_batch*"] # [doc = "\t\tand *out_batch* parameters are ignored and should be zeroed."] # [doc = ""] # [doc = "\t\tThe *elem_flags* argument should be specified as one of the"] # [doc = "\t\tfollowing:"] # [doc = ""] # [doc = "\t\t**BPF_ANY**"] # [doc = "\t\t\tCreate new elements or update a existing elements."] # [doc = "\t\t**BPF_NOEXIST**"] # [doc = "\t\t\tCreate new elements only if they do not exist."] # [doc = "\t\t**BPF_EXIST**"] # [doc = "\t\t\tUpdate existing elements."] # [doc = "\t\t**BPF_F_LOCK**"] # [doc = "\t\t\tUpdate spin_lock-ed map elements. This must be"] # [doc = "\t\t\tspecified if the map value contains a spinlock."] # [doc = ""] # [doc = "\t\tOn success, *count* elements from the map are updated."] # [doc = ""] # [doc = "\t\tIf an error is returned and *errno* is not **EFAULT**, *count*"] # [doc = "\t\tis set to the number of successfully processed elements."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = "\t\tMay set *errno* to **EINVAL**, **EPERM**, **ENOMEM**, or"] # [doc = "\t\t**E2BIG**. **E2BIG** indicates that the number of elements in"] # [doc = "\t\tthe map reached the *max_entries* limit specified at map"] # [doc = "\t\tcreation time."] # [doc = ""] # [doc = "\t\tMay set *errno* to one of the following error codes under"] # [doc = "\t\tspecific circumstances:"] # [doc = ""] # [doc = "\t\t**EEXIST**"] # [doc = "\t\t\tIf *flags* specifies **BPF_NOEXIST** and the element"] # [doc = "\t\t\twith *key* already exists in the map."] # [doc = "\t\t**ENOENT**"] # [doc = "\t\t\tIf *flags* specifies **BPF_EXIST** and the element with"] # [doc = "\t\t\t*key* does not exist in the map."] # [doc = ""] # [doc = " BPF_MAP_DELETE_BATCH"] # [doc = "\tDescription"] # [doc = "\t\tDelete multiple elements in a map by *key*."] # [doc = ""] # [doc = "\t\tThe *keys* parameter is an input parameter which must point"] # [doc = "\t\tto memory large enough to hold *count* items based on the key"] # [doc = "\t\tsize of the map *map_fd*, that is, *key_size* * *count*."] # [doc = ""] # [doc = "\t\tEach element specified in *keys* is sequentially deleted. The"] # [doc = "\t\t*in_batch*, *out_batch*, and *values* parameters are ignored"] # [doc = "\t\tand should be zeroed."] # [doc = ""] # [doc = "\t\tThe *elem_flags* argument may be specified as one of the"] # [doc = "\t\tfollowing:"] # [doc = ""] # [doc = "\t\t**BPF_F_LOCK**"] # [doc = "\t\t\tLook up the value of a spin-locked map without"] # [doc = "\t\t\treturning the lock. This must be specified if the"] # [doc = "\t\t\telements contain a spinlock."] # [doc = ""] # [doc = "\t\tOn success, *count* elements from the map are updated."] # [doc = ""] # [doc = "\t\tIf an error is returned and *errno* is not **EFAULT**, *count*"] # [doc = "\t\tis set to the number of successfully processed elements. If"] # [doc = "\t\t*errno* is **EFAULT**, up to *count* elements may be been"] # [doc = "\t\tdeleted."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_LINK_CREATE"] # [doc = "\tDescription"] # [doc = "\t\tAttach an eBPF program to a *target_fd* at the specified"] # [doc = "\t\t*attach_type* hook and return a file descriptor handle for"] # [doc = "\t\tmanaging the link."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_LINK_UPDATE"] # [doc = "\tDescription"] # [doc = "\t\tUpdate the eBPF program in the specified *link_fd* to"] # [doc = "\t\t*new_prog_fd*."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_LINK_GET_FD_BY_ID"] # [doc = "\tDescription"] # [doc = "\t\tOpen a file descriptor for the eBPF Link corresponding to"] # [doc = "\t\t*link_id*."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_LINK_GET_NEXT_ID"] # [doc = "\tDescription"] # [doc = "\t\tFetch the next eBPF link currently loaded into the kernel."] # [doc = ""] # [doc = "\t\tLooks for the eBPF link with an id greater than *start_id*"] # [doc = "\t\tand updates *next_id* on success. If no other eBPF links"] # [doc = "\t\tremain with ids higher than *start_id*, returns -1 and sets"] # [doc = "\t\t*errno* to **ENOENT**."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, or when no id remains, -1"] # [doc = "\t\tis returned and *errno* is set appropriately."] # [doc = ""] # [doc = " BPF_ENABLE_STATS"] # [doc = "\tDescription"] # [doc = "\t\tEnable eBPF runtime statistics gathering."] # [doc = ""] # [doc = "\t\tRuntime statistics gathering for the eBPF runtime is disabled"] # [doc = "\t\tby default to minimize the corresponding performance overhead."] # [doc = "\t\tThis command enables statistics globally."] # [doc = ""] # [doc = "\t\tMultiple programs may independently enable statistics."] # [doc = "\t\tAfter gathering the desired statistics, eBPF runtime statistics"] # [doc = "\t\tmay be disabled again by calling **close**\\ (2) for the file"] # [doc = "\t\tdescriptor returned by this function. Statistics will only be"] # [doc = "\t\tdisabled system-wide when all outstanding file descriptors"] # [doc = "\t\treturned by prior calls for this subcommand are closed."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_ITER_CREATE"] # [doc = "\tDescription"] # [doc = "\t\tCreate an iterator on top of the specified *link_fd* (as"] # [doc = "\t\tpreviously created using **BPF_LINK_CREATE**) and return a"] # [doc = "\t\tfile descriptor that can be used to trigger the iteration."] # [doc = ""] # [doc = "\t\tIf the resulting file descriptor is pinned to the filesystem"] # [doc = "\t\tusing  **BPF_OBJ_PIN**, then subsequent **read**\\ (2) syscalls"] # [doc = "\t\tfor that path will trigger the iterator to read kernel state"] # [doc = "\t\tusing the eBPF program attached to *link_fd*."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_LINK_DETACH"] # [doc = "\tDescription"] # [doc = "\t\tForcefully detach the specified *link_fd* from its"] # [doc = "\t\tcorresponding attachment point."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_PROG_BIND_MAP"] # [doc = "\tDescription"] # [doc = "\t\tBind a map to the lifetime of an eBPF program."] # [doc = ""] # [doc = "\t\tThe map identified by *map_fd* is bound to the program"] # [doc = "\t\tidentified by *prog_fd* and only released when *prog_fd* is"] # [doc = "\t\treleased. This may be used in cases where metadata should be"] # [doc = "\t\tassociated with a program which otherwise does not contain any"] # [doc = "\t\treferences to the map (for example, embedded in the eBPF"] # [doc = "\t\tprogram instructions)."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " NOTES"] # [doc = "\teBPF objects (maps and programs) can be shared between processes."] # [doc = ""] # [doc = "\t* After **fork**\\ (2), the child inherits file descriptors"] # [doc = "\t  referring to the same eBPF objects."] # [doc = "\t* File descriptors referring to eBPF objects can be transferred over"] # [doc = "\t  **unix**\\ (7) domain sockets."] # [doc = "\t* File descriptors referring to eBPF objects can be duplicated in the"] # [doc = "\t  usual way, using **dup**\\ (2) and similar calls."] # [doc = "\t* File descriptors referring to eBPF objects can be pinned to the"] # [doc = "\t  filesystem using the **BPF_OBJ_PIN** command of **bpf**\\ (2)."] # [doc = ""] # [doc = "\tAn eBPF object is deallocated only after all file descriptors referring"] # [doc = "\tto the object have been closed and no references remain pinned to the"] # [doc = "\tfilesystem or attached (for example, bound to a program or device)."] pu...
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use an automatic link instead: `<https://www.kernel.org/doc/html/latest/bpf/btf.html.>`
[INFO] [stdout]    |
[INFO] [stdout]    = note: bare URLs are not automatically turned into clickable links
[INFO] [stdout]    = note: `#[warn(rustdoc::bare_urls)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: could not parse code block as Rust code
[INFO] [stdout]   --> /opt/rustwide/target/debug/build/redbpf-probes-feec72bc5f8fa049/out/gen_bindings.rs:10:81655
[INFO] [stdout]    |
[INFO] [stdout] 10 | ... ; # [doc = " DOC: eBPF Syscall Preamble"] # [doc = ""] # [doc = " The operation to be performed by the **bpf**\\ () system call is determined"] # [doc = " by the *cmd* argument. Each operation takes an accompanying argument,"] # [doc = " provided via *attr*, which is a pointer to a union of type *bpf_attr* (see"] # [doc = " below). The size argument is the size of the union pointed to by *attr*."] # [doc = " DOC: eBPF Syscall Commands"] # [doc = ""] # [doc = " BPF_MAP_CREATE"] # [doc = "\tDescription"] # [doc = "\t\tCreate a map and return a file descriptor that refers to the"] # [doc = "\t\tmap. The close-on-exec file descriptor flag (see **fcntl**\\ (2))"] # [doc = "\t\tis automatically enabled for the new file descriptor."] # [doc = ""] # [doc = "\t\tApplying **close**\\ (2) to the file descriptor returned by"] # [doc = "\t\t**BPF_MAP_CREATE** will delete the map (but see NOTES)."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_MAP_LOOKUP_ELEM"] # [doc = "\tDescription"] # [doc = "\t\tLook up an element with a given *key* in the map referred to"] # [doc = "\t\tby the file descriptor *map_fd*."] # [doc = ""] # [doc = "\t\tThe *flags* argument may be specified as one of the"] # [doc = "\t\tfollowing:"] # [doc = ""] # [doc = "\t\t**BPF_F_LOCK**"] # [doc = "\t\t\tLook up the value of a spin-locked map without"] # [doc = "\t\t\treturning the lock. This must be specified if the"] # [doc = "\t\t\telements contain a spinlock."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_MAP_UPDATE_ELEM"] # [doc = "\tDescription"] # [doc = "\t\tCreate or update an element (key/value pair) in a specified map."] # [doc = ""] # [doc = "\t\tThe *flags* argument should be specified as one of the"] # [doc = "\t\tfollowing:"] # [doc = ""] # [doc = "\t\t**BPF_ANY**"] # [doc = "\t\t\tCreate a new element or update an existing element."] # [doc = "\t\t**BPF_NOEXIST**"] # [doc = "\t\t\tCreate a new element only if it did not exist."] # [doc = "\t\t**BPF_EXIST**"] # [doc = "\t\t\tUpdate an existing element."] # [doc = "\t\t**BPF_F_LOCK**"] # [doc = "\t\t\tUpdate a spin_lock-ed map element."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = "\t\tMay set *errno* to **EINVAL**, **EPERM**, **ENOMEM**,"] # [doc = "\t\t**E2BIG**, **EEXIST**, or **ENOENT**."] # [doc = ""] # [doc = "\t\t**E2BIG**"] # [doc = "\t\t\tThe number of elements in the map reached the"] # [doc = "\t\t\t*max_entries* limit specified at map creation time."] # [doc = "\t\t**EEXIST**"] # [doc = "\t\t\tIf *flags* specifies **BPF_NOEXIST** and the element"] # [doc = "\t\t\twith *key* already exists in the map."] # [doc = "\t\t**ENOENT**"] # [doc = "\t\t\tIf *flags* specifies **BPF_EXIST** and the element with"] # [doc = "\t\t\t*key* does not exist in the map."] # [doc = ""] # [doc = " BPF_MAP_DELETE_ELEM"] # [doc = "\tDescription"] # [doc = "\t\tLook up and delete an element by key in a specified map."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_MAP_GET_NEXT_KEY"] # [doc = "\tDescription"] # [doc = "\t\tLook up an element by key in a specified map and return the key"] # [doc = "\t\tof the next element. Can be used to iterate over all elements"] # [doc = "\t\tin the map."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = "\t\tThe following cases can be used to iterate over all elements of"] # [doc = "\t\tthe map:"] # [doc = ""] # [doc = "\t\t* If *key* is not found, the operation returns zero and sets"] # [doc = "\t\t  the *next_key* pointer to the key of the first element."] # [doc = "\t\t* If *key* is found, the operation returns zero and sets the"] # [doc = "\t\t  *next_key* pointer to the key of the next element."] # [doc = "\t\t* If *key* is the last element, returns -1 and *errno* is set"] # [doc = "\t\t  to **ENOENT**."] # [doc = ""] # [doc = "\t\tMay set *errno* to **ENOMEM**, **EFAULT**, **EPERM**, or"] # [doc = "\t\t**EINVAL** on error."] # [doc = ""] # [doc = " BPF_PROG_LOAD"] # [doc = "\tDescription"] # [doc = "\t\tVerify and load an eBPF program, returning a new file"] # [doc = "\t\tdescriptor associated with the program."] # [doc = ""] # [doc = "\t\tApplying **close**\\ (2) to the file descriptor returned by"] # [doc = "\t\t**BPF_PROG_LOAD** will unload the eBPF program (but see NOTES)."] # [doc = ""] # [doc = "\t\tThe close-on-exec file descriptor flag (see **fcntl**\\ (2)) is"] # [doc = "\t\tautomatically enabled for the new file descriptor."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_OBJ_PIN"] # [doc = "\tDescription"] # [doc = "\t\tPin an eBPF program or map referred by the specified *bpf_fd*"] # [doc = "\t\tto the provided *pathname* on the filesystem."] # [doc = ""] # [doc = "\t\tThe *pathname* argument must not contain a dot (\".\")."] # [doc = ""] # [doc = "\t\tOn success, *pathname* retains a reference to the eBPF object,"] # [doc = "\t\tpreventing deallocation of the object when the original"] # [doc = "\t\t*bpf_fd* is closed. This allow the eBPF object to live beyond"] # [doc = "\t\t**close**\\ (\\ *bpf_fd*\\ ), and hence the lifetime of the parent"] # [doc = "\t\tprocess."] # [doc = ""] # [doc = "\t\tApplying **unlink**\\ (2) or similar calls to the *pathname*"] # [doc = "\t\tunpins the object from the filesystem, removing the reference."] # [doc = "\t\tIf no other file descriptors or filesystem nodes refer to the"] # [doc = "\t\tsame object, it will be deallocated (see NOTES)."] # [doc = ""] # [doc = "\t\tThe filesystem type for the parent directory of *pathname* must"] # [doc = "\t\tbe **BPF_FS_MAGIC**."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_OBJ_GET"] # [doc = "\tDescription"] # [doc = "\t\tOpen a file descriptor for the eBPF object pinned to the"] # [doc = "\t\tspecified *pathname*."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_PROG_ATTACH"] # [doc = "\tDescription"] # [doc = "\t\tAttach an eBPF program to a *target_fd* at the specified"] # [doc = "\t\t*attach_type* hook."] # [doc = ""] # [doc = "\t\tThe *attach_type* specifies the eBPF attachment point to"] # [doc = "\t\tattach the program to, and must be one of *bpf_attach_type*"] # [doc = "\t\t(see below)."] # [doc = ""] # [doc = "\t\tThe *attach_bpf_fd* must be a valid file descriptor for a"] # [doc = "\t\tloaded eBPF program of a cgroup, flow dissector, LIRC, sockmap"] # [doc = "\t\tor sock_ops type corresponding to the specified *attach_type*."] # [doc = ""] # [doc = "\t\tThe *target_fd* must be a valid file descriptor for a kernel"] # [doc = "\t\tobject which depends on the attach type of *attach_bpf_fd*:"] # [doc = ""] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_DEVICE**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SKB**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SOCK**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SOCK_ADDR**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SOCKOPT**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SYSCTL**,"] # [doc = "\t\t**BPF_PROG_TYPE_SOCK_OPS**"] # [doc = ""] # [doc = "\t\t\tControl Group v2 hierarchy with the eBPF controller"] # [doc = "\t\t\tenabled. Requires the kernel to be compiled with"] # [doc = "\t\t\t**CONFIG_CGROUP_BPF**."] # [doc = ""] # [doc = "\t\t**BPF_PROG_TYPE_FLOW_DISSECTOR**"] # [doc = ""] # [doc = "\t\t\tNetwork namespace (eg /proc/self/ns/net)."] # [doc = ""] # [doc = "\t\t**BPF_PROG_TYPE_LIRC_MODE2**"] # [doc = ""] # [doc = "\t\t\tLIRC device path (eg /dev/lircN). Requires the kernel"] # [doc = "\t\t\tto be compiled with **CONFIG_BPF_LIRC_MODE2**."] # [doc = ""] # [doc = "\t\t**BPF_PROG_TYPE_SK_SKB**,"] # [doc = "\t\t**BPF_PROG_TYPE_SK_MSG**"] # [doc = ""] # [doc = "\t\t\teBPF map of socket type (eg **BPF_MAP_TYPE_SOCKHASH**)."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_PROG_DETACH"] # [doc = "\tDescription"] # [doc = "\t\tDetach the eBPF program associated with the *target_fd* at the"] # [doc = "\t\thook specified by *attach_type*. The program must have been"] # [doc = "\t\tpreviously attached using **BPF_PROG_ATTACH**."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_PROG_TEST_RUN"] # [doc = "\tDescription"] # [doc = "\t\tRun the eBPF program associated with the *prog_fd* a *repeat*"] # [doc = "\t\tnumber of times against a provided program context *ctx_in* and"] # [doc = "\t\tdata *data_in*, and return the modified program context"] # [doc = "\t\t*ctx_out*, *data_out* (for example, packet data), result of the"] # [doc = "\t\texecution *retval*, and *duration* of the test run."] # [doc = ""] # [doc = "\t\tThe sizes of the buffers provided as input and output"] # [doc = "\t\tparameters *ctx_in*, *ctx_out*, *data_in*, and *data_out* must"] # [doc = "\t\tbe provided in the corresponding variables *ctx_size_in*,"] # [doc = "\t\t*ctx_size_out*, *data_size_in*, and/or *data_size_out*. If any"] # [doc = "\t\tof these parameters are not provided (ie set to NULL), the"] # [doc = "\t\tcorresponding size field must be zero."] # [doc = ""] # [doc = "\t\tSome program types have particular requirements:"] # [doc = ""] # [doc = "\t\t**BPF_PROG_TYPE_SK_LOOKUP**"] # [doc = "\t\t\t*data_in* and *data_out* must be NULL."] # [doc = ""] # [doc = "\t\t**BPF_PROG_TYPE_RAW_TRACEPOINT**,"] # [doc = "\t\t**BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE**"] # [doc = ""] # [doc = "\t\t\t*ctx_out*, *data_in* and *data_out* must be NULL."] # [doc = "\t\t\t*repeat* must be zero."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = "\t\t**ENOSPC**"] # [doc = "\t\t\tEither *data_size_out* or *ctx_size_out* is too small."] # [doc = "\t\t**ENOTSUPP**"] # [doc = "\t\t\tThis command is not supported by the program type of"] # [doc = "\t\t\tthe program referred to by *prog_fd*."] # [doc = ""] # [doc = " BPF_PROG_GET_NEXT_ID"] # [doc = "\tDescription"] # [doc = "\t\tFetch the next eBPF program currently loaded into the kernel."] # [doc = ""] # [doc = "\t\tLooks for the eBPF program with an id greater than *start_id*"] # [doc = "\t\tand updates *next_id* on success. If no other eBPF programs"] # [doc = "\t\tremain with ids higher than *start_id*, returns -1 and sets"] # [doc = "\t\t*errno* to **ENOENT**."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, or when no id remains, -1"] # [doc = "\t\tis returned and *errno* is set appropriately."] # [doc = ""] # [doc = " BPF_MAP_GET_NEXT_ID"] # [doc = "\tDescription"] # [doc = "\t\tFetch the next eBPF map currently loaded into the kernel."] # [doc = ""] # [doc = "\t\tLooks for the eBPF map with an id greater than *start_id*"] # [doc = "\t\tand updates *next_id* on success. If no other eBPF maps"] # [doc = "\t\tremain with ids higher than *start_id*, returns -1 and sets"] # [doc = "\t\t*errno* to **ENOENT**."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, or when no id remains, -1"] # [doc = "\t\tis returned and *errno* is set appropriately."] # [doc = ""] # [doc = " BPF_PROG_GET_FD_BY_ID"] # [doc = "\tDescription"] # [doc = "\t\tOpen a file descriptor for the eBPF program corresponding to"] # [doc = "\t\t*prog_id*."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_MAP_GET_FD_BY_ID"] # [doc = "\tDescription"] # [doc = "\t\tOpen a file descriptor for the eBPF map corresponding to"] # [doc = "\t\t*map_id*."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_OBJ_GET_INFO_BY_FD"] # [doc = "\tDescription"] # [doc = "\t\tObtain information about the eBPF object corresponding to"] # [doc = "\t\t*bpf_fd*."] # [doc = ""] # [doc = "\t\tPopulates up to *info_len* bytes of *info*, which will be in"] # [doc = "\t\tone of the following formats depending on the eBPF object type"] # [doc = "\t\tof *bpf_fd*:"] # [doc = ""] # [doc = "\t\t* **struct bpf_prog_info**"] # [doc = "\t\t* **struct bpf_map_info**"] # [doc = "\t\t* **struct bpf_btf_info**"] # [doc = "\t\t* **struct bpf_link_info**"] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_PROG_QUERY"] # [doc = "\tDescription"] # [doc = "\t\tObtain information about eBPF programs associated with the"] # [doc = "\t\tspecified *attach_type* hook."] # [doc = ""] # [doc = "\t\tThe *target_fd* must be a valid file descriptor for a kernel"] # [doc = "\t\tobject which depends on the attach type of *attach_bpf_fd*:"] # [doc = ""] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_DEVICE**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SKB**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SOCK**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SOCK_ADDR**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SOCKOPT**,"] # [doc = "\t\t**BPF_PROG_TYPE_CGROUP_SYSCTL**,"] # [doc = "\t\t**BPF_PROG_TYPE_SOCK_OPS**"] # [doc = ""] # [doc = "\t\t\tControl Group v2 hierarchy with the eBPF controller"] # [doc = "\t\t\tenabled. Requires the kernel to be compiled with"] # [doc = "\t\t\t**CONFIG_CGROUP_BPF**."] # [doc = ""] # [doc = "\t\t**BPF_PROG_TYPE_FLOW_DISSECTOR**"] # [doc = ""] # [doc = "\t\t\tNetwork namespace (eg /proc/self/ns/net)."] # [doc = ""] # [doc = "\t\t**BPF_PROG_TYPE_LIRC_MODE2**"] # [doc = ""] # [doc = "\t\t\tLIRC device path (eg /dev/lircN). Requires the kernel"] # [doc = "\t\t\tto be compiled with **CONFIG_BPF_LIRC_MODE2**."] # [doc = ""] # [doc = "\t\t**BPF_PROG_QUERY** always fetches the number of programs"] # [doc = "\t\tattached and the *attach_flags* which were used to attach those"] # [doc = "\t\tprograms. Additionally, if *prog_ids* is nonzero and the number"] # [doc = "\t\tof attached programs is less than *prog_cnt*, populates"] # [doc = "\t\t*prog_ids* with the eBPF program ids of the programs attached"] # [doc = "\t\tat *target_fd*."] # [doc = ""] # [doc = "\t\tThe following flags may alter the result:"] # [doc = ""] # [doc = "\t\t**BPF_F_QUERY_EFFECTIVE**"] # [doc = "\t\t\tOnly return information regarding programs which are"] # [doc = "\t\t\tcurrently effective at the specified *target_fd*."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_RAW_TRACEPOINT_OPEN"] # [doc = "\tDescription"] # [doc = "\t\tAttach an eBPF program to a tracepoint *name* to access kernel"] # [doc = "\t\tinternal arguments of the tracepoint in their raw form."] # [doc = ""] # [doc = "\t\tThe *prog_fd* must be a valid file descriptor associated with"] # [doc = "\t\ta loaded eBPF program of type **BPF_PROG_TYPE_RAW_TRACEPOINT**."] # [doc = ""] # [doc = "\t\tNo ABI guarantees are made about the content of tracepoint"] # [doc = "\t\targuments exposed to the corresponding eBPF program."] # [doc = ""] # [doc = "\t\tApplying **close**\\ (2) to the file descriptor returned by"] # [doc = "\t\t**BPF_RAW_TRACEPOINT_OPEN** will delete the map (but see NOTES)."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_BTF_LOAD"] # [doc = "\tDescription"] # [doc = "\t\tVerify and load BPF Type Format (BTF) metadata into the kernel,"] # [doc = "\t\treturning a new file descriptor associated with the metadata."] # [doc = "\t\tBTF is described in more detail at"] # [doc = "\t\thttps://www.kernel.org/doc/html/latest/bpf/btf.html."] # [doc = ""] # [doc = "\t\tThe *btf* parameter must point to valid memory providing"] # [doc = "\t\t*btf_size* bytes of BTF binary metadata."] # [doc = ""] # [doc = "\t\tThe returned file descriptor can be passed to other **bpf**\\ ()"] # [doc = "\t\tsubcommands such as **BPF_PROG_LOAD** or **BPF_MAP_CREATE** to"] # [doc = "\t\tassociate the BTF with those objects."] # [doc = ""] # [doc = "\t\tSimilar to **BPF_PROG_LOAD**, **BPF_BTF_LOAD** has optional"] # [doc = "\t\tparameters to specify a *btf_log_buf*, *btf_log_size* and"] # [doc = "\t\t*btf_log_level* which allow the kernel to return freeform log"] # [doc = "\t\toutput regarding the BTF verification process."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_BTF_GET_FD_BY_ID"] # [doc = "\tDescription"] # [doc = "\t\tOpen a file descriptor for the BPF Type Format (BTF)"] # [doc = "\t\tcorresponding to *btf_id*."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_TASK_FD_QUERY"] # [doc = "\tDescription"] # [doc = "\t\tObtain information about eBPF programs associated with the"] # [doc = "\t\ttarget process identified by *pid* and *fd*."] # [doc = ""] # [doc = "\t\tIf the *pid* and *fd* are associated with a tracepoint, kprobe"] # [doc = "\t\tor uprobe perf event, then the *prog_id* and *fd_type* will"] # [doc = "\t\tbe populated with the eBPF program id and file descriptor type"] # [doc = "\t\tof type **bpf_task_fd_type**. If associated with a kprobe or"] # [doc = "\t\tuprobe, the  *probe_offset* and *probe_addr* will also be"] # [doc = "\t\tpopulated. Optionally, if *buf* is provided, then up to"] # [doc = "\t\t*buf_len* bytes of *buf* will be populated with the name of"] # [doc = "\t\tthe tracepoint, kprobe or uprobe."] # [doc = ""] # [doc = "\t\tThe resulting *prog_id* may be introspected in deeper detail"] # [doc = "\t\tusing **BPF_PROG_GET_FD_BY_ID** and **BPF_OBJ_GET_INFO_BY_FD**."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_MAP_LOOKUP_AND_DELETE_ELEM"] # [doc = "\tDescription"] # [doc = "\t\tLook up an element with the given *key* in the map referred to"] # [doc = "\t\tby the file descriptor *fd*, and if found, delete the element."] # [doc = ""] # [doc = "\t\tFor **BPF_MAP_TYPE_QUEUE** and **BPF_MAP_TYPE_STACK** map"] # [doc = "\t\ttypes, the *flags* argument needs to be set to 0, but for other"] # [doc = "\t\tmap types, it may be specified as:"] # [doc = ""] # [doc = "\t\t**BPF_F_LOCK**"] # [doc = "\t\t\tLook up and delete the value of a spin-locked map"] # [doc = "\t\t\twithout returning the lock. This must be specified if"] # [doc = "\t\t\tthe elements contain a spinlock."] # [doc = ""] # [doc = "\t\tThe **BPF_MAP_TYPE_QUEUE** and **BPF_MAP_TYPE_STACK** map types"] # [doc = "\t\timplement this command as a \"pop\" operation, deleting the top"] # [doc = "\t\telement rather than one corresponding to *key*."] # [doc = "\t\tThe *key* and *key_len* parameters should be zeroed when"] # [doc = "\t\tissuing this operation for these map types."] # [doc = ""] # [doc = "\t\tThis command is only valid for the following map types:"] # [doc = "\t\t* **BPF_MAP_TYPE_QUEUE**"] # [doc = "\t\t* **BPF_MAP_TYPE_STACK**"] # [doc = "\t\t* **BPF_MAP_TYPE_HASH**"] # [doc = "\t\t* **BPF_MAP_TYPE_PERCPU_HASH**"] # [doc = "\t\t* **BPF_MAP_TYPE_LRU_HASH**"] # [doc = "\t\t* **BPF_MAP_TYPE_LRU_PERCPU_HASH**"] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_MAP_FREEZE"] # [doc = "\tDescription"] # [doc = "\t\tFreeze the permissions of the specified map."] # [doc = ""] # [doc = "\t\tWrite permissions may be frozen by passing zero *flags*."] # [doc = "\t\tUpon success, no future syscall invocations may alter the"] # [doc = "\t\tmap state of *map_fd*. Write operations from eBPF programs"] # [doc = "\t\tare still possible for a frozen map."] # [doc = ""] # [doc = "\t\tNot supported for maps of type **BPF_MAP_TYPE_STRUCT_OPS**."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_BTF_GET_NEXT_ID"] # [doc = "\tDescription"] # [doc = "\t\tFetch the next BPF Type Format (BTF) object currently loaded"] # [doc = "\t\tinto the kernel."] # [doc = ""] # [doc = "\t\tLooks for the BTF object with an id greater than *start_id*"] # [doc = "\t\tand updates *next_id* on success. If no other BTF objects"] # [doc = "\t\tremain with ids higher than *start_id*, returns -1 and sets"] # [doc = "\t\t*errno* to **ENOENT**."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, or when no id remains, -1"] # [doc = "\t\tis returned and *errno* is set appropriately."] # [doc = ""] # [doc = " BPF_MAP_LOOKUP_BATCH"] # [doc = "\tDescription"] # [doc = "\t\tIterate and fetch multiple elements in a map."] # [doc = ""] # [doc = "\t\tTwo opaque values are used to manage batch operations,"] # [doc = "\t\t*in_batch* and *out_batch*. Initially, *in_batch* must be set"] # [doc = "\t\tto NULL to begin the batched operation. After each subsequent"] # [doc = "\t\t**BPF_MAP_LOOKUP_BATCH**, the caller should pass the resultant"] # [doc = "\t\t*out_batch* as the *in_batch* for the next operation to"] # [doc = "\t\tcontinue iteration from the current point."] # [doc = ""] # [doc = "\t\tThe *keys* and *values* are output parameters which must point"] # [doc = "\t\tto memory large enough to hold *count* items based on the key"] # [doc = "\t\tand value size of the map *map_fd*. The *keys* buffer must be"] # [doc = "\t\tof *key_size* * *count*. The *values* buffer must be of"] # [doc = "\t\t*value_size* * *count*."] # [doc = ""] # [doc = "\t\tThe *elem_flags* argument may be specified as one of the"] # [doc = "\t\tfollowing:"] # [doc = ""] # [doc = "\t\t**BPF_F_LOCK**"] # [doc = "\t\t\tLook up the value of a spin-locked map without"] # [doc = "\t\t\treturning the lock. This must be specified if the"] # [doc = "\t\t\telements contain a spinlock."] # [doc = ""] # [doc = "\t\tOn success, *count* elements from the map are copied into the"] # [doc = "\t\tuser buffer, with the keys copied into *keys* and the values"] # [doc = "\t\tcopied into the corresponding indices in *values*."] # [doc = ""] # [doc = "\t\tIf an error is returned and *errno* is not **EFAULT**, *count*"] # [doc = "\t\tis set to the number of successfully processed elements."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = "\t\tMay set *errno* to **ENOSPC** to indicate that *keys* or"] # [doc = "\t\t*values* is too small to dump an entire bucket during"] # [doc = "\t\titeration of a hash-based map type."] # [doc = ""] # [doc = " BPF_MAP_LOOKUP_AND_DELETE_BATCH"] # [doc = "\tDescription"] # [doc = "\t\tIterate and delete all elements in a map."] # [doc = ""] # [doc = "\t\tThis operation has the same behavior as"] # [doc = "\t\t**BPF_MAP_LOOKUP_BATCH** with two exceptions:"] # [doc = ""] # [doc = "\t\t* Every element that is successfully returned is also deleted"] # [doc = "\t\t  from the map. This is at least *count* elements. Note that"] # [doc = "\t\t  *count* is both an input and an output parameter."] # [doc = "\t\t* Upon returning with *errno* set to **EFAULT**, up to"] # [doc = "\t\t  *count* elements may be deleted without returning the keys"] # [doc = "\t\t  and values of the deleted elements."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_MAP_UPDATE_BATCH"] # [doc = "\tDescription"] # [doc = "\t\tUpdate multiple elements in a map by *key*."] # [doc = ""] # [doc = "\t\tThe *keys* and *values* are input parameters which must point"] # [doc = "\t\tto memory large enough to hold *count* items based on the key"] # [doc = "\t\tand value size of the map *map_fd*. The *keys* buffer must be"] # [doc = "\t\tof *key_size* * *count*. The *values* buffer must be of"] # [doc = "\t\t*value_size* * *count*."] # [doc = ""] # [doc = "\t\tEach element specified in *keys* is sequentially updated to the"] # [doc = "\t\tvalue in the corresponding index in *values*. The *in_batch*"] # [doc = "\t\tand *out_batch* parameters are ignored and should be zeroed."] # [doc = ""] # [doc = "\t\tThe *elem_flags* argument should be specified as one of the"] # [doc = "\t\tfollowing:"] # [doc = ""] # [doc = "\t\t**BPF_ANY**"] # [doc = "\t\t\tCreate new elements or update a existing elements."] # [doc = "\t\t**BPF_NOEXIST**"] # [doc = "\t\t\tCreate new elements only if they do not exist."] # [doc = "\t\t**BPF_EXIST**"] # [doc = "\t\t\tUpdate existing elements."] # [doc = "\t\t**BPF_F_LOCK**"] # [doc = "\t\t\tUpdate spin_lock-ed map elements. This must be"] # [doc = "\t\t\tspecified if the map value contains a spinlock."] # [doc = ""] # [doc = "\t\tOn success, *count* elements from the map are updated."] # [doc = ""] # [doc = "\t\tIf an error is returned and *errno* is not **EFAULT**, *count*"] # [doc = "\t\tis set to the number of successfully processed elements."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = "\t\tMay set *errno* to **EINVAL**, **EPERM**, **ENOMEM**, or"] # [doc = "\t\t**E2BIG**. **E2BIG** indicates that the number of elements in"] # [doc = "\t\tthe map reached the *max_entries* limit specified at map"] # [doc = "\t\tcreation time."] # [doc = ""] # [doc = "\t\tMay set *errno* to one of the following error codes under"] # [doc = "\t\tspecific circumstances:"] # [doc = ""] # [doc = "\t\t**EEXIST**"] # [doc = "\t\t\tIf *flags* specifies **BPF_NOEXIST** and the element"] # [doc = "\t\t\twith *key* already exists in the map."] # [doc = "\t\t**ENOENT**"] # [doc = "\t\t\tIf *flags* specifies **BPF_EXIST** and the element with"] # [doc = "\t\t\t*key* does not exist in the map."] # [doc = ""] # [doc = " BPF_MAP_DELETE_BATCH"] # [doc = "\tDescription"] # [doc = "\t\tDelete multiple elements in a map by *key*."] # [doc = ""] # [doc = "\t\tThe *keys* parameter is an input parameter which must point"] # [doc = "\t\tto memory large enough to hold *count* items based on the key"] # [doc = "\t\tsize of the map *map_fd*, that is, *key_size* * *count*."] # [doc = ""] # [doc = "\t\tEach element specified in *keys* is sequentially deleted. The"] # [doc = "\t\t*in_batch*, *out_batch*, and *values* parameters are ignored"] # [doc = "\t\tand should be zeroed."] # [doc = ""] # [doc = "\t\tThe *elem_flags* argument may be specified as one of the"] # [doc = "\t\tfollowing:"] # [doc = ""] # [doc = "\t\t**BPF_F_LOCK**"] # [doc = "\t\t\tLook up the value of a spin-locked map without"] # [doc = "\t\t\treturning the lock. This must be specified if the"] # [doc = "\t\t\telements contain a spinlock."] # [doc = ""] # [doc = "\t\tOn success, *count* elements from the map are updated."] # [doc = ""] # [doc = "\t\tIf an error is returned and *errno* is not **EFAULT**, *count*"] # [doc = "\t\tis set to the number of successfully processed elements. If"] # [doc = "\t\t*errno* is **EFAULT**, up to *count* elements may be been"] # [doc = "\t\tdeleted."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_LINK_CREATE"] # [doc = "\tDescription"] # [doc = "\t\tAttach an eBPF program to a *target_fd* at the specified"] # [doc = "\t\t*attach_type* hook and return a file descriptor handle for"] # [doc = "\t\tmanaging the link."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_LINK_UPDATE"] # [doc = "\tDescription"] # [doc = "\t\tUpdate the eBPF program in the specified *link_fd* to"] # [doc = "\t\t*new_prog_fd*."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_LINK_GET_FD_BY_ID"] # [doc = "\tDescription"] # [doc = "\t\tOpen a file descriptor for the eBPF Link corresponding to"] # [doc = "\t\t*link_id*."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_LINK_GET_NEXT_ID"] # [doc = "\tDescription"] # [doc = "\t\tFetch the next eBPF link currently loaded into the kernel."] # [doc = ""] # [doc = "\t\tLooks for the eBPF link with an id greater than *start_id*"] # [doc = "\t\tand updates *next_id* on success. If no other eBPF links"] # [doc = "\t\tremain with ids higher than *start_id*, returns -1 and sets"] # [doc = "\t\t*errno* to **ENOENT**."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, or when no id remains, -1"] # [doc = "\t\tis returned and *errno* is set appropriately."] # [doc = ""] # [doc = " BPF_ENABLE_STATS"] # [doc = "\tDescription"] # [doc = "\t\tEnable eBPF runtime statistics gathering."] # [doc = ""] # [doc = "\t\tRuntime statistics gathering for the eBPF runtime is disabled"] # [doc = "\t\tby default to minimize the corresponding performance overhead."] # [doc = "\t\tThis command enables statistics globally."] # [doc = ""] # [doc = "\t\tMultiple programs may independently enable statistics."] # [doc = "\t\tAfter gathering the desired statistics, eBPF runtime statistics"] # [doc = "\t\tmay be disabled again by calling **close**\\ (2) for the file"] # [doc = "\t\tdescriptor returned by this function. Statistics will only be"] # [doc = "\t\tdisabled system-wide when all outstanding file descriptors"] # [doc = "\t\treturned by prior calls for this subcommand are closed."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_ITER_CREATE"] # [doc = "\tDescription"] # [doc = "\t\tCreate an iterator on top of the specified *link_fd* (as"] # [doc = "\t\tpreviously created using **BPF_LINK_CREATE**) and return a"] # [doc = "\t\tfile descriptor that can be used to trigger the iteration."] # [doc = ""] # [doc = "\t\tIf the resulting file descriptor is pinned to the filesystem"] # [doc = "\t\tusing  **BPF_OBJ_PIN**, then subsequent **read**\\ (2) syscalls"] # [doc = "\t\tfor that path will trigger the iterator to read kernel state"] # [doc = "\t\tusing the eBPF program attached to *link_fd*."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tA new file descriptor (a nonnegative integer), or -1 if an"] # [doc = "\t\terror occurred (in which case, *errno* is set appropriately)."] # [doc = ""] # [doc = " BPF_LINK_DETACH"] # [doc = "\tDescription"] # [doc = "\t\tForcefully detach the specified *link_fd* from its"] # [doc = "\t\tcorresponding attachment point."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " BPF_PROG_BIND_MAP"] # [doc = "\tDescription"] # [doc = "\t\tBind a map to the lifetime of an eBPF program."] # [doc = ""] # [doc = "\t\tThe map identified by *map_fd* is bound to the program"] # [doc = "\t\tidentified by *prog_fd* and only released when *prog_fd* is"] # [doc = "\t\treleased. This may be used in cases where metadata should be"] # [doc = "\t\tassociated with a program which otherwise does not contain any"] # [doc = "\t\treferences to the map (for example, embedded in the eBPF"] # [doc = "\t\tprogram instructions)."] # [doc = ""] # [doc = "\tReturn"] # [doc = "\t\tReturns zero on success. On error, -1 is returned and *errno*"] # [doc = "\t\tis set appropriately."] # [doc = ""] # [doc = " NOTES"] # [doc = "\teBPF objects (maps and programs) can be shared between processes."] # [doc = ""] # [doc = "\t* After **fork**\\ (2), the child inherits file descriptors"] # [doc = "\t  referring to the same eBPF objects."] # [doc = "\t* File descriptors referring to eBPF objects can be transferred over"] # [doc = "\t  **unix**\\ (7) domain sockets."] # [doc = "\t* File descriptors referring to eBPF objects can be duplicated in the"] # [doc = "\t  usual way, using **dup**\\ (2) and similar calls."] # [doc = "\t* File descriptors referring to eBPF objects can be pinned to the"] # [doc = "\t  filesystem using the **BPF_OBJ_PIN** command of **bpf**\\ (2)."] # [doc = ""] # [doc = "\tAn eBPF object is deallocated only after all file descriptors referring"] # [doc = "\tto the object have been closed and no references remain pinned to the"] # [doc = "\tfilesystem or attached (for example, bound to a program or device)."] pu...
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: error from rustc: unknown start of token: \
[INFO] [stdout]    = note: `#[warn(rustdoc::invalid_rust_codeblocks)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: 11 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished dev [unoptimized + debuginfo] target(s) in 33.48s
[INFO] running `Command { std: "docker" "inspect" "6e5764f402debc6852398148ce8e3bf5ed2988d3c68cbcb5659c522dc156d1ce", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "6e5764f402debc6852398148ce8e3bf5ed2988d3c68cbcb5659c522dc156d1ce", kill_on_drop: false }`
[INFO] [stdout] 6e5764f402debc6852398148ce8e3bf5ed2988d3c68cbcb5659c522dc156d1ce
