/* This file was generated by upbc (the upb compiler) from the input
 * file:
 *
 *     envoy/config/endpoint/v3/endpoint_components.proto
 *
 * Do not edit -- your changes will be discarded when the file is
 * regenerated. */

#include <stddef.h>
#include "upb/msg.h"
#include "envoy/config/endpoint/v3/endpoint_components.upb.h"
#include "envoy/config/core/v3/address.upb.h"
#include "envoy/config/core/v3/base.upb.h"
#include "envoy/config/core/v3/health_check.upb.h"
#include "google/protobuf/wrappers.upb.h"
#include "udpa/annotations/status.upb.h"
#include "udpa/annotations/versioning.upb.h"
#include "validate/validate.upb.h"

#include "upb/port_def.inc"

static const upb_msglayout *const envoy_config_endpoint_v3_Endpoint_submsgs[2] = {
  &envoy_config_core_v3_Address_msginit,
  &envoy_config_endpoint_v3_Endpoint_HealthCheckConfig_msginit,
};

static const upb_msglayout_field envoy_config_endpoint_v3_Endpoint__fields[3] = {
  {1, UPB_SIZE(8, 16), 0, 0, 11, 1},
  {2, UPB_SIZE(12, 24), 0, 1, 11, 1},
  {3, UPB_SIZE(0, 0), 0, 0, 9, 1},
};

const upb_msglayout envoy_config_endpoint_v3_Endpoint_msginit = {
  &envoy_config_endpoint_v3_Endpoint_submsgs[0],
  &envoy_config_endpoint_v3_Endpoint__fields[0],
  UPB_SIZE(16, 32), 3, false,
};

static const upb_msglayout_field envoy_config_endpoint_v3_Endpoint_HealthCheckConfig__fields[2] = {
  {1, UPB_SIZE(0, 0), 0, 0, 13, 1},
  {2, UPB_SIZE(4, 8), 0, 0, 9, 1},
};

const upb_msglayout envoy_config_endpoint_v3_Endpoint_HealthCheckConfig_msginit = {
  NULL,
  &envoy_config_endpoint_v3_Endpoint_HealthCheckConfig__fields[0],
  UPB_SIZE(16, 32), 2, false,
};

static const upb_msglayout *const envoy_config_endpoint_v3_LbEndpoint_submsgs[3] = {
  &envoy_config_core_v3_Metadata_msginit,
  &envoy_config_endpoint_v3_Endpoint_msginit,
  &google_protobuf_UInt32Value_msginit,
};

static const upb_msglayout_field envoy_config_endpoint_v3_LbEndpoint__fields[5] = {
  {1, UPB_SIZE(16, 24), UPB_SIZE(-25, -41), 1, 11, 1},
  {2, UPB_SIZE(0, 0), 0, 0, 14, 1},
  {3, UPB_SIZE(8, 8), 0, 0, 11, 1},
  {4, UPB_SIZE(12, 16), 0, 2, 11, 1},
  {5, UPB_SIZE(16, 24), UPB_SIZE(-25, -41), 0, 9, 1},
};

const upb_msglayout envoy_config_endpoint_v3_LbEndpoint_msginit = {
  &envoy_config_endpoint_v3_LbEndpoint_submsgs[0],
  &envoy_config_endpoint_v3_LbEndpoint__fields[0],
  UPB_SIZE(32, 48), 5, false,
};

static const upb_msglayout *const envoy_config_endpoint_v3_LocalityLbEndpoints_submsgs[4] = {
  &envoy_config_core_v3_Locality_msginit,
  &envoy_config_endpoint_v3_LbEndpoint_msginit,
  &google_protobuf_UInt32Value_msginit,
};

static const upb_msglayout_field envoy_config_endpoint_v3_LocalityLbEndpoints__fields[5] = {
  {1, UPB_SIZE(4, 8), 0, 0, 11, 1},
  {2, UPB_SIZE(16, 32), 0, 1, 11, 3},
  {3, UPB_SIZE(8, 16), 0, 2, 11, 1},
  {5, UPB_SIZE(0, 0), 0, 0, 13, 1},
  {6, UPB_SIZE(12, 24), 0, 2, 11, 1},
};

const upb_msglayout envoy_config_endpoint_v3_LocalityLbEndpoints_msginit = {
  &envoy_config_endpoint_v3_LocalityLbEndpoints_submsgs[0],
  &envoy_config_endpoint_v3_LocalityLbEndpoints__fields[0],
  UPB_SIZE(20, 40), 5, false,
};

#include "upb/port_undef.inc"

