fidl_fuchsia_fuzzer_common/
fidl_fuchsia_fuzzer_common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11/// Marker indicating the last message in a diagnostic output stream.
12///
13/// In addition to an `Artifact`, long-running workflows may also produce the
14/// standard output, standard error, and system logs. These fuzzer output
15/// streams are provided by `fuchsia.test_manager/RunBuilder` and have no
16/// guaranteed order with respect to FIDL responses. As a result, the streams
17/// need to include an "in-band" signal that indicates when they are complete
18/// for a particular workflow. Clients processing the fuzzer output may use this
19/// marker to synchronize the streams and the FIDL response for `GetArtifact`.
20///
21/// The string is intentionally somewhat long to mitigate the likelihood of it
22/// being emitted by the code under test.
23pub const DONE_MARKER: &str =
24    "DONE: A long-running `fuchsia.fuzzer.Controller` workflow is complete.";
25
26/// Command line flag requesting fuzzing to be performed.
27///
28/// This flag is passed by the `fuzz_manager` to the `test_manager` when
29/// starting fuzzers. Since the fuzzers are run as part of the Test Runner
30/// Framework, they can be started by normal test workflows, e.g. `fx test`. The
31/// presence of this flag indicates the fuzzer is being started to perform
32/// fuzzing; in its absence the fuzzer should simply execute a bounded number of
33/// inputs as a test.
34pub const FUZZ_MODE: &str = "--fuzz";
35
36/// Maximum length of a vector of CoverageData structs.
37///
38/// This value matches the maximum number of LLVM modules libFuzzer can track.
39pub const MAX_COVERAGE_DATA: u64 = 4096;
40
41pub const MAX_PARAMETERS: u16 = 128;
42
43pub const MAX_PARAMETER_LEN: u16 = 256;
44
45/// The maximum number of processes for which stats will be returned via
46/// `Status`.
47pub const MAX_PROCESS_STATS: u16 = 256;
48
49/// Maximum length of a sanitizer options environment variable name.
50///
51/// `sanitizer_options.name` must be something like "...SAN_OPTIONS". The
52/// longest name currently supported on Fuchsia is "UBSAN_OPTIONS". The longest
53/// currently supported on any platform is "HWASAN_OPTIONS".
54pub const MAX_SANITIZER_OPTIONS_NAME_SIZE: u16 = 32;
55
56/// Maximum length of a sanitizer options environment variable value.
57///
58/// `sanitizer_options.value` is a concatenation of "<key>=<value>" pairs
59/// delimited by ':'. AddressSanitizer currently has the most flags, with ~40
60/// sanitizer specific ones and ~70 common ones. Most of these are either
61/// boolean values or short integers. The only long types of flags are paths,
62/// but none these of these are supported on Fuchsia.
63pub const MAX_SANITIZER_OPTIONS_VALUE_SIZE: u16 = 8192;
64
65bitflags! {
66    /// Specifies how a fuzzing engine should configure output streams.
67    ///
68    /// Flags may be combined, e.g. `CLOSE_STDOUT | CLOSE_STDERR`. Support for each
69    /// flag is engine-specific. Specifying an unsupported output mode flag may
70    /// cause `Controller.Configure` to return `ZX_ERR_NOT_SUPPORTED`.
71    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
72    pub struct OutputFlags: u32 {
73        /// Suppress standard output from the engine process. This is analogous to
74        /// libFuzzer's `-close_fd_mask=1`.
75        const CLOSE_STDOUT = 1;
76        /// Suppress standard error from the engine process. Use with care: this may
77        /// remove diagnostic output from the target code (e.g. messages on assert
78        /// failure). This is analogous to libFuzzer's `-close_fd_mask=2`.
79        const CLOSE_STDERR = 2;
80        /// Produce more verbose output from the fuzzer engine. The exact meaning of
81        /// "more verbose" is engine-specific. This is analogous to libFuzzer's
82        /// `-verbosity=2`.
83        const VERBOSE = 4;
84        /// Produce libFuzzer-style output on standard error. This facilitates
85        /// integration with systems like ClusterFuzz.
86        /// See https://llvm.org/docs/LibFuzzer.html#output for example output.
87        const LIBFUZZER = 8;
88    }
89}
90
91impl OutputFlags {
92    #[deprecated = "Strict bits should not use `has_unknown_bits`"]
93    #[inline(always)]
94    pub fn has_unknown_bits(&self) -> bool {
95        false
96    }
97
98    #[deprecated = "Strict bits should not use `get_unknown_bits`"]
99    #[inline(always)]
100    pub fn get_unknown_bits(&self) -> u32 {
101        0
102    }
103}
104
105/// See |Controller.GetCorpusWriter| and |Controller.GetCorpusReader|.
106#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
107pub enum Corpus {
108    /// Indicates a set of fixed, immutable inputs typically provided at
109    /// start-up. These inputs are never discarded when merging.
110    Seed,
111    /// Indicates a set of inputs generated by the fuzzer. These may be modified
112    /// and/or discarded when merging and minimizing the corpus.
113    Live,
114    #[doc(hidden)]
115    __SourceBreaking { unknown_ordinal: u8 },
116}
117
118/// Pattern that matches an unknown `Corpus` member.
119#[macro_export]
120macro_rules! CorpusUnknown {
121    () => {
122        _
123    };
124}
125
126impl Corpus {
127    #[inline]
128    pub fn from_primitive(prim: u8) -> Option<Self> {
129        match prim {
130            1 => Some(Self::Seed),
131            2 => Some(Self::Live),
132            _ => None,
133        }
134    }
135
136    #[inline]
137    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
138        match prim {
139            1 => Self::Seed,
140            2 => Self::Live,
141            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
142        }
143    }
144
145    #[inline]
146    pub fn unknown() -> Self {
147        Self::__SourceBreaking { unknown_ordinal: 0xff }
148    }
149
150    #[inline]
151    pub const fn into_primitive(self) -> u8 {
152        match self {
153            Self::Seed => 1,
154            Self::Live => 2,
155            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
156        }
157    }
158
159    #[inline]
160    pub fn is_unknown(&self) -> bool {
161        match self {
162            Self::__SourceBreaking { unknown_ordinal: _ } => true,
163            _ => false,
164        }
165    }
166}
167
168/// Indicates the result of a long-running fuzzing workflow.
169///
170/// Fuzzers have several "long-running" workflows; that is, the fuzzer may
171/// perform actions for an indefinite period of time. Fuzzing itself is the most
172/// notable example, as the fuzzing engine may continuously generate new inputs
173/// until an error is found. This workflow is represented by the `Fuzz` method
174/// below. Other long-running workflows include `TryOne`, `Cleanse`, `Minimize`
175/// and `Merge`.
176///
177/// These workflows continue executing after their associated call returns. Only
178/// one workflow at a time may be executing. Callers can use `AddMonitor` to
179/// monitor the status of the workflow, and `GetArtifact` to retrieve the
180/// `Result` and optionally associated `Input` when it completes.
181#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
182pub enum Result_ {
183    /// The associated input did not cause any errors to be detected when tried.
184    NoErrors,
185    /// Trying the associated input triggered a memory allocation by an
186    /// instrumented process that exceeded the configured limit.  Some fuzzing
187    /// engines, such as libFuzzer, may not distinguish between this result and
188    /// `OOM`. To differentiate,  examine the fuzzer output.
189    BadMalloc,
190    /// Trying the associated input triggered an exception in an instrumented
191    /// process.
192    Crash,
193    /// Trying the associated input triggered an error in an instrumented
194    /// process that was detected by a sanitizer runtime.
195    Death,
196    /// Trying the associated input caused an instrumented process to exit
197    /// unexpectedly. Some fuzzing engines such as libFuzzer may combine this
198    /// result with `CRASH`. To differentiate, examine the fuzzer output.
199    Exit,
200    /// Trying the associated input triggered a memory leak in an instrumented
201    /// process.
202    Leak,
203    /// Trying the associated input caused an instrumented process's memory
204    /// usage to exceed the configured limit.
205    Oom,
206    /// Trying the associated input took longer than the configured limit.
207    Timeout,
208    /// The associated input was produced by finding the shortest input that
209    /// produces the same error as an original input. See `Minimize`.
210    Minimized,
211    /// The associated input was produced by replacing bytes in an original
212    /// input with PII-free values while preserving the error produced. See
213    /// `Cleanse`.
214    Cleansed,
215    /// The fuzzer corpus has been compacted to only include the shortest inputs
216    /// that preserve overall coverage. This workflow does not have an
217    /// associated input. See `Merge`.
218    Merged,
219    #[doc(hidden)]
220    __SourceBreaking { unknown_ordinal: u32 },
221}
222
223/// Pattern that matches an unknown `Result_` member.
224#[macro_export]
225macro_rules! Result_Unknown {
226    () => {
227        _
228    };
229}
230
231impl Result_ {
232    #[inline]
233    pub fn from_primitive(prim: u32) -> Option<Self> {
234        match prim {
235            1 => Some(Self::NoErrors),
236            2 => Some(Self::BadMalloc),
237            3 => Some(Self::Crash),
238            4 => Some(Self::Death),
239            5 => Some(Self::Exit),
240            6 => Some(Self::Leak),
241            7 => Some(Self::Oom),
242            8 => Some(Self::Timeout),
243            9 => Some(Self::Minimized),
244            10 => Some(Self::Cleansed),
245            11 => Some(Self::Merged),
246            _ => None,
247        }
248    }
249
250    #[inline]
251    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
252        match prim {
253            1 => Self::NoErrors,
254            2 => Self::BadMalloc,
255            3 => Self::Crash,
256            4 => Self::Death,
257            5 => Self::Exit,
258            6 => Self::Leak,
259            7 => Self::Oom,
260            8 => Self::Timeout,
261            9 => Self::Minimized,
262            10 => Self::Cleansed,
263            11 => Self::Merged,
264            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
265        }
266    }
267
268    #[inline]
269    pub fn unknown() -> Self {
270        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
271    }
272
273    #[inline]
274    pub const fn into_primitive(self) -> u32 {
275        match self {
276            Self::NoErrors => 1,
277            Self::BadMalloc => 2,
278            Self::Crash => 3,
279            Self::Death => 4,
280            Self::Exit => 5,
281            Self::Leak => 6,
282            Self::Oom => 7,
283            Self::Timeout => 8,
284            Self::Minimized => 9,
285            Self::Cleansed => 10,
286            Self::Merged => 11,
287            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
288        }
289    }
290
291    #[inline]
292    pub fn is_unknown(&self) -> bool {
293        match self {
294            Self::__SourceBreaking { unknown_ordinal: _ } => true,
295            _ => false,
296        }
297    }
298}
299
300/// Represents types of fuzzer output.
301///
302/// These correspond to the subset of the `fuchsia.test_manager/Artifact`s that
303/// `fuzz_manager` can forward. The name "artifact" is avoided due to its
304/// distinct meaning for fuzzers; namely, `fuchsia.fuzzer.Artifact`.
305#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
306pub enum TestOutput {
307    /// Standard output from fuzzer.
308    Stdout,
309    /// Standard error from fuzzer.
310    Stderr,
311    /// System logs from fuzzer.
312    Syslog,
313    #[doc(hidden)]
314    __SourceBreaking { unknown_ordinal: u32 },
315}
316
317/// Pattern that matches an unknown `TestOutput` member.
318#[macro_export]
319macro_rules! TestOutputUnknown {
320    () => {
321        _
322    };
323}
324
325impl TestOutput {
326    #[inline]
327    pub fn from_primitive(prim: u32) -> Option<Self> {
328        match prim {
329            1 => Some(Self::Stdout),
330            2 => Some(Self::Stderr),
331            3 => Some(Self::Syslog),
332            _ => None,
333        }
334    }
335
336    #[inline]
337    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
338        match prim {
339            1 => Self::Stdout,
340            2 => Self::Stderr,
341            3 => Self::Syslog,
342            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
343        }
344    }
345
346    #[inline]
347    pub fn unknown() -> Self {
348        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
349    }
350
351    #[inline]
352    pub const fn into_primitive(self) -> u32 {
353        match self {
354            Self::Stdout => 1,
355            Self::Stderr => 2,
356            Self::Syslog => 3,
357            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
358        }
359    }
360
361    #[inline]
362    pub fn is_unknown(&self) -> bool {
363        match self {
364            Self::__SourceBreaking { unknown_ordinal: _ } => true,
365            _ => false,
366        }
367    }
368}
369
370/// See `Controller.Monitor`. Used to indicate why an update was sent.
371#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
372pub enum UpdateReason {
373    /// Represents an otherwise unspecified update. Useful when integrating
374    /// other engines as runners, e.g. libFuzzer.
375    Misc,
376    /// A fuzzing action is starting. See, e.g. `Controller.Fuzz`,
377    /// `Controller.Merge`, etc.
378    Init,
379    /// An input produced new feedback.
380    New,
381    /// Periodic status update, configured with `Options.pulse_interval`.
382    Pulse,
383    /// A shorter input for some particular feedback has been found.
384    Reduce,
385    /// A fuzzing action is complete.
386    Done,
387    #[doc(hidden)]
388    __SourceBreaking { unknown_ordinal: u8 },
389}
390
391/// Pattern that matches an unknown `UpdateReason` member.
392#[macro_export]
393macro_rules! UpdateReasonUnknown {
394    () => {
395        _
396    };
397}
398
399impl UpdateReason {
400    #[inline]
401    pub fn from_primitive(prim: u8) -> Option<Self> {
402        match prim {
403            1 => Some(Self::Misc),
404            2 => Some(Self::Init),
405            3 => Some(Self::New),
406            4 => Some(Self::Pulse),
407            5 => Some(Self::Reduce),
408            6 => Some(Self::Done),
409            _ => None,
410        }
411    }
412
413    #[inline]
414    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
415        match prim {
416            1 => Self::Misc,
417            2 => Self::Init,
418            3 => Self::New,
419            4 => Self::Pulse,
420            5 => Self::Reduce,
421            6 => Self::Done,
422            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
423        }
424    }
425
426    #[inline]
427    pub fn unknown() -> Self {
428        Self::__SourceBreaking { unknown_ordinal: 0xff }
429    }
430
431    #[inline]
432    pub const fn into_primitive(self) -> u8 {
433        match self {
434            Self::Misc => 1,
435            Self::Init => 2,
436            Self::New => 3,
437            Self::Pulse => 4,
438            Self::Reduce => 5,
439            Self::Done => 6,
440            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
441        }
442    }
443
444    #[inline]
445    pub fn is_unknown(&self) -> bool {
446        match self {
447            Self::__SourceBreaking { unknown_ordinal: _ } => true,
448            _ => false,
449        }
450    }
451}
452
453#[derive(Clone, Debug, PartialEq)]
454pub struct ControllerConfigureRequest {
455    pub options: Options,
456}
457
458impl fidl::Persistable for ControllerConfigureRequest {}
459
460#[derive(Clone, Debug, PartialEq)]
461pub struct ControllerGetOptionsResponse {
462    pub options: Options,
463}
464
465impl fidl::Persistable for ControllerGetOptionsResponse {}
466
467#[derive(Clone, Debug, PartialEq)]
468pub struct ControllerGetStatusResponse {
469    pub status: Status,
470}
471
472impl fidl::Persistable for ControllerGetStatusResponse {}
473
474#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
475#[repr(C)]
476pub struct CorpusReaderNextResponse {
477    pub result: i32,
478}
479
480impl fidl::Persistable for CorpusReaderNextResponse {}
481
482#[derive(Clone, Debug, PartialEq)]
483pub struct CoverageDataCollectorInitializeResponse {
484    pub options: Options,
485}
486
487impl fidl::Persistable for CoverageDataCollectorInitializeResponse {}
488
489#[derive(Clone, Debug, PartialEq)]
490pub struct CoverageDataProviderSetOptionsRequest {
491    pub options: Options,
492}
493
494impl fidl::Persistable for CoverageDataProviderSetOptionsRequest {}
495
496#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
497pub struct ManagerStopRequest {
498    pub fuzzer_url: String,
499}
500
501impl fidl::Persistable for ManagerStopRequest {}
502
503#[derive(Clone, Debug, PartialEq)]
504pub struct MonitorUpdateRequest {
505    pub reason: UpdateReason,
506    pub status: Status,
507}
508
509impl fidl::Persistable for MonitorUpdateRequest {}
510
511/// Details about an instrumented process.
512///
513/// See also:
514///
515/// * https://fuchsia.dev/fuchsia-src/reference/syscalls/object_get_info#zx_info_task_stats
516/// * https://fuchsia.dev/fuchsia-src/reference/syscalls/object_get_info#zx_info_task_runtime
517#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
518#[repr(C)]
519pub struct ProcessStats {
520    /// The kernel object identifier of the task.
521    pub koid: u64,
522    /// The total size of mapped memory ranges in this process.
523    pub mem_mapped_bytes: u64,
524    /// Committed memory that is only mapped into this process.
525    pub mem_private_bytes: u64,
526    /// Committed memory that is mapped into this and at least one other
527    /// process.
528    pub mem_shared_bytes: u64,
529    /// Estimate of how much of |mem_shared_bytes| that this process owns.
530    pub mem_scaled_shared_bytes: u64,
531    /// The total amount of time this process was running on a CPU and not
532    /// blocked.
533    pub cpu_time: i64,
534    /// The total amount of time this process was ready but not actually using a
535    /// CPU.
536    pub queue_time: i64,
537    /// The total amount of time this process spent handling page faults.
538    pub page_fault_time: i64,
539    /// The total amount of time this process spent waiting on contended kernel
540    /// locks.
541    pub lock_contention_time: i64,
542}
543
544impl fidl::Persistable for ProcessStats {}
545
546#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
547pub struct RegistryDisconnectRequest {
548    pub fuzzer_url: String,
549}
550
551impl fidl::Persistable for RegistryDisconnectRequest {}
552
553/// Corresponds to sanitizer enviroment variables.
554///
555/// The options are ignored unless `name` must end in "...SAN_OPTIONS", e.g.
556/// "ASAN_OPTIONS". `value` should be a ':'-delimited list of options, e.g.
557/// "verbosity=1:malloc_context_size=20".
558///
559/// For more details, see the following:
560///
561/// * https://github.com/google/sanitizers/wiki/SanitizerCommonFlags
562/// * https://github.com/google/sanitizers/wiki/AddressSanitizerFlags
563#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
564pub struct SanitizerOptions {
565    pub name: String,
566    pub value: String,
567}
568
569impl fidl::Persistable for SanitizerOptions {}
570
571#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
572pub struct TargetAdapterGetParametersResponse {
573    pub parameters: Vec<String>,
574}
575
576impl fidl::Persistable for TargetAdapterGetParametersResponse {}
577
578/// See `fuchsia.fuzzer.Controller/Configure`.
579#[derive(Clone, Debug, Default, PartialEq)]
580pub struct Options {
581    /// Perform this many fuzzing runs, then exit normally. If unset (or zero),
582    /// fuzz indefinitely.
583    pub runs: Option<u32>,
584    /// If non-zero, fuzz for this duration and then exit normally. If zero,
585    /// fuzz indefinitely. Defaults to 0.
586    pub max_total_time: Option<i64>,
587    /// PRNG seed to use when generating inputs. The same seed for the same
588    /// target should produce the same inputs. If zero, the current ticks will
589    /// be used. Defaults to 0.
590    pub seed: Option<u32>,
591    /// If non-zero, limit the maximum size of a test input to this size, in
592    /// bytes. Use 0 to disable the limit. Defaults to 1 MB.
593    pub max_input_size: Option<u64>,
594    /// Maximum number of consecutive mutations to apply to an input. Defaults
595    /// to 5.
596    pub mutation_depth: Option<u16>,
597    /// If an AFL-style dictionary is supplied using
598    /// `Controller.WriteDictionary`, include words up to this level. Defaults
599    /// to 0, i.e. words without an explicit level.
600    pub dictionary_level: Option<u16>,
601    /// If true, treat instrumented process exits as fuzzing errors. Defaults to
602    /// false.
603    pub detect_exits: Option<bool>,
604    /// If true, and ASan or LSan are available, try to detect memory leaks.
605    /// Defaults to false. Leak detection can be expensive, so it is recommended
606    /// to first develop a corpus that covers a reasonable amount of the code
607    /// under test before attempting to detect leaks.
608    pub detect_leaks: Option<bool>,
609    /// If non-zero, any run that takes longer than this duration will raise a
610    /// TIMEOUT error. Use 0 to disable the limit. Defaults to 20 minutes.
611    pub run_limit: Option<i64>,
612    /// If non-zero, any allocation over this size in bytes will raise a
613    /// BAD_MALLOC error. Use 0 to disable the limit. Defaults to 2 GB.
614    pub malloc_limit: Option<u64>,
615    /// If non-zero, any process that uses more than this amount of memory in
616    /// bytes will raise an OOM error. Use 0 to disable the limit. Defaults to
617    /// 2 GB.
618    pub oom_limit: Option<u64>,
619    /// If non-zero, purge the sanitizer's allocator quarantine and reclaim
620    /// memory periodically between runs after an interval of this many seconds.
621    /// Use 0 to disable allocator purging. Defaults to 1 second.
622    pub purge_interval: Option<i64>,
623    /// Exit code used by the instrumented process if it encounters a bad
624    /// allocation. Set this if the target already uses the default for another
625    /// reason. Defaults to 2000.
626    pub malloc_exitcode: Option<i32>,
627    /// Exit code used by the instrumented process if it encounters a sanitizer
628    /// error. Set this if the target already uses the default for another
629    /// reason. Defaults to 2001.
630    pub death_exitcode: Option<i32>,
631    /// Exit code used by the instrumented process if it encounters a leak. Set
632    /// this if the target already uses the default for another reason. Defaults
633    /// to 2002.
634    pub leak_exitcode: Option<i32>,
635    /// Exit code used by the instrumented process if it exceeds the OOM limit.
636    /// Set this if the target already uses the default for another reason.
637    /// Defaults to 2003.
638    pub oom_exitcode: Option<i32>,
639    /// If non-zero, the engine will periodically update any added monitors
640    /// after this duration. Defaults to 20 seconds.
641    pub pulse_interval: Option<i64>,
642    /// If true, allow a debugger like `zxdb` to be attached to an instrumented
643    /// process. This may interfere with the engine's ability to detect
644    /// exceptions and is not recommended when fuzzing. It can be useful when
645    /// reproducing an error with a known error-causing input. Defaults to
646    /// false.
647    pub debug: Option<bool>,
648    /// If true, include ClusterFuzz-compatible final statistics in the output
649    /// of a call to `fuchsia.fuzzer.Controller/WatchArtifact`.
650    pub print_final_stats: Option<bool>,
651    /// If true, also use data flow traces as part of the fuzzing coverage data.
652    /// See https://clang.llvm.org/docs/SanitizerCoverage.html#tracing-data-flow
653    /// for more details.
654    pub use_value_profile: Option<bool>,
655    /// Sanitizer options. See `SanitizerOptions`.
656    pub sanitizer_options: Option<SanitizerOptions>,
657    /// Output flags. See `OutputFlags`.
658    pub output_flags: Option<OutputFlags>,
659    #[doc(hidden)]
660    pub __source_breaking: fidl::marker::SourceBreaking,
661}
662
663impl fidl::Persistable for Options {}
664
665/// See `Controller.GetStatus`.
666#[derive(Clone, Debug, Default, PartialEq)]
667pub struct Status {
668    /// True if the fuzzer is working on a commands, e.g. it is fuzzing.
669    pub running: Option<bool>,
670    /// Number of runs performed so far.
671    pub runs: Option<u32>,
672    /// Time spent so far.
673    pub elapsed: Option<i64>,
674    /// Number of program edges covered so far.
675    pub covered_pcs: Option<u64>,
676    /// Number of opaque features encountered so far.
677    pub covered_features: Option<u64>,
678    /// Number of inputs in the "live" corpus.
679    pub corpus_num_inputs: Option<u64>,
680    /// Total size of the inputs in the "live" corpus.
681    pub corpus_total_size: Option<u64>,
682    /// Information about the instrumented processes attached to the engine.
683    pub process_stats: Option<Vec<ProcessStats>>,
684    #[doc(hidden)]
685    pub __source_breaking: fidl::marker::SourceBreaking,
686}
687
688impl fidl::Persistable for Status {}
689
690mod internal {
691    use super::*;
692    unsafe impl fidl::encoding::TypeMarker for OutputFlags {
693        type Owned = Self;
694
695        #[inline(always)]
696        fn inline_align(_context: fidl::encoding::Context) -> usize {
697            4
698        }
699
700        #[inline(always)]
701        fn inline_size(_context: fidl::encoding::Context) -> usize {
702            4
703        }
704    }
705
706    impl fidl::encoding::ValueTypeMarker for OutputFlags {
707        type Borrowed<'a> = Self;
708        #[inline(always)]
709        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
710            *value
711        }
712    }
713
714    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for OutputFlags {
715        #[inline]
716        unsafe fn encode(
717            self,
718            encoder: &mut fidl::encoding::Encoder<'_, D>,
719            offset: usize,
720            _depth: fidl::encoding::Depth,
721        ) -> fidl::Result<()> {
722            encoder.debug_check_bounds::<Self>(offset);
723            if self.bits() & Self::all().bits() != self.bits() {
724                return Err(fidl::Error::InvalidBitsValue);
725            }
726            encoder.write_num(self.bits(), offset);
727            Ok(())
728        }
729    }
730
731    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OutputFlags {
732        #[inline(always)]
733        fn new_empty() -> Self {
734            Self::empty()
735        }
736
737        #[inline]
738        unsafe fn decode(
739            &mut self,
740            decoder: &mut fidl::encoding::Decoder<'_, D>,
741            offset: usize,
742            _depth: fidl::encoding::Depth,
743        ) -> fidl::Result<()> {
744            decoder.debug_check_bounds::<Self>(offset);
745            let prim = decoder.read_num::<u32>(offset);
746            *self = Self::from_bits(prim).ok_or(fidl::Error::InvalidBitsValue)?;
747            Ok(())
748        }
749    }
750    unsafe impl fidl::encoding::TypeMarker for Corpus {
751        type Owned = Self;
752
753        #[inline(always)]
754        fn inline_align(_context: fidl::encoding::Context) -> usize {
755            std::mem::align_of::<u8>()
756        }
757
758        #[inline(always)]
759        fn inline_size(_context: fidl::encoding::Context) -> usize {
760            std::mem::size_of::<u8>()
761        }
762
763        #[inline(always)]
764        fn encode_is_copy() -> bool {
765            false
766        }
767
768        #[inline(always)]
769        fn decode_is_copy() -> bool {
770            false
771        }
772    }
773
774    impl fidl::encoding::ValueTypeMarker for Corpus {
775        type Borrowed<'a> = Self;
776        #[inline(always)]
777        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
778            *value
779        }
780    }
781
782    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Corpus {
783        #[inline]
784        unsafe fn encode(
785            self,
786            encoder: &mut fidl::encoding::Encoder<'_, D>,
787            offset: usize,
788            _depth: fidl::encoding::Depth,
789        ) -> fidl::Result<()> {
790            encoder.debug_check_bounds::<Self>(offset);
791            encoder.write_num(self.into_primitive(), offset);
792            Ok(())
793        }
794    }
795
796    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Corpus {
797        #[inline(always)]
798        fn new_empty() -> Self {
799            Self::unknown()
800        }
801
802        #[inline]
803        unsafe fn decode(
804            &mut self,
805            decoder: &mut fidl::encoding::Decoder<'_, D>,
806            offset: usize,
807            _depth: fidl::encoding::Depth,
808        ) -> fidl::Result<()> {
809            decoder.debug_check_bounds::<Self>(offset);
810            let prim = decoder.read_num::<u8>(offset);
811
812            *self = Self::from_primitive_allow_unknown(prim);
813            Ok(())
814        }
815    }
816    unsafe impl fidl::encoding::TypeMarker for Result_ {
817        type Owned = Self;
818
819        #[inline(always)]
820        fn inline_align(_context: fidl::encoding::Context) -> usize {
821            std::mem::align_of::<u32>()
822        }
823
824        #[inline(always)]
825        fn inline_size(_context: fidl::encoding::Context) -> usize {
826            std::mem::size_of::<u32>()
827        }
828
829        #[inline(always)]
830        fn encode_is_copy() -> bool {
831            false
832        }
833
834        #[inline(always)]
835        fn decode_is_copy() -> bool {
836            false
837        }
838    }
839
840    impl fidl::encoding::ValueTypeMarker for Result_ {
841        type Borrowed<'a> = Self;
842        #[inline(always)]
843        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
844            *value
845        }
846    }
847
848    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Result_ {
849        #[inline]
850        unsafe fn encode(
851            self,
852            encoder: &mut fidl::encoding::Encoder<'_, D>,
853            offset: usize,
854            _depth: fidl::encoding::Depth,
855        ) -> fidl::Result<()> {
856            encoder.debug_check_bounds::<Self>(offset);
857            encoder.write_num(self.into_primitive(), offset);
858            Ok(())
859        }
860    }
861
862    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Result_ {
863        #[inline(always)]
864        fn new_empty() -> Self {
865            Self::unknown()
866        }
867
868        #[inline]
869        unsafe fn decode(
870            &mut self,
871            decoder: &mut fidl::encoding::Decoder<'_, D>,
872            offset: usize,
873            _depth: fidl::encoding::Depth,
874        ) -> fidl::Result<()> {
875            decoder.debug_check_bounds::<Self>(offset);
876            let prim = decoder.read_num::<u32>(offset);
877
878            *self = Self::from_primitive_allow_unknown(prim);
879            Ok(())
880        }
881    }
882    unsafe impl fidl::encoding::TypeMarker for TestOutput {
883        type Owned = Self;
884
885        #[inline(always)]
886        fn inline_align(_context: fidl::encoding::Context) -> usize {
887            std::mem::align_of::<u32>()
888        }
889
890        #[inline(always)]
891        fn inline_size(_context: fidl::encoding::Context) -> usize {
892            std::mem::size_of::<u32>()
893        }
894
895        #[inline(always)]
896        fn encode_is_copy() -> bool {
897            false
898        }
899
900        #[inline(always)]
901        fn decode_is_copy() -> bool {
902            false
903        }
904    }
905
906    impl fidl::encoding::ValueTypeMarker for TestOutput {
907        type Borrowed<'a> = Self;
908        #[inline(always)]
909        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
910            *value
911        }
912    }
913
914    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for TestOutput {
915        #[inline]
916        unsafe fn encode(
917            self,
918            encoder: &mut fidl::encoding::Encoder<'_, D>,
919            offset: usize,
920            _depth: fidl::encoding::Depth,
921        ) -> fidl::Result<()> {
922            encoder.debug_check_bounds::<Self>(offset);
923            encoder.write_num(self.into_primitive(), offset);
924            Ok(())
925        }
926    }
927
928    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TestOutput {
929        #[inline(always)]
930        fn new_empty() -> Self {
931            Self::unknown()
932        }
933
934        #[inline]
935        unsafe fn decode(
936            &mut self,
937            decoder: &mut fidl::encoding::Decoder<'_, D>,
938            offset: usize,
939            _depth: fidl::encoding::Depth,
940        ) -> fidl::Result<()> {
941            decoder.debug_check_bounds::<Self>(offset);
942            let prim = decoder.read_num::<u32>(offset);
943
944            *self = Self::from_primitive_allow_unknown(prim);
945            Ok(())
946        }
947    }
948    unsafe impl fidl::encoding::TypeMarker for UpdateReason {
949        type Owned = Self;
950
951        #[inline(always)]
952        fn inline_align(_context: fidl::encoding::Context) -> usize {
953            std::mem::align_of::<u8>()
954        }
955
956        #[inline(always)]
957        fn inline_size(_context: fidl::encoding::Context) -> usize {
958            std::mem::size_of::<u8>()
959        }
960
961        #[inline(always)]
962        fn encode_is_copy() -> bool {
963            false
964        }
965
966        #[inline(always)]
967        fn decode_is_copy() -> bool {
968            false
969        }
970    }
971
972    impl fidl::encoding::ValueTypeMarker for UpdateReason {
973        type Borrowed<'a> = Self;
974        #[inline(always)]
975        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
976            *value
977        }
978    }
979
980    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for UpdateReason {
981        #[inline]
982        unsafe fn encode(
983            self,
984            encoder: &mut fidl::encoding::Encoder<'_, D>,
985            offset: usize,
986            _depth: fidl::encoding::Depth,
987        ) -> fidl::Result<()> {
988            encoder.debug_check_bounds::<Self>(offset);
989            encoder.write_num(self.into_primitive(), offset);
990            Ok(())
991        }
992    }
993
994    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpdateReason {
995        #[inline(always)]
996        fn new_empty() -> Self {
997            Self::unknown()
998        }
999
1000        #[inline]
1001        unsafe fn decode(
1002            &mut self,
1003            decoder: &mut fidl::encoding::Decoder<'_, D>,
1004            offset: usize,
1005            _depth: fidl::encoding::Depth,
1006        ) -> fidl::Result<()> {
1007            decoder.debug_check_bounds::<Self>(offset);
1008            let prim = decoder.read_num::<u8>(offset);
1009
1010            *self = Self::from_primitive_allow_unknown(prim);
1011            Ok(())
1012        }
1013    }
1014
1015    impl fidl::encoding::ValueTypeMarker for ControllerConfigureRequest {
1016        type Borrowed<'a> = &'a Self;
1017        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1018            value
1019        }
1020    }
1021
1022    unsafe impl fidl::encoding::TypeMarker for ControllerConfigureRequest {
1023        type Owned = Self;
1024
1025        #[inline(always)]
1026        fn inline_align(_context: fidl::encoding::Context) -> usize {
1027            8
1028        }
1029
1030        #[inline(always)]
1031        fn inline_size(_context: fidl::encoding::Context) -> usize {
1032            16
1033        }
1034    }
1035
1036    unsafe impl<D: fidl::encoding::ResourceDialect>
1037        fidl::encoding::Encode<ControllerConfigureRequest, D> for &ControllerConfigureRequest
1038    {
1039        #[inline]
1040        unsafe fn encode(
1041            self,
1042            encoder: &mut fidl::encoding::Encoder<'_, D>,
1043            offset: usize,
1044            _depth: fidl::encoding::Depth,
1045        ) -> fidl::Result<()> {
1046            encoder.debug_check_bounds::<ControllerConfigureRequest>(offset);
1047            // Delegate to tuple encoding.
1048            fidl::encoding::Encode::<ControllerConfigureRequest, D>::encode(
1049                (<Options as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
1050                encoder,
1051                offset,
1052                _depth,
1053            )
1054        }
1055    }
1056    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Options, D>>
1057        fidl::encoding::Encode<ControllerConfigureRequest, D> for (T0,)
1058    {
1059        #[inline]
1060        unsafe fn encode(
1061            self,
1062            encoder: &mut fidl::encoding::Encoder<'_, D>,
1063            offset: usize,
1064            depth: fidl::encoding::Depth,
1065        ) -> fidl::Result<()> {
1066            encoder.debug_check_bounds::<ControllerConfigureRequest>(offset);
1067            // Zero out padding regions. There's no need to apply masks
1068            // because the unmasked parts will be overwritten by fields.
1069            // Write the fields.
1070            self.0.encode(encoder, offset + 0, depth)?;
1071            Ok(())
1072        }
1073    }
1074
1075    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1076        for ControllerConfigureRequest
1077    {
1078        #[inline(always)]
1079        fn new_empty() -> Self {
1080            Self { options: fidl::new_empty!(Options, D) }
1081        }
1082
1083        #[inline]
1084        unsafe fn decode(
1085            &mut self,
1086            decoder: &mut fidl::encoding::Decoder<'_, D>,
1087            offset: usize,
1088            _depth: fidl::encoding::Depth,
1089        ) -> fidl::Result<()> {
1090            decoder.debug_check_bounds::<Self>(offset);
1091            // Verify that padding bytes are zero.
1092            fidl::decode!(Options, D, &mut self.options, decoder, offset + 0, _depth)?;
1093            Ok(())
1094        }
1095    }
1096
1097    impl fidl::encoding::ValueTypeMarker for ControllerGetOptionsResponse {
1098        type Borrowed<'a> = &'a Self;
1099        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1100            value
1101        }
1102    }
1103
1104    unsafe impl fidl::encoding::TypeMarker for ControllerGetOptionsResponse {
1105        type Owned = Self;
1106
1107        #[inline(always)]
1108        fn inline_align(_context: fidl::encoding::Context) -> usize {
1109            8
1110        }
1111
1112        #[inline(always)]
1113        fn inline_size(_context: fidl::encoding::Context) -> usize {
1114            16
1115        }
1116    }
1117
1118    unsafe impl<D: fidl::encoding::ResourceDialect>
1119        fidl::encoding::Encode<ControllerGetOptionsResponse, D> for &ControllerGetOptionsResponse
1120    {
1121        #[inline]
1122        unsafe fn encode(
1123            self,
1124            encoder: &mut fidl::encoding::Encoder<'_, D>,
1125            offset: usize,
1126            _depth: fidl::encoding::Depth,
1127        ) -> fidl::Result<()> {
1128            encoder.debug_check_bounds::<ControllerGetOptionsResponse>(offset);
1129            // Delegate to tuple encoding.
1130            fidl::encoding::Encode::<ControllerGetOptionsResponse, D>::encode(
1131                (<Options as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
1132                encoder,
1133                offset,
1134                _depth,
1135            )
1136        }
1137    }
1138    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Options, D>>
1139        fidl::encoding::Encode<ControllerGetOptionsResponse, D> for (T0,)
1140    {
1141        #[inline]
1142        unsafe fn encode(
1143            self,
1144            encoder: &mut fidl::encoding::Encoder<'_, D>,
1145            offset: usize,
1146            depth: fidl::encoding::Depth,
1147        ) -> fidl::Result<()> {
1148            encoder.debug_check_bounds::<ControllerGetOptionsResponse>(offset);
1149            // Zero out padding regions. There's no need to apply masks
1150            // because the unmasked parts will be overwritten by fields.
1151            // Write the fields.
1152            self.0.encode(encoder, offset + 0, depth)?;
1153            Ok(())
1154        }
1155    }
1156
1157    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1158        for ControllerGetOptionsResponse
1159    {
1160        #[inline(always)]
1161        fn new_empty() -> Self {
1162            Self { options: fidl::new_empty!(Options, D) }
1163        }
1164
1165        #[inline]
1166        unsafe fn decode(
1167            &mut self,
1168            decoder: &mut fidl::encoding::Decoder<'_, D>,
1169            offset: usize,
1170            _depth: fidl::encoding::Depth,
1171        ) -> fidl::Result<()> {
1172            decoder.debug_check_bounds::<Self>(offset);
1173            // Verify that padding bytes are zero.
1174            fidl::decode!(Options, D, &mut self.options, decoder, offset + 0, _depth)?;
1175            Ok(())
1176        }
1177    }
1178
1179    impl fidl::encoding::ValueTypeMarker for ControllerGetStatusResponse {
1180        type Borrowed<'a> = &'a Self;
1181        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1182            value
1183        }
1184    }
1185
1186    unsafe impl fidl::encoding::TypeMarker for ControllerGetStatusResponse {
1187        type Owned = Self;
1188
1189        #[inline(always)]
1190        fn inline_align(_context: fidl::encoding::Context) -> usize {
1191            8
1192        }
1193
1194        #[inline(always)]
1195        fn inline_size(_context: fidl::encoding::Context) -> usize {
1196            16
1197        }
1198    }
1199
1200    unsafe impl<D: fidl::encoding::ResourceDialect>
1201        fidl::encoding::Encode<ControllerGetStatusResponse, D> for &ControllerGetStatusResponse
1202    {
1203        #[inline]
1204        unsafe fn encode(
1205            self,
1206            encoder: &mut fidl::encoding::Encoder<'_, D>,
1207            offset: usize,
1208            _depth: fidl::encoding::Depth,
1209        ) -> fidl::Result<()> {
1210            encoder.debug_check_bounds::<ControllerGetStatusResponse>(offset);
1211            // Delegate to tuple encoding.
1212            fidl::encoding::Encode::<ControllerGetStatusResponse, D>::encode(
1213                (<Status as fidl::encoding::ValueTypeMarker>::borrow(&self.status),),
1214                encoder,
1215                offset,
1216                _depth,
1217            )
1218        }
1219    }
1220    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Status, D>>
1221        fidl::encoding::Encode<ControllerGetStatusResponse, D> for (T0,)
1222    {
1223        #[inline]
1224        unsafe fn encode(
1225            self,
1226            encoder: &mut fidl::encoding::Encoder<'_, D>,
1227            offset: usize,
1228            depth: fidl::encoding::Depth,
1229        ) -> fidl::Result<()> {
1230            encoder.debug_check_bounds::<ControllerGetStatusResponse>(offset);
1231            // Zero out padding regions. There's no need to apply masks
1232            // because the unmasked parts will be overwritten by fields.
1233            // Write the fields.
1234            self.0.encode(encoder, offset + 0, depth)?;
1235            Ok(())
1236        }
1237    }
1238
1239    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1240        for ControllerGetStatusResponse
1241    {
1242        #[inline(always)]
1243        fn new_empty() -> Self {
1244            Self { status: fidl::new_empty!(Status, D) }
1245        }
1246
1247        #[inline]
1248        unsafe fn decode(
1249            &mut self,
1250            decoder: &mut fidl::encoding::Decoder<'_, D>,
1251            offset: usize,
1252            _depth: fidl::encoding::Depth,
1253        ) -> fidl::Result<()> {
1254            decoder.debug_check_bounds::<Self>(offset);
1255            // Verify that padding bytes are zero.
1256            fidl::decode!(Status, D, &mut self.status, decoder, offset + 0, _depth)?;
1257            Ok(())
1258        }
1259    }
1260
1261    impl fidl::encoding::ValueTypeMarker for CorpusReaderNextResponse {
1262        type Borrowed<'a> = &'a Self;
1263        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1264            value
1265        }
1266    }
1267
1268    unsafe impl fidl::encoding::TypeMarker for CorpusReaderNextResponse {
1269        type Owned = Self;
1270
1271        #[inline(always)]
1272        fn inline_align(_context: fidl::encoding::Context) -> usize {
1273            4
1274        }
1275
1276        #[inline(always)]
1277        fn inline_size(_context: fidl::encoding::Context) -> usize {
1278            4
1279        }
1280        #[inline(always)]
1281        fn encode_is_copy() -> bool {
1282            true
1283        }
1284
1285        #[inline(always)]
1286        fn decode_is_copy() -> bool {
1287            true
1288        }
1289    }
1290
1291    unsafe impl<D: fidl::encoding::ResourceDialect>
1292        fidl::encoding::Encode<CorpusReaderNextResponse, D> for &CorpusReaderNextResponse
1293    {
1294        #[inline]
1295        unsafe fn encode(
1296            self,
1297            encoder: &mut fidl::encoding::Encoder<'_, D>,
1298            offset: usize,
1299            _depth: fidl::encoding::Depth,
1300        ) -> fidl::Result<()> {
1301            encoder.debug_check_bounds::<CorpusReaderNextResponse>(offset);
1302            unsafe {
1303                // Copy the object into the buffer.
1304                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1305                (buf_ptr as *mut CorpusReaderNextResponse)
1306                    .write_unaligned((self as *const CorpusReaderNextResponse).read());
1307                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1308                // done second because the memcpy will write garbage to these bytes.
1309            }
1310            Ok(())
1311        }
1312    }
1313    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i32, D>>
1314        fidl::encoding::Encode<CorpusReaderNextResponse, D> for (T0,)
1315    {
1316        #[inline]
1317        unsafe fn encode(
1318            self,
1319            encoder: &mut fidl::encoding::Encoder<'_, D>,
1320            offset: usize,
1321            depth: fidl::encoding::Depth,
1322        ) -> fidl::Result<()> {
1323            encoder.debug_check_bounds::<CorpusReaderNextResponse>(offset);
1324            // Zero out padding regions. There's no need to apply masks
1325            // because the unmasked parts will be overwritten by fields.
1326            // Write the fields.
1327            self.0.encode(encoder, offset + 0, depth)?;
1328            Ok(())
1329        }
1330    }
1331
1332    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1333        for CorpusReaderNextResponse
1334    {
1335        #[inline(always)]
1336        fn new_empty() -> Self {
1337            Self { result: fidl::new_empty!(i32, D) }
1338        }
1339
1340        #[inline]
1341        unsafe fn decode(
1342            &mut self,
1343            decoder: &mut fidl::encoding::Decoder<'_, D>,
1344            offset: usize,
1345            _depth: fidl::encoding::Depth,
1346        ) -> fidl::Result<()> {
1347            decoder.debug_check_bounds::<Self>(offset);
1348            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1349            // Verify that padding bytes are zero.
1350            // Copy from the buffer into the object.
1351            unsafe {
1352                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1353            }
1354            Ok(())
1355        }
1356    }
1357
1358    impl fidl::encoding::ValueTypeMarker for CoverageDataCollectorInitializeResponse {
1359        type Borrowed<'a> = &'a Self;
1360        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1361            value
1362        }
1363    }
1364
1365    unsafe impl fidl::encoding::TypeMarker for CoverageDataCollectorInitializeResponse {
1366        type Owned = Self;
1367
1368        #[inline(always)]
1369        fn inline_align(_context: fidl::encoding::Context) -> usize {
1370            8
1371        }
1372
1373        #[inline(always)]
1374        fn inline_size(_context: fidl::encoding::Context) -> usize {
1375            16
1376        }
1377    }
1378
1379    unsafe impl<D: fidl::encoding::ResourceDialect>
1380        fidl::encoding::Encode<CoverageDataCollectorInitializeResponse, D>
1381        for &CoverageDataCollectorInitializeResponse
1382    {
1383        #[inline]
1384        unsafe fn encode(
1385            self,
1386            encoder: &mut fidl::encoding::Encoder<'_, D>,
1387            offset: usize,
1388            _depth: fidl::encoding::Depth,
1389        ) -> fidl::Result<()> {
1390            encoder.debug_check_bounds::<CoverageDataCollectorInitializeResponse>(offset);
1391            // Delegate to tuple encoding.
1392            fidl::encoding::Encode::<CoverageDataCollectorInitializeResponse, D>::encode(
1393                (<Options as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
1394                encoder,
1395                offset,
1396                _depth,
1397            )
1398        }
1399    }
1400    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Options, D>>
1401        fidl::encoding::Encode<CoverageDataCollectorInitializeResponse, D> for (T0,)
1402    {
1403        #[inline]
1404        unsafe fn encode(
1405            self,
1406            encoder: &mut fidl::encoding::Encoder<'_, D>,
1407            offset: usize,
1408            depth: fidl::encoding::Depth,
1409        ) -> fidl::Result<()> {
1410            encoder.debug_check_bounds::<CoverageDataCollectorInitializeResponse>(offset);
1411            // Zero out padding regions. There's no need to apply masks
1412            // because the unmasked parts will be overwritten by fields.
1413            // Write the fields.
1414            self.0.encode(encoder, offset + 0, depth)?;
1415            Ok(())
1416        }
1417    }
1418
1419    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1420        for CoverageDataCollectorInitializeResponse
1421    {
1422        #[inline(always)]
1423        fn new_empty() -> Self {
1424            Self { options: fidl::new_empty!(Options, D) }
1425        }
1426
1427        #[inline]
1428        unsafe fn decode(
1429            &mut self,
1430            decoder: &mut fidl::encoding::Decoder<'_, D>,
1431            offset: usize,
1432            _depth: fidl::encoding::Depth,
1433        ) -> fidl::Result<()> {
1434            decoder.debug_check_bounds::<Self>(offset);
1435            // Verify that padding bytes are zero.
1436            fidl::decode!(Options, D, &mut self.options, decoder, offset + 0, _depth)?;
1437            Ok(())
1438        }
1439    }
1440
1441    impl fidl::encoding::ValueTypeMarker for CoverageDataProviderSetOptionsRequest {
1442        type Borrowed<'a> = &'a Self;
1443        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1444            value
1445        }
1446    }
1447
1448    unsafe impl fidl::encoding::TypeMarker for CoverageDataProviderSetOptionsRequest {
1449        type Owned = Self;
1450
1451        #[inline(always)]
1452        fn inline_align(_context: fidl::encoding::Context) -> usize {
1453            8
1454        }
1455
1456        #[inline(always)]
1457        fn inline_size(_context: fidl::encoding::Context) -> usize {
1458            16
1459        }
1460    }
1461
1462    unsafe impl<D: fidl::encoding::ResourceDialect>
1463        fidl::encoding::Encode<CoverageDataProviderSetOptionsRequest, D>
1464        for &CoverageDataProviderSetOptionsRequest
1465    {
1466        #[inline]
1467        unsafe fn encode(
1468            self,
1469            encoder: &mut fidl::encoding::Encoder<'_, D>,
1470            offset: usize,
1471            _depth: fidl::encoding::Depth,
1472        ) -> fidl::Result<()> {
1473            encoder.debug_check_bounds::<CoverageDataProviderSetOptionsRequest>(offset);
1474            // Delegate to tuple encoding.
1475            fidl::encoding::Encode::<CoverageDataProviderSetOptionsRequest, D>::encode(
1476                (<Options as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
1477                encoder,
1478                offset,
1479                _depth,
1480            )
1481        }
1482    }
1483    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Options, D>>
1484        fidl::encoding::Encode<CoverageDataProviderSetOptionsRequest, D> for (T0,)
1485    {
1486        #[inline]
1487        unsafe fn encode(
1488            self,
1489            encoder: &mut fidl::encoding::Encoder<'_, D>,
1490            offset: usize,
1491            depth: fidl::encoding::Depth,
1492        ) -> fidl::Result<()> {
1493            encoder.debug_check_bounds::<CoverageDataProviderSetOptionsRequest>(offset);
1494            // Zero out padding regions. There's no need to apply masks
1495            // because the unmasked parts will be overwritten by fields.
1496            // Write the fields.
1497            self.0.encode(encoder, offset + 0, depth)?;
1498            Ok(())
1499        }
1500    }
1501
1502    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1503        for CoverageDataProviderSetOptionsRequest
1504    {
1505        #[inline(always)]
1506        fn new_empty() -> Self {
1507            Self { options: fidl::new_empty!(Options, D) }
1508        }
1509
1510        #[inline]
1511        unsafe fn decode(
1512            &mut self,
1513            decoder: &mut fidl::encoding::Decoder<'_, D>,
1514            offset: usize,
1515            _depth: fidl::encoding::Depth,
1516        ) -> fidl::Result<()> {
1517            decoder.debug_check_bounds::<Self>(offset);
1518            // Verify that padding bytes are zero.
1519            fidl::decode!(Options, D, &mut self.options, decoder, offset + 0, _depth)?;
1520            Ok(())
1521        }
1522    }
1523
1524    impl fidl::encoding::ValueTypeMarker for ManagerStopRequest {
1525        type Borrowed<'a> = &'a Self;
1526        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1527            value
1528        }
1529    }
1530
1531    unsafe impl fidl::encoding::TypeMarker for ManagerStopRequest {
1532        type Owned = Self;
1533
1534        #[inline(always)]
1535        fn inline_align(_context: fidl::encoding::Context) -> usize {
1536            8
1537        }
1538
1539        #[inline(always)]
1540        fn inline_size(_context: fidl::encoding::Context) -> usize {
1541            16
1542        }
1543    }
1544
1545    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ManagerStopRequest, D>
1546        for &ManagerStopRequest
1547    {
1548        #[inline]
1549        unsafe fn encode(
1550            self,
1551            encoder: &mut fidl::encoding::Encoder<'_, D>,
1552            offset: usize,
1553            _depth: fidl::encoding::Depth,
1554        ) -> fidl::Result<()> {
1555            encoder.debug_check_bounds::<ManagerStopRequest>(offset);
1556            // Delegate to tuple encoding.
1557            fidl::encoding::Encode::<ManagerStopRequest, D>::encode(
1558                (<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(
1559                    &self.fuzzer_url,
1560                ),),
1561                encoder,
1562                offset,
1563                _depth,
1564            )
1565        }
1566    }
1567    unsafe impl<
1568            D: fidl::encoding::ResourceDialect,
1569            T0: fidl::encoding::Encode<fidl::encoding::BoundedString<4096>, D>,
1570        > fidl::encoding::Encode<ManagerStopRequest, D> for (T0,)
1571    {
1572        #[inline]
1573        unsafe fn encode(
1574            self,
1575            encoder: &mut fidl::encoding::Encoder<'_, D>,
1576            offset: usize,
1577            depth: fidl::encoding::Depth,
1578        ) -> fidl::Result<()> {
1579            encoder.debug_check_bounds::<ManagerStopRequest>(offset);
1580            // Zero out padding regions. There's no need to apply masks
1581            // because the unmasked parts will be overwritten by fields.
1582            // Write the fields.
1583            self.0.encode(encoder, offset + 0, depth)?;
1584            Ok(())
1585        }
1586    }
1587
1588    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ManagerStopRequest {
1589        #[inline(always)]
1590        fn new_empty() -> Self {
1591            Self { fuzzer_url: fidl::new_empty!(fidl::encoding::BoundedString<4096>, D) }
1592        }
1593
1594        #[inline]
1595        unsafe fn decode(
1596            &mut self,
1597            decoder: &mut fidl::encoding::Decoder<'_, D>,
1598            offset: usize,
1599            _depth: fidl::encoding::Depth,
1600        ) -> fidl::Result<()> {
1601            decoder.debug_check_bounds::<Self>(offset);
1602            // Verify that padding bytes are zero.
1603            fidl::decode!(
1604                fidl::encoding::BoundedString<4096>,
1605                D,
1606                &mut self.fuzzer_url,
1607                decoder,
1608                offset + 0,
1609                _depth
1610            )?;
1611            Ok(())
1612        }
1613    }
1614
1615    impl fidl::encoding::ValueTypeMarker for MonitorUpdateRequest {
1616        type Borrowed<'a> = &'a Self;
1617        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1618            value
1619        }
1620    }
1621
1622    unsafe impl fidl::encoding::TypeMarker for MonitorUpdateRequest {
1623        type Owned = Self;
1624
1625        #[inline(always)]
1626        fn inline_align(_context: fidl::encoding::Context) -> usize {
1627            8
1628        }
1629
1630        #[inline(always)]
1631        fn inline_size(_context: fidl::encoding::Context) -> usize {
1632            24
1633        }
1634    }
1635
1636    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MonitorUpdateRequest, D>
1637        for &MonitorUpdateRequest
1638    {
1639        #[inline]
1640        unsafe fn encode(
1641            self,
1642            encoder: &mut fidl::encoding::Encoder<'_, D>,
1643            offset: usize,
1644            _depth: fidl::encoding::Depth,
1645        ) -> fidl::Result<()> {
1646            encoder.debug_check_bounds::<MonitorUpdateRequest>(offset);
1647            // Delegate to tuple encoding.
1648            fidl::encoding::Encode::<MonitorUpdateRequest, D>::encode(
1649                (
1650                    <UpdateReason as fidl::encoding::ValueTypeMarker>::borrow(&self.reason),
1651                    <Status as fidl::encoding::ValueTypeMarker>::borrow(&self.status),
1652                ),
1653                encoder,
1654                offset,
1655                _depth,
1656            )
1657        }
1658    }
1659    unsafe impl<
1660            D: fidl::encoding::ResourceDialect,
1661            T0: fidl::encoding::Encode<UpdateReason, D>,
1662            T1: fidl::encoding::Encode<Status, D>,
1663        > fidl::encoding::Encode<MonitorUpdateRequest, D> for (T0, T1)
1664    {
1665        #[inline]
1666        unsafe fn encode(
1667            self,
1668            encoder: &mut fidl::encoding::Encoder<'_, D>,
1669            offset: usize,
1670            depth: fidl::encoding::Depth,
1671        ) -> fidl::Result<()> {
1672            encoder.debug_check_bounds::<MonitorUpdateRequest>(offset);
1673            // Zero out padding regions. There's no need to apply masks
1674            // because the unmasked parts will be overwritten by fields.
1675            unsafe {
1676                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1677                (ptr as *mut u64).write_unaligned(0);
1678            }
1679            // Write the fields.
1680            self.0.encode(encoder, offset + 0, depth)?;
1681            self.1.encode(encoder, offset + 8, depth)?;
1682            Ok(())
1683        }
1684    }
1685
1686    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MonitorUpdateRequest {
1687        #[inline(always)]
1688        fn new_empty() -> Self {
1689            Self { reason: fidl::new_empty!(UpdateReason, D), status: fidl::new_empty!(Status, D) }
1690        }
1691
1692        #[inline]
1693        unsafe fn decode(
1694            &mut self,
1695            decoder: &mut fidl::encoding::Decoder<'_, D>,
1696            offset: usize,
1697            _depth: fidl::encoding::Depth,
1698        ) -> fidl::Result<()> {
1699            decoder.debug_check_bounds::<Self>(offset);
1700            // Verify that padding bytes are zero.
1701            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
1702            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1703            let mask = 0xffffffffffffff00u64;
1704            let maskedval = padval & mask;
1705            if maskedval != 0 {
1706                return Err(fidl::Error::NonZeroPadding {
1707                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1708                });
1709            }
1710            fidl::decode!(UpdateReason, D, &mut self.reason, decoder, offset + 0, _depth)?;
1711            fidl::decode!(Status, D, &mut self.status, decoder, offset + 8, _depth)?;
1712            Ok(())
1713        }
1714    }
1715
1716    impl fidl::encoding::ValueTypeMarker for ProcessStats {
1717        type Borrowed<'a> = &'a Self;
1718        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1719            value
1720        }
1721    }
1722
1723    unsafe impl fidl::encoding::TypeMarker for ProcessStats {
1724        type Owned = Self;
1725
1726        #[inline(always)]
1727        fn inline_align(_context: fidl::encoding::Context) -> usize {
1728            8
1729        }
1730
1731        #[inline(always)]
1732        fn inline_size(_context: fidl::encoding::Context) -> usize {
1733            72
1734        }
1735        #[inline(always)]
1736        fn encode_is_copy() -> bool {
1737            true
1738        }
1739
1740        #[inline(always)]
1741        fn decode_is_copy() -> bool {
1742            true
1743        }
1744    }
1745
1746    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ProcessStats, D>
1747        for &ProcessStats
1748    {
1749        #[inline]
1750        unsafe fn encode(
1751            self,
1752            encoder: &mut fidl::encoding::Encoder<'_, D>,
1753            offset: usize,
1754            _depth: fidl::encoding::Depth,
1755        ) -> fidl::Result<()> {
1756            encoder.debug_check_bounds::<ProcessStats>(offset);
1757            unsafe {
1758                // Copy the object into the buffer.
1759                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1760                (buf_ptr as *mut ProcessStats)
1761                    .write_unaligned((self as *const ProcessStats).read());
1762                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1763                // done second because the memcpy will write garbage to these bytes.
1764            }
1765            Ok(())
1766        }
1767    }
1768    unsafe impl<
1769            D: fidl::encoding::ResourceDialect,
1770            T0: fidl::encoding::Encode<u64, D>,
1771            T1: fidl::encoding::Encode<u64, D>,
1772            T2: fidl::encoding::Encode<u64, D>,
1773            T3: fidl::encoding::Encode<u64, D>,
1774            T4: fidl::encoding::Encode<u64, D>,
1775            T5: fidl::encoding::Encode<i64, D>,
1776            T6: fidl::encoding::Encode<i64, D>,
1777            T7: fidl::encoding::Encode<i64, D>,
1778            T8: fidl::encoding::Encode<i64, D>,
1779        > fidl::encoding::Encode<ProcessStats, D> for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
1780    {
1781        #[inline]
1782        unsafe fn encode(
1783            self,
1784            encoder: &mut fidl::encoding::Encoder<'_, D>,
1785            offset: usize,
1786            depth: fidl::encoding::Depth,
1787        ) -> fidl::Result<()> {
1788            encoder.debug_check_bounds::<ProcessStats>(offset);
1789            // Zero out padding regions. There's no need to apply masks
1790            // because the unmasked parts will be overwritten by fields.
1791            // Write the fields.
1792            self.0.encode(encoder, offset + 0, depth)?;
1793            self.1.encode(encoder, offset + 8, depth)?;
1794            self.2.encode(encoder, offset + 16, depth)?;
1795            self.3.encode(encoder, offset + 24, depth)?;
1796            self.4.encode(encoder, offset + 32, depth)?;
1797            self.5.encode(encoder, offset + 40, depth)?;
1798            self.6.encode(encoder, offset + 48, depth)?;
1799            self.7.encode(encoder, offset + 56, depth)?;
1800            self.8.encode(encoder, offset + 64, depth)?;
1801            Ok(())
1802        }
1803    }
1804
1805    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProcessStats {
1806        #[inline(always)]
1807        fn new_empty() -> Self {
1808            Self {
1809                koid: fidl::new_empty!(u64, D),
1810                mem_mapped_bytes: fidl::new_empty!(u64, D),
1811                mem_private_bytes: fidl::new_empty!(u64, D),
1812                mem_shared_bytes: fidl::new_empty!(u64, D),
1813                mem_scaled_shared_bytes: fidl::new_empty!(u64, D),
1814                cpu_time: fidl::new_empty!(i64, D),
1815                queue_time: fidl::new_empty!(i64, D),
1816                page_fault_time: fidl::new_empty!(i64, D),
1817                lock_contention_time: fidl::new_empty!(i64, D),
1818            }
1819        }
1820
1821        #[inline]
1822        unsafe fn decode(
1823            &mut self,
1824            decoder: &mut fidl::encoding::Decoder<'_, D>,
1825            offset: usize,
1826            _depth: fidl::encoding::Depth,
1827        ) -> fidl::Result<()> {
1828            decoder.debug_check_bounds::<Self>(offset);
1829            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1830            // Verify that padding bytes are zero.
1831            // Copy from the buffer into the object.
1832            unsafe {
1833                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 72);
1834            }
1835            Ok(())
1836        }
1837    }
1838
1839    impl fidl::encoding::ValueTypeMarker for RegistryDisconnectRequest {
1840        type Borrowed<'a> = &'a Self;
1841        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1842            value
1843        }
1844    }
1845
1846    unsafe impl fidl::encoding::TypeMarker for RegistryDisconnectRequest {
1847        type Owned = Self;
1848
1849        #[inline(always)]
1850        fn inline_align(_context: fidl::encoding::Context) -> usize {
1851            8
1852        }
1853
1854        #[inline(always)]
1855        fn inline_size(_context: fidl::encoding::Context) -> usize {
1856            16
1857        }
1858    }
1859
1860    unsafe impl<D: fidl::encoding::ResourceDialect>
1861        fidl::encoding::Encode<RegistryDisconnectRequest, D> for &RegistryDisconnectRequest
1862    {
1863        #[inline]
1864        unsafe fn encode(
1865            self,
1866            encoder: &mut fidl::encoding::Encoder<'_, D>,
1867            offset: usize,
1868            _depth: fidl::encoding::Depth,
1869        ) -> fidl::Result<()> {
1870            encoder.debug_check_bounds::<RegistryDisconnectRequest>(offset);
1871            // Delegate to tuple encoding.
1872            fidl::encoding::Encode::<RegistryDisconnectRequest, D>::encode(
1873                (<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(
1874                    &self.fuzzer_url,
1875                ),),
1876                encoder,
1877                offset,
1878                _depth,
1879            )
1880        }
1881    }
1882    unsafe impl<
1883            D: fidl::encoding::ResourceDialect,
1884            T0: fidl::encoding::Encode<fidl::encoding::BoundedString<4096>, D>,
1885        > fidl::encoding::Encode<RegistryDisconnectRequest, D> for (T0,)
1886    {
1887        #[inline]
1888        unsafe fn encode(
1889            self,
1890            encoder: &mut fidl::encoding::Encoder<'_, D>,
1891            offset: usize,
1892            depth: fidl::encoding::Depth,
1893        ) -> fidl::Result<()> {
1894            encoder.debug_check_bounds::<RegistryDisconnectRequest>(offset);
1895            // Zero out padding regions. There's no need to apply masks
1896            // because the unmasked parts will be overwritten by fields.
1897            // Write the fields.
1898            self.0.encode(encoder, offset + 0, depth)?;
1899            Ok(())
1900        }
1901    }
1902
1903    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1904        for RegistryDisconnectRequest
1905    {
1906        #[inline(always)]
1907        fn new_empty() -> Self {
1908            Self { fuzzer_url: fidl::new_empty!(fidl::encoding::BoundedString<4096>, D) }
1909        }
1910
1911        #[inline]
1912        unsafe fn decode(
1913            &mut self,
1914            decoder: &mut fidl::encoding::Decoder<'_, D>,
1915            offset: usize,
1916            _depth: fidl::encoding::Depth,
1917        ) -> fidl::Result<()> {
1918            decoder.debug_check_bounds::<Self>(offset);
1919            // Verify that padding bytes are zero.
1920            fidl::decode!(
1921                fidl::encoding::BoundedString<4096>,
1922                D,
1923                &mut self.fuzzer_url,
1924                decoder,
1925                offset + 0,
1926                _depth
1927            )?;
1928            Ok(())
1929        }
1930    }
1931
1932    impl fidl::encoding::ValueTypeMarker for SanitizerOptions {
1933        type Borrowed<'a> = &'a Self;
1934        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1935            value
1936        }
1937    }
1938
1939    unsafe impl fidl::encoding::TypeMarker for SanitizerOptions {
1940        type Owned = Self;
1941
1942        #[inline(always)]
1943        fn inline_align(_context: fidl::encoding::Context) -> usize {
1944            8
1945        }
1946
1947        #[inline(always)]
1948        fn inline_size(_context: fidl::encoding::Context) -> usize {
1949            32
1950        }
1951    }
1952
1953    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SanitizerOptions, D>
1954        for &SanitizerOptions
1955    {
1956        #[inline]
1957        unsafe fn encode(
1958            self,
1959            encoder: &mut fidl::encoding::Encoder<'_, D>,
1960            offset: usize,
1961            _depth: fidl::encoding::Depth,
1962        ) -> fidl::Result<()> {
1963            encoder.debug_check_bounds::<SanitizerOptions>(offset);
1964            // Delegate to tuple encoding.
1965            fidl::encoding::Encode::<SanitizerOptions, D>::encode(
1966                (
1967                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow(&self.name),
1968                    <fidl::encoding::BoundedString<8192> as fidl::encoding::ValueTypeMarker>::borrow(&self.value),
1969                ),
1970                encoder, offset, _depth
1971            )
1972        }
1973    }
1974    unsafe impl<
1975            D: fidl::encoding::ResourceDialect,
1976            T0: fidl::encoding::Encode<fidl::encoding::BoundedString<32>, D>,
1977            T1: fidl::encoding::Encode<fidl::encoding::BoundedString<8192>, D>,
1978        > fidl::encoding::Encode<SanitizerOptions, D> for (T0, T1)
1979    {
1980        #[inline]
1981        unsafe fn encode(
1982            self,
1983            encoder: &mut fidl::encoding::Encoder<'_, D>,
1984            offset: usize,
1985            depth: fidl::encoding::Depth,
1986        ) -> fidl::Result<()> {
1987            encoder.debug_check_bounds::<SanitizerOptions>(offset);
1988            // Zero out padding regions. There's no need to apply masks
1989            // because the unmasked parts will be overwritten by fields.
1990            // Write the fields.
1991            self.0.encode(encoder, offset + 0, depth)?;
1992            self.1.encode(encoder, offset + 16, depth)?;
1993            Ok(())
1994        }
1995    }
1996
1997    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SanitizerOptions {
1998        #[inline(always)]
1999        fn new_empty() -> Self {
2000            Self {
2001                name: fidl::new_empty!(fidl::encoding::BoundedString<32>, D),
2002                value: fidl::new_empty!(fidl::encoding::BoundedString<8192>, D),
2003            }
2004        }
2005
2006        #[inline]
2007        unsafe fn decode(
2008            &mut self,
2009            decoder: &mut fidl::encoding::Decoder<'_, D>,
2010            offset: usize,
2011            _depth: fidl::encoding::Depth,
2012        ) -> fidl::Result<()> {
2013            decoder.debug_check_bounds::<Self>(offset);
2014            // Verify that padding bytes are zero.
2015            fidl::decode!(
2016                fidl::encoding::BoundedString<32>,
2017                D,
2018                &mut self.name,
2019                decoder,
2020                offset + 0,
2021                _depth
2022            )?;
2023            fidl::decode!(
2024                fidl::encoding::BoundedString<8192>,
2025                D,
2026                &mut self.value,
2027                decoder,
2028                offset + 16,
2029                _depth
2030            )?;
2031            Ok(())
2032        }
2033    }
2034
2035    impl fidl::encoding::ValueTypeMarker for TargetAdapterGetParametersResponse {
2036        type Borrowed<'a> = &'a Self;
2037        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2038            value
2039        }
2040    }
2041
2042    unsafe impl fidl::encoding::TypeMarker for TargetAdapterGetParametersResponse {
2043        type Owned = Self;
2044
2045        #[inline(always)]
2046        fn inline_align(_context: fidl::encoding::Context) -> usize {
2047            8
2048        }
2049
2050        #[inline(always)]
2051        fn inline_size(_context: fidl::encoding::Context) -> usize {
2052            16
2053        }
2054    }
2055
2056    unsafe impl<D: fidl::encoding::ResourceDialect>
2057        fidl::encoding::Encode<TargetAdapterGetParametersResponse, D>
2058        for &TargetAdapterGetParametersResponse
2059    {
2060        #[inline]
2061        unsafe fn encode(
2062            self,
2063            encoder: &mut fidl::encoding::Encoder<'_, D>,
2064            offset: usize,
2065            _depth: fidl::encoding::Depth,
2066        ) -> fidl::Result<()> {
2067            encoder.debug_check_bounds::<TargetAdapterGetParametersResponse>(offset);
2068            // Delegate to tuple encoding.
2069            fidl::encoding::Encode::<TargetAdapterGetParametersResponse, D>::encode(
2070                (
2071                    <fidl::encoding::Vector<fidl::encoding::BoundedString<256>, 128> as fidl::encoding::ValueTypeMarker>::borrow(&self.parameters),
2072                ),
2073                encoder, offset, _depth
2074            )
2075        }
2076    }
2077    unsafe impl<
2078            D: fidl::encoding::ResourceDialect,
2079            T0: fidl::encoding::Encode<
2080                fidl::encoding::Vector<fidl::encoding::BoundedString<256>, 128>,
2081                D,
2082            >,
2083        > fidl::encoding::Encode<TargetAdapterGetParametersResponse, D> for (T0,)
2084    {
2085        #[inline]
2086        unsafe fn encode(
2087            self,
2088            encoder: &mut fidl::encoding::Encoder<'_, D>,
2089            offset: usize,
2090            depth: fidl::encoding::Depth,
2091        ) -> fidl::Result<()> {
2092            encoder.debug_check_bounds::<TargetAdapterGetParametersResponse>(offset);
2093            // Zero out padding regions. There's no need to apply masks
2094            // because the unmasked parts will be overwritten by fields.
2095            // Write the fields.
2096            self.0.encode(encoder, offset + 0, depth)?;
2097            Ok(())
2098        }
2099    }
2100
2101    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2102        for TargetAdapterGetParametersResponse
2103    {
2104        #[inline(always)]
2105        fn new_empty() -> Self {
2106            Self {
2107                parameters: fidl::new_empty!(
2108                    fidl::encoding::Vector<fidl::encoding::BoundedString<256>, 128>,
2109                    D
2110                ),
2111            }
2112        }
2113
2114        #[inline]
2115        unsafe fn decode(
2116            &mut self,
2117            decoder: &mut fidl::encoding::Decoder<'_, D>,
2118            offset: usize,
2119            _depth: fidl::encoding::Depth,
2120        ) -> fidl::Result<()> {
2121            decoder.debug_check_bounds::<Self>(offset);
2122            // Verify that padding bytes are zero.
2123            fidl::decode!(
2124                fidl::encoding::Vector<fidl::encoding::BoundedString<256>, 128>,
2125                D,
2126                &mut self.parameters,
2127                decoder,
2128                offset + 0,
2129                _depth
2130            )?;
2131            Ok(())
2132        }
2133    }
2134
2135    impl Options {
2136        #[inline(always)]
2137        fn max_ordinal_present(&self) -> u64 {
2138            if let Some(_) = self.output_flags {
2139                return 22;
2140            }
2141            if let Some(_) = self.sanitizer_options {
2142                return 21;
2143            }
2144            if let Some(_) = self.use_value_profile {
2145                return 20;
2146            }
2147            if let Some(_) = self.print_final_stats {
2148                return 19;
2149            }
2150            if let Some(_) = self.debug {
2151                return 18;
2152            }
2153            if let Some(_) = self.pulse_interval {
2154                return 17;
2155            }
2156            if let Some(_) = self.oom_exitcode {
2157                return 16;
2158            }
2159            if let Some(_) = self.leak_exitcode {
2160                return 15;
2161            }
2162            if let Some(_) = self.death_exitcode {
2163                return 14;
2164            }
2165            if let Some(_) = self.malloc_exitcode {
2166                return 13;
2167            }
2168            if let Some(_) = self.purge_interval {
2169                return 12;
2170            }
2171            if let Some(_) = self.oom_limit {
2172                return 11;
2173            }
2174            if let Some(_) = self.malloc_limit {
2175                return 10;
2176            }
2177            if let Some(_) = self.run_limit {
2178                return 9;
2179            }
2180            if let Some(_) = self.detect_leaks {
2181                return 8;
2182            }
2183            if let Some(_) = self.detect_exits {
2184                return 7;
2185            }
2186            if let Some(_) = self.dictionary_level {
2187                return 6;
2188            }
2189            if let Some(_) = self.mutation_depth {
2190                return 5;
2191            }
2192            if let Some(_) = self.max_input_size {
2193                return 4;
2194            }
2195            if let Some(_) = self.seed {
2196                return 3;
2197            }
2198            if let Some(_) = self.max_total_time {
2199                return 2;
2200            }
2201            if let Some(_) = self.runs {
2202                return 1;
2203            }
2204            0
2205        }
2206    }
2207
2208    impl fidl::encoding::ValueTypeMarker for Options {
2209        type Borrowed<'a> = &'a Self;
2210        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2211            value
2212        }
2213    }
2214
2215    unsafe impl fidl::encoding::TypeMarker for Options {
2216        type Owned = Self;
2217
2218        #[inline(always)]
2219        fn inline_align(_context: fidl::encoding::Context) -> usize {
2220            8
2221        }
2222
2223        #[inline(always)]
2224        fn inline_size(_context: fidl::encoding::Context) -> usize {
2225            16
2226        }
2227    }
2228
2229    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Options, D> for &Options {
2230        unsafe fn encode(
2231            self,
2232            encoder: &mut fidl::encoding::Encoder<'_, D>,
2233            offset: usize,
2234            mut depth: fidl::encoding::Depth,
2235        ) -> fidl::Result<()> {
2236            encoder.debug_check_bounds::<Options>(offset);
2237            // Vector header
2238            let max_ordinal: u64 = self.max_ordinal_present();
2239            encoder.write_num(max_ordinal, offset);
2240            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2241            // Calling encoder.out_of_line_offset(0) is not allowed.
2242            if max_ordinal == 0 {
2243                return Ok(());
2244            }
2245            depth.increment()?;
2246            let envelope_size = 8;
2247            let bytes_len = max_ordinal as usize * envelope_size;
2248            #[allow(unused_variables)]
2249            let offset = encoder.out_of_line_offset(bytes_len);
2250            let mut _prev_end_offset: usize = 0;
2251            if 1 > max_ordinal {
2252                return Ok(());
2253            }
2254
2255            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2256            // are envelope_size bytes.
2257            let cur_offset: usize = (1 - 1) * envelope_size;
2258
2259            // Zero reserved fields.
2260            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2261
2262            // Safety:
2263            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2264            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2265            //   envelope_size bytes, there is always sufficient room.
2266            fidl::encoding::encode_in_envelope_optional::<u32, D>(
2267                self.runs.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2268                encoder,
2269                offset + cur_offset,
2270                depth,
2271            )?;
2272
2273            _prev_end_offset = cur_offset + envelope_size;
2274            if 2 > max_ordinal {
2275                return Ok(());
2276            }
2277
2278            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2279            // are envelope_size bytes.
2280            let cur_offset: usize = (2 - 1) * envelope_size;
2281
2282            // Zero reserved fields.
2283            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2284
2285            // Safety:
2286            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2287            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2288            //   envelope_size bytes, there is always sufficient room.
2289            fidl::encoding::encode_in_envelope_optional::<i64, D>(
2290                self.max_total_time.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
2291                encoder,
2292                offset + cur_offset,
2293                depth,
2294            )?;
2295
2296            _prev_end_offset = cur_offset + envelope_size;
2297            if 3 > max_ordinal {
2298                return Ok(());
2299            }
2300
2301            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2302            // are envelope_size bytes.
2303            let cur_offset: usize = (3 - 1) * envelope_size;
2304
2305            // Zero reserved fields.
2306            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2307
2308            // Safety:
2309            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2310            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2311            //   envelope_size bytes, there is always sufficient room.
2312            fidl::encoding::encode_in_envelope_optional::<u32, D>(
2313                self.seed.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2314                encoder,
2315                offset + cur_offset,
2316                depth,
2317            )?;
2318
2319            _prev_end_offset = cur_offset + envelope_size;
2320            if 4 > max_ordinal {
2321                return Ok(());
2322            }
2323
2324            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2325            // are envelope_size bytes.
2326            let cur_offset: usize = (4 - 1) * envelope_size;
2327
2328            // Zero reserved fields.
2329            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2330
2331            // Safety:
2332            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2333            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2334            //   envelope_size bytes, there is always sufficient room.
2335            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2336                self.max_input_size.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2337                encoder,
2338                offset + cur_offset,
2339                depth,
2340            )?;
2341
2342            _prev_end_offset = cur_offset + envelope_size;
2343            if 5 > max_ordinal {
2344                return Ok(());
2345            }
2346
2347            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2348            // are envelope_size bytes.
2349            let cur_offset: usize = (5 - 1) * envelope_size;
2350
2351            // Zero reserved fields.
2352            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2353
2354            // Safety:
2355            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2356            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2357            //   envelope_size bytes, there is always sufficient room.
2358            fidl::encoding::encode_in_envelope_optional::<u16, D>(
2359                self.mutation_depth.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
2360                encoder,
2361                offset + cur_offset,
2362                depth,
2363            )?;
2364
2365            _prev_end_offset = cur_offset + envelope_size;
2366            if 6 > max_ordinal {
2367                return Ok(());
2368            }
2369
2370            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2371            // are envelope_size bytes.
2372            let cur_offset: usize = (6 - 1) * envelope_size;
2373
2374            // Zero reserved fields.
2375            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2376
2377            // Safety:
2378            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2379            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2380            //   envelope_size bytes, there is always sufficient room.
2381            fidl::encoding::encode_in_envelope_optional::<u16, D>(
2382                self.dictionary_level
2383                    .as_ref()
2384                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
2385                encoder,
2386                offset + cur_offset,
2387                depth,
2388            )?;
2389
2390            _prev_end_offset = cur_offset + envelope_size;
2391            if 7 > max_ordinal {
2392                return Ok(());
2393            }
2394
2395            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2396            // are envelope_size bytes.
2397            let cur_offset: usize = (7 - 1) * envelope_size;
2398
2399            // Zero reserved fields.
2400            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2401
2402            // Safety:
2403            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2404            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2405            //   envelope_size bytes, there is always sufficient room.
2406            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2407                self.detect_exits.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2408                encoder,
2409                offset + cur_offset,
2410                depth,
2411            )?;
2412
2413            _prev_end_offset = cur_offset + envelope_size;
2414            if 8 > max_ordinal {
2415                return Ok(());
2416            }
2417
2418            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2419            // are envelope_size bytes.
2420            let cur_offset: usize = (8 - 1) * envelope_size;
2421
2422            // Zero reserved fields.
2423            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2424
2425            // Safety:
2426            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2427            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2428            //   envelope_size bytes, there is always sufficient room.
2429            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2430                self.detect_leaks.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2431                encoder,
2432                offset + cur_offset,
2433                depth,
2434            )?;
2435
2436            _prev_end_offset = cur_offset + envelope_size;
2437            if 9 > max_ordinal {
2438                return Ok(());
2439            }
2440
2441            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2442            // are envelope_size bytes.
2443            let cur_offset: usize = (9 - 1) * envelope_size;
2444
2445            // Zero reserved fields.
2446            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2447
2448            // Safety:
2449            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2450            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2451            //   envelope_size bytes, there is always sufficient room.
2452            fidl::encoding::encode_in_envelope_optional::<i64, D>(
2453                self.run_limit.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
2454                encoder,
2455                offset + cur_offset,
2456                depth,
2457            )?;
2458
2459            _prev_end_offset = cur_offset + envelope_size;
2460            if 10 > max_ordinal {
2461                return Ok(());
2462            }
2463
2464            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2465            // are envelope_size bytes.
2466            let cur_offset: usize = (10 - 1) * envelope_size;
2467
2468            // Zero reserved fields.
2469            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2470
2471            // Safety:
2472            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2473            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2474            //   envelope_size bytes, there is always sufficient room.
2475            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2476                self.malloc_limit.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2477                encoder,
2478                offset + cur_offset,
2479                depth,
2480            )?;
2481
2482            _prev_end_offset = cur_offset + envelope_size;
2483            if 11 > max_ordinal {
2484                return Ok(());
2485            }
2486
2487            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2488            // are envelope_size bytes.
2489            let cur_offset: usize = (11 - 1) * envelope_size;
2490
2491            // Zero reserved fields.
2492            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2493
2494            // Safety:
2495            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2496            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2497            //   envelope_size bytes, there is always sufficient room.
2498            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2499                self.oom_limit.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2500                encoder,
2501                offset + cur_offset,
2502                depth,
2503            )?;
2504
2505            _prev_end_offset = cur_offset + envelope_size;
2506            if 12 > max_ordinal {
2507                return Ok(());
2508            }
2509
2510            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2511            // are envelope_size bytes.
2512            let cur_offset: usize = (12 - 1) * envelope_size;
2513
2514            // Zero reserved fields.
2515            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2516
2517            // Safety:
2518            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2519            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2520            //   envelope_size bytes, there is always sufficient room.
2521            fidl::encoding::encode_in_envelope_optional::<i64, D>(
2522                self.purge_interval.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
2523                encoder,
2524                offset + cur_offset,
2525                depth,
2526            )?;
2527
2528            _prev_end_offset = cur_offset + envelope_size;
2529            if 13 > max_ordinal {
2530                return Ok(());
2531            }
2532
2533            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2534            // are envelope_size bytes.
2535            let cur_offset: usize = (13 - 1) * envelope_size;
2536
2537            // Zero reserved fields.
2538            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2539
2540            // Safety:
2541            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2542            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2543            //   envelope_size bytes, there is always sufficient room.
2544            fidl::encoding::encode_in_envelope_optional::<i32, D>(
2545                self.malloc_exitcode.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
2546                encoder,
2547                offset + cur_offset,
2548                depth,
2549            )?;
2550
2551            _prev_end_offset = cur_offset + envelope_size;
2552            if 14 > max_ordinal {
2553                return Ok(());
2554            }
2555
2556            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2557            // are envelope_size bytes.
2558            let cur_offset: usize = (14 - 1) * envelope_size;
2559
2560            // Zero reserved fields.
2561            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2562
2563            // Safety:
2564            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2565            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2566            //   envelope_size bytes, there is always sufficient room.
2567            fidl::encoding::encode_in_envelope_optional::<i32, D>(
2568                self.death_exitcode.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
2569                encoder,
2570                offset + cur_offset,
2571                depth,
2572            )?;
2573
2574            _prev_end_offset = cur_offset + envelope_size;
2575            if 15 > max_ordinal {
2576                return Ok(());
2577            }
2578
2579            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2580            // are envelope_size bytes.
2581            let cur_offset: usize = (15 - 1) * envelope_size;
2582
2583            // Zero reserved fields.
2584            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2585
2586            // Safety:
2587            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2588            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2589            //   envelope_size bytes, there is always sufficient room.
2590            fidl::encoding::encode_in_envelope_optional::<i32, D>(
2591                self.leak_exitcode.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
2592                encoder,
2593                offset + cur_offset,
2594                depth,
2595            )?;
2596
2597            _prev_end_offset = cur_offset + envelope_size;
2598            if 16 > max_ordinal {
2599                return Ok(());
2600            }
2601
2602            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2603            // are envelope_size bytes.
2604            let cur_offset: usize = (16 - 1) * envelope_size;
2605
2606            // Zero reserved fields.
2607            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2608
2609            // Safety:
2610            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2611            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2612            //   envelope_size bytes, there is always sufficient room.
2613            fidl::encoding::encode_in_envelope_optional::<i32, D>(
2614                self.oom_exitcode.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
2615                encoder,
2616                offset + cur_offset,
2617                depth,
2618            )?;
2619
2620            _prev_end_offset = cur_offset + envelope_size;
2621            if 17 > max_ordinal {
2622                return Ok(());
2623            }
2624
2625            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2626            // are envelope_size bytes.
2627            let cur_offset: usize = (17 - 1) * envelope_size;
2628
2629            // Zero reserved fields.
2630            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2631
2632            // Safety:
2633            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2634            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2635            //   envelope_size bytes, there is always sufficient room.
2636            fidl::encoding::encode_in_envelope_optional::<i64, D>(
2637                self.pulse_interval.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
2638                encoder,
2639                offset + cur_offset,
2640                depth,
2641            )?;
2642
2643            _prev_end_offset = cur_offset + envelope_size;
2644            if 18 > max_ordinal {
2645                return Ok(());
2646            }
2647
2648            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2649            // are envelope_size bytes.
2650            let cur_offset: usize = (18 - 1) * envelope_size;
2651
2652            // Zero reserved fields.
2653            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2654
2655            // Safety:
2656            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2657            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2658            //   envelope_size bytes, there is always sufficient room.
2659            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2660                self.debug.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2661                encoder,
2662                offset + cur_offset,
2663                depth,
2664            )?;
2665
2666            _prev_end_offset = cur_offset + envelope_size;
2667            if 19 > max_ordinal {
2668                return Ok(());
2669            }
2670
2671            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2672            // are envelope_size bytes.
2673            let cur_offset: usize = (19 - 1) * envelope_size;
2674
2675            // Zero reserved fields.
2676            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2677
2678            // Safety:
2679            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2680            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2681            //   envelope_size bytes, there is always sufficient room.
2682            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2683                self.print_final_stats
2684                    .as_ref()
2685                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2686                encoder,
2687                offset + cur_offset,
2688                depth,
2689            )?;
2690
2691            _prev_end_offset = cur_offset + envelope_size;
2692            if 20 > max_ordinal {
2693                return Ok(());
2694            }
2695
2696            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2697            // are envelope_size bytes.
2698            let cur_offset: usize = (20 - 1) * envelope_size;
2699
2700            // Zero reserved fields.
2701            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2702
2703            // Safety:
2704            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2705            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2706            //   envelope_size bytes, there is always sufficient room.
2707            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2708                self.use_value_profile
2709                    .as_ref()
2710                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2711                encoder,
2712                offset + cur_offset,
2713                depth,
2714            )?;
2715
2716            _prev_end_offset = cur_offset + envelope_size;
2717            if 21 > max_ordinal {
2718                return Ok(());
2719            }
2720
2721            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2722            // are envelope_size bytes.
2723            let cur_offset: usize = (21 - 1) * envelope_size;
2724
2725            // Zero reserved fields.
2726            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2727
2728            // Safety:
2729            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2730            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2731            //   envelope_size bytes, there is always sufficient room.
2732            fidl::encoding::encode_in_envelope_optional::<SanitizerOptions, D>(
2733                self.sanitizer_options
2734                    .as_ref()
2735                    .map(<SanitizerOptions as fidl::encoding::ValueTypeMarker>::borrow),
2736                encoder,
2737                offset + cur_offset,
2738                depth,
2739            )?;
2740
2741            _prev_end_offset = cur_offset + envelope_size;
2742            if 22 > max_ordinal {
2743                return Ok(());
2744            }
2745
2746            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2747            // are envelope_size bytes.
2748            let cur_offset: usize = (22 - 1) * envelope_size;
2749
2750            // Zero reserved fields.
2751            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2752
2753            // Safety:
2754            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2755            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2756            //   envelope_size bytes, there is always sufficient room.
2757            fidl::encoding::encode_in_envelope_optional::<OutputFlags, D>(
2758                self.output_flags
2759                    .as_ref()
2760                    .map(<OutputFlags as fidl::encoding::ValueTypeMarker>::borrow),
2761                encoder,
2762                offset + cur_offset,
2763                depth,
2764            )?;
2765
2766            _prev_end_offset = cur_offset + envelope_size;
2767
2768            Ok(())
2769        }
2770    }
2771
2772    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Options {
2773        #[inline(always)]
2774        fn new_empty() -> Self {
2775            Self::default()
2776        }
2777
2778        unsafe fn decode(
2779            &mut self,
2780            decoder: &mut fidl::encoding::Decoder<'_, D>,
2781            offset: usize,
2782            mut depth: fidl::encoding::Depth,
2783        ) -> fidl::Result<()> {
2784            decoder.debug_check_bounds::<Self>(offset);
2785            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2786                None => return Err(fidl::Error::NotNullable),
2787                Some(len) => len,
2788            };
2789            // Calling decoder.out_of_line_offset(0) is not allowed.
2790            if len == 0 {
2791                return Ok(());
2792            };
2793            depth.increment()?;
2794            let envelope_size = 8;
2795            let bytes_len = len * envelope_size;
2796            let offset = decoder.out_of_line_offset(bytes_len)?;
2797            // Decode the envelope for each type.
2798            let mut _next_ordinal_to_read = 0;
2799            let mut next_offset = offset;
2800            let end_offset = offset + bytes_len;
2801            _next_ordinal_to_read += 1;
2802            if next_offset >= end_offset {
2803                return Ok(());
2804            }
2805
2806            // Decode unknown envelopes for gaps in ordinals.
2807            while _next_ordinal_to_read < 1 {
2808                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2809                _next_ordinal_to_read += 1;
2810                next_offset += envelope_size;
2811            }
2812
2813            let next_out_of_line = decoder.next_out_of_line();
2814            let handles_before = decoder.remaining_handles();
2815            if let Some((inlined, num_bytes, num_handles)) =
2816                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2817            {
2818                let member_inline_size =
2819                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2820                if inlined != (member_inline_size <= 4) {
2821                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2822                }
2823                let inner_offset;
2824                let mut inner_depth = depth.clone();
2825                if inlined {
2826                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2827                    inner_offset = next_offset;
2828                } else {
2829                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2830                    inner_depth.increment()?;
2831                }
2832                let val_ref = self.runs.get_or_insert_with(|| fidl::new_empty!(u32, D));
2833                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2834                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2835                {
2836                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2837                }
2838                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2839                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2840                }
2841            }
2842
2843            next_offset += envelope_size;
2844            _next_ordinal_to_read += 1;
2845            if next_offset >= end_offset {
2846                return Ok(());
2847            }
2848
2849            // Decode unknown envelopes for gaps in ordinals.
2850            while _next_ordinal_to_read < 2 {
2851                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2852                _next_ordinal_to_read += 1;
2853                next_offset += envelope_size;
2854            }
2855
2856            let next_out_of_line = decoder.next_out_of_line();
2857            let handles_before = decoder.remaining_handles();
2858            if let Some((inlined, num_bytes, num_handles)) =
2859                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2860            {
2861                let member_inline_size =
2862                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2863                if inlined != (member_inline_size <= 4) {
2864                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2865                }
2866                let inner_offset;
2867                let mut inner_depth = depth.clone();
2868                if inlined {
2869                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2870                    inner_offset = next_offset;
2871                } else {
2872                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2873                    inner_depth.increment()?;
2874                }
2875                let val_ref = self.max_total_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
2876                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
2877                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2878                {
2879                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2880                }
2881                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2882                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2883                }
2884            }
2885
2886            next_offset += envelope_size;
2887            _next_ordinal_to_read += 1;
2888            if next_offset >= end_offset {
2889                return Ok(());
2890            }
2891
2892            // Decode unknown envelopes for gaps in ordinals.
2893            while _next_ordinal_to_read < 3 {
2894                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2895                _next_ordinal_to_read += 1;
2896                next_offset += envelope_size;
2897            }
2898
2899            let next_out_of_line = decoder.next_out_of_line();
2900            let handles_before = decoder.remaining_handles();
2901            if let Some((inlined, num_bytes, num_handles)) =
2902                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2903            {
2904                let member_inline_size =
2905                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2906                if inlined != (member_inline_size <= 4) {
2907                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2908                }
2909                let inner_offset;
2910                let mut inner_depth = depth.clone();
2911                if inlined {
2912                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2913                    inner_offset = next_offset;
2914                } else {
2915                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2916                    inner_depth.increment()?;
2917                }
2918                let val_ref = self.seed.get_or_insert_with(|| fidl::new_empty!(u32, D));
2919                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2920                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2921                {
2922                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2923                }
2924                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2925                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2926                }
2927            }
2928
2929            next_offset += envelope_size;
2930            _next_ordinal_to_read += 1;
2931            if next_offset >= end_offset {
2932                return Ok(());
2933            }
2934
2935            // Decode unknown envelopes for gaps in ordinals.
2936            while _next_ordinal_to_read < 4 {
2937                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2938                _next_ordinal_to_read += 1;
2939                next_offset += envelope_size;
2940            }
2941
2942            let next_out_of_line = decoder.next_out_of_line();
2943            let handles_before = decoder.remaining_handles();
2944            if let Some((inlined, num_bytes, num_handles)) =
2945                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2946            {
2947                let member_inline_size =
2948                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2949                if inlined != (member_inline_size <= 4) {
2950                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2951                }
2952                let inner_offset;
2953                let mut inner_depth = depth.clone();
2954                if inlined {
2955                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2956                    inner_offset = next_offset;
2957                } else {
2958                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2959                    inner_depth.increment()?;
2960                }
2961                let val_ref = self.max_input_size.get_or_insert_with(|| fidl::new_empty!(u64, D));
2962                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2963                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2964                {
2965                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2966                }
2967                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2968                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2969                }
2970            }
2971
2972            next_offset += envelope_size;
2973            _next_ordinal_to_read += 1;
2974            if next_offset >= end_offset {
2975                return Ok(());
2976            }
2977
2978            // Decode unknown envelopes for gaps in ordinals.
2979            while _next_ordinal_to_read < 5 {
2980                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2981                _next_ordinal_to_read += 1;
2982                next_offset += envelope_size;
2983            }
2984
2985            let next_out_of_line = decoder.next_out_of_line();
2986            let handles_before = decoder.remaining_handles();
2987            if let Some((inlined, num_bytes, num_handles)) =
2988                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2989            {
2990                let member_inline_size =
2991                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2992                if inlined != (member_inline_size <= 4) {
2993                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2994                }
2995                let inner_offset;
2996                let mut inner_depth = depth.clone();
2997                if inlined {
2998                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2999                    inner_offset = next_offset;
3000                } else {
3001                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3002                    inner_depth.increment()?;
3003                }
3004                let val_ref = self.mutation_depth.get_or_insert_with(|| fidl::new_empty!(u16, D));
3005                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
3006                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3007                {
3008                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3009                }
3010                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3011                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3012                }
3013            }
3014
3015            next_offset += envelope_size;
3016            _next_ordinal_to_read += 1;
3017            if next_offset >= end_offset {
3018                return Ok(());
3019            }
3020
3021            // Decode unknown envelopes for gaps in ordinals.
3022            while _next_ordinal_to_read < 6 {
3023                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3024                _next_ordinal_to_read += 1;
3025                next_offset += envelope_size;
3026            }
3027
3028            let next_out_of_line = decoder.next_out_of_line();
3029            let handles_before = decoder.remaining_handles();
3030            if let Some((inlined, num_bytes, num_handles)) =
3031                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3032            {
3033                let member_inline_size =
3034                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3035                if inlined != (member_inline_size <= 4) {
3036                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3037                }
3038                let inner_offset;
3039                let mut inner_depth = depth.clone();
3040                if inlined {
3041                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3042                    inner_offset = next_offset;
3043                } else {
3044                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3045                    inner_depth.increment()?;
3046                }
3047                let val_ref = self.dictionary_level.get_or_insert_with(|| fidl::new_empty!(u16, D));
3048                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
3049                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3050                {
3051                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3052                }
3053                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3054                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3055                }
3056            }
3057
3058            next_offset += envelope_size;
3059            _next_ordinal_to_read += 1;
3060            if next_offset >= end_offset {
3061                return Ok(());
3062            }
3063
3064            // Decode unknown envelopes for gaps in ordinals.
3065            while _next_ordinal_to_read < 7 {
3066                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3067                _next_ordinal_to_read += 1;
3068                next_offset += envelope_size;
3069            }
3070
3071            let next_out_of_line = decoder.next_out_of_line();
3072            let handles_before = decoder.remaining_handles();
3073            if let Some((inlined, num_bytes, num_handles)) =
3074                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3075            {
3076                let member_inline_size =
3077                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3078                if inlined != (member_inline_size <= 4) {
3079                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3080                }
3081                let inner_offset;
3082                let mut inner_depth = depth.clone();
3083                if inlined {
3084                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3085                    inner_offset = next_offset;
3086                } else {
3087                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3088                    inner_depth.increment()?;
3089                }
3090                let val_ref = self.detect_exits.get_or_insert_with(|| fidl::new_empty!(bool, D));
3091                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3092                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3093                {
3094                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3095                }
3096                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3097                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3098                }
3099            }
3100
3101            next_offset += envelope_size;
3102            _next_ordinal_to_read += 1;
3103            if next_offset >= end_offset {
3104                return Ok(());
3105            }
3106
3107            // Decode unknown envelopes for gaps in ordinals.
3108            while _next_ordinal_to_read < 8 {
3109                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3110                _next_ordinal_to_read += 1;
3111                next_offset += envelope_size;
3112            }
3113
3114            let next_out_of_line = decoder.next_out_of_line();
3115            let handles_before = decoder.remaining_handles();
3116            if let Some((inlined, num_bytes, num_handles)) =
3117                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3118            {
3119                let member_inline_size =
3120                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3121                if inlined != (member_inline_size <= 4) {
3122                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3123                }
3124                let inner_offset;
3125                let mut inner_depth = depth.clone();
3126                if inlined {
3127                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3128                    inner_offset = next_offset;
3129                } else {
3130                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3131                    inner_depth.increment()?;
3132                }
3133                let val_ref = self.detect_leaks.get_or_insert_with(|| fidl::new_empty!(bool, D));
3134                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3135                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3136                {
3137                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3138                }
3139                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3140                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3141                }
3142            }
3143
3144            next_offset += envelope_size;
3145            _next_ordinal_to_read += 1;
3146            if next_offset >= end_offset {
3147                return Ok(());
3148            }
3149
3150            // Decode unknown envelopes for gaps in ordinals.
3151            while _next_ordinal_to_read < 9 {
3152                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3153                _next_ordinal_to_read += 1;
3154                next_offset += envelope_size;
3155            }
3156
3157            let next_out_of_line = decoder.next_out_of_line();
3158            let handles_before = decoder.remaining_handles();
3159            if let Some((inlined, num_bytes, num_handles)) =
3160                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3161            {
3162                let member_inline_size =
3163                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3164                if inlined != (member_inline_size <= 4) {
3165                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3166                }
3167                let inner_offset;
3168                let mut inner_depth = depth.clone();
3169                if inlined {
3170                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3171                    inner_offset = next_offset;
3172                } else {
3173                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3174                    inner_depth.increment()?;
3175                }
3176                let val_ref = self.run_limit.get_or_insert_with(|| fidl::new_empty!(i64, D));
3177                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3178                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3179                {
3180                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3181                }
3182                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3183                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3184                }
3185            }
3186
3187            next_offset += envelope_size;
3188            _next_ordinal_to_read += 1;
3189            if next_offset >= end_offset {
3190                return Ok(());
3191            }
3192
3193            // Decode unknown envelopes for gaps in ordinals.
3194            while _next_ordinal_to_read < 10 {
3195                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3196                _next_ordinal_to_read += 1;
3197                next_offset += envelope_size;
3198            }
3199
3200            let next_out_of_line = decoder.next_out_of_line();
3201            let handles_before = decoder.remaining_handles();
3202            if let Some((inlined, num_bytes, num_handles)) =
3203                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3204            {
3205                let member_inline_size =
3206                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3207                if inlined != (member_inline_size <= 4) {
3208                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3209                }
3210                let inner_offset;
3211                let mut inner_depth = depth.clone();
3212                if inlined {
3213                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3214                    inner_offset = next_offset;
3215                } else {
3216                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3217                    inner_depth.increment()?;
3218                }
3219                let val_ref = self.malloc_limit.get_or_insert_with(|| fidl::new_empty!(u64, D));
3220                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3221                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3222                {
3223                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3224                }
3225                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3226                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3227                }
3228            }
3229
3230            next_offset += envelope_size;
3231            _next_ordinal_to_read += 1;
3232            if next_offset >= end_offset {
3233                return Ok(());
3234            }
3235
3236            // Decode unknown envelopes for gaps in ordinals.
3237            while _next_ordinal_to_read < 11 {
3238                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3239                _next_ordinal_to_read += 1;
3240                next_offset += envelope_size;
3241            }
3242
3243            let next_out_of_line = decoder.next_out_of_line();
3244            let handles_before = decoder.remaining_handles();
3245            if let Some((inlined, num_bytes, num_handles)) =
3246                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3247            {
3248                let member_inline_size =
3249                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3250                if inlined != (member_inline_size <= 4) {
3251                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3252                }
3253                let inner_offset;
3254                let mut inner_depth = depth.clone();
3255                if inlined {
3256                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3257                    inner_offset = next_offset;
3258                } else {
3259                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3260                    inner_depth.increment()?;
3261                }
3262                let val_ref = self.oom_limit.get_or_insert_with(|| fidl::new_empty!(u64, D));
3263                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3264                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3265                {
3266                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3267                }
3268                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3269                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3270                }
3271            }
3272
3273            next_offset += envelope_size;
3274            _next_ordinal_to_read += 1;
3275            if next_offset >= end_offset {
3276                return Ok(());
3277            }
3278
3279            // Decode unknown envelopes for gaps in ordinals.
3280            while _next_ordinal_to_read < 12 {
3281                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3282                _next_ordinal_to_read += 1;
3283                next_offset += envelope_size;
3284            }
3285
3286            let next_out_of_line = decoder.next_out_of_line();
3287            let handles_before = decoder.remaining_handles();
3288            if let Some((inlined, num_bytes, num_handles)) =
3289                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3290            {
3291                let member_inline_size =
3292                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3293                if inlined != (member_inline_size <= 4) {
3294                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3295                }
3296                let inner_offset;
3297                let mut inner_depth = depth.clone();
3298                if inlined {
3299                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3300                    inner_offset = next_offset;
3301                } else {
3302                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3303                    inner_depth.increment()?;
3304                }
3305                let val_ref = self.purge_interval.get_or_insert_with(|| fidl::new_empty!(i64, D));
3306                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3307                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3308                {
3309                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3310                }
3311                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3312                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3313                }
3314            }
3315
3316            next_offset += envelope_size;
3317            _next_ordinal_to_read += 1;
3318            if next_offset >= end_offset {
3319                return Ok(());
3320            }
3321
3322            // Decode unknown envelopes for gaps in ordinals.
3323            while _next_ordinal_to_read < 13 {
3324                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3325                _next_ordinal_to_read += 1;
3326                next_offset += envelope_size;
3327            }
3328
3329            let next_out_of_line = decoder.next_out_of_line();
3330            let handles_before = decoder.remaining_handles();
3331            if let Some((inlined, num_bytes, num_handles)) =
3332                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3333            {
3334                let member_inline_size =
3335                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3336                if inlined != (member_inline_size <= 4) {
3337                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3338                }
3339                let inner_offset;
3340                let mut inner_depth = depth.clone();
3341                if inlined {
3342                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3343                    inner_offset = next_offset;
3344                } else {
3345                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3346                    inner_depth.increment()?;
3347                }
3348                let val_ref = self.malloc_exitcode.get_or_insert_with(|| fidl::new_empty!(i32, D));
3349                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
3350                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3351                {
3352                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3353                }
3354                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3355                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3356                }
3357            }
3358
3359            next_offset += envelope_size;
3360            _next_ordinal_to_read += 1;
3361            if next_offset >= end_offset {
3362                return Ok(());
3363            }
3364
3365            // Decode unknown envelopes for gaps in ordinals.
3366            while _next_ordinal_to_read < 14 {
3367                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3368                _next_ordinal_to_read += 1;
3369                next_offset += envelope_size;
3370            }
3371
3372            let next_out_of_line = decoder.next_out_of_line();
3373            let handles_before = decoder.remaining_handles();
3374            if let Some((inlined, num_bytes, num_handles)) =
3375                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3376            {
3377                let member_inline_size =
3378                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3379                if inlined != (member_inline_size <= 4) {
3380                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3381                }
3382                let inner_offset;
3383                let mut inner_depth = depth.clone();
3384                if inlined {
3385                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3386                    inner_offset = next_offset;
3387                } else {
3388                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3389                    inner_depth.increment()?;
3390                }
3391                let val_ref = self.death_exitcode.get_or_insert_with(|| fidl::new_empty!(i32, D));
3392                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
3393                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3394                {
3395                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3396                }
3397                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3398                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3399                }
3400            }
3401
3402            next_offset += envelope_size;
3403            _next_ordinal_to_read += 1;
3404            if next_offset >= end_offset {
3405                return Ok(());
3406            }
3407
3408            // Decode unknown envelopes for gaps in ordinals.
3409            while _next_ordinal_to_read < 15 {
3410                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3411                _next_ordinal_to_read += 1;
3412                next_offset += envelope_size;
3413            }
3414
3415            let next_out_of_line = decoder.next_out_of_line();
3416            let handles_before = decoder.remaining_handles();
3417            if let Some((inlined, num_bytes, num_handles)) =
3418                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3419            {
3420                let member_inline_size =
3421                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3422                if inlined != (member_inline_size <= 4) {
3423                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3424                }
3425                let inner_offset;
3426                let mut inner_depth = depth.clone();
3427                if inlined {
3428                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3429                    inner_offset = next_offset;
3430                } else {
3431                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3432                    inner_depth.increment()?;
3433                }
3434                let val_ref = self.leak_exitcode.get_or_insert_with(|| fidl::new_empty!(i32, D));
3435                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
3436                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3437                {
3438                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3439                }
3440                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3441                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3442                }
3443            }
3444
3445            next_offset += envelope_size;
3446            _next_ordinal_to_read += 1;
3447            if next_offset >= end_offset {
3448                return Ok(());
3449            }
3450
3451            // Decode unknown envelopes for gaps in ordinals.
3452            while _next_ordinal_to_read < 16 {
3453                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3454                _next_ordinal_to_read += 1;
3455                next_offset += envelope_size;
3456            }
3457
3458            let next_out_of_line = decoder.next_out_of_line();
3459            let handles_before = decoder.remaining_handles();
3460            if let Some((inlined, num_bytes, num_handles)) =
3461                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3462            {
3463                let member_inline_size =
3464                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3465                if inlined != (member_inline_size <= 4) {
3466                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3467                }
3468                let inner_offset;
3469                let mut inner_depth = depth.clone();
3470                if inlined {
3471                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3472                    inner_offset = next_offset;
3473                } else {
3474                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3475                    inner_depth.increment()?;
3476                }
3477                let val_ref = self.oom_exitcode.get_or_insert_with(|| fidl::new_empty!(i32, D));
3478                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
3479                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3480                {
3481                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3482                }
3483                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3484                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3485                }
3486            }
3487
3488            next_offset += envelope_size;
3489            _next_ordinal_to_read += 1;
3490            if next_offset >= end_offset {
3491                return Ok(());
3492            }
3493
3494            // Decode unknown envelopes for gaps in ordinals.
3495            while _next_ordinal_to_read < 17 {
3496                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3497                _next_ordinal_to_read += 1;
3498                next_offset += envelope_size;
3499            }
3500
3501            let next_out_of_line = decoder.next_out_of_line();
3502            let handles_before = decoder.remaining_handles();
3503            if let Some((inlined, num_bytes, num_handles)) =
3504                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3505            {
3506                let member_inline_size =
3507                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3508                if inlined != (member_inline_size <= 4) {
3509                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3510                }
3511                let inner_offset;
3512                let mut inner_depth = depth.clone();
3513                if inlined {
3514                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3515                    inner_offset = next_offset;
3516                } else {
3517                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3518                    inner_depth.increment()?;
3519                }
3520                let val_ref = self.pulse_interval.get_or_insert_with(|| fidl::new_empty!(i64, D));
3521                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3522                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3523                {
3524                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3525                }
3526                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3527                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3528                }
3529            }
3530
3531            next_offset += envelope_size;
3532            _next_ordinal_to_read += 1;
3533            if next_offset >= end_offset {
3534                return Ok(());
3535            }
3536
3537            // Decode unknown envelopes for gaps in ordinals.
3538            while _next_ordinal_to_read < 18 {
3539                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3540                _next_ordinal_to_read += 1;
3541                next_offset += envelope_size;
3542            }
3543
3544            let next_out_of_line = decoder.next_out_of_line();
3545            let handles_before = decoder.remaining_handles();
3546            if let Some((inlined, num_bytes, num_handles)) =
3547                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3548            {
3549                let member_inline_size =
3550                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3551                if inlined != (member_inline_size <= 4) {
3552                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3553                }
3554                let inner_offset;
3555                let mut inner_depth = depth.clone();
3556                if inlined {
3557                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3558                    inner_offset = next_offset;
3559                } else {
3560                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3561                    inner_depth.increment()?;
3562                }
3563                let val_ref = self.debug.get_or_insert_with(|| fidl::new_empty!(bool, D));
3564                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3565                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3566                {
3567                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3568                }
3569                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3570                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3571                }
3572            }
3573
3574            next_offset += envelope_size;
3575            _next_ordinal_to_read += 1;
3576            if next_offset >= end_offset {
3577                return Ok(());
3578            }
3579
3580            // Decode unknown envelopes for gaps in ordinals.
3581            while _next_ordinal_to_read < 19 {
3582                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3583                _next_ordinal_to_read += 1;
3584                next_offset += envelope_size;
3585            }
3586
3587            let next_out_of_line = decoder.next_out_of_line();
3588            let handles_before = decoder.remaining_handles();
3589            if let Some((inlined, num_bytes, num_handles)) =
3590                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3591            {
3592                let member_inline_size =
3593                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3594                if inlined != (member_inline_size <= 4) {
3595                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3596                }
3597                let inner_offset;
3598                let mut inner_depth = depth.clone();
3599                if inlined {
3600                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3601                    inner_offset = next_offset;
3602                } else {
3603                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3604                    inner_depth.increment()?;
3605                }
3606                let val_ref =
3607                    self.print_final_stats.get_or_insert_with(|| fidl::new_empty!(bool, D));
3608                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3609                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3610                {
3611                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3612                }
3613                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3614                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3615                }
3616            }
3617
3618            next_offset += envelope_size;
3619            _next_ordinal_to_read += 1;
3620            if next_offset >= end_offset {
3621                return Ok(());
3622            }
3623
3624            // Decode unknown envelopes for gaps in ordinals.
3625            while _next_ordinal_to_read < 20 {
3626                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3627                _next_ordinal_to_read += 1;
3628                next_offset += envelope_size;
3629            }
3630
3631            let next_out_of_line = decoder.next_out_of_line();
3632            let handles_before = decoder.remaining_handles();
3633            if let Some((inlined, num_bytes, num_handles)) =
3634                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3635            {
3636                let member_inline_size =
3637                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3638                if inlined != (member_inline_size <= 4) {
3639                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3640                }
3641                let inner_offset;
3642                let mut inner_depth = depth.clone();
3643                if inlined {
3644                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3645                    inner_offset = next_offset;
3646                } else {
3647                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3648                    inner_depth.increment()?;
3649                }
3650                let val_ref =
3651                    self.use_value_profile.get_or_insert_with(|| fidl::new_empty!(bool, D));
3652                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3653                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3654                {
3655                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3656                }
3657                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3658                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3659                }
3660            }
3661
3662            next_offset += envelope_size;
3663            _next_ordinal_to_read += 1;
3664            if next_offset >= end_offset {
3665                return Ok(());
3666            }
3667
3668            // Decode unknown envelopes for gaps in ordinals.
3669            while _next_ordinal_to_read < 21 {
3670                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3671                _next_ordinal_to_read += 1;
3672                next_offset += envelope_size;
3673            }
3674
3675            let next_out_of_line = decoder.next_out_of_line();
3676            let handles_before = decoder.remaining_handles();
3677            if let Some((inlined, num_bytes, num_handles)) =
3678                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3679            {
3680                let member_inline_size =
3681                    <SanitizerOptions as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3682                if inlined != (member_inline_size <= 4) {
3683                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3684                }
3685                let inner_offset;
3686                let mut inner_depth = depth.clone();
3687                if inlined {
3688                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3689                    inner_offset = next_offset;
3690                } else {
3691                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3692                    inner_depth.increment()?;
3693                }
3694                let val_ref = self
3695                    .sanitizer_options
3696                    .get_or_insert_with(|| fidl::new_empty!(SanitizerOptions, D));
3697                fidl::decode!(SanitizerOptions, D, val_ref, decoder, inner_offset, inner_depth)?;
3698                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3699                {
3700                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3701                }
3702                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3703                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3704                }
3705            }
3706
3707            next_offset += envelope_size;
3708            _next_ordinal_to_read += 1;
3709            if next_offset >= end_offset {
3710                return Ok(());
3711            }
3712
3713            // Decode unknown envelopes for gaps in ordinals.
3714            while _next_ordinal_to_read < 22 {
3715                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3716                _next_ordinal_to_read += 1;
3717                next_offset += envelope_size;
3718            }
3719
3720            let next_out_of_line = decoder.next_out_of_line();
3721            let handles_before = decoder.remaining_handles();
3722            if let Some((inlined, num_bytes, num_handles)) =
3723                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3724            {
3725                let member_inline_size =
3726                    <OutputFlags as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3727                if inlined != (member_inline_size <= 4) {
3728                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3729                }
3730                let inner_offset;
3731                let mut inner_depth = depth.clone();
3732                if inlined {
3733                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3734                    inner_offset = next_offset;
3735                } else {
3736                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3737                    inner_depth.increment()?;
3738                }
3739                let val_ref =
3740                    self.output_flags.get_or_insert_with(|| fidl::new_empty!(OutputFlags, D));
3741                fidl::decode!(OutputFlags, D, val_ref, decoder, inner_offset, inner_depth)?;
3742                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3743                {
3744                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3745                }
3746                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3747                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3748                }
3749            }
3750
3751            next_offset += envelope_size;
3752
3753            // Decode the remaining unknown envelopes.
3754            while next_offset < end_offset {
3755                _next_ordinal_to_read += 1;
3756                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3757                next_offset += envelope_size;
3758            }
3759
3760            Ok(())
3761        }
3762    }
3763
3764    impl Status {
3765        #[inline(always)]
3766        fn max_ordinal_present(&self) -> u64 {
3767            if let Some(_) = self.process_stats {
3768                return 8;
3769            }
3770            if let Some(_) = self.corpus_total_size {
3771                return 7;
3772            }
3773            if let Some(_) = self.corpus_num_inputs {
3774                return 6;
3775            }
3776            if let Some(_) = self.covered_features {
3777                return 5;
3778            }
3779            if let Some(_) = self.covered_pcs {
3780                return 4;
3781            }
3782            if let Some(_) = self.elapsed {
3783                return 3;
3784            }
3785            if let Some(_) = self.runs {
3786                return 2;
3787            }
3788            if let Some(_) = self.running {
3789                return 1;
3790            }
3791            0
3792        }
3793    }
3794
3795    impl fidl::encoding::ValueTypeMarker for Status {
3796        type Borrowed<'a> = &'a Self;
3797        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3798            value
3799        }
3800    }
3801
3802    unsafe impl fidl::encoding::TypeMarker for Status {
3803        type Owned = Self;
3804
3805        #[inline(always)]
3806        fn inline_align(_context: fidl::encoding::Context) -> usize {
3807            8
3808        }
3809
3810        #[inline(always)]
3811        fn inline_size(_context: fidl::encoding::Context) -> usize {
3812            16
3813        }
3814    }
3815
3816    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Status, D> for &Status {
3817        unsafe fn encode(
3818            self,
3819            encoder: &mut fidl::encoding::Encoder<'_, D>,
3820            offset: usize,
3821            mut depth: fidl::encoding::Depth,
3822        ) -> fidl::Result<()> {
3823            encoder.debug_check_bounds::<Status>(offset);
3824            // Vector header
3825            let max_ordinal: u64 = self.max_ordinal_present();
3826            encoder.write_num(max_ordinal, offset);
3827            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3828            // Calling encoder.out_of_line_offset(0) is not allowed.
3829            if max_ordinal == 0 {
3830                return Ok(());
3831            }
3832            depth.increment()?;
3833            let envelope_size = 8;
3834            let bytes_len = max_ordinal as usize * envelope_size;
3835            #[allow(unused_variables)]
3836            let offset = encoder.out_of_line_offset(bytes_len);
3837            let mut _prev_end_offset: usize = 0;
3838            if 1 > max_ordinal {
3839                return Ok(());
3840            }
3841
3842            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3843            // are envelope_size bytes.
3844            let cur_offset: usize = (1 - 1) * envelope_size;
3845
3846            // Zero reserved fields.
3847            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3848
3849            // Safety:
3850            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3851            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3852            //   envelope_size bytes, there is always sufficient room.
3853            fidl::encoding::encode_in_envelope_optional::<bool, D>(
3854                self.running.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
3855                encoder,
3856                offset + cur_offset,
3857                depth,
3858            )?;
3859
3860            _prev_end_offset = cur_offset + envelope_size;
3861            if 2 > max_ordinal {
3862                return Ok(());
3863            }
3864
3865            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3866            // are envelope_size bytes.
3867            let cur_offset: usize = (2 - 1) * envelope_size;
3868
3869            // Zero reserved fields.
3870            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3871
3872            // Safety:
3873            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3874            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3875            //   envelope_size bytes, there is always sufficient room.
3876            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3877                self.runs.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3878                encoder,
3879                offset + cur_offset,
3880                depth,
3881            )?;
3882
3883            _prev_end_offset = cur_offset + envelope_size;
3884            if 3 > max_ordinal {
3885                return Ok(());
3886            }
3887
3888            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3889            // are envelope_size bytes.
3890            let cur_offset: usize = (3 - 1) * envelope_size;
3891
3892            // Zero reserved fields.
3893            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3894
3895            // Safety:
3896            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3897            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3898            //   envelope_size bytes, there is always sufficient room.
3899            fidl::encoding::encode_in_envelope_optional::<i64, D>(
3900                self.elapsed.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
3901                encoder,
3902                offset + cur_offset,
3903                depth,
3904            )?;
3905
3906            _prev_end_offset = cur_offset + envelope_size;
3907            if 4 > max_ordinal {
3908                return Ok(());
3909            }
3910
3911            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3912            // are envelope_size bytes.
3913            let cur_offset: usize = (4 - 1) * envelope_size;
3914
3915            // Zero reserved fields.
3916            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3917
3918            // Safety:
3919            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3920            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3921            //   envelope_size bytes, there is always sufficient room.
3922            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3923                self.covered_pcs.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3924                encoder,
3925                offset + cur_offset,
3926                depth,
3927            )?;
3928
3929            _prev_end_offset = cur_offset + envelope_size;
3930            if 5 > max_ordinal {
3931                return Ok(());
3932            }
3933
3934            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3935            // are envelope_size bytes.
3936            let cur_offset: usize = (5 - 1) * envelope_size;
3937
3938            // Zero reserved fields.
3939            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3940
3941            // Safety:
3942            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3943            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3944            //   envelope_size bytes, there is always sufficient room.
3945            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3946                self.covered_features
3947                    .as_ref()
3948                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3949                encoder,
3950                offset + cur_offset,
3951                depth,
3952            )?;
3953
3954            _prev_end_offset = cur_offset + envelope_size;
3955            if 6 > max_ordinal {
3956                return Ok(());
3957            }
3958
3959            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3960            // are envelope_size bytes.
3961            let cur_offset: usize = (6 - 1) * envelope_size;
3962
3963            // Zero reserved fields.
3964            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3965
3966            // Safety:
3967            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3968            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3969            //   envelope_size bytes, there is always sufficient room.
3970            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3971                self.corpus_num_inputs
3972                    .as_ref()
3973                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3974                encoder,
3975                offset + cur_offset,
3976                depth,
3977            )?;
3978
3979            _prev_end_offset = cur_offset + envelope_size;
3980            if 7 > max_ordinal {
3981                return Ok(());
3982            }
3983
3984            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3985            // are envelope_size bytes.
3986            let cur_offset: usize = (7 - 1) * envelope_size;
3987
3988            // Zero reserved fields.
3989            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3990
3991            // Safety:
3992            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3993            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3994            //   envelope_size bytes, there is always sufficient room.
3995            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3996                self.corpus_total_size
3997                    .as_ref()
3998                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3999                encoder,
4000                offset + cur_offset,
4001                depth,
4002            )?;
4003
4004            _prev_end_offset = cur_offset + envelope_size;
4005            if 8 > max_ordinal {
4006                return Ok(());
4007            }
4008
4009            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4010            // are envelope_size bytes.
4011            let cur_offset: usize = (8 - 1) * envelope_size;
4012
4013            // Zero reserved fields.
4014            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4015
4016            // Safety:
4017            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4018            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4019            //   envelope_size bytes, there is always sufficient room.
4020            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ProcessStats, 256>, D>(
4021            self.process_stats.as_ref().map(<fidl::encoding::Vector<ProcessStats, 256> as fidl::encoding::ValueTypeMarker>::borrow),
4022            encoder, offset + cur_offset, depth
4023        )?;
4024
4025            _prev_end_offset = cur_offset + envelope_size;
4026
4027            Ok(())
4028        }
4029    }
4030
4031    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Status {
4032        #[inline(always)]
4033        fn new_empty() -> Self {
4034            Self::default()
4035        }
4036
4037        unsafe fn decode(
4038            &mut self,
4039            decoder: &mut fidl::encoding::Decoder<'_, D>,
4040            offset: usize,
4041            mut depth: fidl::encoding::Depth,
4042        ) -> fidl::Result<()> {
4043            decoder.debug_check_bounds::<Self>(offset);
4044            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4045                None => return Err(fidl::Error::NotNullable),
4046                Some(len) => len,
4047            };
4048            // Calling decoder.out_of_line_offset(0) is not allowed.
4049            if len == 0 {
4050                return Ok(());
4051            };
4052            depth.increment()?;
4053            let envelope_size = 8;
4054            let bytes_len = len * envelope_size;
4055            let offset = decoder.out_of_line_offset(bytes_len)?;
4056            // Decode the envelope for each type.
4057            let mut _next_ordinal_to_read = 0;
4058            let mut next_offset = offset;
4059            let end_offset = offset + bytes_len;
4060            _next_ordinal_to_read += 1;
4061            if next_offset >= end_offset {
4062                return Ok(());
4063            }
4064
4065            // Decode unknown envelopes for gaps in ordinals.
4066            while _next_ordinal_to_read < 1 {
4067                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4068                _next_ordinal_to_read += 1;
4069                next_offset += envelope_size;
4070            }
4071
4072            let next_out_of_line = decoder.next_out_of_line();
4073            let handles_before = decoder.remaining_handles();
4074            if let Some((inlined, num_bytes, num_handles)) =
4075                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4076            {
4077                let member_inline_size =
4078                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4079                if inlined != (member_inline_size <= 4) {
4080                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4081                }
4082                let inner_offset;
4083                let mut inner_depth = depth.clone();
4084                if inlined {
4085                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4086                    inner_offset = next_offset;
4087                } else {
4088                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4089                    inner_depth.increment()?;
4090                }
4091                let val_ref = self.running.get_or_insert_with(|| fidl::new_empty!(bool, D));
4092                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4093                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4094                {
4095                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4096                }
4097                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4098                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4099                }
4100            }
4101
4102            next_offset += envelope_size;
4103            _next_ordinal_to_read += 1;
4104            if next_offset >= end_offset {
4105                return Ok(());
4106            }
4107
4108            // Decode unknown envelopes for gaps in ordinals.
4109            while _next_ordinal_to_read < 2 {
4110                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4111                _next_ordinal_to_read += 1;
4112                next_offset += envelope_size;
4113            }
4114
4115            let next_out_of_line = decoder.next_out_of_line();
4116            let handles_before = decoder.remaining_handles();
4117            if let Some((inlined, num_bytes, num_handles)) =
4118                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4119            {
4120                let member_inline_size =
4121                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4122                if inlined != (member_inline_size <= 4) {
4123                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4124                }
4125                let inner_offset;
4126                let mut inner_depth = depth.clone();
4127                if inlined {
4128                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4129                    inner_offset = next_offset;
4130                } else {
4131                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4132                    inner_depth.increment()?;
4133                }
4134                let val_ref = self.runs.get_or_insert_with(|| fidl::new_empty!(u32, D));
4135                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4136                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4137                {
4138                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4139                }
4140                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4141                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4142                }
4143            }
4144
4145            next_offset += envelope_size;
4146            _next_ordinal_to_read += 1;
4147            if next_offset >= end_offset {
4148                return Ok(());
4149            }
4150
4151            // Decode unknown envelopes for gaps in ordinals.
4152            while _next_ordinal_to_read < 3 {
4153                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4154                _next_ordinal_to_read += 1;
4155                next_offset += envelope_size;
4156            }
4157
4158            let next_out_of_line = decoder.next_out_of_line();
4159            let handles_before = decoder.remaining_handles();
4160            if let Some((inlined, num_bytes, num_handles)) =
4161                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4162            {
4163                let member_inline_size =
4164                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4165                if inlined != (member_inline_size <= 4) {
4166                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4167                }
4168                let inner_offset;
4169                let mut inner_depth = depth.clone();
4170                if inlined {
4171                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4172                    inner_offset = next_offset;
4173                } else {
4174                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4175                    inner_depth.increment()?;
4176                }
4177                let val_ref = self.elapsed.get_or_insert_with(|| fidl::new_empty!(i64, D));
4178                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
4179                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4180                {
4181                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4182                }
4183                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4184                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4185                }
4186            }
4187
4188            next_offset += envelope_size;
4189            _next_ordinal_to_read += 1;
4190            if next_offset >= end_offset {
4191                return Ok(());
4192            }
4193
4194            // Decode unknown envelopes for gaps in ordinals.
4195            while _next_ordinal_to_read < 4 {
4196                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4197                _next_ordinal_to_read += 1;
4198                next_offset += envelope_size;
4199            }
4200
4201            let next_out_of_line = decoder.next_out_of_line();
4202            let handles_before = decoder.remaining_handles();
4203            if let Some((inlined, num_bytes, num_handles)) =
4204                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4205            {
4206                let member_inline_size =
4207                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4208                if inlined != (member_inline_size <= 4) {
4209                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4210                }
4211                let inner_offset;
4212                let mut inner_depth = depth.clone();
4213                if inlined {
4214                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4215                    inner_offset = next_offset;
4216                } else {
4217                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4218                    inner_depth.increment()?;
4219                }
4220                let val_ref = self.covered_pcs.get_or_insert_with(|| fidl::new_empty!(u64, D));
4221                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4222                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4223                {
4224                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4225                }
4226                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4227                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4228                }
4229            }
4230
4231            next_offset += envelope_size;
4232            _next_ordinal_to_read += 1;
4233            if next_offset >= end_offset {
4234                return Ok(());
4235            }
4236
4237            // Decode unknown envelopes for gaps in ordinals.
4238            while _next_ordinal_to_read < 5 {
4239                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4240                _next_ordinal_to_read += 1;
4241                next_offset += envelope_size;
4242            }
4243
4244            let next_out_of_line = decoder.next_out_of_line();
4245            let handles_before = decoder.remaining_handles();
4246            if let Some((inlined, num_bytes, num_handles)) =
4247                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4248            {
4249                let member_inline_size =
4250                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4251                if inlined != (member_inline_size <= 4) {
4252                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4253                }
4254                let inner_offset;
4255                let mut inner_depth = depth.clone();
4256                if inlined {
4257                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4258                    inner_offset = next_offset;
4259                } else {
4260                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4261                    inner_depth.increment()?;
4262                }
4263                let val_ref = self.covered_features.get_or_insert_with(|| fidl::new_empty!(u64, D));
4264                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4265                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4266                {
4267                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4268                }
4269                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4270                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4271                }
4272            }
4273
4274            next_offset += envelope_size;
4275            _next_ordinal_to_read += 1;
4276            if next_offset >= end_offset {
4277                return Ok(());
4278            }
4279
4280            // Decode unknown envelopes for gaps in ordinals.
4281            while _next_ordinal_to_read < 6 {
4282                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4283                _next_ordinal_to_read += 1;
4284                next_offset += envelope_size;
4285            }
4286
4287            let next_out_of_line = decoder.next_out_of_line();
4288            let handles_before = decoder.remaining_handles();
4289            if let Some((inlined, num_bytes, num_handles)) =
4290                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4291            {
4292                let member_inline_size =
4293                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4294                if inlined != (member_inline_size <= 4) {
4295                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4296                }
4297                let inner_offset;
4298                let mut inner_depth = depth.clone();
4299                if inlined {
4300                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4301                    inner_offset = next_offset;
4302                } else {
4303                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4304                    inner_depth.increment()?;
4305                }
4306                let val_ref =
4307                    self.corpus_num_inputs.get_or_insert_with(|| fidl::new_empty!(u64, D));
4308                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4309                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4310                {
4311                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4312                }
4313                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4314                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4315                }
4316            }
4317
4318            next_offset += envelope_size;
4319            _next_ordinal_to_read += 1;
4320            if next_offset >= end_offset {
4321                return Ok(());
4322            }
4323
4324            // Decode unknown envelopes for gaps in ordinals.
4325            while _next_ordinal_to_read < 7 {
4326                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4327                _next_ordinal_to_read += 1;
4328                next_offset += envelope_size;
4329            }
4330
4331            let next_out_of_line = decoder.next_out_of_line();
4332            let handles_before = decoder.remaining_handles();
4333            if let Some((inlined, num_bytes, num_handles)) =
4334                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4335            {
4336                let member_inline_size =
4337                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4338                if inlined != (member_inline_size <= 4) {
4339                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4340                }
4341                let inner_offset;
4342                let mut inner_depth = depth.clone();
4343                if inlined {
4344                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4345                    inner_offset = next_offset;
4346                } else {
4347                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4348                    inner_depth.increment()?;
4349                }
4350                let val_ref =
4351                    self.corpus_total_size.get_or_insert_with(|| fidl::new_empty!(u64, D));
4352                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4353                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4354                {
4355                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4356                }
4357                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4358                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4359                }
4360            }
4361
4362            next_offset += envelope_size;
4363            _next_ordinal_to_read += 1;
4364            if next_offset >= end_offset {
4365                return Ok(());
4366            }
4367
4368            // Decode unknown envelopes for gaps in ordinals.
4369            while _next_ordinal_to_read < 8 {
4370                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4371                _next_ordinal_to_read += 1;
4372                next_offset += envelope_size;
4373            }
4374
4375            let next_out_of_line = decoder.next_out_of_line();
4376            let handles_before = decoder.remaining_handles();
4377            if let Some((inlined, num_bytes, num_handles)) =
4378                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4379            {
4380                let member_inline_size = <fidl::encoding::Vector<ProcessStats, 256> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4381                if inlined != (member_inline_size <= 4) {
4382                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4383                }
4384                let inner_offset;
4385                let mut inner_depth = depth.clone();
4386                if inlined {
4387                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4388                    inner_offset = next_offset;
4389                } else {
4390                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4391                    inner_depth.increment()?;
4392                }
4393                let val_ref = self.process_stats.get_or_insert_with(
4394                    || fidl::new_empty!(fidl::encoding::Vector<ProcessStats, 256>, D),
4395                );
4396                fidl::decode!(fidl::encoding::Vector<ProcessStats, 256>, D, val_ref, decoder, inner_offset, inner_depth)?;
4397                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4398                {
4399                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4400                }
4401                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4402                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4403                }
4404            }
4405
4406            next_offset += envelope_size;
4407
4408            // Decode the remaining unknown envelopes.
4409            while next_offset < end_offset {
4410                _next_ordinal_to_read += 1;
4411                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4412                next_offset += envelope_size;
4413            }
4414
4415            Ok(())
4416        }
4417    }
4418}