// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// GENERATED FILE: Regen with "fx regen_fidl_benchmark_suite"

library test.benchmarkfidl;

type PaddedStructTree1 = struct {
    a uint8;
    // 3 byte padding
    b uint32;
};

type PaddedStructTree2 = struct {
    left PaddedStructTree1;
    right PaddedStructTree1;
};

type PaddedStructTree3 = struct {
    left PaddedStructTree2;
    right PaddedStructTree2;
};

type PaddedStructTree4 = struct {
    left PaddedStructTree3;
    right PaddedStructTree3;
};

type PaddedStructTree5 = struct {
    left PaddedStructTree4;
    right PaddedStructTree4;
};

type PaddedStructTree6 = struct {
    left PaddedStructTree5;
    right PaddedStructTree5;
};

type PaddedStructTree7 = struct {
    left PaddedStructTree6;
    right PaddedStructTree6;
};

type PaddedStructTree8 = struct {
    left PaddedStructTree7;
    right PaddedStructTree7;
};
