// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: google/ads/googleads/v14/resources/ad.proto

package com.google.ads.googleads.v14.resources;

/**
 * <pre>
 * An ad.
 * </pre>
 *
 * Protobuf type {@code google.ads.googleads.v14.resources.Ad}
 */
public final class Ad extends
    com.google.protobuf.GeneratedMessageV3 implements
    // @@protoc_insertion_point(message_implements:google.ads.googleads.v14.resources.Ad)
    AdOrBuilder {
private static final long serialVersionUID = 0L;
  // Use Ad.newBuilder() to construct.
  private Ad(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
    super(builder);
  }
  private Ad() {
    resourceName_ = "";
    finalUrls_ =
        com.google.protobuf.LazyStringArrayList.emptyList();
    finalAppUrls_ = java.util.Collections.emptyList();
    finalMobileUrls_ =
        com.google.protobuf.LazyStringArrayList.emptyList();
    trackingUrlTemplate_ = "";
    finalUrlSuffix_ = "";
    urlCustomParameters_ = java.util.Collections.emptyList();
    displayUrl_ = "";
    type_ = 0;
    devicePreference_ = 0;
    urlCollections_ = java.util.Collections.emptyList();
    name_ = "";
    systemManagedResourceSource_ = 0;
  }

  @java.lang.Override
  @SuppressWarnings({"unused"})
  protected java.lang.Object newInstance(
      UnusedPrivateParameter unused) {
    return new Ad();
  }

  public static final com.google.protobuf.Descriptors.Descriptor
      getDescriptor() {
    return com.google.ads.googleads.v14.resources.AdProto.internal_static_google_ads_googleads_v14_resources_Ad_descriptor;
  }

  @java.lang.Override
  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internalGetFieldAccessorTable() {
    return com.google.ads.googleads.v14.resources.AdProto.internal_static_google_ads_googleads_v14_resources_Ad_fieldAccessorTable
        .ensureFieldAccessorsInitialized(
            com.google.ads.googleads.v14.resources.Ad.class, com.google.ads.googleads.v14.resources.Ad.Builder.class);
  }

  private int bitField0_;
  private int adDataCase_ = 0;
  @SuppressWarnings("serial")
  private java.lang.Object adData_;
  public enum AdDataCase
      implements com.google.protobuf.Internal.EnumLite,
          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
    TEXT_AD(6),
    EXPANDED_TEXT_AD(7),
    CALL_AD(49),
    EXPANDED_DYNAMIC_SEARCH_AD(14),
    HOTEL_AD(15),
    SHOPPING_SMART_AD(17),
    SHOPPING_PRODUCT_AD(18),
    IMAGE_AD(22),
    VIDEO_AD(24),
    VIDEO_RESPONSIVE_AD(39),
    RESPONSIVE_SEARCH_AD(25),
    LEGACY_RESPONSIVE_DISPLAY_AD(28),
    APP_AD(29),
    LEGACY_APP_INSTALL_AD(30),
    RESPONSIVE_DISPLAY_AD(31),
    LOCAL_AD(32),
    DISPLAY_UPLOAD_AD(33),
    APP_ENGAGEMENT_AD(34),
    SHOPPING_COMPARISON_LISTING_AD(36),
    SMART_CAMPAIGN_AD(48),
    APP_PRE_REGISTRATION_AD(50),
    DISCOVERY_MULTI_ASSET_AD(51),
    DISCOVERY_CAROUSEL_AD(52),
    DISCOVERY_VIDEO_RESPONSIVE_AD(60),
    TRAVEL_AD(54),
    ADDATA_NOT_SET(0);
    private final int value;
    private AdDataCase(int value) {
      this.value = value;
    }
    /**
     * @param value The number of the enum to look for.
     * @return The enum associated with the given number.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static AdDataCase valueOf(int value) {
      return forNumber(value);
    }

    public static AdDataCase forNumber(int value) {
      switch (value) {
        case 6: return TEXT_AD;
        case 7: return EXPANDED_TEXT_AD;
        case 49: return CALL_AD;
        case 14: return EXPANDED_DYNAMIC_SEARCH_AD;
        case 15: return HOTEL_AD;
        case 17: return SHOPPING_SMART_AD;
        case 18: return SHOPPING_PRODUCT_AD;
        case 22: return IMAGE_AD;
        case 24: return VIDEO_AD;
        case 39: return VIDEO_RESPONSIVE_AD;
        case 25: return RESPONSIVE_SEARCH_AD;
        case 28: return LEGACY_RESPONSIVE_DISPLAY_AD;
        case 29: return APP_AD;
        case 30: return LEGACY_APP_INSTALL_AD;
        case 31: return RESPONSIVE_DISPLAY_AD;
        case 32: return LOCAL_AD;
        case 33: return DISPLAY_UPLOAD_AD;
        case 34: return APP_ENGAGEMENT_AD;
        case 36: return SHOPPING_COMPARISON_LISTING_AD;
        case 48: return SMART_CAMPAIGN_AD;
        case 50: return APP_PRE_REGISTRATION_AD;
        case 51: return DISCOVERY_MULTI_ASSET_AD;
        case 52: return DISCOVERY_CAROUSEL_AD;
        case 60: return DISCOVERY_VIDEO_RESPONSIVE_AD;
        case 54: return TRAVEL_AD;
        case 0: return ADDATA_NOT_SET;
        default: return null;
      }
    }
    public int getNumber() {
      return this.value;
    }
  };

  public AdDataCase
  getAdDataCase() {
    return AdDataCase.forNumber(
        adDataCase_);
  }

  public static final int RESOURCE_NAME_FIELD_NUMBER = 37;
  @SuppressWarnings("serial")
  private volatile java.lang.Object resourceName_ = "";
  /**
   * <pre>
   * Immutable. The resource name of the ad.
   * Ad resource names have the form:
   *
   * `customers/{customer_id}/ads/{ad_id}`
   * </pre>
   *
   * <code>string resource_name = 37 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.resource_reference) = { ... }</code>
   * @return The resourceName.
   */
  @java.lang.Override
  public java.lang.String getResourceName() {
    java.lang.Object ref = resourceName_;
    if (ref instanceof java.lang.String) {
      return (java.lang.String) ref;
    } else {
      com.google.protobuf.ByteString bs = 
          (com.google.protobuf.ByteString) ref;
      java.lang.String s = bs.toStringUtf8();
      resourceName_ = s;
      return s;
    }
  }
  /**
   * <pre>
   * Immutable. The resource name of the ad.
   * Ad resource names have the form:
   *
   * `customers/{customer_id}/ads/{ad_id}`
   * </pre>
   *
   * <code>string resource_name = 37 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.resource_reference) = { ... }</code>
   * @return The bytes for resourceName.
   */
  @java.lang.Override
  public com.google.protobuf.ByteString
      getResourceNameBytes() {
    java.lang.Object ref = resourceName_;
    if (ref instanceof java.lang.String) {
      com.google.protobuf.ByteString b = 
          com.google.protobuf.ByteString.copyFromUtf8(
              (java.lang.String) ref);
      resourceName_ = b;
      return b;
    } else {
      return (com.google.protobuf.ByteString) ref;
    }
  }

  public static final int ID_FIELD_NUMBER = 40;
  private long id_ = 0L;
  /**
   * <pre>
   * Output only. The ID of the ad.
   * </pre>
   *
   * <code>optional int64 id = 40 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
   * @return Whether the id field is set.
   */
  @java.lang.Override
  public boolean hasId() {
    return ((bitField0_ & 0x00000001) != 0);
  }
  /**
   * <pre>
   * Output only. The ID of the ad.
   * </pre>
   *
   * <code>optional int64 id = 40 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
   * @return The id.
   */
  @java.lang.Override
  public long getId() {
    return id_;
  }

  public static final int FINAL_URLS_FIELD_NUMBER = 41;
  @SuppressWarnings("serial")
  private com.google.protobuf.LazyStringArrayList finalUrls_ =
      com.google.protobuf.LazyStringArrayList.emptyList();
  /**
   * <pre>
   * The list of possible final URLs after all cross-domain redirects for the
   * ad.
   * </pre>
   *
   * <code>repeated string final_urls = 41;</code>
   * @return A list containing the finalUrls.
   */
  public com.google.protobuf.ProtocolStringList
      getFinalUrlsList() {
    return finalUrls_;
  }
  /**
   * <pre>
   * The list of possible final URLs after all cross-domain redirects for the
   * ad.
   * </pre>
   *
   * <code>repeated string final_urls = 41;</code>
   * @return The count of finalUrls.
   */
  public int getFinalUrlsCount() {
    return finalUrls_.size();
  }
  /**
   * <pre>
   * The list of possible final URLs after all cross-domain redirects for the
   * ad.
   * </pre>
   *
   * <code>repeated string final_urls = 41;</code>
   * @param index The index of the element to return.
   * @return The finalUrls at the given index.
   */
  public java.lang.String getFinalUrls(int index) {
    return finalUrls_.get(index);
  }
  /**
   * <pre>
   * The list of possible final URLs after all cross-domain redirects for the
   * ad.
   * </pre>
   *
   * <code>repeated string final_urls = 41;</code>
   * @param index The index of the value to return.
   * @return The bytes of the finalUrls at the given index.
   */
  public com.google.protobuf.ByteString
      getFinalUrlsBytes(int index) {
    return finalUrls_.getByteString(index);
  }

  public static final int FINAL_APP_URLS_FIELD_NUMBER = 35;
  @SuppressWarnings("serial")
  private java.util.List<com.google.ads.googleads.v14.common.FinalAppUrl> finalAppUrls_;
  /**
   * <pre>
   * A list of final app URLs that will be used on mobile if the user has the
   * specific app installed.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
   */
  @java.lang.Override
  public java.util.List<com.google.ads.googleads.v14.common.FinalAppUrl> getFinalAppUrlsList() {
    return finalAppUrls_;
  }
  /**
   * <pre>
   * A list of final app URLs that will be used on mobile if the user has the
   * specific app installed.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
   */
  @java.lang.Override
  public java.util.List<? extends com.google.ads.googleads.v14.common.FinalAppUrlOrBuilder> 
      getFinalAppUrlsOrBuilderList() {
    return finalAppUrls_;
  }
  /**
   * <pre>
   * A list of final app URLs that will be used on mobile if the user has the
   * specific app installed.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
   */
  @java.lang.Override
  public int getFinalAppUrlsCount() {
    return finalAppUrls_.size();
  }
  /**
   * <pre>
   * A list of final app URLs that will be used on mobile if the user has the
   * specific app installed.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.FinalAppUrl getFinalAppUrls(int index) {
    return finalAppUrls_.get(index);
  }
  /**
   * <pre>
   * A list of final app URLs that will be used on mobile if the user has the
   * specific app installed.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.FinalAppUrlOrBuilder getFinalAppUrlsOrBuilder(
      int index) {
    return finalAppUrls_.get(index);
  }

  public static final int FINAL_MOBILE_URLS_FIELD_NUMBER = 42;
  @SuppressWarnings("serial")
  private com.google.protobuf.LazyStringArrayList finalMobileUrls_ =
      com.google.protobuf.LazyStringArrayList.emptyList();
  /**
   * <pre>
   * The list of possible final mobile URLs after all cross-domain redirects
   * for the ad.
   * </pre>
   *
   * <code>repeated string final_mobile_urls = 42;</code>
   * @return A list containing the finalMobileUrls.
   */
  public com.google.protobuf.ProtocolStringList
      getFinalMobileUrlsList() {
    return finalMobileUrls_;
  }
  /**
   * <pre>
   * The list of possible final mobile URLs after all cross-domain redirects
   * for the ad.
   * </pre>
   *
   * <code>repeated string final_mobile_urls = 42;</code>
   * @return The count of finalMobileUrls.
   */
  public int getFinalMobileUrlsCount() {
    return finalMobileUrls_.size();
  }
  /**
   * <pre>
   * The list of possible final mobile URLs after all cross-domain redirects
   * for the ad.
   * </pre>
   *
   * <code>repeated string final_mobile_urls = 42;</code>
   * @param index The index of the element to return.
   * @return The finalMobileUrls at the given index.
   */
  public java.lang.String getFinalMobileUrls(int index) {
    return finalMobileUrls_.get(index);
  }
  /**
   * <pre>
   * The list of possible final mobile URLs after all cross-domain redirects
   * for the ad.
   * </pre>
   *
   * <code>repeated string final_mobile_urls = 42;</code>
   * @param index The index of the value to return.
   * @return The bytes of the finalMobileUrls at the given index.
   */
  public com.google.protobuf.ByteString
      getFinalMobileUrlsBytes(int index) {
    return finalMobileUrls_.getByteString(index);
  }

  public static final int TRACKING_URL_TEMPLATE_FIELD_NUMBER = 43;
  @SuppressWarnings("serial")
  private volatile java.lang.Object trackingUrlTemplate_ = "";
  /**
   * <pre>
   * The URL template for constructing a tracking URL.
   * </pre>
   *
   * <code>optional string tracking_url_template = 43;</code>
   * @return Whether the trackingUrlTemplate field is set.
   */
  @java.lang.Override
  public boolean hasTrackingUrlTemplate() {
    return ((bitField0_ & 0x00000002) != 0);
  }
  /**
   * <pre>
   * The URL template for constructing a tracking URL.
   * </pre>
   *
   * <code>optional string tracking_url_template = 43;</code>
   * @return The trackingUrlTemplate.
   */
  @java.lang.Override
  public java.lang.String getTrackingUrlTemplate() {
    java.lang.Object ref = trackingUrlTemplate_;
    if (ref instanceof java.lang.String) {
      return (java.lang.String) ref;
    } else {
      com.google.protobuf.ByteString bs = 
          (com.google.protobuf.ByteString) ref;
      java.lang.String s = bs.toStringUtf8();
      trackingUrlTemplate_ = s;
      return s;
    }
  }
  /**
   * <pre>
   * The URL template for constructing a tracking URL.
   * </pre>
   *
   * <code>optional string tracking_url_template = 43;</code>
   * @return The bytes for trackingUrlTemplate.
   */
  @java.lang.Override
  public com.google.protobuf.ByteString
      getTrackingUrlTemplateBytes() {
    java.lang.Object ref = trackingUrlTemplate_;
    if (ref instanceof java.lang.String) {
      com.google.protobuf.ByteString b = 
          com.google.protobuf.ByteString.copyFromUtf8(
              (java.lang.String) ref);
      trackingUrlTemplate_ = b;
      return b;
    } else {
      return (com.google.protobuf.ByteString) ref;
    }
  }

  public static final int FINAL_URL_SUFFIX_FIELD_NUMBER = 44;
  @SuppressWarnings("serial")
  private volatile java.lang.Object finalUrlSuffix_ = "";
  /**
   * <pre>
   * The suffix to use when constructing a final URL.
   * </pre>
   *
   * <code>optional string final_url_suffix = 44;</code>
   * @return Whether the finalUrlSuffix field is set.
   */
  @java.lang.Override
  public boolean hasFinalUrlSuffix() {
    return ((bitField0_ & 0x00000004) != 0);
  }
  /**
   * <pre>
   * The suffix to use when constructing a final URL.
   * </pre>
   *
   * <code>optional string final_url_suffix = 44;</code>
   * @return The finalUrlSuffix.
   */
  @java.lang.Override
  public java.lang.String getFinalUrlSuffix() {
    java.lang.Object ref = finalUrlSuffix_;
    if (ref instanceof java.lang.String) {
      return (java.lang.String) ref;
    } else {
      com.google.protobuf.ByteString bs = 
          (com.google.protobuf.ByteString) ref;
      java.lang.String s = bs.toStringUtf8();
      finalUrlSuffix_ = s;
      return s;
    }
  }
  /**
   * <pre>
   * The suffix to use when constructing a final URL.
   * </pre>
   *
   * <code>optional string final_url_suffix = 44;</code>
   * @return The bytes for finalUrlSuffix.
   */
  @java.lang.Override
  public com.google.protobuf.ByteString
      getFinalUrlSuffixBytes() {
    java.lang.Object ref = finalUrlSuffix_;
    if (ref instanceof java.lang.String) {
      com.google.protobuf.ByteString b = 
          com.google.protobuf.ByteString.copyFromUtf8(
              (java.lang.String) ref);
      finalUrlSuffix_ = b;
      return b;
    } else {
      return (com.google.protobuf.ByteString) ref;
    }
  }

  public static final int URL_CUSTOM_PARAMETERS_FIELD_NUMBER = 10;
  @SuppressWarnings("serial")
  private java.util.List<com.google.ads.googleads.v14.common.CustomParameter> urlCustomParameters_;
  /**
   * <pre>
   * The list of mappings that can be used to substitute custom parameter tags
   * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
   * For mutates, use url custom parameter operations.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
   */
  @java.lang.Override
  public java.util.List<com.google.ads.googleads.v14.common.CustomParameter> getUrlCustomParametersList() {
    return urlCustomParameters_;
  }
  /**
   * <pre>
   * The list of mappings that can be used to substitute custom parameter tags
   * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
   * For mutates, use url custom parameter operations.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
   */
  @java.lang.Override
  public java.util.List<? extends com.google.ads.googleads.v14.common.CustomParameterOrBuilder> 
      getUrlCustomParametersOrBuilderList() {
    return urlCustomParameters_;
  }
  /**
   * <pre>
   * The list of mappings that can be used to substitute custom parameter tags
   * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
   * For mutates, use url custom parameter operations.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
   */
  @java.lang.Override
  public int getUrlCustomParametersCount() {
    return urlCustomParameters_.size();
  }
  /**
   * <pre>
   * The list of mappings that can be used to substitute custom parameter tags
   * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
   * For mutates, use url custom parameter operations.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.CustomParameter getUrlCustomParameters(int index) {
    return urlCustomParameters_.get(index);
  }
  /**
   * <pre>
   * The list of mappings that can be used to substitute custom parameter tags
   * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
   * For mutates, use url custom parameter operations.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.CustomParameterOrBuilder getUrlCustomParametersOrBuilder(
      int index) {
    return urlCustomParameters_.get(index);
  }

  public static final int DISPLAY_URL_FIELD_NUMBER = 45;
  @SuppressWarnings("serial")
  private volatile java.lang.Object displayUrl_ = "";
  /**
   * <pre>
   * The URL that appears in the ad description for some ad formats.
   * </pre>
   *
   * <code>optional string display_url = 45;</code>
   * @return Whether the displayUrl field is set.
   */
  @java.lang.Override
  public boolean hasDisplayUrl() {
    return ((bitField0_ & 0x00000008) != 0);
  }
  /**
   * <pre>
   * The URL that appears in the ad description for some ad formats.
   * </pre>
   *
   * <code>optional string display_url = 45;</code>
   * @return The displayUrl.
   */
  @java.lang.Override
  public java.lang.String getDisplayUrl() {
    java.lang.Object ref = displayUrl_;
    if (ref instanceof java.lang.String) {
      return (java.lang.String) ref;
    } else {
      com.google.protobuf.ByteString bs = 
          (com.google.protobuf.ByteString) ref;
      java.lang.String s = bs.toStringUtf8();
      displayUrl_ = s;
      return s;
    }
  }
  /**
   * <pre>
   * The URL that appears in the ad description for some ad formats.
   * </pre>
   *
   * <code>optional string display_url = 45;</code>
   * @return The bytes for displayUrl.
   */
  @java.lang.Override
  public com.google.protobuf.ByteString
      getDisplayUrlBytes() {
    java.lang.Object ref = displayUrl_;
    if (ref instanceof java.lang.String) {
      com.google.protobuf.ByteString b = 
          com.google.protobuf.ByteString.copyFromUtf8(
              (java.lang.String) ref);
      displayUrl_ = b;
      return b;
    } else {
      return (com.google.protobuf.ByteString) ref;
    }
  }

  public static final int TYPE_FIELD_NUMBER = 5;
  private int type_ = 0;
  /**
   * <pre>
   * Output only. The type of ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.enums.AdTypeEnum.AdType type = 5 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
   * @return The enum numeric value on the wire for type.
   */
  @java.lang.Override public int getTypeValue() {
    return type_;
  }
  /**
   * <pre>
   * Output only. The type of ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.enums.AdTypeEnum.AdType type = 5 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
   * @return The type.
   */
  @java.lang.Override public com.google.ads.googleads.v14.enums.AdTypeEnum.AdType getType() {
    com.google.ads.googleads.v14.enums.AdTypeEnum.AdType result = com.google.ads.googleads.v14.enums.AdTypeEnum.AdType.forNumber(type_);
    return result == null ? com.google.ads.googleads.v14.enums.AdTypeEnum.AdType.UNRECOGNIZED : result;
  }

  public static final int ADDED_BY_GOOGLE_ADS_FIELD_NUMBER = 46;
  private boolean addedByGoogleAds_ = false;
  /**
   * <pre>
   * Output only. Indicates if this ad was automatically added by Google Ads and
   * not by a user. For example, this could happen when ads are automatically
   * created as suggestions for new ads based on knowledge of how existing ads
   * are performing.
   * </pre>
   *
   * <code>optional bool added_by_google_ads = 46 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
   * @return Whether the addedByGoogleAds field is set.
   */
  @java.lang.Override
  public boolean hasAddedByGoogleAds() {
    return ((bitField0_ & 0x00000010) != 0);
  }
  /**
   * <pre>
   * Output only. Indicates if this ad was automatically added by Google Ads and
   * not by a user. For example, this could happen when ads are automatically
   * created as suggestions for new ads based on knowledge of how existing ads
   * are performing.
   * </pre>
   *
   * <code>optional bool added_by_google_ads = 46 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
   * @return The addedByGoogleAds.
   */
  @java.lang.Override
  public boolean getAddedByGoogleAds() {
    return addedByGoogleAds_;
  }

  public static final int DEVICE_PREFERENCE_FIELD_NUMBER = 20;
  private int devicePreference_ = 0;
  /**
   * <pre>
   * The device preference for the ad. You can only specify a preference for
   * mobile devices. When this preference is set the ad will be preferred over
   * other ads when being displayed on a mobile device. The ad can still be
   * displayed on other device types, for example, if no other ads are
   * available. If unspecified (no device preference), all devices are targeted.
   * This is only supported by some ad types.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.enums.DeviceEnum.Device device_preference = 20;</code>
   * @return The enum numeric value on the wire for devicePreference.
   */
  @java.lang.Override public int getDevicePreferenceValue() {
    return devicePreference_;
  }
  /**
   * <pre>
   * The device preference for the ad. You can only specify a preference for
   * mobile devices. When this preference is set the ad will be preferred over
   * other ads when being displayed on a mobile device. The ad can still be
   * displayed on other device types, for example, if no other ads are
   * available. If unspecified (no device preference), all devices are targeted.
   * This is only supported by some ad types.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.enums.DeviceEnum.Device device_preference = 20;</code>
   * @return The devicePreference.
   */
  @java.lang.Override public com.google.ads.googleads.v14.enums.DeviceEnum.Device getDevicePreference() {
    com.google.ads.googleads.v14.enums.DeviceEnum.Device result = com.google.ads.googleads.v14.enums.DeviceEnum.Device.forNumber(devicePreference_);
    return result == null ? com.google.ads.googleads.v14.enums.DeviceEnum.Device.UNRECOGNIZED : result;
  }

  public static final int URL_COLLECTIONS_FIELD_NUMBER = 26;
  @SuppressWarnings("serial")
  private java.util.List<com.google.ads.googleads.v14.common.UrlCollection> urlCollections_;
  /**
   * <pre>
   * Additional URLs for the ad that are tagged with a unique identifier that
   * can be referenced from other fields in the ad.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
   */
  @java.lang.Override
  public java.util.List<com.google.ads.googleads.v14.common.UrlCollection> getUrlCollectionsList() {
    return urlCollections_;
  }
  /**
   * <pre>
   * Additional URLs for the ad that are tagged with a unique identifier that
   * can be referenced from other fields in the ad.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
   */
  @java.lang.Override
  public java.util.List<? extends com.google.ads.googleads.v14.common.UrlCollectionOrBuilder> 
      getUrlCollectionsOrBuilderList() {
    return urlCollections_;
  }
  /**
   * <pre>
   * Additional URLs for the ad that are tagged with a unique identifier that
   * can be referenced from other fields in the ad.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
   */
  @java.lang.Override
  public int getUrlCollectionsCount() {
    return urlCollections_.size();
  }
  /**
   * <pre>
   * Additional URLs for the ad that are tagged with a unique identifier that
   * can be referenced from other fields in the ad.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.UrlCollection getUrlCollections(int index) {
    return urlCollections_.get(index);
  }
  /**
   * <pre>
   * Additional URLs for the ad that are tagged with a unique identifier that
   * can be referenced from other fields in the ad.
   * </pre>
   *
   * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.UrlCollectionOrBuilder getUrlCollectionsOrBuilder(
      int index) {
    return urlCollections_.get(index);
  }

  public static final int NAME_FIELD_NUMBER = 47;
  @SuppressWarnings("serial")
  private volatile java.lang.Object name_ = "";
  /**
   * <pre>
   * Immutable. The name of the ad. This is only used to be able to identify the
   * ad. It does not need to be unique and does not affect the served ad. The
   * name field is currently only supported for DisplayUploadAd, ImageAd,
   * ShoppingComparisonListingAd and VideoAd.
   * </pre>
   *
   * <code>optional string name = 47 [(.google.api.field_behavior) = IMMUTABLE];</code>
   * @return Whether the name field is set.
   */
  @java.lang.Override
  public boolean hasName() {
    return ((bitField0_ & 0x00000020) != 0);
  }
  /**
   * <pre>
   * Immutable. The name of the ad. This is only used to be able to identify the
   * ad. It does not need to be unique and does not affect the served ad. The
   * name field is currently only supported for DisplayUploadAd, ImageAd,
   * ShoppingComparisonListingAd and VideoAd.
   * </pre>
   *
   * <code>optional string name = 47 [(.google.api.field_behavior) = IMMUTABLE];</code>
   * @return The name.
   */
  @java.lang.Override
  public java.lang.String getName() {
    java.lang.Object ref = name_;
    if (ref instanceof java.lang.String) {
      return (java.lang.String) ref;
    } else {
      com.google.protobuf.ByteString bs = 
          (com.google.protobuf.ByteString) ref;
      java.lang.String s = bs.toStringUtf8();
      name_ = s;
      return s;
    }
  }
  /**
   * <pre>
   * Immutable. The name of the ad. This is only used to be able to identify the
   * ad. It does not need to be unique and does not affect the served ad. The
   * name field is currently only supported for DisplayUploadAd, ImageAd,
   * ShoppingComparisonListingAd and VideoAd.
   * </pre>
   *
   * <code>optional string name = 47 [(.google.api.field_behavior) = IMMUTABLE];</code>
   * @return The bytes for name.
   */
  @java.lang.Override
  public com.google.protobuf.ByteString
      getNameBytes() {
    java.lang.Object ref = name_;
    if (ref instanceof java.lang.String) {
      com.google.protobuf.ByteString b = 
          com.google.protobuf.ByteString.copyFromUtf8(
              (java.lang.String) ref);
      name_ = b;
      return b;
    } else {
      return (com.google.protobuf.ByteString) ref;
    }
  }

  public static final int SYSTEM_MANAGED_RESOURCE_SOURCE_FIELD_NUMBER = 27;
  private int systemManagedResourceSource_ = 0;
  /**
   * <pre>
   * Output only. If this ad is system managed, then this field will indicate
   * the source. This field is read-only.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.enums.SystemManagedResourceSourceEnum.SystemManagedResourceSource system_managed_resource_source = 27 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
   * @return The enum numeric value on the wire for systemManagedResourceSource.
   */
  @java.lang.Override public int getSystemManagedResourceSourceValue() {
    return systemManagedResourceSource_;
  }
  /**
   * <pre>
   * Output only. If this ad is system managed, then this field will indicate
   * the source. This field is read-only.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.enums.SystemManagedResourceSourceEnum.SystemManagedResourceSource system_managed_resource_source = 27 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
   * @return The systemManagedResourceSource.
   */
  @java.lang.Override public com.google.ads.googleads.v14.enums.SystemManagedResourceSourceEnum.SystemManagedResourceSource getSystemManagedResourceSource() {
    com.google.ads.googleads.v14.enums.SystemManagedResourceSourceEnum.SystemManagedResourceSource result = com.google.ads.googleads.v14.enums.SystemManagedResourceSourceEnum.SystemManagedResourceSource.forNumber(systemManagedResourceSource_);
    return result == null ? com.google.ads.googleads.v14.enums.SystemManagedResourceSourceEnum.SystemManagedResourceSource.UNRECOGNIZED : result;
  }

  public static final int TEXT_AD_FIELD_NUMBER = 6;
  /**
   * <pre>
   * Immutable. Details pertaining to a text ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.TextAdInfo text_ad = 6 [(.google.api.field_behavior) = IMMUTABLE];</code>
   * @return Whether the textAd field is set.
   */
  @java.lang.Override
  public boolean hasTextAd() {
    return adDataCase_ == 6;
  }
  /**
   * <pre>
   * Immutable. Details pertaining to a text ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.TextAdInfo text_ad = 6 [(.google.api.field_behavior) = IMMUTABLE];</code>
   * @return The textAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.TextAdInfo getTextAd() {
    if (adDataCase_ == 6) {
       return (com.google.ads.googleads.v14.common.TextAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.TextAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Immutable. Details pertaining to a text ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.TextAdInfo text_ad = 6 [(.google.api.field_behavior) = IMMUTABLE];</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.TextAdInfoOrBuilder getTextAdOrBuilder() {
    if (adDataCase_ == 6) {
       return (com.google.ads.googleads.v14.common.TextAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.TextAdInfo.getDefaultInstance();
  }

  public static final int EXPANDED_TEXT_AD_FIELD_NUMBER = 7;
  /**
   * <pre>
   * Details pertaining to an expanded text ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ExpandedTextAdInfo expanded_text_ad = 7;</code>
   * @return Whether the expandedTextAd field is set.
   */
  @java.lang.Override
  public boolean hasExpandedTextAd() {
    return adDataCase_ == 7;
  }
  /**
   * <pre>
   * Details pertaining to an expanded text ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ExpandedTextAdInfo expanded_text_ad = 7;</code>
   * @return The expandedTextAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.ExpandedTextAdInfo getExpandedTextAd() {
    if (adDataCase_ == 7) {
       return (com.google.ads.googleads.v14.common.ExpandedTextAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.ExpandedTextAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to an expanded text ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ExpandedTextAdInfo expanded_text_ad = 7;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.ExpandedTextAdInfoOrBuilder getExpandedTextAdOrBuilder() {
    if (adDataCase_ == 7) {
       return (com.google.ads.googleads.v14.common.ExpandedTextAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.ExpandedTextAdInfo.getDefaultInstance();
  }

  public static final int CALL_AD_FIELD_NUMBER = 49;
  /**
   * <pre>
   * Details pertaining to a call ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.CallAdInfo call_ad = 49;</code>
   * @return Whether the callAd field is set.
   */
  @java.lang.Override
  public boolean hasCallAd() {
    return adDataCase_ == 49;
  }
  /**
   * <pre>
   * Details pertaining to a call ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.CallAdInfo call_ad = 49;</code>
   * @return The callAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.CallAdInfo getCallAd() {
    if (adDataCase_ == 49) {
       return (com.google.ads.googleads.v14.common.CallAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.CallAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to a call ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.CallAdInfo call_ad = 49;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.CallAdInfoOrBuilder getCallAdOrBuilder() {
    if (adDataCase_ == 49) {
       return (com.google.ads.googleads.v14.common.CallAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.CallAdInfo.getDefaultInstance();
  }

  public static final int EXPANDED_DYNAMIC_SEARCH_AD_FIELD_NUMBER = 14;
  /**
   * <pre>
   * Immutable. Details pertaining to an Expanded Dynamic Search Ad.
   * This type of ad has its headline, final URLs, and display URL
   * auto-generated at serving time according to domain name specific
   * information provided by `dynamic_search_ads_setting` linked at the
   * campaign level.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo expanded_dynamic_search_ad = 14 [(.google.api.field_behavior) = IMMUTABLE];</code>
   * @return Whether the expandedDynamicSearchAd field is set.
   */
  @java.lang.Override
  public boolean hasExpandedDynamicSearchAd() {
    return adDataCase_ == 14;
  }
  /**
   * <pre>
   * Immutable. Details pertaining to an Expanded Dynamic Search Ad.
   * This type of ad has its headline, final URLs, and display URL
   * auto-generated at serving time according to domain name specific
   * information provided by `dynamic_search_ads_setting` linked at the
   * campaign level.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo expanded_dynamic_search_ad = 14 [(.google.api.field_behavior) = IMMUTABLE];</code>
   * @return The expandedDynamicSearchAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo getExpandedDynamicSearchAd() {
    if (adDataCase_ == 14) {
       return (com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Immutable. Details pertaining to an Expanded Dynamic Search Ad.
   * This type of ad has its headline, final URLs, and display URL
   * auto-generated at serving time according to domain name specific
   * information provided by `dynamic_search_ads_setting` linked at the
   * campaign level.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo expanded_dynamic_search_ad = 14 [(.google.api.field_behavior) = IMMUTABLE];</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfoOrBuilder getExpandedDynamicSearchAdOrBuilder() {
    if (adDataCase_ == 14) {
       return (com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo.getDefaultInstance();
  }

  public static final int HOTEL_AD_FIELD_NUMBER = 15;
  /**
   * <pre>
   * Details pertaining to a hotel ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.HotelAdInfo hotel_ad = 15;</code>
   * @return Whether the hotelAd field is set.
   */
  @java.lang.Override
  public boolean hasHotelAd() {
    return adDataCase_ == 15;
  }
  /**
   * <pre>
   * Details pertaining to a hotel ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.HotelAdInfo hotel_ad = 15;</code>
   * @return The hotelAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.HotelAdInfo getHotelAd() {
    if (adDataCase_ == 15) {
       return (com.google.ads.googleads.v14.common.HotelAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.HotelAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to a hotel ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.HotelAdInfo hotel_ad = 15;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.HotelAdInfoOrBuilder getHotelAdOrBuilder() {
    if (adDataCase_ == 15) {
       return (com.google.ads.googleads.v14.common.HotelAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.HotelAdInfo.getDefaultInstance();
  }

  public static final int SHOPPING_SMART_AD_FIELD_NUMBER = 17;
  /**
   * <pre>
   * Details pertaining to a Smart Shopping ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ShoppingSmartAdInfo shopping_smart_ad = 17;</code>
   * @return Whether the shoppingSmartAd field is set.
   */
  @java.lang.Override
  public boolean hasShoppingSmartAd() {
    return adDataCase_ == 17;
  }
  /**
   * <pre>
   * Details pertaining to a Smart Shopping ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ShoppingSmartAdInfo shopping_smart_ad = 17;</code>
   * @return The shoppingSmartAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.ShoppingSmartAdInfo getShoppingSmartAd() {
    if (adDataCase_ == 17) {
       return (com.google.ads.googleads.v14.common.ShoppingSmartAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.ShoppingSmartAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to a Smart Shopping ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ShoppingSmartAdInfo shopping_smart_ad = 17;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.ShoppingSmartAdInfoOrBuilder getShoppingSmartAdOrBuilder() {
    if (adDataCase_ == 17) {
       return (com.google.ads.googleads.v14.common.ShoppingSmartAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.ShoppingSmartAdInfo.getDefaultInstance();
  }

  public static final int SHOPPING_PRODUCT_AD_FIELD_NUMBER = 18;
  /**
   * <pre>
   * Details pertaining to a Shopping product ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ShoppingProductAdInfo shopping_product_ad = 18;</code>
   * @return Whether the shoppingProductAd field is set.
   */
  @java.lang.Override
  public boolean hasShoppingProductAd() {
    return adDataCase_ == 18;
  }
  /**
   * <pre>
   * Details pertaining to a Shopping product ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ShoppingProductAdInfo shopping_product_ad = 18;</code>
   * @return The shoppingProductAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.ShoppingProductAdInfo getShoppingProductAd() {
    if (adDataCase_ == 18) {
       return (com.google.ads.googleads.v14.common.ShoppingProductAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.ShoppingProductAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to a Shopping product ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ShoppingProductAdInfo shopping_product_ad = 18;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.ShoppingProductAdInfoOrBuilder getShoppingProductAdOrBuilder() {
    if (adDataCase_ == 18) {
       return (com.google.ads.googleads.v14.common.ShoppingProductAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.ShoppingProductAdInfo.getDefaultInstance();
  }

  public static final int IMAGE_AD_FIELD_NUMBER = 22;
  /**
   * <pre>
   * Immutable. Details pertaining to an Image ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ImageAdInfo image_ad = 22 [(.google.api.field_behavior) = IMMUTABLE];</code>
   * @return Whether the imageAd field is set.
   */
  @java.lang.Override
  public boolean hasImageAd() {
    return adDataCase_ == 22;
  }
  /**
   * <pre>
   * Immutable. Details pertaining to an Image ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ImageAdInfo image_ad = 22 [(.google.api.field_behavior) = IMMUTABLE];</code>
   * @return The imageAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.ImageAdInfo getImageAd() {
    if (adDataCase_ == 22) {
       return (com.google.ads.googleads.v14.common.ImageAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.ImageAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Immutable. Details pertaining to an Image ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ImageAdInfo image_ad = 22 [(.google.api.field_behavior) = IMMUTABLE];</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.ImageAdInfoOrBuilder getImageAdOrBuilder() {
    if (adDataCase_ == 22) {
       return (com.google.ads.googleads.v14.common.ImageAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.ImageAdInfo.getDefaultInstance();
  }

  public static final int VIDEO_AD_FIELD_NUMBER = 24;
  /**
   * <pre>
   * Details pertaining to a Video ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.VideoAdInfo video_ad = 24;</code>
   * @return Whether the videoAd field is set.
   */
  @java.lang.Override
  public boolean hasVideoAd() {
    return adDataCase_ == 24;
  }
  /**
   * <pre>
   * Details pertaining to a Video ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.VideoAdInfo video_ad = 24;</code>
   * @return The videoAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.VideoAdInfo getVideoAd() {
    if (adDataCase_ == 24) {
       return (com.google.ads.googleads.v14.common.VideoAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.VideoAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to a Video ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.VideoAdInfo video_ad = 24;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.VideoAdInfoOrBuilder getVideoAdOrBuilder() {
    if (adDataCase_ == 24) {
       return (com.google.ads.googleads.v14.common.VideoAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.VideoAdInfo.getDefaultInstance();
  }

  public static final int VIDEO_RESPONSIVE_AD_FIELD_NUMBER = 39;
  /**
   * <pre>
   * Details pertaining to a Video responsive ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.VideoResponsiveAdInfo video_responsive_ad = 39;</code>
   * @return Whether the videoResponsiveAd field is set.
   */
  @java.lang.Override
  public boolean hasVideoResponsiveAd() {
    return adDataCase_ == 39;
  }
  /**
   * <pre>
   * Details pertaining to a Video responsive ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.VideoResponsiveAdInfo video_responsive_ad = 39;</code>
   * @return The videoResponsiveAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.VideoResponsiveAdInfo getVideoResponsiveAd() {
    if (adDataCase_ == 39) {
       return (com.google.ads.googleads.v14.common.VideoResponsiveAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.VideoResponsiveAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to a Video responsive ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.VideoResponsiveAdInfo video_responsive_ad = 39;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.VideoResponsiveAdInfoOrBuilder getVideoResponsiveAdOrBuilder() {
    if (adDataCase_ == 39) {
       return (com.google.ads.googleads.v14.common.VideoResponsiveAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.VideoResponsiveAdInfo.getDefaultInstance();
  }

  public static final int RESPONSIVE_SEARCH_AD_FIELD_NUMBER = 25;
  /**
   * <pre>
   * Details pertaining to a responsive search ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ResponsiveSearchAdInfo responsive_search_ad = 25;</code>
   * @return Whether the responsiveSearchAd field is set.
   */
  @java.lang.Override
  public boolean hasResponsiveSearchAd() {
    return adDataCase_ == 25;
  }
  /**
   * <pre>
   * Details pertaining to a responsive search ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ResponsiveSearchAdInfo responsive_search_ad = 25;</code>
   * @return The responsiveSearchAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo getResponsiveSearchAd() {
    if (adDataCase_ == 25) {
       return (com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to a responsive search ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ResponsiveSearchAdInfo responsive_search_ad = 25;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.ResponsiveSearchAdInfoOrBuilder getResponsiveSearchAdOrBuilder() {
    if (adDataCase_ == 25) {
       return (com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo.getDefaultInstance();
  }

  public static final int LEGACY_RESPONSIVE_DISPLAY_AD_FIELD_NUMBER = 28;
  /**
   * <pre>
   * Details pertaining to a legacy responsive display ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo legacy_responsive_display_ad = 28;</code>
   * @return Whether the legacyResponsiveDisplayAd field is set.
   */
  @java.lang.Override
  public boolean hasLegacyResponsiveDisplayAd() {
    return adDataCase_ == 28;
  }
  /**
   * <pre>
   * Details pertaining to a legacy responsive display ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo legacy_responsive_display_ad = 28;</code>
   * @return The legacyResponsiveDisplayAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo getLegacyResponsiveDisplayAd() {
    if (adDataCase_ == 28) {
       return (com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to a legacy responsive display ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo legacy_responsive_display_ad = 28;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfoOrBuilder getLegacyResponsiveDisplayAdOrBuilder() {
    if (adDataCase_ == 28) {
       return (com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo.getDefaultInstance();
  }

  public static final int APP_AD_FIELD_NUMBER = 29;
  /**
   * <pre>
   * Details pertaining to an app ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.AppAdInfo app_ad = 29;</code>
   * @return Whether the appAd field is set.
   */
  @java.lang.Override
  public boolean hasAppAd() {
    return adDataCase_ == 29;
  }
  /**
   * <pre>
   * Details pertaining to an app ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.AppAdInfo app_ad = 29;</code>
   * @return The appAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.AppAdInfo getAppAd() {
    if (adDataCase_ == 29) {
       return (com.google.ads.googleads.v14.common.AppAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.AppAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to an app ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.AppAdInfo app_ad = 29;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.AppAdInfoOrBuilder getAppAdOrBuilder() {
    if (adDataCase_ == 29) {
       return (com.google.ads.googleads.v14.common.AppAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.AppAdInfo.getDefaultInstance();
  }

  public static final int LEGACY_APP_INSTALL_AD_FIELD_NUMBER = 30;
  /**
   * <pre>
   * Immutable. Details pertaining to a legacy app install ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.LegacyAppInstallAdInfo legacy_app_install_ad = 30 [(.google.api.field_behavior) = IMMUTABLE];</code>
   * @return Whether the legacyAppInstallAd field is set.
   */
  @java.lang.Override
  public boolean hasLegacyAppInstallAd() {
    return adDataCase_ == 30;
  }
  /**
   * <pre>
   * Immutable. Details pertaining to a legacy app install ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.LegacyAppInstallAdInfo legacy_app_install_ad = 30 [(.google.api.field_behavior) = IMMUTABLE];</code>
   * @return The legacyAppInstallAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo getLegacyAppInstallAd() {
    if (adDataCase_ == 30) {
       return (com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Immutable. Details pertaining to a legacy app install ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.LegacyAppInstallAdInfo legacy_app_install_ad = 30 [(.google.api.field_behavior) = IMMUTABLE];</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.LegacyAppInstallAdInfoOrBuilder getLegacyAppInstallAdOrBuilder() {
    if (adDataCase_ == 30) {
       return (com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo.getDefaultInstance();
  }

  public static final int RESPONSIVE_DISPLAY_AD_FIELD_NUMBER = 31;
  /**
   * <pre>
   * Details pertaining to a responsive display ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo responsive_display_ad = 31;</code>
   * @return Whether the responsiveDisplayAd field is set.
   */
  @java.lang.Override
  public boolean hasResponsiveDisplayAd() {
    return adDataCase_ == 31;
  }
  /**
   * <pre>
   * Details pertaining to a responsive display ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo responsive_display_ad = 31;</code>
   * @return The responsiveDisplayAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo getResponsiveDisplayAd() {
    if (adDataCase_ == 31) {
       return (com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to a responsive display ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo responsive_display_ad = 31;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfoOrBuilder getResponsiveDisplayAdOrBuilder() {
    if (adDataCase_ == 31) {
       return (com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo.getDefaultInstance();
  }

  public static final int LOCAL_AD_FIELD_NUMBER = 32;
  /**
   * <pre>
   * Details pertaining to a local ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.LocalAdInfo local_ad = 32;</code>
   * @return Whether the localAd field is set.
   */
  @java.lang.Override
  public boolean hasLocalAd() {
    return adDataCase_ == 32;
  }
  /**
   * <pre>
   * Details pertaining to a local ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.LocalAdInfo local_ad = 32;</code>
   * @return The localAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.LocalAdInfo getLocalAd() {
    if (adDataCase_ == 32) {
       return (com.google.ads.googleads.v14.common.LocalAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.LocalAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to a local ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.LocalAdInfo local_ad = 32;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.LocalAdInfoOrBuilder getLocalAdOrBuilder() {
    if (adDataCase_ == 32) {
       return (com.google.ads.googleads.v14.common.LocalAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.LocalAdInfo.getDefaultInstance();
  }

  public static final int DISPLAY_UPLOAD_AD_FIELD_NUMBER = 33;
  /**
   * <pre>
   * Details pertaining to a display upload ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.DisplayUploadAdInfo display_upload_ad = 33;</code>
   * @return Whether the displayUploadAd field is set.
   */
  @java.lang.Override
  public boolean hasDisplayUploadAd() {
    return adDataCase_ == 33;
  }
  /**
   * <pre>
   * Details pertaining to a display upload ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.DisplayUploadAdInfo display_upload_ad = 33;</code>
   * @return The displayUploadAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.DisplayUploadAdInfo getDisplayUploadAd() {
    if (adDataCase_ == 33) {
       return (com.google.ads.googleads.v14.common.DisplayUploadAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.DisplayUploadAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to a display upload ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.DisplayUploadAdInfo display_upload_ad = 33;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.DisplayUploadAdInfoOrBuilder getDisplayUploadAdOrBuilder() {
    if (adDataCase_ == 33) {
       return (com.google.ads.googleads.v14.common.DisplayUploadAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.DisplayUploadAdInfo.getDefaultInstance();
  }

  public static final int APP_ENGAGEMENT_AD_FIELD_NUMBER = 34;
  /**
   * <pre>
   * Details pertaining to an app engagement ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.AppEngagementAdInfo app_engagement_ad = 34;</code>
   * @return Whether the appEngagementAd field is set.
   */
  @java.lang.Override
  public boolean hasAppEngagementAd() {
    return adDataCase_ == 34;
  }
  /**
   * <pre>
   * Details pertaining to an app engagement ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.AppEngagementAdInfo app_engagement_ad = 34;</code>
   * @return The appEngagementAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.AppEngagementAdInfo getAppEngagementAd() {
    if (adDataCase_ == 34) {
       return (com.google.ads.googleads.v14.common.AppEngagementAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.AppEngagementAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to an app engagement ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.AppEngagementAdInfo app_engagement_ad = 34;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.AppEngagementAdInfoOrBuilder getAppEngagementAdOrBuilder() {
    if (adDataCase_ == 34) {
       return (com.google.ads.googleads.v14.common.AppEngagementAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.AppEngagementAdInfo.getDefaultInstance();
  }

  public static final int SHOPPING_COMPARISON_LISTING_AD_FIELD_NUMBER = 36;
  /**
   * <pre>
   * Details pertaining to a Shopping Comparison Listing ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo shopping_comparison_listing_ad = 36;</code>
   * @return Whether the shoppingComparisonListingAd field is set.
   */
  @java.lang.Override
  public boolean hasShoppingComparisonListingAd() {
    return adDataCase_ == 36;
  }
  /**
   * <pre>
   * Details pertaining to a Shopping Comparison Listing ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo shopping_comparison_listing_ad = 36;</code>
   * @return The shoppingComparisonListingAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo getShoppingComparisonListingAd() {
    if (adDataCase_ == 36) {
       return (com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to a Shopping Comparison Listing ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo shopping_comparison_listing_ad = 36;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfoOrBuilder getShoppingComparisonListingAdOrBuilder() {
    if (adDataCase_ == 36) {
       return (com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo.getDefaultInstance();
  }

  public static final int SMART_CAMPAIGN_AD_FIELD_NUMBER = 48;
  /**
   * <pre>
   * Details pertaining to a Smart campaign ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.SmartCampaignAdInfo smart_campaign_ad = 48;</code>
   * @return Whether the smartCampaignAd field is set.
   */
  @java.lang.Override
  public boolean hasSmartCampaignAd() {
    return adDataCase_ == 48;
  }
  /**
   * <pre>
   * Details pertaining to a Smart campaign ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.SmartCampaignAdInfo smart_campaign_ad = 48;</code>
   * @return The smartCampaignAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.SmartCampaignAdInfo getSmartCampaignAd() {
    if (adDataCase_ == 48) {
       return (com.google.ads.googleads.v14.common.SmartCampaignAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.SmartCampaignAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to a Smart campaign ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.SmartCampaignAdInfo smart_campaign_ad = 48;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.SmartCampaignAdInfoOrBuilder getSmartCampaignAdOrBuilder() {
    if (adDataCase_ == 48) {
       return (com.google.ads.googleads.v14.common.SmartCampaignAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.SmartCampaignAdInfo.getDefaultInstance();
  }

  public static final int APP_PRE_REGISTRATION_AD_FIELD_NUMBER = 50;
  /**
   * <pre>
   * Details pertaining to an app pre-registration ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.AppPreRegistrationAdInfo app_pre_registration_ad = 50;</code>
   * @return Whether the appPreRegistrationAd field is set.
   */
  @java.lang.Override
  public boolean hasAppPreRegistrationAd() {
    return adDataCase_ == 50;
  }
  /**
   * <pre>
   * Details pertaining to an app pre-registration ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.AppPreRegistrationAdInfo app_pre_registration_ad = 50;</code>
   * @return The appPreRegistrationAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo getAppPreRegistrationAd() {
    if (adDataCase_ == 50) {
       return (com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to an app pre-registration ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.AppPreRegistrationAdInfo app_pre_registration_ad = 50;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.AppPreRegistrationAdInfoOrBuilder getAppPreRegistrationAdOrBuilder() {
    if (adDataCase_ == 50) {
       return (com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo.getDefaultInstance();
  }

  public static final int DISCOVERY_MULTI_ASSET_AD_FIELD_NUMBER = 51;
  /**
   * <pre>
   * Details pertaining to a discovery multi asset ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo discovery_multi_asset_ad = 51;</code>
   * @return Whether the discoveryMultiAssetAd field is set.
   */
  @java.lang.Override
  public boolean hasDiscoveryMultiAssetAd() {
    return adDataCase_ == 51;
  }
  /**
   * <pre>
   * Details pertaining to a discovery multi asset ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo discovery_multi_asset_ad = 51;</code>
   * @return The discoveryMultiAssetAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo getDiscoveryMultiAssetAd() {
    if (adDataCase_ == 51) {
       return (com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to a discovery multi asset ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo discovery_multi_asset_ad = 51;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfoOrBuilder getDiscoveryMultiAssetAdOrBuilder() {
    if (adDataCase_ == 51) {
       return (com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo.getDefaultInstance();
  }

  public static final int DISCOVERY_CAROUSEL_AD_FIELD_NUMBER = 52;
  /**
   * <pre>
   * Details pertaining to a discovery carousel ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo discovery_carousel_ad = 52;</code>
   * @return Whether the discoveryCarouselAd field is set.
   */
  @java.lang.Override
  public boolean hasDiscoveryCarouselAd() {
    return adDataCase_ == 52;
  }
  /**
   * <pre>
   * Details pertaining to a discovery carousel ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo discovery_carousel_ad = 52;</code>
   * @return The discoveryCarouselAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo getDiscoveryCarouselAd() {
    if (adDataCase_ == 52) {
       return (com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to a discovery carousel ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo discovery_carousel_ad = 52;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfoOrBuilder getDiscoveryCarouselAdOrBuilder() {
    if (adDataCase_ == 52) {
       return (com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo.getDefaultInstance();
  }

  public static final int DISCOVERY_VIDEO_RESPONSIVE_AD_FIELD_NUMBER = 60;
  /**
   * <pre>
   * Details pertaining to a discovery video responsive ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo discovery_video_responsive_ad = 60;</code>
   * @return Whether the discoveryVideoResponsiveAd field is set.
   */
  @java.lang.Override
  public boolean hasDiscoveryVideoResponsiveAd() {
    return adDataCase_ == 60;
  }
  /**
   * <pre>
   * Details pertaining to a discovery video responsive ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo discovery_video_responsive_ad = 60;</code>
   * @return The discoveryVideoResponsiveAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo getDiscoveryVideoResponsiveAd() {
    if (adDataCase_ == 60) {
       return (com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to a discovery video responsive ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo discovery_video_responsive_ad = 60;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfoOrBuilder getDiscoveryVideoResponsiveAdOrBuilder() {
    if (adDataCase_ == 60) {
       return (com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo.getDefaultInstance();
  }

  public static final int TRAVEL_AD_FIELD_NUMBER = 54;
  /**
   * <pre>
   * Details pertaining to a travel ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.TravelAdInfo travel_ad = 54;</code>
   * @return Whether the travelAd field is set.
   */
  @java.lang.Override
  public boolean hasTravelAd() {
    return adDataCase_ == 54;
  }
  /**
   * <pre>
   * Details pertaining to a travel ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.TravelAdInfo travel_ad = 54;</code>
   * @return The travelAd.
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.TravelAdInfo getTravelAd() {
    if (adDataCase_ == 54) {
       return (com.google.ads.googleads.v14.common.TravelAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.TravelAdInfo.getDefaultInstance();
  }
  /**
   * <pre>
   * Details pertaining to a travel ad.
   * </pre>
   *
   * <code>.google.ads.googleads.v14.common.TravelAdInfo travel_ad = 54;</code>
   */
  @java.lang.Override
  public com.google.ads.googleads.v14.common.TravelAdInfoOrBuilder getTravelAdOrBuilder() {
    if (adDataCase_ == 54) {
       return (com.google.ads.googleads.v14.common.TravelAdInfo) adData_;
    }
    return com.google.ads.googleads.v14.common.TravelAdInfo.getDefaultInstance();
  }

  private byte memoizedIsInitialized = -1;
  @java.lang.Override
  public final boolean isInitialized() {
    byte isInitialized = memoizedIsInitialized;
    if (isInitialized == 1) return true;
    if (isInitialized == 0) return false;

    memoizedIsInitialized = 1;
    return true;
  }

  @java.lang.Override
  public void writeTo(com.google.protobuf.CodedOutputStream output)
                      throws java.io.IOException {
    if (type_ != com.google.ads.googleads.v14.enums.AdTypeEnum.AdType.UNSPECIFIED.getNumber()) {
      output.writeEnum(5, type_);
    }
    if (adDataCase_ == 6) {
      output.writeMessage(6, (com.google.ads.googleads.v14.common.TextAdInfo) adData_);
    }
    if (adDataCase_ == 7) {
      output.writeMessage(7, (com.google.ads.googleads.v14.common.ExpandedTextAdInfo) adData_);
    }
    for (int i = 0; i < urlCustomParameters_.size(); i++) {
      output.writeMessage(10, urlCustomParameters_.get(i));
    }
    if (adDataCase_ == 14) {
      output.writeMessage(14, (com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo) adData_);
    }
    if (adDataCase_ == 15) {
      output.writeMessage(15, (com.google.ads.googleads.v14.common.HotelAdInfo) adData_);
    }
    if (adDataCase_ == 17) {
      output.writeMessage(17, (com.google.ads.googleads.v14.common.ShoppingSmartAdInfo) adData_);
    }
    if (adDataCase_ == 18) {
      output.writeMessage(18, (com.google.ads.googleads.v14.common.ShoppingProductAdInfo) adData_);
    }
    if (devicePreference_ != com.google.ads.googleads.v14.enums.DeviceEnum.Device.UNSPECIFIED.getNumber()) {
      output.writeEnum(20, devicePreference_);
    }
    if (adDataCase_ == 22) {
      output.writeMessage(22, (com.google.ads.googleads.v14.common.ImageAdInfo) adData_);
    }
    if (adDataCase_ == 24) {
      output.writeMessage(24, (com.google.ads.googleads.v14.common.VideoAdInfo) adData_);
    }
    if (adDataCase_ == 25) {
      output.writeMessage(25, (com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo) adData_);
    }
    for (int i = 0; i < urlCollections_.size(); i++) {
      output.writeMessage(26, urlCollections_.get(i));
    }
    if (systemManagedResourceSource_ != com.google.ads.googleads.v14.enums.SystemManagedResourceSourceEnum.SystemManagedResourceSource.UNSPECIFIED.getNumber()) {
      output.writeEnum(27, systemManagedResourceSource_);
    }
    if (adDataCase_ == 28) {
      output.writeMessage(28, (com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo) adData_);
    }
    if (adDataCase_ == 29) {
      output.writeMessage(29, (com.google.ads.googleads.v14.common.AppAdInfo) adData_);
    }
    if (adDataCase_ == 30) {
      output.writeMessage(30, (com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo) adData_);
    }
    if (adDataCase_ == 31) {
      output.writeMessage(31, (com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo) adData_);
    }
    if (adDataCase_ == 32) {
      output.writeMessage(32, (com.google.ads.googleads.v14.common.LocalAdInfo) adData_);
    }
    if (adDataCase_ == 33) {
      output.writeMessage(33, (com.google.ads.googleads.v14.common.DisplayUploadAdInfo) adData_);
    }
    if (adDataCase_ == 34) {
      output.writeMessage(34, (com.google.ads.googleads.v14.common.AppEngagementAdInfo) adData_);
    }
    for (int i = 0; i < finalAppUrls_.size(); i++) {
      output.writeMessage(35, finalAppUrls_.get(i));
    }
    if (adDataCase_ == 36) {
      output.writeMessage(36, (com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo) adData_);
    }
    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(resourceName_)) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 37, resourceName_);
    }
    if (adDataCase_ == 39) {
      output.writeMessage(39, (com.google.ads.googleads.v14.common.VideoResponsiveAdInfo) adData_);
    }
    if (((bitField0_ & 0x00000001) != 0)) {
      output.writeInt64(40, id_);
    }
    for (int i = 0; i < finalUrls_.size(); i++) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 41, finalUrls_.getRaw(i));
    }
    for (int i = 0; i < finalMobileUrls_.size(); i++) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 42, finalMobileUrls_.getRaw(i));
    }
    if (((bitField0_ & 0x00000002) != 0)) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 43, trackingUrlTemplate_);
    }
    if (((bitField0_ & 0x00000004) != 0)) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 44, finalUrlSuffix_);
    }
    if (((bitField0_ & 0x00000008) != 0)) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 45, displayUrl_);
    }
    if (((bitField0_ & 0x00000010) != 0)) {
      output.writeBool(46, addedByGoogleAds_);
    }
    if (((bitField0_ & 0x00000020) != 0)) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 47, name_);
    }
    if (adDataCase_ == 48) {
      output.writeMessage(48, (com.google.ads.googleads.v14.common.SmartCampaignAdInfo) adData_);
    }
    if (adDataCase_ == 49) {
      output.writeMessage(49, (com.google.ads.googleads.v14.common.CallAdInfo) adData_);
    }
    if (adDataCase_ == 50) {
      output.writeMessage(50, (com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo) adData_);
    }
    if (adDataCase_ == 51) {
      output.writeMessage(51, (com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo) adData_);
    }
    if (adDataCase_ == 52) {
      output.writeMessage(52, (com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo) adData_);
    }
    if (adDataCase_ == 54) {
      output.writeMessage(54, (com.google.ads.googleads.v14.common.TravelAdInfo) adData_);
    }
    if (adDataCase_ == 60) {
      output.writeMessage(60, (com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo) adData_);
    }
    getUnknownFields().writeTo(output);
  }

  @java.lang.Override
  public int getSerializedSize() {
    int size = memoizedSize;
    if (size != -1) return size;

    size = 0;
    if (type_ != com.google.ads.googleads.v14.enums.AdTypeEnum.AdType.UNSPECIFIED.getNumber()) {
      size += com.google.protobuf.CodedOutputStream
        .computeEnumSize(5, type_);
    }
    if (adDataCase_ == 6) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(6, (com.google.ads.googleads.v14.common.TextAdInfo) adData_);
    }
    if (adDataCase_ == 7) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(7, (com.google.ads.googleads.v14.common.ExpandedTextAdInfo) adData_);
    }
    for (int i = 0; i < urlCustomParameters_.size(); i++) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(10, urlCustomParameters_.get(i));
    }
    if (adDataCase_ == 14) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(14, (com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo) adData_);
    }
    if (adDataCase_ == 15) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(15, (com.google.ads.googleads.v14.common.HotelAdInfo) adData_);
    }
    if (adDataCase_ == 17) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(17, (com.google.ads.googleads.v14.common.ShoppingSmartAdInfo) adData_);
    }
    if (adDataCase_ == 18) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(18, (com.google.ads.googleads.v14.common.ShoppingProductAdInfo) adData_);
    }
    if (devicePreference_ != com.google.ads.googleads.v14.enums.DeviceEnum.Device.UNSPECIFIED.getNumber()) {
      size += com.google.protobuf.CodedOutputStream
        .computeEnumSize(20, devicePreference_);
    }
    if (adDataCase_ == 22) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(22, (com.google.ads.googleads.v14.common.ImageAdInfo) adData_);
    }
    if (adDataCase_ == 24) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(24, (com.google.ads.googleads.v14.common.VideoAdInfo) adData_);
    }
    if (adDataCase_ == 25) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(25, (com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo) adData_);
    }
    for (int i = 0; i < urlCollections_.size(); i++) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(26, urlCollections_.get(i));
    }
    if (systemManagedResourceSource_ != com.google.ads.googleads.v14.enums.SystemManagedResourceSourceEnum.SystemManagedResourceSource.UNSPECIFIED.getNumber()) {
      size += com.google.protobuf.CodedOutputStream
        .computeEnumSize(27, systemManagedResourceSource_);
    }
    if (adDataCase_ == 28) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(28, (com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo) adData_);
    }
    if (adDataCase_ == 29) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(29, (com.google.ads.googleads.v14.common.AppAdInfo) adData_);
    }
    if (adDataCase_ == 30) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(30, (com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo) adData_);
    }
    if (adDataCase_ == 31) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(31, (com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo) adData_);
    }
    if (adDataCase_ == 32) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(32, (com.google.ads.googleads.v14.common.LocalAdInfo) adData_);
    }
    if (adDataCase_ == 33) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(33, (com.google.ads.googleads.v14.common.DisplayUploadAdInfo) adData_);
    }
    if (adDataCase_ == 34) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(34, (com.google.ads.googleads.v14.common.AppEngagementAdInfo) adData_);
    }
    for (int i = 0; i < finalAppUrls_.size(); i++) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(35, finalAppUrls_.get(i));
    }
    if (adDataCase_ == 36) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(36, (com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo) adData_);
    }
    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(resourceName_)) {
      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(37, resourceName_);
    }
    if (adDataCase_ == 39) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(39, (com.google.ads.googleads.v14.common.VideoResponsiveAdInfo) adData_);
    }
    if (((bitField0_ & 0x00000001) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeInt64Size(40, id_);
    }
    {
      int dataSize = 0;
      for (int i = 0; i < finalUrls_.size(); i++) {
        dataSize += computeStringSizeNoTag(finalUrls_.getRaw(i));
      }
      size += dataSize;
      size += 2 * getFinalUrlsList().size();
    }
    {
      int dataSize = 0;
      for (int i = 0; i < finalMobileUrls_.size(); i++) {
        dataSize += computeStringSizeNoTag(finalMobileUrls_.getRaw(i));
      }
      size += dataSize;
      size += 2 * getFinalMobileUrlsList().size();
    }
    if (((bitField0_ & 0x00000002) != 0)) {
      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(43, trackingUrlTemplate_);
    }
    if (((bitField0_ & 0x00000004) != 0)) {
      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(44, finalUrlSuffix_);
    }
    if (((bitField0_ & 0x00000008) != 0)) {
      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(45, displayUrl_);
    }
    if (((bitField0_ & 0x00000010) != 0)) {
      size += com.google.protobuf.CodedOutputStream
        .computeBoolSize(46, addedByGoogleAds_);
    }
    if (((bitField0_ & 0x00000020) != 0)) {
      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(47, name_);
    }
    if (adDataCase_ == 48) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(48, (com.google.ads.googleads.v14.common.SmartCampaignAdInfo) adData_);
    }
    if (adDataCase_ == 49) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(49, (com.google.ads.googleads.v14.common.CallAdInfo) adData_);
    }
    if (adDataCase_ == 50) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(50, (com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo) adData_);
    }
    if (adDataCase_ == 51) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(51, (com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo) adData_);
    }
    if (adDataCase_ == 52) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(52, (com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo) adData_);
    }
    if (adDataCase_ == 54) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(54, (com.google.ads.googleads.v14.common.TravelAdInfo) adData_);
    }
    if (adDataCase_ == 60) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(60, (com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo) adData_);
    }
    size += getUnknownFields().getSerializedSize();
    memoizedSize = size;
    return size;
  }

  @java.lang.Override
  public boolean equals(final java.lang.Object obj) {
    if (obj == this) {
     return true;
    }
    if (!(obj instanceof com.google.ads.googleads.v14.resources.Ad)) {
      return super.equals(obj);
    }
    com.google.ads.googleads.v14.resources.Ad other = (com.google.ads.googleads.v14.resources.Ad) obj;

    if (!getResourceName()
        .equals(other.getResourceName())) return false;
    if (hasId() != other.hasId()) return false;
    if (hasId()) {
      if (getId()
          != other.getId()) return false;
    }
    if (!getFinalUrlsList()
        .equals(other.getFinalUrlsList())) return false;
    if (!getFinalAppUrlsList()
        .equals(other.getFinalAppUrlsList())) return false;
    if (!getFinalMobileUrlsList()
        .equals(other.getFinalMobileUrlsList())) return false;
    if (hasTrackingUrlTemplate() != other.hasTrackingUrlTemplate()) return false;
    if (hasTrackingUrlTemplate()) {
      if (!getTrackingUrlTemplate()
          .equals(other.getTrackingUrlTemplate())) return false;
    }
    if (hasFinalUrlSuffix() != other.hasFinalUrlSuffix()) return false;
    if (hasFinalUrlSuffix()) {
      if (!getFinalUrlSuffix()
          .equals(other.getFinalUrlSuffix())) return false;
    }
    if (!getUrlCustomParametersList()
        .equals(other.getUrlCustomParametersList())) return false;
    if (hasDisplayUrl() != other.hasDisplayUrl()) return false;
    if (hasDisplayUrl()) {
      if (!getDisplayUrl()
          .equals(other.getDisplayUrl())) return false;
    }
    if (type_ != other.type_) return false;
    if (hasAddedByGoogleAds() != other.hasAddedByGoogleAds()) return false;
    if (hasAddedByGoogleAds()) {
      if (getAddedByGoogleAds()
          != other.getAddedByGoogleAds()) return false;
    }
    if (devicePreference_ != other.devicePreference_) return false;
    if (!getUrlCollectionsList()
        .equals(other.getUrlCollectionsList())) return false;
    if (hasName() != other.hasName()) return false;
    if (hasName()) {
      if (!getName()
          .equals(other.getName())) return false;
    }
    if (systemManagedResourceSource_ != other.systemManagedResourceSource_) return false;
    if (!getAdDataCase().equals(other.getAdDataCase())) return false;
    switch (adDataCase_) {
      case 6:
        if (!getTextAd()
            .equals(other.getTextAd())) return false;
        break;
      case 7:
        if (!getExpandedTextAd()
            .equals(other.getExpandedTextAd())) return false;
        break;
      case 49:
        if (!getCallAd()
            .equals(other.getCallAd())) return false;
        break;
      case 14:
        if (!getExpandedDynamicSearchAd()
            .equals(other.getExpandedDynamicSearchAd())) return false;
        break;
      case 15:
        if (!getHotelAd()
            .equals(other.getHotelAd())) return false;
        break;
      case 17:
        if (!getShoppingSmartAd()
            .equals(other.getShoppingSmartAd())) return false;
        break;
      case 18:
        if (!getShoppingProductAd()
            .equals(other.getShoppingProductAd())) return false;
        break;
      case 22:
        if (!getImageAd()
            .equals(other.getImageAd())) return false;
        break;
      case 24:
        if (!getVideoAd()
            .equals(other.getVideoAd())) return false;
        break;
      case 39:
        if (!getVideoResponsiveAd()
            .equals(other.getVideoResponsiveAd())) return false;
        break;
      case 25:
        if (!getResponsiveSearchAd()
            .equals(other.getResponsiveSearchAd())) return false;
        break;
      case 28:
        if (!getLegacyResponsiveDisplayAd()
            .equals(other.getLegacyResponsiveDisplayAd())) return false;
        break;
      case 29:
        if (!getAppAd()
            .equals(other.getAppAd())) return false;
        break;
      case 30:
        if (!getLegacyAppInstallAd()
            .equals(other.getLegacyAppInstallAd())) return false;
        break;
      case 31:
        if (!getResponsiveDisplayAd()
            .equals(other.getResponsiveDisplayAd())) return false;
        break;
      case 32:
        if (!getLocalAd()
            .equals(other.getLocalAd())) return false;
        break;
      case 33:
        if (!getDisplayUploadAd()
            .equals(other.getDisplayUploadAd())) return false;
        break;
      case 34:
        if (!getAppEngagementAd()
            .equals(other.getAppEngagementAd())) return false;
        break;
      case 36:
        if (!getShoppingComparisonListingAd()
            .equals(other.getShoppingComparisonListingAd())) return false;
        break;
      case 48:
        if (!getSmartCampaignAd()
            .equals(other.getSmartCampaignAd())) return false;
        break;
      case 50:
        if (!getAppPreRegistrationAd()
            .equals(other.getAppPreRegistrationAd())) return false;
        break;
      case 51:
        if (!getDiscoveryMultiAssetAd()
            .equals(other.getDiscoveryMultiAssetAd())) return false;
        break;
      case 52:
        if (!getDiscoveryCarouselAd()
            .equals(other.getDiscoveryCarouselAd())) return false;
        break;
      case 60:
        if (!getDiscoveryVideoResponsiveAd()
            .equals(other.getDiscoveryVideoResponsiveAd())) return false;
        break;
      case 54:
        if (!getTravelAd()
            .equals(other.getTravelAd())) return false;
        break;
      case 0:
      default:
    }
    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
    return true;
  }

  @java.lang.Override
  public int hashCode() {
    if (memoizedHashCode != 0) {
      return memoizedHashCode;
    }
    int hash = 41;
    hash = (19 * hash) + getDescriptor().hashCode();
    hash = (37 * hash) + RESOURCE_NAME_FIELD_NUMBER;
    hash = (53 * hash) + getResourceName().hashCode();
    if (hasId()) {
      hash = (37 * hash) + ID_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getId());
    }
    if (getFinalUrlsCount() > 0) {
      hash = (37 * hash) + FINAL_URLS_FIELD_NUMBER;
      hash = (53 * hash) + getFinalUrlsList().hashCode();
    }
    if (getFinalAppUrlsCount() > 0) {
      hash = (37 * hash) + FINAL_APP_URLS_FIELD_NUMBER;
      hash = (53 * hash) + getFinalAppUrlsList().hashCode();
    }
    if (getFinalMobileUrlsCount() > 0) {
      hash = (37 * hash) + FINAL_MOBILE_URLS_FIELD_NUMBER;
      hash = (53 * hash) + getFinalMobileUrlsList().hashCode();
    }
    if (hasTrackingUrlTemplate()) {
      hash = (37 * hash) + TRACKING_URL_TEMPLATE_FIELD_NUMBER;
      hash = (53 * hash) + getTrackingUrlTemplate().hashCode();
    }
    if (hasFinalUrlSuffix()) {
      hash = (37 * hash) + FINAL_URL_SUFFIX_FIELD_NUMBER;
      hash = (53 * hash) + getFinalUrlSuffix().hashCode();
    }
    if (getUrlCustomParametersCount() > 0) {
      hash = (37 * hash) + URL_CUSTOM_PARAMETERS_FIELD_NUMBER;
      hash = (53 * hash) + getUrlCustomParametersList().hashCode();
    }
    if (hasDisplayUrl()) {
      hash = (37 * hash) + DISPLAY_URL_FIELD_NUMBER;
      hash = (53 * hash) + getDisplayUrl().hashCode();
    }
    hash = (37 * hash) + TYPE_FIELD_NUMBER;
    hash = (53 * hash) + type_;
    if (hasAddedByGoogleAds()) {
      hash = (37 * hash) + ADDED_BY_GOOGLE_ADS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getAddedByGoogleAds());
    }
    hash = (37 * hash) + DEVICE_PREFERENCE_FIELD_NUMBER;
    hash = (53 * hash) + devicePreference_;
    if (getUrlCollectionsCount() > 0) {
      hash = (37 * hash) + URL_COLLECTIONS_FIELD_NUMBER;
      hash = (53 * hash) + getUrlCollectionsList().hashCode();
    }
    if (hasName()) {
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
    }
    hash = (37 * hash) + SYSTEM_MANAGED_RESOURCE_SOURCE_FIELD_NUMBER;
    hash = (53 * hash) + systemManagedResourceSource_;
    switch (adDataCase_) {
      case 6:
        hash = (37 * hash) + TEXT_AD_FIELD_NUMBER;
        hash = (53 * hash) + getTextAd().hashCode();
        break;
      case 7:
        hash = (37 * hash) + EXPANDED_TEXT_AD_FIELD_NUMBER;
        hash = (53 * hash) + getExpandedTextAd().hashCode();
        break;
      case 49:
        hash = (37 * hash) + CALL_AD_FIELD_NUMBER;
        hash = (53 * hash) + getCallAd().hashCode();
        break;
      case 14:
        hash = (37 * hash) + EXPANDED_DYNAMIC_SEARCH_AD_FIELD_NUMBER;
        hash = (53 * hash) + getExpandedDynamicSearchAd().hashCode();
        break;
      case 15:
        hash = (37 * hash) + HOTEL_AD_FIELD_NUMBER;
        hash = (53 * hash) + getHotelAd().hashCode();
        break;
      case 17:
        hash = (37 * hash) + SHOPPING_SMART_AD_FIELD_NUMBER;
        hash = (53 * hash) + getShoppingSmartAd().hashCode();
        break;
      case 18:
        hash = (37 * hash) + SHOPPING_PRODUCT_AD_FIELD_NUMBER;
        hash = (53 * hash) + getShoppingProductAd().hashCode();
        break;
      case 22:
        hash = (37 * hash) + IMAGE_AD_FIELD_NUMBER;
        hash = (53 * hash) + getImageAd().hashCode();
        break;
      case 24:
        hash = (37 * hash) + VIDEO_AD_FIELD_NUMBER;
        hash = (53 * hash) + getVideoAd().hashCode();
        break;
      case 39:
        hash = (37 * hash) + VIDEO_RESPONSIVE_AD_FIELD_NUMBER;
        hash = (53 * hash) + getVideoResponsiveAd().hashCode();
        break;
      case 25:
        hash = (37 * hash) + RESPONSIVE_SEARCH_AD_FIELD_NUMBER;
        hash = (53 * hash) + getResponsiveSearchAd().hashCode();
        break;
      case 28:
        hash = (37 * hash) + LEGACY_RESPONSIVE_DISPLAY_AD_FIELD_NUMBER;
        hash = (53 * hash) + getLegacyResponsiveDisplayAd().hashCode();
        break;
      case 29:
        hash = (37 * hash) + APP_AD_FIELD_NUMBER;
        hash = (53 * hash) + getAppAd().hashCode();
        break;
      case 30:
        hash = (37 * hash) + LEGACY_APP_INSTALL_AD_FIELD_NUMBER;
        hash = (53 * hash) + getLegacyAppInstallAd().hashCode();
        break;
      case 31:
        hash = (37 * hash) + RESPONSIVE_DISPLAY_AD_FIELD_NUMBER;
        hash = (53 * hash) + getResponsiveDisplayAd().hashCode();
        break;
      case 32:
        hash = (37 * hash) + LOCAL_AD_FIELD_NUMBER;
        hash = (53 * hash) + getLocalAd().hashCode();
        break;
      case 33:
        hash = (37 * hash) + DISPLAY_UPLOAD_AD_FIELD_NUMBER;
        hash = (53 * hash) + getDisplayUploadAd().hashCode();
        break;
      case 34:
        hash = (37 * hash) + APP_ENGAGEMENT_AD_FIELD_NUMBER;
        hash = (53 * hash) + getAppEngagementAd().hashCode();
        break;
      case 36:
        hash = (37 * hash) + SHOPPING_COMPARISON_LISTING_AD_FIELD_NUMBER;
        hash = (53 * hash) + getShoppingComparisonListingAd().hashCode();
        break;
      case 48:
        hash = (37 * hash) + SMART_CAMPAIGN_AD_FIELD_NUMBER;
        hash = (53 * hash) + getSmartCampaignAd().hashCode();
        break;
      case 50:
        hash = (37 * hash) + APP_PRE_REGISTRATION_AD_FIELD_NUMBER;
        hash = (53 * hash) + getAppPreRegistrationAd().hashCode();
        break;
      case 51:
        hash = (37 * hash) + DISCOVERY_MULTI_ASSET_AD_FIELD_NUMBER;
        hash = (53 * hash) + getDiscoveryMultiAssetAd().hashCode();
        break;
      case 52:
        hash = (37 * hash) + DISCOVERY_CAROUSEL_AD_FIELD_NUMBER;
        hash = (53 * hash) + getDiscoveryCarouselAd().hashCode();
        break;
      case 60:
        hash = (37 * hash) + DISCOVERY_VIDEO_RESPONSIVE_AD_FIELD_NUMBER;
        hash = (53 * hash) + getDiscoveryVideoResponsiveAd().hashCode();
        break;
      case 54:
        hash = (37 * hash) + TRAVEL_AD_FIELD_NUMBER;
        hash = (53 * hash) + getTravelAd().hashCode();
        break;
      case 0:
      default:
    }
    hash = (29 * hash) + getUnknownFields().hashCode();
    memoizedHashCode = hash;
    return hash;
  }

  public static com.google.ads.googleads.v14.resources.Ad parseFrom(
      java.nio.ByteBuffer data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static com.google.ads.googleads.v14.resources.Ad parseFrom(
      java.nio.ByteBuffer data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }
  public static com.google.ads.googleads.v14.resources.Ad parseFrom(
      com.google.protobuf.ByteString data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static com.google.ads.googleads.v14.resources.Ad parseFrom(
      com.google.protobuf.ByteString data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }
  public static com.google.ads.googleads.v14.resources.Ad parseFrom(byte[] data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static com.google.ads.googleads.v14.resources.Ad parseFrom(
      byte[] data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }
  public static com.google.ads.googleads.v14.resources.Ad parseFrom(java.io.InputStream input)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseWithIOException(PARSER, input);
  }
  public static com.google.ads.googleads.v14.resources.Ad parseFrom(
      java.io.InputStream input,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseWithIOException(PARSER, input, extensionRegistry);
  }

  public static com.google.ads.googleads.v14.resources.Ad parseDelimitedFrom(java.io.InputStream input)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseDelimitedWithIOException(PARSER, input);
  }

  public static com.google.ads.googleads.v14.resources.Ad parseDelimitedFrom(
      java.io.InputStream input,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
  }
  public static com.google.ads.googleads.v14.resources.Ad parseFrom(
      com.google.protobuf.CodedInputStream input)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseWithIOException(PARSER, input);
  }
  public static com.google.ads.googleads.v14.resources.Ad parseFrom(
      com.google.protobuf.CodedInputStream input,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseWithIOException(PARSER, input, extensionRegistry);
  }

  @java.lang.Override
  public Builder newBuilderForType() { return newBuilder(); }
  public static Builder newBuilder() {
    return DEFAULT_INSTANCE.toBuilder();
  }
  public static Builder newBuilder(com.google.ads.googleads.v14.resources.Ad prototype) {
    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
  }
  @java.lang.Override
  public Builder toBuilder() {
    return this == DEFAULT_INSTANCE
        ? new Builder() : new Builder().mergeFrom(this);
  }

  @java.lang.Override
  protected Builder newBuilderForType(
      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
    Builder builder = new Builder(parent);
    return builder;
  }
  /**
   * <pre>
   * An ad.
   * </pre>
   *
   * Protobuf type {@code google.ads.googleads.v14.resources.Ad}
   */
  public static final class Builder extends
      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
      // @@protoc_insertion_point(builder_implements:google.ads.googleads.v14.resources.Ad)
      com.google.ads.googleads.v14.resources.AdOrBuilder {
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.ads.googleads.v14.resources.AdProto.internal_static_google_ads_googleads_v14_resources_Ad_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.ads.googleads.v14.resources.AdProto.internal_static_google_ads_googleads_v14_resources_Ad_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.ads.googleads.v14.resources.Ad.class, com.google.ads.googleads.v14.resources.Ad.Builder.class);
    }

    // Construct using com.google.ads.googleads.v14.resources.Ad.newBuilder()
    private Builder() {

    }

    private Builder(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      super(parent);

    }
    @java.lang.Override
    public Builder clear() {
      super.clear();
      bitField0_ = 0;
      bitField1_ = 0;
      resourceName_ = "";
      id_ = 0L;
      finalUrls_ =
          com.google.protobuf.LazyStringArrayList.emptyList();
      if (finalAppUrlsBuilder_ == null) {
        finalAppUrls_ = java.util.Collections.emptyList();
      } else {
        finalAppUrls_ = null;
        finalAppUrlsBuilder_.clear();
      }
      bitField0_ = (bitField0_ & ~0x00000008);
      finalMobileUrls_ =
          com.google.protobuf.LazyStringArrayList.emptyList();
      trackingUrlTemplate_ = "";
      finalUrlSuffix_ = "";
      if (urlCustomParametersBuilder_ == null) {
        urlCustomParameters_ = java.util.Collections.emptyList();
      } else {
        urlCustomParameters_ = null;
        urlCustomParametersBuilder_.clear();
      }
      bitField0_ = (bitField0_ & ~0x00000080);
      displayUrl_ = "";
      type_ = 0;
      addedByGoogleAds_ = false;
      devicePreference_ = 0;
      if (urlCollectionsBuilder_ == null) {
        urlCollections_ = java.util.Collections.emptyList();
      } else {
        urlCollections_ = null;
        urlCollectionsBuilder_.clear();
      }
      bitField0_ = (bitField0_ & ~0x00001000);
      name_ = "";
      systemManagedResourceSource_ = 0;
      if (textAdBuilder_ != null) {
        textAdBuilder_.clear();
      }
      if (expandedTextAdBuilder_ != null) {
        expandedTextAdBuilder_.clear();
      }
      if (callAdBuilder_ != null) {
        callAdBuilder_.clear();
      }
      if (expandedDynamicSearchAdBuilder_ != null) {
        expandedDynamicSearchAdBuilder_.clear();
      }
      if (hotelAdBuilder_ != null) {
        hotelAdBuilder_.clear();
      }
      if (shoppingSmartAdBuilder_ != null) {
        shoppingSmartAdBuilder_.clear();
      }
      if (shoppingProductAdBuilder_ != null) {
        shoppingProductAdBuilder_.clear();
      }
      if (imageAdBuilder_ != null) {
        imageAdBuilder_.clear();
      }
      if (videoAdBuilder_ != null) {
        videoAdBuilder_.clear();
      }
      if (videoResponsiveAdBuilder_ != null) {
        videoResponsiveAdBuilder_.clear();
      }
      if (responsiveSearchAdBuilder_ != null) {
        responsiveSearchAdBuilder_.clear();
      }
      if (legacyResponsiveDisplayAdBuilder_ != null) {
        legacyResponsiveDisplayAdBuilder_.clear();
      }
      if (appAdBuilder_ != null) {
        appAdBuilder_.clear();
      }
      if (legacyAppInstallAdBuilder_ != null) {
        legacyAppInstallAdBuilder_.clear();
      }
      if (responsiveDisplayAdBuilder_ != null) {
        responsiveDisplayAdBuilder_.clear();
      }
      if (localAdBuilder_ != null) {
        localAdBuilder_.clear();
      }
      if (displayUploadAdBuilder_ != null) {
        displayUploadAdBuilder_.clear();
      }
      if (appEngagementAdBuilder_ != null) {
        appEngagementAdBuilder_.clear();
      }
      if (shoppingComparisonListingAdBuilder_ != null) {
        shoppingComparisonListingAdBuilder_.clear();
      }
      if (smartCampaignAdBuilder_ != null) {
        smartCampaignAdBuilder_.clear();
      }
      if (appPreRegistrationAdBuilder_ != null) {
        appPreRegistrationAdBuilder_.clear();
      }
      if (discoveryMultiAssetAdBuilder_ != null) {
        discoveryMultiAssetAdBuilder_.clear();
      }
      if (discoveryCarouselAdBuilder_ != null) {
        discoveryCarouselAdBuilder_.clear();
      }
      if (discoveryVideoResponsiveAdBuilder_ != null) {
        discoveryVideoResponsiveAdBuilder_.clear();
      }
      if (travelAdBuilder_ != null) {
        travelAdBuilder_.clear();
      }
      adDataCase_ = 0;
      adData_ = null;
      return this;
    }

    @java.lang.Override
    public com.google.protobuf.Descriptors.Descriptor
        getDescriptorForType() {
      return com.google.ads.googleads.v14.resources.AdProto.internal_static_google_ads_googleads_v14_resources_Ad_descriptor;
    }

    @java.lang.Override
    public com.google.ads.googleads.v14.resources.Ad getDefaultInstanceForType() {
      return com.google.ads.googleads.v14.resources.Ad.getDefaultInstance();
    }

    @java.lang.Override
    public com.google.ads.googleads.v14.resources.Ad build() {
      com.google.ads.googleads.v14.resources.Ad result = buildPartial();
      if (!result.isInitialized()) {
        throw newUninitializedMessageException(result);
      }
      return result;
    }

    @java.lang.Override
    public com.google.ads.googleads.v14.resources.Ad buildPartial() {
      com.google.ads.googleads.v14.resources.Ad result = new com.google.ads.googleads.v14.resources.Ad(this);
      buildPartialRepeatedFields(result);
      if (bitField0_ != 0) { buildPartial0(result); }
      if (bitField1_ != 0) { buildPartial1(result); }
      buildPartialOneofs(result);
      onBuilt();
      return result;
    }

    private void buildPartialRepeatedFields(com.google.ads.googleads.v14.resources.Ad result) {
      if (finalAppUrlsBuilder_ == null) {
        if (((bitField0_ & 0x00000008) != 0)) {
          finalAppUrls_ = java.util.Collections.unmodifiableList(finalAppUrls_);
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.finalAppUrls_ = finalAppUrls_;
      } else {
        result.finalAppUrls_ = finalAppUrlsBuilder_.build();
      }
      if (urlCustomParametersBuilder_ == null) {
        if (((bitField0_ & 0x00000080) != 0)) {
          urlCustomParameters_ = java.util.Collections.unmodifiableList(urlCustomParameters_);
          bitField0_ = (bitField0_ & ~0x00000080);
        }
        result.urlCustomParameters_ = urlCustomParameters_;
      } else {
        result.urlCustomParameters_ = urlCustomParametersBuilder_.build();
      }
      if (urlCollectionsBuilder_ == null) {
        if (((bitField0_ & 0x00001000) != 0)) {
          urlCollections_ = java.util.Collections.unmodifiableList(urlCollections_);
          bitField0_ = (bitField0_ & ~0x00001000);
        }
        result.urlCollections_ = urlCollections_;
      } else {
        result.urlCollections_ = urlCollectionsBuilder_.build();
      }
    }

    private void buildPartial0(com.google.ads.googleads.v14.resources.Ad result) {
      int from_bitField0_ = bitField0_;
      if (((from_bitField0_ & 0x00000001) != 0)) {
        result.resourceName_ = resourceName_;
      }
      int to_bitField0_ = 0;
      if (((from_bitField0_ & 0x00000002) != 0)) {
        result.id_ = id_;
        to_bitField0_ |= 0x00000001;
      }
      if (((from_bitField0_ & 0x00000004) != 0)) {
        finalUrls_.makeImmutable();
        result.finalUrls_ = finalUrls_;
      }
      if (((from_bitField0_ & 0x00000010) != 0)) {
        finalMobileUrls_.makeImmutable();
        result.finalMobileUrls_ = finalMobileUrls_;
      }
      if (((from_bitField0_ & 0x00000020) != 0)) {
        result.trackingUrlTemplate_ = trackingUrlTemplate_;
        to_bitField0_ |= 0x00000002;
      }
      if (((from_bitField0_ & 0x00000040) != 0)) {
        result.finalUrlSuffix_ = finalUrlSuffix_;
        to_bitField0_ |= 0x00000004;
      }
      if (((from_bitField0_ & 0x00000100) != 0)) {
        result.displayUrl_ = displayUrl_;
        to_bitField0_ |= 0x00000008;
      }
      if (((from_bitField0_ & 0x00000200) != 0)) {
        result.type_ = type_;
      }
      if (((from_bitField0_ & 0x00000400) != 0)) {
        result.addedByGoogleAds_ = addedByGoogleAds_;
        to_bitField0_ |= 0x00000010;
      }
      if (((from_bitField0_ & 0x00000800) != 0)) {
        result.devicePreference_ = devicePreference_;
      }
      if (((from_bitField0_ & 0x00002000) != 0)) {
        result.name_ = name_;
        to_bitField0_ |= 0x00000020;
      }
      if (((from_bitField0_ & 0x00004000) != 0)) {
        result.systemManagedResourceSource_ = systemManagedResourceSource_;
      }
      result.bitField0_ |= to_bitField0_;
    }

    private void buildPartial1(com.google.ads.googleads.v14.resources.Ad result) {
      int from_bitField1_ = bitField1_;
    }

    private void buildPartialOneofs(com.google.ads.googleads.v14.resources.Ad result) {
      result.adDataCase_ = adDataCase_;
      result.adData_ = this.adData_;
      if (adDataCase_ == 6 &&
          textAdBuilder_ != null) {
        result.adData_ = textAdBuilder_.build();
      }
      if (adDataCase_ == 7 &&
          expandedTextAdBuilder_ != null) {
        result.adData_ = expandedTextAdBuilder_.build();
      }
      if (adDataCase_ == 49 &&
          callAdBuilder_ != null) {
        result.adData_ = callAdBuilder_.build();
      }
      if (adDataCase_ == 14 &&
          expandedDynamicSearchAdBuilder_ != null) {
        result.adData_ = expandedDynamicSearchAdBuilder_.build();
      }
      if (adDataCase_ == 15 &&
          hotelAdBuilder_ != null) {
        result.adData_ = hotelAdBuilder_.build();
      }
      if (adDataCase_ == 17 &&
          shoppingSmartAdBuilder_ != null) {
        result.adData_ = shoppingSmartAdBuilder_.build();
      }
      if (adDataCase_ == 18 &&
          shoppingProductAdBuilder_ != null) {
        result.adData_ = shoppingProductAdBuilder_.build();
      }
      if (adDataCase_ == 22 &&
          imageAdBuilder_ != null) {
        result.adData_ = imageAdBuilder_.build();
      }
      if (adDataCase_ == 24 &&
          videoAdBuilder_ != null) {
        result.adData_ = videoAdBuilder_.build();
      }
      if (adDataCase_ == 39 &&
          videoResponsiveAdBuilder_ != null) {
        result.adData_ = videoResponsiveAdBuilder_.build();
      }
      if (adDataCase_ == 25 &&
          responsiveSearchAdBuilder_ != null) {
        result.adData_ = responsiveSearchAdBuilder_.build();
      }
      if (adDataCase_ == 28 &&
          legacyResponsiveDisplayAdBuilder_ != null) {
        result.adData_ = legacyResponsiveDisplayAdBuilder_.build();
      }
      if (adDataCase_ == 29 &&
          appAdBuilder_ != null) {
        result.adData_ = appAdBuilder_.build();
      }
      if (adDataCase_ == 30 &&
          legacyAppInstallAdBuilder_ != null) {
        result.adData_ = legacyAppInstallAdBuilder_.build();
      }
      if (adDataCase_ == 31 &&
          responsiveDisplayAdBuilder_ != null) {
        result.adData_ = responsiveDisplayAdBuilder_.build();
      }
      if (adDataCase_ == 32 &&
          localAdBuilder_ != null) {
        result.adData_ = localAdBuilder_.build();
      }
      if (adDataCase_ == 33 &&
          displayUploadAdBuilder_ != null) {
        result.adData_ = displayUploadAdBuilder_.build();
      }
      if (adDataCase_ == 34 &&
          appEngagementAdBuilder_ != null) {
        result.adData_ = appEngagementAdBuilder_.build();
      }
      if (adDataCase_ == 36 &&
          shoppingComparisonListingAdBuilder_ != null) {
        result.adData_ = shoppingComparisonListingAdBuilder_.build();
      }
      if (adDataCase_ == 48 &&
          smartCampaignAdBuilder_ != null) {
        result.adData_ = smartCampaignAdBuilder_.build();
      }
      if (adDataCase_ == 50 &&
          appPreRegistrationAdBuilder_ != null) {
        result.adData_ = appPreRegistrationAdBuilder_.build();
      }
      if (adDataCase_ == 51 &&
          discoveryMultiAssetAdBuilder_ != null) {
        result.adData_ = discoveryMultiAssetAdBuilder_.build();
      }
      if (adDataCase_ == 52 &&
          discoveryCarouselAdBuilder_ != null) {
        result.adData_ = discoveryCarouselAdBuilder_.build();
      }
      if (adDataCase_ == 60 &&
          discoveryVideoResponsiveAdBuilder_ != null) {
        result.adData_ = discoveryVideoResponsiveAdBuilder_.build();
      }
      if (adDataCase_ == 54 &&
          travelAdBuilder_ != null) {
        result.adData_ = travelAdBuilder_.build();
      }
    }

    @java.lang.Override
    public Builder clone() {
      return super.clone();
    }
    @java.lang.Override
    public Builder setField(
        com.google.protobuf.Descriptors.FieldDescriptor field,
        java.lang.Object value) {
      return super.setField(field, value);
    }
    @java.lang.Override
    public Builder clearField(
        com.google.protobuf.Descriptors.FieldDescriptor field) {
      return super.clearField(field);
    }
    @java.lang.Override
    public Builder clearOneof(
        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
      return super.clearOneof(oneof);
    }
    @java.lang.Override
    public Builder setRepeatedField(
        com.google.protobuf.Descriptors.FieldDescriptor field,
        int index, java.lang.Object value) {
      return super.setRepeatedField(field, index, value);
    }
    @java.lang.Override
    public Builder addRepeatedField(
        com.google.protobuf.Descriptors.FieldDescriptor field,
        java.lang.Object value) {
      return super.addRepeatedField(field, value);
    }
    @java.lang.Override
    public Builder mergeFrom(com.google.protobuf.Message other) {
      if (other instanceof com.google.ads.googleads.v14.resources.Ad) {
        return mergeFrom((com.google.ads.googleads.v14.resources.Ad)other);
      } else {
        super.mergeFrom(other);
        return this;
      }
    }

    public Builder mergeFrom(com.google.ads.googleads.v14.resources.Ad other) {
      if (other == com.google.ads.googleads.v14.resources.Ad.getDefaultInstance()) return this;
      if (!other.getResourceName().isEmpty()) {
        resourceName_ = other.resourceName_;
        bitField0_ |= 0x00000001;
        onChanged();
      }
      if (other.hasId()) {
        setId(other.getId());
      }
      if (!other.finalUrls_.isEmpty()) {
        if (finalUrls_.isEmpty()) {
          finalUrls_ = other.finalUrls_;
          bitField0_ |= 0x00000004;
        } else {
          ensureFinalUrlsIsMutable();
          finalUrls_.addAll(other.finalUrls_);
        }
        onChanged();
      }
      if (finalAppUrlsBuilder_ == null) {
        if (!other.finalAppUrls_.isEmpty()) {
          if (finalAppUrls_.isEmpty()) {
            finalAppUrls_ = other.finalAppUrls_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureFinalAppUrlsIsMutable();
            finalAppUrls_.addAll(other.finalAppUrls_);
          }
          onChanged();
        }
      } else {
        if (!other.finalAppUrls_.isEmpty()) {
          if (finalAppUrlsBuilder_.isEmpty()) {
            finalAppUrlsBuilder_.dispose();
            finalAppUrlsBuilder_ = null;
            finalAppUrls_ = other.finalAppUrls_;
            bitField0_ = (bitField0_ & ~0x00000008);
            finalAppUrlsBuilder_ = 
              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                 getFinalAppUrlsFieldBuilder() : null;
          } else {
            finalAppUrlsBuilder_.addAllMessages(other.finalAppUrls_);
          }
        }
      }
      if (!other.finalMobileUrls_.isEmpty()) {
        if (finalMobileUrls_.isEmpty()) {
          finalMobileUrls_ = other.finalMobileUrls_;
          bitField0_ |= 0x00000010;
        } else {
          ensureFinalMobileUrlsIsMutable();
          finalMobileUrls_.addAll(other.finalMobileUrls_);
        }
        onChanged();
      }
      if (other.hasTrackingUrlTemplate()) {
        trackingUrlTemplate_ = other.trackingUrlTemplate_;
        bitField0_ |= 0x00000020;
        onChanged();
      }
      if (other.hasFinalUrlSuffix()) {
        finalUrlSuffix_ = other.finalUrlSuffix_;
        bitField0_ |= 0x00000040;
        onChanged();
      }
      if (urlCustomParametersBuilder_ == null) {
        if (!other.urlCustomParameters_.isEmpty()) {
          if (urlCustomParameters_.isEmpty()) {
            urlCustomParameters_ = other.urlCustomParameters_;
            bitField0_ = (bitField0_ & ~0x00000080);
          } else {
            ensureUrlCustomParametersIsMutable();
            urlCustomParameters_.addAll(other.urlCustomParameters_);
          }
          onChanged();
        }
      } else {
        if (!other.urlCustomParameters_.isEmpty()) {
          if (urlCustomParametersBuilder_.isEmpty()) {
            urlCustomParametersBuilder_.dispose();
            urlCustomParametersBuilder_ = null;
            urlCustomParameters_ = other.urlCustomParameters_;
            bitField0_ = (bitField0_ & ~0x00000080);
            urlCustomParametersBuilder_ = 
              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                 getUrlCustomParametersFieldBuilder() : null;
          } else {
            urlCustomParametersBuilder_.addAllMessages(other.urlCustomParameters_);
          }
        }
      }
      if (other.hasDisplayUrl()) {
        displayUrl_ = other.displayUrl_;
        bitField0_ |= 0x00000100;
        onChanged();
      }
      if (other.type_ != 0) {
        setTypeValue(other.getTypeValue());
      }
      if (other.hasAddedByGoogleAds()) {
        setAddedByGoogleAds(other.getAddedByGoogleAds());
      }
      if (other.devicePreference_ != 0) {
        setDevicePreferenceValue(other.getDevicePreferenceValue());
      }
      if (urlCollectionsBuilder_ == null) {
        if (!other.urlCollections_.isEmpty()) {
          if (urlCollections_.isEmpty()) {
            urlCollections_ = other.urlCollections_;
            bitField0_ = (bitField0_ & ~0x00001000);
          } else {
            ensureUrlCollectionsIsMutable();
            urlCollections_.addAll(other.urlCollections_);
          }
          onChanged();
        }
      } else {
        if (!other.urlCollections_.isEmpty()) {
          if (urlCollectionsBuilder_.isEmpty()) {
            urlCollectionsBuilder_.dispose();
            urlCollectionsBuilder_ = null;
            urlCollections_ = other.urlCollections_;
            bitField0_ = (bitField0_ & ~0x00001000);
            urlCollectionsBuilder_ = 
              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                 getUrlCollectionsFieldBuilder() : null;
          } else {
            urlCollectionsBuilder_.addAllMessages(other.urlCollections_);
          }
        }
      }
      if (other.hasName()) {
        name_ = other.name_;
        bitField0_ |= 0x00002000;
        onChanged();
      }
      if (other.systemManagedResourceSource_ != 0) {
        setSystemManagedResourceSourceValue(other.getSystemManagedResourceSourceValue());
      }
      switch (other.getAdDataCase()) {
        case TEXT_AD: {
          mergeTextAd(other.getTextAd());
          break;
        }
        case EXPANDED_TEXT_AD: {
          mergeExpandedTextAd(other.getExpandedTextAd());
          break;
        }
        case CALL_AD: {
          mergeCallAd(other.getCallAd());
          break;
        }
        case EXPANDED_DYNAMIC_SEARCH_AD: {
          mergeExpandedDynamicSearchAd(other.getExpandedDynamicSearchAd());
          break;
        }
        case HOTEL_AD: {
          mergeHotelAd(other.getHotelAd());
          break;
        }
        case SHOPPING_SMART_AD: {
          mergeShoppingSmartAd(other.getShoppingSmartAd());
          break;
        }
        case SHOPPING_PRODUCT_AD: {
          mergeShoppingProductAd(other.getShoppingProductAd());
          break;
        }
        case IMAGE_AD: {
          mergeImageAd(other.getImageAd());
          break;
        }
        case VIDEO_AD: {
          mergeVideoAd(other.getVideoAd());
          break;
        }
        case VIDEO_RESPONSIVE_AD: {
          mergeVideoResponsiveAd(other.getVideoResponsiveAd());
          break;
        }
        case RESPONSIVE_SEARCH_AD: {
          mergeResponsiveSearchAd(other.getResponsiveSearchAd());
          break;
        }
        case LEGACY_RESPONSIVE_DISPLAY_AD: {
          mergeLegacyResponsiveDisplayAd(other.getLegacyResponsiveDisplayAd());
          break;
        }
        case APP_AD: {
          mergeAppAd(other.getAppAd());
          break;
        }
        case LEGACY_APP_INSTALL_AD: {
          mergeLegacyAppInstallAd(other.getLegacyAppInstallAd());
          break;
        }
        case RESPONSIVE_DISPLAY_AD: {
          mergeResponsiveDisplayAd(other.getResponsiveDisplayAd());
          break;
        }
        case LOCAL_AD: {
          mergeLocalAd(other.getLocalAd());
          break;
        }
        case DISPLAY_UPLOAD_AD: {
          mergeDisplayUploadAd(other.getDisplayUploadAd());
          break;
        }
        case APP_ENGAGEMENT_AD: {
          mergeAppEngagementAd(other.getAppEngagementAd());
          break;
        }
        case SHOPPING_COMPARISON_LISTING_AD: {
          mergeShoppingComparisonListingAd(other.getShoppingComparisonListingAd());
          break;
        }
        case SMART_CAMPAIGN_AD: {
          mergeSmartCampaignAd(other.getSmartCampaignAd());
          break;
        }
        case APP_PRE_REGISTRATION_AD: {
          mergeAppPreRegistrationAd(other.getAppPreRegistrationAd());
          break;
        }
        case DISCOVERY_MULTI_ASSET_AD: {
          mergeDiscoveryMultiAssetAd(other.getDiscoveryMultiAssetAd());
          break;
        }
        case DISCOVERY_CAROUSEL_AD: {
          mergeDiscoveryCarouselAd(other.getDiscoveryCarouselAd());
          break;
        }
        case DISCOVERY_VIDEO_RESPONSIVE_AD: {
          mergeDiscoveryVideoResponsiveAd(other.getDiscoveryVideoResponsiveAd());
          break;
        }
        case TRAVEL_AD: {
          mergeTravelAd(other.getTravelAd());
          break;
        }
        case ADDATA_NOT_SET: {
          break;
        }
      }
      this.mergeUnknownFields(other.getUnknownFields());
      onChanged();
      return this;
    }

    @java.lang.Override
    public final boolean isInitialized() {
      return true;
    }

    @java.lang.Override
    public Builder mergeFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 40: {
              type_ = input.readEnum();
              bitField0_ |= 0x00000200;
              break;
            } // case 40
            case 50: {
              input.readMessage(
                  getTextAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 6;
              break;
            } // case 50
            case 58: {
              input.readMessage(
                  getExpandedTextAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 7;
              break;
            } // case 58
            case 82: {
              com.google.ads.googleads.v14.common.CustomParameter m =
                  input.readMessage(
                      com.google.ads.googleads.v14.common.CustomParameter.parser(),
                      extensionRegistry);
              if (urlCustomParametersBuilder_ == null) {
                ensureUrlCustomParametersIsMutable();
                urlCustomParameters_.add(m);
              } else {
                urlCustomParametersBuilder_.addMessage(m);
              }
              break;
            } // case 82
            case 114: {
              input.readMessage(
                  getExpandedDynamicSearchAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 14;
              break;
            } // case 114
            case 122: {
              input.readMessage(
                  getHotelAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 15;
              break;
            } // case 122
            case 138: {
              input.readMessage(
                  getShoppingSmartAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 17;
              break;
            } // case 138
            case 146: {
              input.readMessage(
                  getShoppingProductAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 18;
              break;
            } // case 146
            case 160: {
              devicePreference_ = input.readEnum();
              bitField0_ |= 0x00000800;
              break;
            } // case 160
            case 178: {
              input.readMessage(
                  getImageAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 22;
              break;
            } // case 178
            case 194: {
              input.readMessage(
                  getVideoAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 24;
              break;
            } // case 194
            case 202: {
              input.readMessage(
                  getResponsiveSearchAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 25;
              break;
            } // case 202
            case 210: {
              com.google.ads.googleads.v14.common.UrlCollection m =
                  input.readMessage(
                      com.google.ads.googleads.v14.common.UrlCollection.parser(),
                      extensionRegistry);
              if (urlCollectionsBuilder_ == null) {
                ensureUrlCollectionsIsMutable();
                urlCollections_.add(m);
              } else {
                urlCollectionsBuilder_.addMessage(m);
              }
              break;
            } // case 210
            case 216: {
              systemManagedResourceSource_ = input.readEnum();
              bitField0_ |= 0x00004000;
              break;
            } // case 216
            case 226: {
              input.readMessage(
                  getLegacyResponsiveDisplayAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 28;
              break;
            } // case 226
            case 234: {
              input.readMessage(
                  getAppAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 29;
              break;
            } // case 234
            case 242: {
              input.readMessage(
                  getLegacyAppInstallAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 30;
              break;
            } // case 242
            case 250: {
              input.readMessage(
                  getResponsiveDisplayAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 31;
              break;
            } // case 250
            case 258: {
              input.readMessage(
                  getLocalAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 32;
              break;
            } // case 258
            case 266: {
              input.readMessage(
                  getDisplayUploadAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 33;
              break;
            } // case 266
            case 274: {
              input.readMessage(
                  getAppEngagementAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 34;
              break;
            } // case 274
            case 282: {
              com.google.ads.googleads.v14.common.FinalAppUrl m =
                  input.readMessage(
                      com.google.ads.googleads.v14.common.FinalAppUrl.parser(),
                      extensionRegistry);
              if (finalAppUrlsBuilder_ == null) {
                ensureFinalAppUrlsIsMutable();
                finalAppUrls_.add(m);
              } else {
                finalAppUrlsBuilder_.addMessage(m);
              }
              break;
            } // case 282
            case 290: {
              input.readMessage(
                  getShoppingComparisonListingAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 36;
              break;
            } // case 290
            case 298: {
              resourceName_ = input.readStringRequireUtf8();
              bitField0_ |= 0x00000001;
              break;
            } // case 298
            case 314: {
              input.readMessage(
                  getVideoResponsiveAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 39;
              break;
            } // case 314
            case 320: {
              id_ = input.readInt64();
              bitField0_ |= 0x00000002;
              break;
            } // case 320
            case 330: {
              java.lang.String s = input.readStringRequireUtf8();
              ensureFinalUrlsIsMutable();
              finalUrls_.add(s);
              break;
            } // case 330
            case 338: {
              java.lang.String s = input.readStringRequireUtf8();
              ensureFinalMobileUrlsIsMutable();
              finalMobileUrls_.add(s);
              break;
            } // case 338
            case 346: {
              trackingUrlTemplate_ = input.readStringRequireUtf8();
              bitField0_ |= 0x00000020;
              break;
            } // case 346
            case 354: {
              finalUrlSuffix_ = input.readStringRequireUtf8();
              bitField0_ |= 0x00000040;
              break;
            } // case 354
            case 362: {
              displayUrl_ = input.readStringRequireUtf8();
              bitField0_ |= 0x00000100;
              break;
            } // case 362
            case 368: {
              addedByGoogleAds_ = input.readBool();
              bitField0_ |= 0x00000400;
              break;
            } // case 368
            case 378: {
              name_ = input.readStringRequireUtf8();
              bitField0_ |= 0x00002000;
              break;
            } // case 378
            case 386: {
              input.readMessage(
                  getSmartCampaignAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 48;
              break;
            } // case 386
            case 394: {
              input.readMessage(
                  getCallAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 49;
              break;
            } // case 394
            case 402: {
              input.readMessage(
                  getAppPreRegistrationAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 50;
              break;
            } // case 402
            case 410: {
              input.readMessage(
                  getDiscoveryMultiAssetAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 51;
              break;
            } // case 410
            case 418: {
              input.readMessage(
                  getDiscoveryCarouselAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 52;
              break;
            } // case 418
            case 434: {
              input.readMessage(
                  getTravelAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 54;
              break;
            } // case 434
            case 482: {
              input.readMessage(
                  getDiscoveryVideoResponsiveAdFieldBuilder().getBuilder(),
                  extensionRegistry);
              adDataCase_ = 60;
              break;
            } // case 482
            default: {
              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                done = true; // was an endgroup tag
              }
              break;
            } // default:
          } // switch (tag)
        } // while (!done)
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.unwrapIOException();
      } finally {
        onChanged();
      } // finally
      return this;
    }
    private int adDataCase_ = 0;
    private java.lang.Object adData_;
    public AdDataCase
        getAdDataCase() {
      return AdDataCase.forNumber(
          adDataCase_);
    }

    public Builder clearAdData() {
      adDataCase_ = 0;
      adData_ = null;
      onChanged();
      return this;
    }

    private int bitField0_;
    private int bitField1_;

    private java.lang.Object resourceName_ = "";
    /**
     * <pre>
     * Immutable. The resource name of the ad.
     * Ad resource names have the form:
     *
     * `customers/{customer_id}/ads/{ad_id}`
     * </pre>
     *
     * <code>string resource_name = 37 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.resource_reference) = { ... }</code>
     * @return The resourceName.
     */
    public java.lang.String getResourceName() {
      java.lang.Object ref = resourceName_;
      if (!(ref instanceof java.lang.String)) {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        resourceName_ = s;
        return s;
      } else {
        return (java.lang.String) ref;
      }
    }
    /**
     * <pre>
     * Immutable. The resource name of the ad.
     * Ad resource names have the form:
     *
     * `customers/{customer_id}/ads/{ad_id}`
     * </pre>
     *
     * <code>string resource_name = 37 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.resource_reference) = { ... }</code>
     * @return The bytes for resourceName.
     */
    public com.google.protobuf.ByteString
        getResourceNameBytes() {
      java.lang.Object ref = resourceName_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        resourceName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    /**
     * <pre>
     * Immutable. The resource name of the ad.
     * Ad resource names have the form:
     *
     * `customers/{customer_id}/ads/{ad_id}`
     * </pre>
     *
     * <code>string resource_name = 37 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.resource_reference) = { ... }</code>
     * @param value The resourceName to set.
     * @return This builder for chaining.
     */
    public Builder setResourceName(
        java.lang.String value) {
      if (value == null) { throw new NullPointerException(); }
      resourceName_ = value;
      bitField0_ |= 0x00000001;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Immutable. The resource name of the ad.
     * Ad resource names have the form:
     *
     * `customers/{customer_id}/ads/{ad_id}`
     * </pre>
     *
     * <code>string resource_name = 37 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.resource_reference) = { ... }</code>
     * @return This builder for chaining.
     */
    public Builder clearResourceName() {
      resourceName_ = getDefaultInstance().getResourceName();
      bitField0_ = (bitField0_ & ~0x00000001);
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Immutable. The resource name of the ad.
     * Ad resource names have the form:
     *
     * `customers/{customer_id}/ads/{ad_id}`
     * </pre>
     *
     * <code>string resource_name = 37 [(.google.api.field_behavior) = IMMUTABLE, (.google.api.resource_reference) = { ... }</code>
     * @param value The bytes for resourceName to set.
     * @return This builder for chaining.
     */
    public Builder setResourceNameBytes(
        com.google.protobuf.ByteString value) {
      if (value == null) { throw new NullPointerException(); }
      checkByteStringIsUtf8(value);
      resourceName_ = value;
      bitField0_ |= 0x00000001;
      onChanged();
      return this;
    }

    private long id_ ;
    /**
     * <pre>
     * Output only. The ID of the ad.
     * </pre>
     *
     * <code>optional int64 id = 40 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return Whether the id field is set.
     */
    @java.lang.Override
    public boolean hasId() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * Output only. The ID of the ad.
     * </pre>
     *
     * <code>optional int64 id = 40 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return The id.
     */
    @java.lang.Override
    public long getId() {
      return id_;
    }
    /**
     * <pre>
     * Output only. The ID of the ad.
     * </pre>
     *
     * <code>optional int64 id = 40 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @param value The id to set.
     * @return This builder for chaining.
     */
    public Builder setId(long value) {

      id_ = value;
      bitField0_ |= 0x00000002;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Output only. The ID of the ad.
     * </pre>
     *
     * <code>optional int64 id = 40 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return This builder for chaining.
     */
    public Builder clearId() {
      bitField0_ = (bitField0_ & ~0x00000002);
      id_ = 0L;
      onChanged();
      return this;
    }

    private com.google.protobuf.LazyStringArrayList finalUrls_ =
        com.google.protobuf.LazyStringArrayList.emptyList();
    private void ensureFinalUrlsIsMutable() {
      if (!finalUrls_.isModifiable()) {
        finalUrls_ = new com.google.protobuf.LazyStringArrayList(finalUrls_);
      }
      bitField0_ |= 0x00000004;
    }
    /**
     * <pre>
     * The list of possible final URLs after all cross-domain redirects for the
     * ad.
     * </pre>
     *
     * <code>repeated string final_urls = 41;</code>
     * @return A list containing the finalUrls.
     */
    public com.google.protobuf.ProtocolStringList
        getFinalUrlsList() {
      finalUrls_.makeImmutable();
      return finalUrls_;
    }
    /**
     * <pre>
     * The list of possible final URLs after all cross-domain redirects for the
     * ad.
     * </pre>
     *
     * <code>repeated string final_urls = 41;</code>
     * @return The count of finalUrls.
     */
    public int getFinalUrlsCount() {
      return finalUrls_.size();
    }
    /**
     * <pre>
     * The list of possible final URLs after all cross-domain redirects for the
     * ad.
     * </pre>
     *
     * <code>repeated string final_urls = 41;</code>
     * @param index The index of the element to return.
     * @return The finalUrls at the given index.
     */
    public java.lang.String getFinalUrls(int index) {
      return finalUrls_.get(index);
    }
    /**
     * <pre>
     * The list of possible final URLs after all cross-domain redirects for the
     * ad.
     * </pre>
     *
     * <code>repeated string final_urls = 41;</code>
     * @param index The index of the value to return.
     * @return The bytes of the finalUrls at the given index.
     */
    public com.google.protobuf.ByteString
        getFinalUrlsBytes(int index) {
      return finalUrls_.getByteString(index);
    }
    /**
     * <pre>
     * The list of possible final URLs after all cross-domain redirects for the
     * ad.
     * </pre>
     *
     * <code>repeated string final_urls = 41;</code>
     * @param index The index to set the value at.
     * @param value The finalUrls to set.
     * @return This builder for chaining.
     */
    public Builder setFinalUrls(
        int index, java.lang.String value) {
      if (value == null) { throw new NullPointerException(); }
      ensureFinalUrlsIsMutable();
      finalUrls_.set(index, value);
      bitField0_ |= 0x00000004;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The list of possible final URLs after all cross-domain redirects for the
     * ad.
     * </pre>
     *
     * <code>repeated string final_urls = 41;</code>
     * @param value The finalUrls to add.
     * @return This builder for chaining.
     */
    public Builder addFinalUrls(
        java.lang.String value) {
      if (value == null) { throw new NullPointerException(); }
      ensureFinalUrlsIsMutable();
      finalUrls_.add(value);
      bitField0_ |= 0x00000004;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The list of possible final URLs after all cross-domain redirects for the
     * ad.
     * </pre>
     *
     * <code>repeated string final_urls = 41;</code>
     * @param values The finalUrls to add.
     * @return This builder for chaining.
     */
    public Builder addAllFinalUrls(
        java.lang.Iterable<java.lang.String> values) {
      ensureFinalUrlsIsMutable();
      com.google.protobuf.AbstractMessageLite.Builder.addAll(
          values, finalUrls_);
      bitField0_ |= 0x00000004;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The list of possible final URLs after all cross-domain redirects for the
     * ad.
     * </pre>
     *
     * <code>repeated string final_urls = 41;</code>
     * @return This builder for chaining.
     */
    public Builder clearFinalUrls() {
      finalUrls_ =
        com.google.protobuf.LazyStringArrayList.emptyList();
      bitField0_ = (bitField0_ & ~0x00000004);;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The list of possible final URLs after all cross-domain redirects for the
     * ad.
     * </pre>
     *
     * <code>repeated string final_urls = 41;</code>
     * @param value The bytes of the finalUrls to add.
     * @return This builder for chaining.
     */
    public Builder addFinalUrlsBytes(
        com.google.protobuf.ByteString value) {
      if (value == null) { throw new NullPointerException(); }
      checkByteStringIsUtf8(value);
      ensureFinalUrlsIsMutable();
      finalUrls_.add(value);
      bitField0_ |= 0x00000004;
      onChanged();
      return this;
    }

    private java.util.List<com.google.ads.googleads.v14.common.FinalAppUrl> finalAppUrls_ =
      java.util.Collections.emptyList();
    private void ensureFinalAppUrlsIsMutable() {
      if (!((bitField0_ & 0x00000008) != 0)) {
        finalAppUrls_ = new java.util.ArrayList<com.google.ads.googleads.v14.common.FinalAppUrl>(finalAppUrls_);
        bitField0_ |= 0x00000008;
       }
    }

    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.ads.googleads.v14.common.FinalAppUrl, com.google.ads.googleads.v14.common.FinalAppUrl.Builder, com.google.ads.googleads.v14.common.FinalAppUrlOrBuilder> finalAppUrlsBuilder_;

    /**
     * <pre>
     * A list of final app URLs that will be used on mobile if the user has the
     * specific app installed.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
     */
    public java.util.List<com.google.ads.googleads.v14.common.FinalAppUrl> getFinalAppUrlsList() {
      if (finalAppUrlsBuilder_ == null) {
        return java.util.Collections.unmodifiableList(finalAppUrls_);
      } else {
        return finalAppUrlsBuilder_.getMessageList();
      }
    }
    /**
     * <pre>
     * A list of final app URLs that will be used on mobile if the user has the
     * specific app installed.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
     */
    public int getFinalAppUrlsCount() {
      if (finalAppUrlsBuilder_ == null) {
        return finalAppUrls_.size();
      } else {
        return finalAppUrlsBuilder_.getCount();
      }
    }
    /**
     * <pre>
     * A list of final app URLs that will be used on mobile if the user has the
     * specific app installed.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
     */
    public com.google.ads.googleads.v14.common.FinalAppUrl getFinalAppUrls(int index) {
      if (finalAppUrlsBuilder_ == null) {
        return finalAppUrls_.get(index);
      } else {
        return finalAppUrlsBuilder_.getMessage(index);
      }
    }
    /**
     * <pre>
     * A list of final app URLs that will be used on mobile if the user has the
     * specific app installed.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
     */
    public Builder setFinalAppUrls(
        int index, com.google.ads.googleads.v14.common.FinalAppUrl value) {
      if (finalAppUrlsBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureFinalAppUrlsIsMutable();
        finalAppUrls_.set(index, value);
        onChanged();
      } else {
        finalAppUrlsBuilder_.setMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * A list of final app URLs that will be used on mobile if the user has the
     * specific app installed.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
     */
    public Builder setFinalAppUrls(
        int index, com.google.ads.googleads.v14.common.FinalAppUrl.Builder builderForValue) {
      if (finalAppUrlsBuilder_ == null) {
        ensureFinalAppUrlsIsMutable();
        finalAppUrls_.set(index, builderForValue.build());
        onChanged();
      } else {
        finalAppUrlsBuilder_.setMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * A list of final app URLs that will be used on mobile if the user has the
     * specific app installed.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
     */
    public Builder addFinalAppUrls(com.google.ads.googleads.v14.common.FinalAppUrl value) {
      if (finalAppUrlsBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureFinalAppUrlsIsMutable();
        finalAppUrls_.add(value);
        onChanged();
      } else {
        finalAppUrlsBuilder_.addMessage(value);
      }
      return this;
    }
    /**
     * <pre>
     * A list of final app URLs that will be used on mobile if the user has the
     * specific app installed.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
     */
    public Builder addFinalAppUrls(
        int index, com.google.ads.googleads.v14.common.FinalAppUrl value) {
      if (finalAppUrlsBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureFinalAppUrlsIsMutable();
        finalAppUrls_.add(index, value);
        onChanged();
      } else {
        finalAppUrlsBuilder_.addMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * A list of final app URLs that will be used on mobile if the user has the
     * specific app installed.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
     */
    public Builder addFinalAppUrls(
        com.google.ads.googleads.v14.common.FinalAppUrl.Builder builderForValue) {
      if (finalAppUrlsBuilder_ == null) {
        ensureFinalAppUrlsIsMutable();
        finalAppUrls_.add(builderForValue.build());
        onChanged();
      } else {
        finalAppUrlsBuilder_.addMessage(builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * A list of final app URLs that will be used on mobile if the user has the
     * specific app installed.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
     */
    public Builder addFinalAppUrls(
        int index, com.google.ads.googleads.v14.common.FinalAppUrl.Builder builderForValue) {
      if (finalAppUrlsBuilder_ == null) {
        ensureFinalAppUrlsIsMutable();
        finalAppUrls_.add(index, builderForValue.build());
        onChanged();
      } else {
        finalAppUrlsBuilder_.addMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * A list of final app URLs that will be used on mobile if the user has the
     * specific app installed.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
     */
    public Builder addAllFinalAppUrls(
        java.lang.Iterable<? extends com.google.ads.googleads.v14.common.FinalAppUrl> values) {
      if (finalAppUrlsBuilder_ == null) {
        ensureFinalAppUrlsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, finalAppUrls_);
        onChanged();
      } else {
        finalAppUrlsBuilder_.addAllMessages(values);
      }
      return this;
    }
    /**
     * <pre>
     * A list of final app URLs that will be used on mobile if the user has the
     * specific app installed.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
     */
    public Builder clearFinalAppUrls() {
      if (finalAppUrlsBuilder_ == null) {
        finalAppUrls_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
      } else {
        finalAppUrlsBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * A list of final app URLs that will be used on mobile if the user has the
     * specific app installed.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
     */
    public Builder removeFinalAppUrls(int index) {
      if (finalAppUrlsBuilder_ == null) {
        ensureFinalAppUrlsIsMutable();
        finalAppUrls_.remove(index);
        onChanged();
      } else {
        finalAppUrlsBuilder_.remove(index);
      }
      return this;
    }
    /**
     * <pre>
     * A list of final app URLs that will be used on mobile if the user has the
     * specific app installed.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
     */
    public com.google.ads.googleads.v14.common.FinalAppUrl.Builder getFinalAppUrlsBuilder(
        int index) {
      return getFinalAppUrlsFieldBuilder().getBuilder(index);
    }
    /**
     * <pre>
     * A list of final app URLs that will be used on mobile if the user has the
     * specific app installed.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
     */
    public com.google.ads.googleads.v14.common.FinalAppUrlOrBuilder getFinalAppUrlsOrBuilder(
        int index) {
      if (finalAppUrlsBuilder_ == null) {
        return finalAppUrls_.get(index);  } else {
        return finalAppUrlsBuilder_.getMessageOrBuilder(index);
      }
    }
    /**
     * <pre>
     * A list of final app URLs that will be used on mobile if the user has the
     * specific app installed.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
     */
    public java.util.List<? extends com.google.ads.googleads.v14.common.FinalAppUrlOrBuilder> 
         getFinalAppUrlsOrBuilderList() {
      if (finalAppUrlsBuilder_ != null) {
        return finalAppUrlsBuilder_.getMessageOrBuilderList();
      } else {
        return java.util.Collections.unmodifiableList(finalAppUrls_);
      }
    }
    /**
     * <pre>
     * A list of final app URLs that will be used on mobile if the user has the
     * specific app installed.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
     */
    public com.google.ads.googleads.v14.common.FinalAppUrl.Builder addFinalAppUrlsBuilder() {
      return getFinalAppUrlsFieldBuilder().addBuilder(
          com.google.ads.googleads.v14.common.FinalAppUrl.getDefaultInstance());
    }
    /**
     * <pre>
     * A list of final app URLs that will be used on mobile if the user has the
     * specific app installed.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
     */
    public com.google.ads.googleads.v14.common.FinalAppUrl.Builder addFinalAppUrlsBuilder(
        int index) {
      return getFinalAppUrlsFieldBuilder().addBuilder(
          index, com.google.ads.googleads.v14.common.FinalAppUrl.getDefaultInstance());
    }
    /**
     * <pre>
     * A list of final app URLs that will be used on mobile if the user has the
     * specific app installed.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.FinalAppUrl final_app_urls = 35;</code>
     */
    public java.util.List<com.google.ads.googleads.v14.common.FinalAppUrl.Builder> 
         getFinalAppUrlsBuilderList() {
      return getFinalAppUrlsFieldBuilder().getBuilderList();
    }
    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.ads.googleads.v14.common.FinalAppUrl, com.google.ads.googleads.v14.common.FinalAppUrl.Builder, com.google.ads.googleads.v14.common.FinalAppUrlOrBuilder> 
        getFinalAppUrlsFieldBuilder() {
      if (finalAppUrlsBuilder_ == null) {
        finalAppUrlsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.ads.googleads.v14.common.FinalAppUrl, com.google.ads.googleads.v14.common.FinalAppUrl.Builder, com.google.ads.googleads.v14.common.FinalAppUrlOrBuilder>(
                finalAppUrls_,
                ((bitField0_ & 0x00000008) != 0),
                getParentForChildren(),
                isClean());
        finalAppUrls_ = null;
      }
      return finalAppUrlsBuilder_;
    }

    private com.google.protobuf.LazyStringArrayList finalMobileUrls_ =
        com.google.protobuf.LazyStringArrayList.emptyList();
    private void ensureFinalMobileUrlsIsMutable() {
      if (!finalMobileUrls_.isModifiable()) {
        finalMobileUrls_ = new com.google.protobuf.LazyStringArrayList(finalMobileUrls_);
      }
      bitField0_ |= 0x00000010;
    }
    /**
     * <pre>
     * The list of possible final mobile URLs after all cross-domain redirects
     * for the ad.
     * </pre>
     *
     * <code>repeated string final_mobile_urls = 42;</code>
     * @return A list containing the finalMobileUrls.
     */
    public com.google.protobuf.ProtocolStringList
        getFinalMobileUrlsList() {
      finalMobileUrls_.makeImmutable();
      return finalMobileUrls_;
    }
    /**
     * <pre>
     * The list of possible final mobile URLs after all cross-domain redirects
     * for the ad.
     * </pre>
     *
     * <code>repeated string final_mobile_urls = 42;</code>
     * @return The count of finalMobileUrls.
     */
    public int getFinalMobileUrlsCount() {
      return finalMobileUrls_.size();
    }
    /**
     * <pre>
     * The list of possible final mobile URLs after all cross-domain redirects
     * for the ad.
     * </pre>
     *
     * <code>repeated string final_mobile_urls = 42;</code>
     * @param index The index of the element to return.
     * @return The finalMobileUrls at the given index.
     */
    public java.lang.String getFinalMobileUrls(int index) {
      return finalMobileUrls_.get(index);
    }
    /**
     * <pre>
     * The list of possible final mobile URLs after all cross-domain redirects
     * for the ad.
     * </pre>
     *
     * <code>repeated string final_mobile_urls = 42;</code>
     * @param index The index of the value to return.
     * @return The bytes of the finalMobileUrls at the given index.
     */
    public com.google.protobuf.ByteString
        getFinalMobileUrlsBytes(int index) {
      return finalMobileUrls_.getByteString(index);
    }
    /**
     * <pre>
     * The list of possible final mobile URLs after all cross-domain redirects
     * for the ad.
     * </pre>
     *
     * <code>repeated string final_mobile_urls = 42;</code>
     * @param index The index to set the value at.
     * @param value The finalMobileUrls to set.
     * @return This builder for chaining.
     */
    public Builder setFinalMobileUrls(
        int index, java.lang.String value) {
      if (value == null) { throw new NullPointerException(); }
      ensureFinalMobileUrlsIsMutable();
      finalMobileUrls_.set(index, value);
      bitField0_ |= 0x00000010;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The list of possible final mobile URLs after all cross-domain redirects
     * for the ad.
     * </pre>
     *
     * <code>repeated string final_mobile_urls = 42;</code>
     * @param value The finalMobileUrls to add.
     * @return This builder for chaining.
     */
    public Builder addFinalMobileUrls(
        java.lang.String value) {
      if (value == null) { throw new NullPointerException(); }
      ensureFinalMobileUrlsIsMutable();
      finalMobileUrls_.add(value);
      bitField0_ |= 0x00000010;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The list of possible final mobile URLs after all cross-domain redirects
     * for the ad.
     * </pre>
     *
     * <code>repeated string final_mobile_urls = 42;</code>
     * @param values The finalMobileUrls to add.
     * @return This builder for chaining.
     */
    public Builder addAllFinalMobileUrls(
        java.lang.Iterable<java.lang.String> values) {
      ensureFinalMobileUrlsIsMutable();
      com.google.protobuf.AbstractMessageLite.Builder.addAll(
          values, finalMobileUrls_);
      bitField0_ |= 0x00000010;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The list of possible final mobile URLs after all cross-domain redirects
     * for the ad.
     * </pre>
     *
     * <code>repeated string final_mobile_urls = 42;</code>
     * @return This builder for chaining.
     */
    public Builder clearFinalMobileUrls() {
      finalMobileUrls_ =
        com.google.protobuf.LazyStringArrayList.emptyList();
      bitField0_ = (bitField0_ & ~0x00000010);;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The list of possible final mobile URLs after all cross-domain redirects
     * for the ad.
     * </pre>
     *
     * <code>repeated string final_mobile_urls = 42;</code>
     * @param value The bytes of the finalMobileUrls to add.
     * @return This builder for chaining.
     */
    public Builder addFinalMobileUrlsBytes(
        com.google.protobuf.ByteString value) {
      if (value == null) { throw new NullPointerException(); }
      checkByteStringIsUtf8(value);
      ensureFinalMobileUrlsIsMutable();
      finalMobileUrls_.add(value);
      bitField0_ |= 0x00000010;
      onChanged();
      return this;
    }

    private java.lang.Object trackingUrlTemplate_ = "";
    /**
     * <pre>
     * The URL template for constructing a tracking URL.
     * </pre>
     *
     * <code>optional string tracking_url_template = 43;</code>
     * @return Whether the trackingUrlTemplate field is set.
     */
    public boolean hasTrackingUrlTemplate() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <pre>
     * The URL template for constructing a tracking URL.
     * </pre>
     *
     * <code>optional string tracking_url_template = 43;</code>
     * @return The trackingUrlTemplate.
     */
    public java.lang.String getTrackingUrlTemplate() {
      java.lang.Object ref = trackingUrlTemplate_;
      if (!(ref instanceof java.lang.String)) {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        trackingUrlTemplate_ = s;
        return s;
      } else {
        return (java.lang.String) ref;
      }
    }
    /**
     * <pre>
     * The URL template for constructing a tracking URL.
     * </pre>
     *
     * <code>optional string tracking_url_template = 43;</code>
     * @return The bytes for trackingUrlTemplate.
     */
    public com.google.protobuf.ByteString
        getTrackingUrlTemplateBytes() {
      java.lang.Object ref = trackingUrlTemplate_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        trackingUrlTemplate_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    /**
     * <pre>
     * The URL template for constructing a tracking URL.
     * </pre>
     *
     * <code>optional string tracking_url_template = 43;</code>
     * @param value The trackingUrlTemplate to set.
     * @return This builder for chaining.
     */
    public Builder setTrackingUrlTemplate(
        java.lang.String value) {
      if (value == null) { throw new NullPointerException(); }
      trackingUrlTemplate_ = value;
      bitField0_ |= 0x00000020;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The URL template for constructing a tracking URL.
     * </pre>
     *
     * <code>optional string tracking_url_template = 43;</code>
     * @return This builder for chaining.
     */
    public Builder clearTrackingUrlTemplate() {
      trackingUrlTemplate_ = getDefaultInstance().getTrackingUrlTemplate();
      bitField0_ = (bitField0_ & ~0x00000020);
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The URL template for constructing a tracking URL.
     * </pre>
     *
     * <code>optional string tracking_url_template = 43;</code>
     * @param value The bytes for trackingUrlTemplate to set.
     * @return This builder for chaining.
     */
    public Builder setTrackingUrlTemplateBytes(
        com.google.protobuf.ByteString value) {
      if (value == null) { throw new NullPointerException(); }
      checkByteStringIsUtf8(value);
      trackingUrlTemplate_ = value;
      bitField0_ |= 0x00000020;
      onChanged();
      return this;
    }

    private java.lang.Object finalUrlSuffix_ = "";
    /**
     * <pre>
     * The suffix to use when constructing a final URL.
     * </pre>
     *
     * <code>optional string final_url_suffix = 44;</code>
     * @return Whether the finalUrlSuffix field is set.
     */
    public boolean hasFinalUrlSuffix() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <pre>
     * The suffix to use when constructing a final URL.
     * </pre>
     *
     * <code>optional string final_url_suffix = 44;</code>
     * @return The finalUrlSuffix.
     */
    public java.lang.String getFinalUrlSuffix() {
      java.lang.Object ref = finalUrlSuffix_;
      if (!(ref instanceof java.lang.String)) {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        finalUrlSuffix_ = s;
        return s;
      } else {
        return (java.lang.String) ref;
      }
    }
    /**
     * <pre>
     * The suffix to use when constructing a final URL.
     * </pre>
     *
     * <code>optional string final_url_suffix = 44;</code>
     * @return The bytes for finalUrlSuffix.
     */
    public com.google.protobuf.ByteString
        getFinalUrlSuffixBytes() {
      java.lang.Object ref = finalUrlSuffix_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        finalUrlSuffix_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    /**
     * <pre>
     * The suffix to use when constructing a final URL.
     * </pre>
     *
     * <code>optional string final_url_suffix = 44;</code>
     * @param value The finalUrlSuffix to set.
     * @return This builder for chaining.
     */
    public Builder setFinalUrlSuffix(
        java.lang.String value) {
      if (value == null) { throw new NullPointerException(); }
      finalUrlSuffix_ = value;
      bitField0_ |= 0x00000040;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The suffix to use when constructing a final URL.
     * </pre>
     *
     * <code>optional string final_url_suffix = 44;</code>
     * @return This builder for chaining.
     */
    public Builder clearFinalUrlSuffix() {
      finalUrlSuffix_ = getDefaultInstance().getFinalUrlSuffix();
      bitField0_ = (bitField0_ & ~0x00000040);
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The suffix to use when constructing a final URL.
     * </pre>
     *
     * <code>optional string final_url_suffix = 44;</code>
     * @param value The bytes for finalUrlSuffix to set.
     * @return This builder for chaining.
     */
    public Builder setFinalUrlSuffixBytes(
        com.google.protobuf.ByteString value) {
      if (value == null) { throw new NullPointerException(); }
      checkByteStringIsUtf8(value);
      finalUrlSuffix_ = value;
      bitField0_ |= 0x00000040;
      onChanged();
      return this;
    }

    private java.util.List<com.google.ads.googleads.v14.common.CustomParameter> urlCustomParameters_ =
      java.util.Collections.emptyList();
    private void ensureUrlCustomParametersIsMutable() {
      if (!((bitField0_ & 0x00000080) != 0)) {
        urlCustomParameters_ = new java.util.ArrayList<com.google.ads.googleads.v14.common.CustomParameter>(urlCustomParameters_);
        bitField0_ |= 0x00000080;
       }
    }

    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.ads.googleads.v14.common.CustomParameter, com.google.ads.googleads.v14.common.CustomParameter.Builder, com.google.ads.googleads.v14.common.CustomParameterOrBuilder> urlCustomParametersBuilder_;

    /**
     * <pre>
     * The list of mappings that can be used to substitute custom parameter tags
     * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
     * For mutates, use url custom parameter operations.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
     */
    public java.util.List<com.google.ads.googleads.v14.common.CustomParameter> getUrlCustomParametersList() {
      if (urlCustomParametersBuilder_ == null) {
        return java.util.Collections.unmodifiableList(urlCustomParameters_);
      } else {
        return urlCustomParametersBuilder_.getMessageList();
      }
    }
    /**
     * <pre>
     * The list of mappings that can be used to substitute custom parameter tags
     * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
     * For mutates, use url custom parameter operations.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
     */
    public int getUrlCustomParametersCount() {
      if (urlCustomParametersBuilder_ == null) {
        return urlCustomParameters_.size();
      } else {
        return urlCustomParametersBuilder_.getCount();
      }
    }
    /**
     * <pre>
     * The list of mappings that can be used to substitute custom parameter tags
     * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
     * For mutates, use url custom parameter operations.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
     */
    public com.google.ads.googleads.v14.common.CustomParameter getUrlCustomParameters(int index) {
      if (urlCustomParametersBuilder_ == null) {
        return urlCustomParameters_.get(index);
      } else {
        return urlCustomParametersBuilder_.getMessage(index);
      }
    }
    /**
     * <pre>
     * The list of mappings that can be used to substitute custom parameter tags
     * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
     * For mutates, use url custom parameter operations.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
     */
    public Builder setUrlCustomParameters(
        int index, com.google.ads.googleads.v14.common.CustomParameter value) {
      if (urlCustomParametersBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureUrlCustomParametersIsMutable();
        urlCustomParameters_.set(index, value);
        onChanged();
      } else {
        urlCustomParametersBuilder_.setMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * The list of mappings that can be used to substitute custom parameter tags
     * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
     * For mutates, use url custom parameter operations.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
     */
    public Builder setUrlCustomParameters(
        int index, com.google.ads.googleads.v14.common.CustomParameter.Builder builderForValue) {
      if (urlCustomParametersBuilder_ == null) {
        ensureUrlCustomParametersIsMutable();
        urlCustomParameters_.set(index, builderForValue.build());
        onChanged();
      } else {
        urlCustomParametersBuilder_.setMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * The list of mappings that can be used to substitute custom parameter tags
     * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
     * For mutates, use url custom parameter operations.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
     */
    public Builder addUrlCustomParameters(com.google.ads.googleads.v14.common.CustomParameter value) {
      if (urlCustomParametersBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureUrlCustomParametersIsMutable();
        urlCustomParameters_.add(value);
        onChanged();
      } else {
        urlCustomParametersBuilder_.addMessage(value);
      }
      return this;
    }
    /**
     * <pre>
     * The list of mappings that can be used to substitute custom parameter tags
     * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
     * For mutates, use url custom parameter operations.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
     */
    public Builder addUrlCustomParameters(
        int index, com.google.ads.googleads.v14.common.CustomParameter value) {
      if (urlCustomParametersBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureUrlCustomParametersIsMutable();
        urlCustomParameters_.add(index, value);
        onChanged();
      } else {
        urlCustomParametersBuilder_.addMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * The list of mappings that can be used to substitute custom parameter tags
     * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
     * For mutates, use url custom parameter operations.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
     */
    public Builder addUrlCustomParameters(
        com.google.ads.googleads.v14.common.CustomParameter.Builder builderForValue) {
      if (urlCustomParametersBuilder_ == null) {
        ensureUrlCustomParametersIsMutable();
        urlCustomParameters_.add(builderForValue.build());
        onChanged();
      } else {
        urlCustomParametersBuilder_.addMessage(builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * The list of mappings that can be used to substitute custom parameter tags
     * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
     * For mutates, use url custom parameter operations.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
     */
    public Builder addUrlCustomParameters(
        int index, com.google.ads.googleads.v14.common.CustomParameter.Builder builderForValue) {
      if (urlCustomParametersBuilder_ == null) {
        ensureUrlCustomParametersIsMutable();
        urlCustomParameters_.add(index, builderForValue.build());
        onChanged();
      } else {
        urlCustomParametersBuilder_.addMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * The list of mappings that can be used to substitute custom parameter tags
     * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
     * For mutates, use url custom parameter operations.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
     */
    public Builder addAllUrlCustomParameters(
        java.lang.Iterable<? extends com.google.ads.googleads.v14.common.CustomParameter> values) {
      if (urlCustomParametersBuilder_ == null) {
        ensureUrlCustomParametersIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, urlCustomParameters_);
        onChanged();
      } else {
        urlCustomParametersBuilder_.addAllMessages(values);
      }
      return this;
    }
    /**
     * <pre>
     * The list of mappings that can be used to substitute custom parameter tags
     * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
     * For mutates, use url custom parameter operations.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
     */
    public Builder clearUrlCustomParameters() {
      if (urlCustomParametersBuilder_ == null) {
        urlCustomParameters_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000080);
        onChanged();
      } else {
        urlCustomParametersBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * The list of mappings that can be used to substitute custom parameter tags
     * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
     * For mutates, use url custom parameter operations.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
     */
    public Builder removeUrlCustomParameters(int index) {
      if (urlCustomParametersBuilder_ == null) {
        ensureUrlCustomParametersIsMutable();
        urlCustomParameters_.remove(index);
        onChanged();
      } else {
        urlCustomParametersBuilder_.remove(index);
      }
      return this;
    }
    /**
     * <pre>
     * The list of mappings that can be used to substitute custom parameter tags
     * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
     * For mutates, use url custom parameter operations.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
     */
    public com.google.ads.googleads.v14.common.CustomParameter.Builder getUrlCustomParametersBuilder(
        int index) {
      return getUrlCustomParametersFieldBuilder().getBuilder(index);
    }
    /**
     * <pre>
     * The list of mappings that can be used to substitute custom parameter tags
     * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
     * For mutates, use url custom parameter operations.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
     */
    public com.google.ads.googleads.v14.common.CustomParameterOrBuilder getUrlCustomParametersOrBuilder(
        int index) {
      if (urlCustomParametersBuilder_ == null) {
        return urlCustomParameters_.get(index);  } else {
        return urlCustomParametersBuilder_.getMessageOrBuilder(index);
      }
    }
    /**
     * <pre>
     * The list of mappings that can be used to substitute custom parameter tags
     * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
     * For mutates, use url custom parameter operations.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
     */
    public java.util.List<? extends com.google.ads.googleads.v14.common.CustomParameterOrBuilder> 
         getUrlCustomParametersOrBuilderList() {
      if (urlCustomParametersBuilder_ != null) {
        return urlCustomParametersBuilder_.getMessageOrBuilderList();
      } else {
        return java.util.Collections.unmodifiableList(urlCustomParameters_);
      }
    }
    /**
     * <pre>
     * The list of mappings that can be used to substitute custom parameter tags
     * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
     * For mutates, use url custom parameter operations.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
     */
    public com.google.ads.googleads.v14.common.CustomParameter.Builder addUrlCustomParametersBuilder() {
      return getUrlCustomParametersFieldBuilder().addBuilder(
          com.google.ads.googleads.v14.common.CustomParameter.getDefaultInstance());
    }
    /**
     * <pre>
     * The list of mappings that can be used to substitute custom parameter tags
     * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
     * For mutates, use url custom parameter operations.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
     */
    public com.google.ads.googleads.v14.common.CustomParameter.Builder addUrlCustomParametersBuilder(
        int index) {
      return getUrlCustomParametersFieldBuilder().addBuilder(
          index, com.google.ads.googleads.v14.common.CustomParameter.getDefaultInstance());
    }
    /**
     * <pre>
     * The list of mappings that can be used to substitute custom parameter tags
     * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
     * For mutates, use url custom parameter operations.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.CustomParameter url_custom_parameters = 10;</code>
     */
    public java.util.List<com.google.ads.googleads.v14.common.CustomParameter.Builder> 
         getUrlCustomParametersBuilderList() {
      return getUrlCustomParametersFieldBuilder().getBuilderList();
    }
    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.ads.googleads.v14.common.CustomParameter, com.google.ads.googleads.v14.common.CustomParameter.Builder, com.google.ads.googleads.v14.common.CustomParameterOrBuilder> 
        getUrlCustomParametersFieldBuilder() {
      if (urlCustomParametersBuilder_ == null) {
        urlCustomParametersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.ads.googleads.v14.common.CustomParameter, com.google.ads.googleads.v14.common.CustomParameter.Builder, com.google.ads.googleads.v14.common.CustomParameterOrBuilder>(
                urlCustomParameters_,
                ((bitField0_ & 0x00000080) != 0),
                getParentForChildren(),
                isClean());
        urlCustomParameters_ = null;
      }
      return urlCustomParametersBuilder_;
    }

    private java.lang.Object displayUrl_ = "";
    /**
     * <pre>
     * The URL that appears in the ad description for some ad formats.
     * </pre>
     *
     * <code>optional string display_url = 45;</code>
     * @return Whether the displayUrl field is set.
     */
    public boolean hasDisplayUrl() {
      return ((bitField0_ & 0x00000100) != 0);
    }
    /**
     * <pre>
     * The URL that appears in the ad description for some ad formats.
     * </pre>
     *
     * <code>optional string display_url = 45;</code>
     * @return The displayUrl.
     */
    public java.lang.String getDisplayUrl() {
      java.lang.Object ref = displayUrl_;
      if (!(ref instanceof java.lang.String)) {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        displayUrl_ = s;
        return s;
      } else {
        return (java.lang.String) ref;
      }
    }
    /**
     * <pre>
     * The URL that appears in the ad description for some ad formats.
     * </pre>
     *
     * <code>optional string display_url = 45;</code>
     * @return The bytes for displayUrl.
     */
    public com.google.protobuf.ByteString
        getDisplayUrlBytes() {
      java.lang.Object ref = displayUrl_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        displayUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    /**
     * <pre>
     * The URL that appears in the ad description for some ad formats.
     * </pre>
     *
     * <code>optional string display_url = 45;</code>
     * @param value The displayUrl to set.
     * @return This builder for chaining.
     */
    public Builder setDisplayUrl(
        java.lang.String value) {
      if (value == null) { throw new NullPointerException(); }
      displayUrl_ = value;
      bitField0_ |= 0x00000100;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The URL that appears in the ad description for some ad formats.
     * </pre>
     *
     * <code>optional string display_url = 45;</code>
     * @return This builder for chaining.
     */
    public Builder clearDisplayUrl() {
      displayUrl_ = getDefaultInstance().getDisplayUrl();
      bitField0_ = (bitField0_ & ~0x00000100);
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The URL that appears in the ad description for some ad formats.
     * </pre>
     *
     * <code>optional string display_url = 45;</code>
     * @param value The bytes for displayUrl to set.
     * @return This builder for chaining.
     */
    public Builder setDisplayUrlBytes(
        com.google.protobuf.ByteString value) {
      if (value == null) { throw new NullPointerException(); }
      checkByteStringIsUtf8(value);
      displayUrl_ = value;
      bitField0_ |= 0x00000100;
      onChanged();
      return this;
    }

    private int type_ = 0;
    /**
     * <pre>
     * Output only. The type of ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.AdTypeEnum.AdType type = 5 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return The enum numeric value on the wire for type.
     */
    @java.lang.Override public int getTypeValue() {
      return type_;
    }
    /**
     * <pre>
     * Output only. The type of ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.AdTypeEnum.AdType type = 5 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @param value The enum numeric value on the wire for type to set.
     * @return This builder for chaining.
     */
    public Builder setTypeValue(int value) {
      type_ = value;
      bitField0_ |= 0x00000200;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Output only. The type of ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.AdTypeEnum.AdType type = 5 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return The type.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.enums.AdTypeEnum.AdType getType() {
      com.google.ads.googleads.v14.enums.AdTypeEnum.AdType result = com.google.ads.googleads.v14.enums.AdTypeEnum.AdType.forNumber(type_);
      return result == null ? com.google.ads.googleads.v14.enums.AdTypeEnum.AdType.UNRECOGNIZED : result;
    }
    /**
     * <pre>
     * Output only. The type of ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.AdTypeEnum.AdType type = 5 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @param value The type to set.
     * @return This builder for chaining.
     */
    public Builder setType(com.google.ads.googleads.v14.enums.AdTypeEnum.AdType value) {
      if (value == null) {
        throw new NullPointerException();
      }
      bitField0_ |= 0x00000200;
      type_ = value.getNumber();
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Output only. The type of ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.AdTypeEnum.AdType type = 5 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return This builder for chaining.
     */
    public Builder clearType() {
      bitField0_ = (bitField0_ & ~0x00000200);
      type_ = 0;
      onChanged();
      return this;
    }

    private boolean addedByGoogleAds_ ;
    /**
     * <pre>
     * Output only. Indicates if this ad was automatically added by Google Ads and
     * not by a user. For example, this could happen when ads are automatically
     * created as suggestions for new ads based on knowledge of how existing ads
     * are performing.
     * </pre>
     *
     * <code>optional bool added_by_google_ads = 46 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return Whether the addedByGoogleAds field is set.
     */
    @java.lang.Override
    public boolean hasAddedByGoogleAds() {
      return ((bitField0_ & 0x00000400) != 0);
    }
    /**
     * <pre>
     * Output only. Indicates if this ad was automatically added by Google Ads and
     * not by a user. For example, this could happen when ads are automatically
     * created as suggestions for new ads based on knowledge of how existing ads
     * are performing.
     * </pre>
     *
     * <code>optional bool added_by_google_ads = 46 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return The addedByGoogleAds.
     */
    @java.lang.Override
    public boolean getAddedByGoogleAds() {
      return addedByGoogleAds_;
    }
    /**
     * <pre>
     * Output only. Indicates if this ad was automatically added by Google Ads and
     * not by a user. For example, this could happen when ads are automatically
     * created as suggestions for new ads based on knowledge of how existing ads
     * are performing.
     * </pre>
     *
     * <code>optional bool added_by_google_ads = 46 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @param value The addedByGoogleAds to set.
     * @return This builder for chaining.
     */
    public Builder setAddedByGoogleAds(boolean value) {

      addedByGoogleAds_ = value;
      bitField0_ |= 0x00000400;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Output only. Indicates if this ad was automatically added by Google Ads and
     * not by a user. For example, this could happen when ads are automatically
     * created as suggestions for new ads based on knowledge of how existing ads
     * are performing.
     * </pre>
     *
     * <code>optional bool added_by_google_ads = 46 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return This builder for chaining.
     */
    public Builder clearAddedByGoogleAds() {
      bitField0_ = (bitField0_ & ~0x00000400);
      addedByGoogleAds_ = false;
      onChanged();
      return this;
    }

    private int devicePreference_ = 0;
    /**
     * <pre>
     * The device preference for the ad. You can only specify a preference for
     * mobile devices. When this preference is set the ad will be preferred over
     * other ads when being displayed on a mobile device. The ad can still be
     * displayed on other device types, for example, if no other ads are
     * available. If unspecified (no device preference), all devices are targeted.
     * This is only supported by some ad types.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.DeviceEnum.Device device_preference = 20;</code>
     * @return The enum numeric value on the wire for devicePreference.
     */
    @java.lang.Override public int getDevicePreferenceValue() {
      return devicePreference_;
    }
    /**
     * <pre>
     * The device preference for the ad. You can only specify a preference for
     * mobile devices. When this preference is set the ad will be preferred over
     * other ads when being displayed on a mobile device. The ad can still be
     * displayed on other device types, for example, if no other ads are
     * available. If unspecified (no device preference), all devices are targeted.
     * This is only supported by some ad types.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.DeviceEnum.Device device_preference = 20;</code>
     * @param value The enum numeric value on the wire for devicePreference to set.
     * @return This builder for chaining.
     */
    public Builder setDevicePreferenceValue(int value) {
      devicePreference_ = value;
      bitField0_ |= 0x00000800;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The device preference for the ad. You can only specify a preference for
     * mobile devices. When this preference is set the ad will be preferred over
     * other ads when being displayed on a mobile device. The ad can still be
     * displayed on other device types, for example, if no other ads are
     * available. If unspecified (no device preference), all devices are targeted.
     * This is only supported by some ad types.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.DeviceEnum.Device device_preference = 20;</code>
     * @return The devicePreference.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.enums.DeviceEnum.Device getDevicePreference() {
      com.google.ads.googleads.v14.enums.DeviceEnum.Device result = com.google.ads.googleads.v14.enums.DeviceEnum.Device.forNumber(devicePreference_);
      return result == null ? com.google.ads.googleads.v14.enums.DeviceEnum.Device.UNRECOGNIZED : result;
    }
    /**
     * <pre>
     * The device preference for the ad. You can only specify a preference for
     * mobile devices. When this preference is set the ad will be preferred over
     * other ads when being displayed on a mobile device. The ad can still be
     * displayed on other device types, for example, if no other ads are
     * available. If unspecified (no device preference), all devices are targeted.
     * This is only supported by some ad types.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.DeviceEnum.Device device_preference = 20;</code>
     * @param value The devicePreference to set.
     * @return This builder for chaining.
     */
    public Builder setDevicePreference(com.google.ads.googleads.v14.enums.DeviceEnum.Device value) {
      if (value == null) {
        throw new NullPointerException();
      }
      bitField0_ |= 0x00000800;
      devicePreference_ = value.getNumber();
      onChanged();
      return this;
    }
    /**
     * <pre>
     * The device preference for the ad. You can only specify a preference for
     * mobile devices. When this preference is set the ad will be preferred over
     * other ads when being displayed on a mobile device. The ad can still be
     * displayed on other device types, for example, if no other ads are
     * available. If unspecified (no device preference), all devices are targeted.
     * This is only supported by some ad types.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.DeviceEnum.Device device_preference = 20;</code>
     * @return This builder for chaining.
     */
    public Builder clearDevicePreference() {
      bitField0_ = (bitField0_ & ~0x00000800);
      devicePreference_ = 0;
      onChanged();
      return this;
    }

    private java.util.List<com.google.ads.googleads.v14.common.UrlCollection> urlCollections_ =
      java.util.Collections.emptyList();
    private void ensureUrlCollectionsIsMutable() {
      if (!((bitField0_ & 0x00001000) != 0)) {
        urlCollections_ = new java.util.ArrayList<com.google.ads.googleads.v14.common.UrlCollection>(urlCollections_);
        bitField0_ |= 0x00001000;
       }
    }

    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.ads.googleads.v14.common.UrlCollection, com.google.ads.googleads.v14.common.UrlCollection.Builder, com.google.ads.googleads.v14.common.UrlCollectionOrBuilder> urlCollectionsBuilder_;

    /**
     * <pre>
     * Additional URLs for the ad that are tagged with a unique identifier that
     * can be referenced from other fields in the ad.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
     */
    public java.util.List<com.google.ads.googleads.v14.common.UrlCollection> getUrlCollectionsList() {
      if (urlCollectionsBuilder_ == null) {
        return java.util.Collections.unmodifiableList(urlCollections_);
      } else {
        return urlCollectionsBuilder_.getMessageList();
      }
    }
    /**
     * <pre>
     * Additional URLs for the ad that are tagged with a unique identifier that
     * can be referenced from other fields in the ad.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
     */
    public int getUrlCollectionsCount() {
      if (urlCollectionsBuilder_ == null) {
        return urlCollections_.size();
      } else {
        return urlCollectionsBuilder_.getCount();
      }
    }
    /**
     * <pre>
     * Additional URLs for the ad that are tagged with a unique identifier that
     * can be referenced from other fields in the ad.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
     */
    public com.google.ads.googleads.v14.common.UrlCollection getUrlCollections(int index) {
      if (urlCollectionsBuilder_ == null) {
        return urlCollections_.get(index);
      } else {
        return urlCollectionsBuilder_.getMessage(index);
      }
    }
    /**
     * <pre>
     * Additional URLs for the ad that are tagged with a unique identifier that
     * can be referenced from other fields in the ad.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
     */
    public Builder setUrlCollections(
        int index, com.google.ads.googleads.v14.common.UrlCollection value) {
      if (urlCollectionsBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureUrlCollectionsIsMutable();
        urlCollections_.set(index, value);
        onChanged();
      } else {
        urlCollectionsBuilder_.setMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * Additional URLs for the ad that are tagged with a unique identifier that
     * can be referenced from other fields in the ad.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
     */
    public Builder setUrlCollections(
        int index, com.google.ads.googleads.v14.common.UrlCollection.Builder builderForValue) {
      if (urlCollectionsBuilder_ == null) {
        ensureUrlCollectionsIsMutable();
        urlCollections_.set(index, builderForValue.build());
        onChanged();
      } else {
        urlCollectionsBuilder_.setMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Additional URLs for the ad that are tagged with a unique identifier that
     * can be referenced from other fields in the ad.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
     */
    public Builder addUrlCollections(com.google.ads.googleads.v14.common.UrlCollection value) {
      if (urlCollectionsBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureUrlCollectionsIsMutable();
        urlCollections_.add(value);
        onChanged();
      } else {
        urlCollectionsBuilder_.addMessage(value);
      }
      return this;
    }
    /**
     * <pre>
     * Additional URLs for the ad that are tagged with a unique identifier that
     * can be referenced from other fields in the ad.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
     */
    public Builder addUrlCollections(
        int index, com.google.ads.googleads.v14.common.UrlCollection value) {
      if (urlCollectionsBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureUrlCollectionsIsMutable();
        urlCollections_.add(index, value);
        onChanged();
      } else {
        urlCollectionsBuilder_.addMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * Additional URLs for the ad that are tagged with a unique identifier that
     * can be referenced from other fields in the ad.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
     */
    public Builder addUrlCollections(
        com.google.ads.googleads.v14.common.UrlCollection.Builder builderForValue) {
      if (urlCollectionsBuilder_ == null) {
        ensureUrlCollectionsIsMutable();
        urlCollections_.add(builderForValue.build());
        onChanged();
      } else {
        urlCollectionsBuilder_.addMessage(builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Additional URLs for the ad that are tagged with a unique identifier that
     * can be referenced from other fields in the ad.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
     */
    public Builder addUrlCollections(
        int index, com.google.ads.googleads.v14.common.UrlCollection.Builder builderForValue) {
      if (urlCollectionsBuilder_ == null) {
        ensureUrlCollectionsIsMutable();
        urlCollections_.add(index, builderForValue.build());
        onChanged();
      } else {
        urlCollectionsBuilder_.addMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Additional URLs for the ad that are tagged with a unique identifier that
     * can be referenced from other fields in the ad.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
     */
    public Builder addAllUrlCollections(
        java.lang.Iterable<? extends com.google.ads.googleads.v14.common.UrlCollection> values) {
      if (urlCollectionsBuilder_ == null) {
        ensureUrlCollectionsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, urlCollections_);
        onChanged();
      } else {
        urlCollectionsBuilder_.addAllMessages(values);
      }
      return this;
    }
    /**
     * <pre>
     * Additional URLs for the ad that are tagged with a unique identifier that
     * can be referenced from other fields in the ad.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
     */
    public Builder clearUrlCollections() {
      if (urlCollectionsBuilder_ == null) {
        urlCollections_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00001000);
        onChanged();
      } else {
        urlCollectionsBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Additional URLs for the ad that are tagged with a unique identifier that
     * can be referenced from other fields in the ad.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
     */
    public Builder removeUrlCollections(int index) {
      if (urlCollectionsBuilder_ == null) {
        ensureUrlCollectionsIsMutable();
        urlCollections_.remove(index);
        onChanged();
      } else {
        urlCollectionsBuilder_.remove(index);
      }
      return this;
    }
    /**
     * <pre>
     * Additional URLs for the ad that are tagged with a unique identifier that
     * can be referenced from other fields in the ad.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
     */
    public com.google.ads.googleads.v14.common.UrlCollection.Builder getUrlCollectionsBuilder(
        int index) {
      return getUrlCollectionsFieldBuilder().getBuilder(index);
    }
    /**
     * <pre>
     * Additional URLs for the ad that are tagged with a unique identifier that
     * can be referenced from other fields in the ad.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
     */
    public com.google.ads.googleads.v14.common.UrlCollectionOrBuilder getUrlCollectionsOrBuilder(
        int index) {
      if (urlCollectionsBuilder_ == null) {
        return urlCollections_.get(index);  } else {
        return urlCollectionsBuilder_.getMessageOrBuilder(index);
      }
    }
    /**
     * <pre>
     * Additional URLs for the ad that are tagged with a unique identifier that
     * can be referenced from other fields in the ad.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
     */
    public java.util.List<? extends com.google.ads.googleads.v14.common.UrlCollectionOrBuilder> 
         getUrlCollectionsOrBuilderList() {
      if (urlCollectionsBuilder_ != null) {
        return urlCollectionsBuilder_.getMessageOrBuilderList();
      } else {
        return java.util.Collections.unmodifiableList(urlCollections_);
      }
    }
    /**
     * <pre>
     * Additional URLs for the ad that are tagged with a unique identifier that
     * can be referenced from other fields in the ad.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
     */
    public com.google.ads.googleads.v14.common.UrlCollection.Builder addUrlCollectionsBuilder() {
      return getUrlCollectionsFieldBuilder().addBuilder(
          com.google.ads.googleads.v14.common.UrlCollection.getDefaultInstance());
    }
    /**
     * <pre>
     * Additional URLs for the ad that are tagged with a unique identifier that
     * can be referenced from other fields in the ad.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
     */
    public com.google.ads.googleads.v14.common.UrlCollection.Builder addUrlCollectionsBuilder(
        int index) {
      return getUrlCollectionsFieldBuilder().addBuilder(
          index, com.google.ads.googleads.v14.common.UrlCollection.getDefaultInstance());
    }
    /**
     * <pre>
     * Additional URLs for the ad that are tagged with a unique identifier that
     * can be referenced from other fields in the ad.
     * </pre>
     *
     * <code>repeated .google.ads.googleads.v14.common.UrlCollection url_collections = 26;</code>
     */
    public java.util.List<com.google.ads.googleads.v14.common.UrlCollection.Builder> 
         getUrlCollectionsBuilderList() {
      return getUrlCollectionsFieldBuilder().getBuilderList();
    }
    private com.google.protobuf.RepeatedFieldBuilderV3<
        com.google.ads.googleads.v14.common.UrlCollection, com.google.ads.googleads.v14.common.UrlCollection.Builder, com.google.ads.googleads.v14.common.UrlCollectionOrBuilder> 
        getUrlCollectionsFieldBuilder() {
      if (urlCollectionsBuilder_ == null) {
        urlCollectionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.ads.googleads.v14.common.UrlCollection, com.google.ads.googleads.v14.common.UrlCollection.Builder, com.google.ads.googleads.v14.common.UrlCollectionOrBuilder>(
                urlCollections_,
                ((bitField0_ & 0x00001000) != 0),
                getParentForChildren(),
                isClean());
        urlCollections_ = null;
      }
      return urlCollectionsBuilder_;
    }

    private java.lang.Object name_ = "";
    /**
     * <pre>
     * Immutable. The name of the ad. This is only used to be able to identify the
     * ad. It does not need to be unique and does not affect the served ad. The
     * name field is currently only supported for DisplayUploadAd, ImageAd,
     * ShoppingComparisonListingAd and VideoAd.
     * </pre>
     *
     * <code>optional string name = 47 [(.google.api.field_behavior) = IMMUTABLE];</code>
     * @return Whether the name field is set.
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00002000) != 0);
    }
    /**
     * <pre>
     * Immutable. The name of the ad. This is only used to be able to identify the
     * ad. It does not need to be unique and does not affect the served ad. The
     * name field is currently only supported for DisplayUploadAd, ImageAd,
     * ShoppingComparisonListingAd and VideoAd.
     * </pre>
     *
     * <code>optional string name = 47 [(.google.api.field_behavior) = IMMUTABLE];</code>
     * @return The name.
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (!(ref instanceof java.lang.String)) {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      } else {
        return (java.lang.String) ref;
      }
    }
    /**
     * <pre>
     * Immutable. The name of the ad. This is only used to be able to identify the
     * ad. It does not need to be unique and does not affect the served ad. The
     * name field is currently only supported for DisplayUploadAd, ImageAd,
     * ShoppingComparisonListingAd and VideoAd.
     * </pre>
     *
     * <code>optional string name = 47 [(.google.api.field_behavior) = IMMUTABLE];</code>
     * @return The bytes for name.
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    /**
     * <pre>
     * Immutable. The name of the ad. This is only used to be able to identify the
     * ad. It does not need to be unique and does not affect the served ad. The
     * name field is currently only supported for DisplayUploadAd, ImageAd,
     * ShoppingComparisonListingAd and VideoAd.
     * </pre>
     *
     * <code>optional string name = 47 [(.google.api.field_behavior) = IMMUTABLE];</code>
     * @param value The name to set.
     * @return This builder for chaining.
     */
    public Builder setName(
        java.lang.String value) {
      if (value == null) { throw new NullPointerException(); }
      name_ = value;
      bitField0_ |= 0x00002000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Immutable. The name of the ad. This is only used to be able to identify the
     * ad. It does not need to be unique and does not affect the served ad. The
     * name field is currently only supported for DisplayUploadAd, ImageAd,
     * ShoppingComparisonListingAd and VideoAd.
     * </pre>
     *
     * <code>optional string name = 47 [(.google.api.field_behavior) = IMMUTABLE];</code>
     * @return This builder for chaining.
     */
    public Builder clearName() {
      name_ = getDefaultInstance().getName();
      bitField0_ = (bitField0_ & ~0x00002000);
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Immutable. The name of the ad. This is only used to be able to identify the
     * ad. It does not need to be unique and does not affect the served ad. The
     * name field is currently only supported for DisplayUploadAd, ImageAd,
     * ShoppingComparisonListingAd and VideoAd.
     * </pre>
     *
     * <code>optional string name = 47 [(.google.api.field_behavior) = IMMUTABLE];</code>
     * @param value The bytes for name to set.
     * @return This builder for chaining.
     */
    public Builder setNameBytes(
        com.google.protobuf.ByteString value) {
      if (value == null) { throw new NullPointerException(); }
      checkByteStringIsUtf8(value);
      name_ = value;
      bitField0_ |= 0x00002000;
      onChanged();
      return this;
    }

    private int systemManagedResourceSource_ = 0;
    /**
     * <pre>
     * Output only. If this ad is system managed, then this field will indicate
     * the source. This field is read-only.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.SystemManagedResourceSourceEnum.SystemManagedResourceSource system_managed_resource_source = 27 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return The enum numeric value on the wire for systemManagedResourceSource.
     */
    @java.lang.Override public int getSystemManagedResourceSourceValue() {
      return systemManagedResourceSource_;
    }
    /**
     * <pre>
     * Output only. If this ad is system managed, then this field will indicate
     * the source. This field is read-only.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.SystemManagedResourceSourceEnum.SystemManagedResourceSource system_managed_resource_source = 27 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @param value The enum numeric value on the wire for systemManagedResourceSource to set.
     * @return This builder for chaining.
     */
    public Builder setSystemManagedResourceSourceValue(int value) {
      systemManagedResourceSource_ = value;
      bitField0_ |= 0x00004000;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Output only. If this ad is system managed, then this field will indicate
     * the source. This field is read-only.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.SystemManagedResourceSourceEnum.SystemManagedResourceSource system_managed_resource_source = 27 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return The systemManagedResourceSource.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.enums.SystemManagedResourceSourceEnum.SystemManagedResourceSource getSystemManagedResourceSource() {
      com.google.ads.googleads.v14.enums.SystemManagedResourceSourceEnum.SystemManagedResourceSource result = com.google.ads.googleads.v14.enums.SystemManagedResourceSourceEnum.SystemManagedResourceSource.forNumber(systemManagedResourceSource_);
      return result == null ? com.google.ads.googleads.v14.enums.SystemManagedResourceSourceEnum.SystemManagedResourceSource.UNRECOGNIZED : result;
    }
    /**
     * <pre>
     * Output only. If this ad is system managed, then this field will indicate
     * the source. This field is read-only.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.SystemManagedResourceSourceEnum.SystemManagedResourceSource system_managed_resource_source = 27 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @param value The systemManagedResourceSource to set.
     * @return This builder for chaining.
     */
    public Builder setSystemManagedResourceSource(com.google.ads.googleads.v14.enums.SystemManagedResourceSourceEnum.SystemManagedResourceSource value) {
      if (value == null) {
        throw new NullPointerException();
      }
      bitField0_ |= 0x00004000;
      systemManagedResourceSource_ = value.getNumber();
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Output only. If this ad is system managed, then this field will indicate
     * the source. This field is read-only.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.enums.SystemManagedResourceSourceEnum.SystemManagedResourceSource system_managed_resource_source = 27 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return This builder for chaining.
     */
    public Builder clearSystemManagedResourceSource() {
      bitField0_ = (bitField0_ & ~0x00004000);
      systemManagedResourceSource_ = 0;
      onChanged();
      return this;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.TextAdInfo, com.google.ads.googleads.v14.common.TextAdInfo.Builder, com.google.ads.googleads.v14.common.TextAdInfoOrBuilder> textAdBuilder_;
    /**
     * <pre>
     * Immutable. Details pertaining to a text ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.TextAdInfo text_ad = 6 [(.google.api.field_behavior) = IMMUTABLE];</code>
     * @return Whether the textAd field is set.
     */
    @java.lang.Override
    public boolean hasTextAd() {
      return adDataCase_ == 6;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to a text ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.TextAdInfo text_ad = 6 [(.google.api.field_behavior) = IMMUTABLE];</code>
     * @return The textAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.TextAdInfo getTextAd() {
      if (textAdBuilder_ == null) {
        if (adDataCase_ == 6) {
          return (com.google.ads.googleads.v14.common.TextAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.TextAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 6) {
          return textAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.TextAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Immutable. Details pertaining to a text ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.TextAdInfo text_ad = 6 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public Builder setTextAd(com.google.ads.googleads.v14.common.TextAdInfo value) {
      if (textAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        textAdBuilder_.setMessage(value);
      }
      adDataCase_ = 6;
      return this;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to a text ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.TextAdInfo text_ad = 6 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public Builder setTextAd(
        com.google.ads.googleads.v14.common.TextAdInfo.Builder builderForValue) {
      if (textAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        textAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 6;
      return this;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to a text ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.TextAdInfo text_ad = 6 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public Builder mergeTextAd(com.google.ads.googleads.v14.common.TextAdInfo value) {
      if (textAdBuilder_ == null) {
        if (adDataCase_ == 6 &&
            adData_ != com.google.ads.googleads.v14.common.TextAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.TextAdInfo.newBuilder((com.google.ads.googleads.v14.common.TextAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 6) {
          textAdBuilder_.mergeFrom(value);
        } else {
          textAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 6;
      return this;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to a text ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.TextAdInfo text_ad = 6 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public Builder clearTextAd() {
      if (textAdBuilder_ == null) {
        if (adDataCase_ == 6) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 6) {
          adDataCase_ = 0;
          adData_ = null;
        }
        textAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to a text ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.TextAdInfo text_ad = 6 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public com.google.ads.googleads.v14.common.TextAdInfo.Builder getTextAdBuilder() {
      return getTextAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Immutable. Details pertaining to a text ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.TextAdInfo text_ad = 6 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.TextAdInfoOrBuilder getTextAdOrBuilder() {
      if ((adDataCase_ == 6) && (textAdBuilder_ != null)) {
        return textAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 6) {
          return (com.google.ads.googleads.v14.common.TextAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.TextAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Immutable. Details pertaining to a text ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.TextAdInfo text_ad = 6 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.TextAdInfo, com.google.ads.googleads.v14.common.TextAdInfo.Builder, com.google.ads.googleads.v14.common.TextAdInfoOrBuilder> 
        getTextAdFieldBuilder() {
      if (textAdBuilder_ == null) {
        if (!(adDataCase_ == 6)) {
          adData_ = com.google.ads.googleads.v14.common.TextAdInfo.getDefaultInstance();
        }
        textAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.TextAdInfo, com.google.ads.googleads.v14.common.TextAdInfo.Builder, com.google.ads.googleads.v14.common.TextAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.TextAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 6;
      onChanged();
      return textAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.ExpandedTextAdInfo, com.google.ads.googleads.v14.common.ExpandedTextAdInfo.Builder, com.google.ads.googleads.v14.common.ExpandedTextAdInfoOrBuilder> expandedTextAdBuilder_;
    /**
     * <pre>
     * Details pertaining to an expanded text ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ExpandedTextAdInfo expanded_text_ad = 7;</code>
     * @return Whether the expandedTextAd field is set.
     */
    @java.lang.Override
    public boolean hasExpandedTextAd() {
      return adDataCase_ == 7;
    }
    /**
     * <pre>
     * Details pertaining to an expanded text ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ExpandedTextAdInfo expanded_text_ad = 7;</code>
     * @return The expandedTextAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.ExpandedTextAdInfo getExpandedTextAd() {
      if (expandedTextAdBuilder_ == null) {
        if (adDataCase_ == 7) {
          return (com.google.ads.googleads.v14.common.ExpandedTextAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.ExpandedTextAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 7) {
          return expandedTextAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.ExpandedTextAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to an expanded text ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ExpandedTextAdInfo expanded_text_ad = 7;</code>
     */
    public Builder setExpandedTextAd(com.google.ads.googleads.v14.common.ExpandedTextAdInfo value) {
      if (expandedTextAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        expandedTextAdBuilder_.setMessage(value);
      }
      adDataCase_ = 7;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to an expanded text ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ExpandedTextAdInfo expanded_text_ad = 7;</code>
     */
    public Builder setExpandedTextAd(
        com.google.ads.googleads.v14.common.ExpandedTextAdInfo.Builder builderForValue) {
      if (expandedTextAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        expandedTextAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 7;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to an expanded text ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ExpandedTextAdInfo expanded_text_ad = 7;</code>
     */
    public Builder mergeExpandedTextAd(com.google.ads.googleads.v14.common.ExpandedTextAdInfo value) {
      if (expandedTextAdBuilder_ == null) {
        if (adDataCase_ == 7 &&
            adData_ != com.google.ads.googleads.v14.common.ExpandedTextAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.ExpandedTextAdInfo.newBuilder((com.google.ads.googleads.v14.common.ExpandedTextAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 7) {
          expandedTextAdBuilder_.mergeFrom(value);
        } else {
          expandedTextAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 7;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to an expanded text ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ExpandedTextAdInfo expanded_text_ad = 7;</code>
     */
    public Builder clearExpandedTextAd() {
      if (expandedTextAdBuilder_ == null) {
        if (adDataCase_ == 7) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 7) {
          adDataCase_ = 0;
          adData_ = null;
        }
        expandedTextAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to an expanded text ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ExpandedTextAdInfo expanded_text_ad = 7;</code>
     */
    public com.google.ads.googleads.v14.common.ExpandedTextAdInfo.Builder getExpandedTextAdBuilder() {
      return getExpandedTextAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to an expanded text ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ExpandedTextAdInfo expanded_text_ad = 7;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.ExpandedTextAdInfoOrBuilder getExpandedTextAdOrBuilder() {
      if ((adDataCase_ == 7) && (expandedTextAdBuilder_ != null)) {
        return expandedTextAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 7) {
          return (com.google.ads.googleads.v14.common.ExpandedTextAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.ExpandedTextAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to an expanded text ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ExpandedTextAdInfo expanded_text_ad = 7;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.ExpandedTextAdInfo, com.google.ads.googleads.v14.common.ExpandedTextAdInfo.Builder, com.google.ads.googleads.v14.common.ExpandedTextAdInfoOrBuilder> 
        getExpandedTextAdFieldBuilder() {
      if (expandedTextAdBuilder_ == null) {
        if (!(adDataCase_ == 7)) {
          adData_ = com.google.ads.googleads.v14.common.ExpandedTextAdInfo.getDefaultInstance();
        }
        expandedTextAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.ExpandedTextAdInfo, com.google.ads.googleads.v14.common.ExpandedTextAdInfo.Builder, com.google.ads.googleads.v14.common.ExpandedTextAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.ExpandedTextAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 7;
      onChanged();
      return expandedTextAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.CallAdInfo, com.google.ads.googleads.v14.common.CallAdInfo.Builder, com.google.ads.googleads.v14.common.CallAdInfoOrBuilder> callAdBuilder_;
    /**
     * <pre>
     * Details pertaining to a call ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.CallAdInfo call_ad = 49;</code>
     * @return Whether the callAd field is set.
     */
    @java.lang.Override
    public boolean hasCallAd() {
      return adDataCase_ == 49;
    }
    /**
     * <pre>
     * Details pertaining to a call ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.CallAdInfo call_ad = 49;</code>
     * @return The callAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.CallAdInfo getCallAd() {
      if (callAdBuilder_ == null) {
        if (adDataCase_ == 49) {
          return (com.google.ads.googleads.v14.common.CallAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.CallAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 49) {
          return callAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.CallAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a call ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.CallAdInfo call_ad = 49;</code>
     */
    public Builder setCallAd(com.google.ads.googleads.v14.common.CallAdInfo value) {
      if (callAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        callAdBuilder_.setMessage(value);
      }
      adDataCase_ = 49;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a call ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.CallAdInfo call_ad = 49;</code>
     */
    public Builder setCallAd(
        com.google.ads.googleads.v14.common.CallAdInfo.Builder builderForValue) {
      if (callAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        callAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 49;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a call ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.CallAdInfo call_ad = 49;</code>
     */
    public Builder mergeCallAd(com.google.ads.googleads.v14.common.CallAdInfo value) {
      if (callAdBuilder_ == null) {
        if (adDataCase_ == 49 &&
            adData_ != com.google.ads.googleads.v14.common.CallAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.CallAdInfo.newBuilder((com.google.ads.googleads.v14.common.CallAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 49) {
          callAdBuilder_.mergeFrom(value);
        } else {
          callAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 49;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a call ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.CallAdInfo call_ad = 49;</code>
     */
    public Builder clearCallAd() {
      if (callAdBuilder_ == null) {
        if (adDataCase_ == 49) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 49) {
          adDataCase_ = 0;
          adData_ = null;
        }
        callAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a call ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.CallAdInfo call_ad = 49;</code>
     */
    public com.google.ads.googleads.v14.common.CallAdInfo.Builder getCallAdBuilder() {
      return getCallAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to a call ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.CallAdInfo call_ad = 49;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.CallAdInfoOrBuilder getCallAdOrBuilder() {
      if ((adDataCase_ == 49) && (callAdBuilder_ != null)) {
        return callAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 49) {
          return (com.google.ads.googleads.v14.common.CallAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.CallAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a call ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.CallAdInfo call_ad = 49;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.CallAdInfo, com.google.ads.googleads.v14.common.CallAdInfo.Builder, com.google.ads.googleads.v14.common.CallAdInfoOrBuilder> 
        getCallAdFieldBuilder() {
      if (callAdBuilder_ == null) {
        if (!(adDataCase_ == 49)) {
          adData_ = com.google.ads.googleads.v14.common.CallAdInfo.getDefaultInstance();
        }
        callAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.CallAdInfo, com.google.ads.googleads.v14.common.CallAdInfo.Builder, com.google.ads.googleads.v14.common.CallAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.CallAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 49;
      onChanged();
      return callAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo, com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo.Builder, com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfoOrBuilder> expandedDynamicSearchAdBuilder_;
    /**
     * <pre>
     * Immutable. Details pertaining to an Expanded Dynamic Search Ad.
     * This type of ad has its headline, final URLs, and display URL
     * auto-generated at serving time according to domain name specific
     * information provided by `dynamic_search_ads_setting` linked at the
     * campaign level.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo expanded_dynamic_search_ad = 14 [(.google.api.field_behavior) = IMMUTABLE];</code>
     * @return Whether the expandedDynamicSearchAd field is set.
     */
    @java.lang.Override
    public boolean hasExpandedDynamicSearchAd() {
      return adDataCase_ == 14;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to an Expanded Dynamic Search Ad.
     * This type of ad has its headline, final URLs, and display URL
     * auto-generated at serving time according to domain name specific
     * information provided by `dynamic_search_ads_setting` linked at the
     * campaign level.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo expanded_dynamic_search_ad = 14 [(.google.api.field_behavior) = IMMUTABLE];</code>
     * @return The expandedDynamicSearchAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo getExpandedDynamicSearchAd() {
      if (expandedDynamicSearchAdBuilder_ == null) {
        if (adDataCase_ == 14) {
          return (com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 14) {
          return expandedDynamicSearchAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Immutable. Details pertaining to an Expanded Dynamic Search Ad.
     * This type of ad has its headline, final URLs, and display URL
     * auto-generated at serving time according to domain name specific
     * information provided by `dynamic_search_ads_setting` linked at the
     * campaign level.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo expanded_dynamic_search_ad = 14 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public Builder setExpandedDynamicSearchAd(com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo value) {
      if (expandedDynamicSearchAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        expandedDynamicSearchAdBuilder_.setMessage(value);
      }
      adDataCase_ = 14;
      return this;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to an Expanded Dynamic Search Ad.
     * This type of ad has its headline, final URLs, and display URL
     * auto-generated at serving time according to domain name specific
     * information provided by `dynamic_search_ads_setting` linked at the
     * campaign level.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo expanded_dynamic_search_ad = 14 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public Builder setExpandedDynamicSearchAd(
        com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo.Builder builderForValue) {
      if (expandedDynamicSearchAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        expandedDynamicSearchAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 14;
      return this;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to an Expanded Dynamic Search Ad.
     * This type of ad has its headline, final URLs, and display URL
     * auto-generated at serving time according to domain name specific
     * information provided by `dynamic_search_ads_setting` linked at the
     * campaign level.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo expanded_dynamic_search_ad = 14 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public Builder mergeExpandedDynamicSearchAd(com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo value) {
      if (expandedDynamicSearchAdBuilder_ == null) {
        if (adDataCase_ == 14 &&
            adData_ != com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo.newBuilder((com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 14) {
          expandedDynamicSearchAdBuilder_.mergeFrom(value);
        } else {
          expandedDynamicSearchAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 14;
      return this;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to an Expanded Dynamic Search Ad.
     * This type of ad has its headline, final URLs, and display URL
     * auto-generated at serving time according to domain name specific
     * information provided by `dynamic_search_ads_setting` linked at the
     * campaign level.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo expanded_dynamic_search_ad = 14 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public Builder clearExpandedDynamicSearchAd() {
      if (expandedDynamicSearchAdBuilder_ == null) {
        if (adDataCase_ == 14) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 14) {
          adDataCase_ = 0;
          adData_ = null;
        }
        expandedDynamicSearchAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to an Expanded Dynamic Search Ad.
     * This type of ad has its headline, final URLs, and display URL
     * auto-generated at serving time according to domain name specific
     * information provided by `dynamic_search_ads_setting` linked at the
     * campaign level.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo expanded_dynamic_search_ad = 14 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo.Builder getExpandedDynamicSearchAdBuilder() {
      return getExpandedDynamicSearchAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Immutable. Details pertaining to an Expanded Dynamic Search Ad.
     * This type of ad has its headline, final URLs, and display URL
     * auto-generated at serving time according to domain name specific
     * information provided by `dynamic_search_ads_setting` linked at the
     * campaign level.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo expanded_dynamic_search_ad = 14 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfoOrBuilder getExpandedDynamicSearchAdOrBuilder() {
      if ((adDataCase_ == 14) && (expandedDynamicSearchAdBuilder_ != null)) {
        return expandedDynamicSearchAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 14) {
          return (com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Immutable. Details pertaining to an Expanded Dynamic Search Ad.
     * This type of ad has its headline, final URLs, and display URL
     * auto-generated at serving time according to domain name specific
     * information provided by `dynamic_search_ads_setting` linked at the
     * campaign level.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo expanded_dynamic_search_ad = 14 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo, com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo.Builder, com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfoOrBuilder> 
        getExpandedDynamicSearchAdFieldBuilder() {
      if (expandedDynamicSearchAdBuilder_ == null) {
        if (!(adDataCase_ == 14)) {
          adData_ = com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo.getDefaultInstance();
        }
        expandedDynamicSearchAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo, com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo.Builder, com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.ExpandedDynamicSearchAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 14;
      onChanged();
      return expandedDynamicSearchAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.HotelAdInfo, com.google.ads.googleads.v14.common.HotelAdInfo.Builder, com.google.ads.googleads.v14.common.HotelAdInfoOrBuilder> hotelAdBuilder_;
    /**
     * <pre>
     * Details pertaining to a hotel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.HotelAdInfo hotel_ad = 15;</code>
     * @return Whether the hotelAd field is set.
     */
    @java.lang.Override
    public boolean hasHotelAd() {
      return adDataCase_ == 15;
    }
    /**
     * <pre>
     * Details pertaining to a hotel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.HotelAdInfo hotel_ad = 15;</code>
     * @return The hotelAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.HotelAdInfo getHotelAd() {
      if (hotelAdBuilder_ == null) {
        if (adDataCase_ == 15) {
          return (com.google.ads.googleads.v14.common.HotelAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.HotelAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 15) {
          return hotelAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.HotelAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a hotel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.HotelAdInfo hotel_ad = 15;</code>
     */
    public Builder setHotelAd(com.google.ads.googleads.v14.common.HotelAdInfo value) {
      if (hotelAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        hotelAdBuilder_.setMessage(value);
      }
      adDataCase_ = 15;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a hotel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.HotelAdInfo hotel_ad = 15;</code>
     */
    public Builder setHotelAd(
        com.google.ads.googleads.v14.common.HotelAdInfo.Builder builderForValue) {
      if (hotelAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        hotelAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 15;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a hotel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.HotelAdInfo hotel_ad = 15;</code>
     */
    public Builder mergeHotelAd(com.google.ads.googleads.v14.common.HotelAdInfo value) {
      if (hotelAdBuilder_ == null) {
        if (adDataCase_ == 15 &&
            adData_ != com.google.ads.googleads.v14.common.HotelAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.HotelAdInfo.newBuilder((com.google.ads.googleads.v14.common.HotelAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 15) {
          hotelAdBuilder_.mergeFrom(value);
        } else {
          hotelAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 15;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a hotel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.HotelAdInfo hotel_ad = 15;</code>
     */
    public Builder clearHotelAd() {
      if (hotelAdBuilder_ == null) {
        if (adDataCase_ == 15) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 15) {
          adDataCase_ = 0;
          adData_ = null;
        }
        hotelAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a hotel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.HotelAdInfo hotel_ad = 15;</code>
     */
    public com.google.ads.googleads.v14.common.HotelAdInfo.Builder getHotelAdBuilder() {
      return getHotelAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to a hotel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.HotelAdInfo hotel_ad = 15;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.HotelAdInfoOrBuilder getHotelAdOrBuilder() {
      if ((adDataCase_ == 15) && (hotelAdBuilder_ != null)) {
        return hotelAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 15) {
          return (com.google.ads.googleads.v14.common.HotelAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.HotelAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a hotel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.HotelAdInfo hotel_ad = 15;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.HotelAdInfo, com.google.ads.googleads.v14.common.HotelAdInfo.Builder, com.google.ads.googleads.v14.common.HotelAdInfoOrBuilder> 
        getHotelAdFieldBuilder() {
      if (hotelAdBuilder_ == null) {
        if (!(adDataCase_ == 15)) {
          adData_ = com.google.ads.googleads.v14.common.HotelAdInfo.getDefaultInstance();
        }
        hotelAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.HotelAdInfo, com.google.ads.googleads.v14.common.HotelAdInfo.Builder, com.google.ads.googleads.v14.common.HotelAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.HotelAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 15;
      onChanged();
      return hotelAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.ShoppingSmartAdInfo, com.google.ads.googleads.v14.common.ShoppingSmartAdInfo.Builder, com.google.ads.googleads.v14.common.ShoppingSmartAdInfoOrBuilder> shoppingSmartAdBuilder_;
    /**
     * <pre>
     * Details pertaining to a Smart Shopping ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingSmartAdInfo shopping_smart_ad = 17;</code>
     * @return Whether the shoppingSmartAd field is set.
     */
    @java.lang.Override
    public boolean hasShoppingSmartAd() {
      return adDataCase_ == 17;
    }
    /**
     * <pre>
     * Details pertaining to a Smart Shopping ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingSmartAdInfo shopping_smart_ad = 17;</code>
     * @return The shoppingSmartAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.ShoppingSmartAdInfo getShoppingSmartAd() {
      if (shoppingSmartAdBuilder_ == null) {
        if (adDataCase_ == 17) {
          return (com.google.ads.googleads.v14.common.ShoppingSmartAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.ShoppingSmartAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 17) {
          return shoppingSmartAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.ShoppingSmartAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a Smart Shopping ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingSmartAdInfo shopping_smart_ad = 17;</code>
     */
    public Builder setShoppingSmartAd(com.google.ads.googleads.v14.common.ShoppingSmartAdInfo value) {
      if (shoppingSmartAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        shoppingSmartAdBuilder_.setMessage(value);
      }
      adDataCase_ = 17;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Smart Shopping ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingSmartAdInfo shopping_smart_ad = 17;</code>
     */
    public Builder setShoppingSmartAd(
        com.google.ads.googleads.v14.common.ShoppingSmartAdInfo.Builder builderForValue) {
      if (shoppingSmartAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        shoppingSmartAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 17;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Smart Shopping ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingSmartAdInfo shopping_smart_ad = 17;</code>
     */
    public Builder mergeShoppingSmartAd(com.google.ads.googleads.v14.common.ShoppingSmartAdInfo value) {
      if (shoppingSmartAdBuilder_ == null) {
        if (adDataCase_ == 17 &&
            adData_ != com.google.ads.googleads.v14.common.ShoppingSmartAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.ShoppingSmartAdInfo.newBuilder((com.google.ads.googleads.v14.common.ShoppingSmartAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 17) {
          shoppingSmartAdBuilder_.mergeFrom(value);
        } else {
          shoppingSmartAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 17;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Smart Shopping ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingSmartAdInfo shopping_smart_ad = 17;</code>
     */
    public Builder clearShoppingSmartAd() {
      if (shoppingSmartAdBuilder_ == null) {
        if (adDataCase_ == 17) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 17) {
          adDataCase_ = 0;
          adData_ = null;
        }
        shoppingSmartAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Smart Shopping ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingSmartAdInfo shopping_smart_ad = 17;</code>
     */
    public com.google.ads.googleads.v14.common.ShoppingSmartAdInfo.Builder getShoppingSmartAdBuilder() {
      return getShoppingSmartAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to a Smart Shopping ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingSmartAdInfo shopping_smart_ad = 17;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.ShoppingSmartAdInfoOrBuilder getShoppingSmartAdOrBuilder() {
      if ((adDataCase_ == 17) && (shoppingSmartAdBuilder_ != null)) {
        return shoppingSmartAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 17) {
          return (com.google.ads.googleads.v14.common.ShoppingSmartAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.ShoppingSmartAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a Smart Shopping ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingSmartAdInfo shopping_smart_ad = 17;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.ShoppingSmartAdInfo, com.google.ads.googleads.v14.common.ShoppingSmartAdInfo.Builder, com.google.ads.googleads.v14.common.ShoppingSmartAdInfoOrBuilder> 
        getShoppingSmartAdFieldBuilder() {
      if (shoppingSmartAdBuilder_ == null) {
        if (!(adDataCase_ == 17)) {
          adData_ = com.google.ads.googleads.v14.common.ShoppingSmartAdInfo.getDefaultInstance();
        }
        shoppingSmartAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.ShoppingSmartAdInfo, com.google.ads.googleads.v14.common.ShoppingSmartAdInfo.Builder, com.google.ads.googleads.v14.common.ShoppingSmartAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.ShoppingSmartAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 17;
      onChanged();
      return shoppingSmartAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.ShoppingProductAdInfo, com.google.ads.googleads.v14.common.ShoppingProductAdInfo.Builder, com.google.ads.googleads.v14.common.ShoppingProductAdInfoOrBuilder> shoppingProductAdBuilder_;
    /**
     * <pre>
     * Details pertaining to a Shopping product ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingProductAdInfo shopping_product_ad = 18;</code>
     * @return Whether the shoppingProductAd field is set.
     */
    @java.lang.Override
    public boolean hasShoppingProductAd() {
      return adDataCase_ == 18;
    }
    /**
     * <pre>
     * Details pertaining to a Shopping product ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingProductAdInfo shopping_product_ad = 18;</code>
     * @return The shoppingProductAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.ShoppingProductAdInfo getShoppingProductAd() {
      if (shoppingProductAdBuilder_ == null) {
        if (adDataCase_ == 18) {
          return (com.google.ads.googleads.v14.common.ShoppingProductAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.ShoppingProductAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 18) {
          return shoppingProductAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.ShoppingProductAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a Shopping product ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingProductAdInfo shopping_product_ad = 18;</code>
     */
    public Builder setShoppingProductAd(com.google.ads.googleads.v14.common.ShoppingProductAdInfo value) {
      if (shoppingProductAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        shoppingProductAdBuilder_.setMessage(value);
      }
      adDataCase_ = 18;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Shopping product ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingProductAdInfo shopping_product_ad = 18;</code>
     */
    public Builder setShoppingProductAd(
        com.google.ads.googleads.v14.common.ShoppingProductAdInfo.Builder builderForValue) {
      if (shoppingProductAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        shoppingProductAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 18;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Shopping product ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingProductAdInfo shopping_product_ad = 18;</code>
     */
    public Builder mergeShoppingProductAd(com.google.ads.googleads.v14.common.ShoppingProductAdInfo value) {
      if (shoppingProductAdBuilder_ == null) {
        if (adDataCase_ == 18 &&
            adData_ != com.google.ads.googleads.v14.common.ShoppingProductAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.ShoppingProductAdInfo.newBuilder((com.google.ads.googleads.v14.common.ShoppingProductAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 18) {
          shoppingProductAdBuilder_.mergeFrom(value);
        } else {
          shoppingProductAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 18;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Shopping product ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingProductAdInfo shopping_product_ad = 18;</code>
     */
    public Builder clearShoppingProductAd() {
      if (shoppingProductAdBuilder_ == null) {
        if (adDataCase_ == 18) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 18) {
          adDataCase_ = 0;
          adData_ = null;
        }
        shoppingProductAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Shopping product ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingProductAdInfo shopping_product_ad = 18;</code>
     */
    public com.google.ads.googleads.v14.common.ShoppingProductAdInfo.Builder getShoppingProductAdBuilder() {
      return getShoppingProductAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to a Shopping product ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingProductAdInfo shopping_product_ad = 18;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.ShoppingProductAdInfoOrBuilder getShoppingProductAdOrBuilder() {
      if ((adDataCase_ == 18) && (shoppingProductAdBuilder_ != null)) {
        return shoppingProductAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 18) {
          return (com.google.ads.googleads.v14.common.ShoppingProductAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.ShoppingProductAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a Shopping product ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingProductAdInfo shopping_product_ad = 18;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.ShoppingProductAdInfo, com.google.ads.googleads.v14.common.ShoppingProductAdInfo.Builder, com.google.ads.googleads.v14.common.ShoppingProductAdInfoOrBuilder> 
        getShoppingProductAdFieldBuilder() {
      if (shoppingProductAdBuilder_ == null) {
        if (!(adDataCase_ == 18)) {
          adData_ = com.google.ads.googleads.v14.common.ShoppingProductAdInfo.getDefaultInstance();
        }
        shoppingProductAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.ShoppingProductAdInfo, com.google.ads.googleads.v14.common.ShoppingProductAdInfo.Builder, com.google.ads.googleads.v14.common.ShoppingProductAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.ShoppingProductAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 18;
      onChanged();
      return shoppingProductAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.ImageAdInfo, com.google.ads.googleads.v14.common.ImageAdInfo.Builder, com.google.ads.googleads.v14.common.ImageAdInfoOrBuilder> imageAdBuilder_;
    /**
     * <pre>
     * Immutable. Details pertaining to an Image ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ImageAdInfo image_ad = 22 [(.google.api.field_behavior) = IMMUTABLE];</code>
     * @return Whether the imageAd field is set.
     */
    @java.lang.Override
    public boolean hasImageAd() {
      return adDataCase_ == 22;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to an Image ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ImageAdInfo image_ad = 22 [(.google.api.field_behavior) = IMMUTABLE];</code>
     * @return The imageAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.ImageAdInfo getImageAd() {
      if (imageAdBuilder_ == null) {
        if (adDataCase_ == 22) {
          return (com.google.ads.googleads.v14.common.ImageAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.ImageAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 22) {
          return imageAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.ImageAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Immutable. Details pertaining to an Image ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ImageAdInfo image_ad = 22 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public Builder setImageAd(com.google.ads.googleads.v14.common.ImageAdInfo value) {
      if (imageAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        imageAdBuilder_.setMessage(value);
      }
      adDataCase_ = 22;
      return this;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to an Image ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ImageAdInfo image_ad = 22 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public Builder setImageAd(
        com.google.ads.googleads.v14.common.ImageAdInfo.Builder builderForValue) {
      if (imageAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        imageAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 22;
      return this;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to an Image ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ImageAdInfo image_ad = 22 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public Builder mergeImageAd(com.google.ads.googleads.v14.common.ImageAdInfo value) {
      if (imageAdBuilder_ == null) {
        if (adDataCase_ == 22 &&
            adData_ != com.google.ads.googleads.v14.common.ImageAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.ImageAdInfo.newBuilder((com.google.ads.googleads.v14.common.ImageAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 22) {
          imageAdBuilder_.mergeFrom(value);
        } else {
          imageAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 22;
      return this;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to an Image ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ImageAdInfo image_ad = 22 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public Builder clearImageAd() {
      if (imageAdBuilder_ == null) {
        if (adDataCase_ == 22) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 22) {
          adDataCase_ = 0;
          adData_ = null;
        }
        imageAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to an Image ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ImageAdInfo image_ad = 22 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public com.google.ads.googleads.v14.common.ImageAdInfo.Builder getImageAdBuilder() {
      return getImageAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Immutable. Details pertaining to an Image ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ImageAdInfo image_ad = 22 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.ImageAdInfoOrBuilder getImageAdOrBuilder() {
      if ((adDataCase_ == 22) && (imageAdBuilder_ != null)) {
        return imageAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 22) {
          return (com.google.ads.googleads.v14.common.ImageAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.ImageAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Immutable. Details pertaining to an Image ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ImageAdInfo image_ad = 22 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.ImageAdInfo, com.google.ads.googleads.v14.common.ImageAdInfo.Builder, com.google.ads.googleads.v14.common.ImageAdInfoOrBuilder> 
        getImageAdFieldBuilder() {
      if (imageAdBuilder_ == null) {
        if (!(adDataCase_ == 22)) {
          adData_ = com.google.ads.googleads.v14.common.ImageAdInfo.getDefaultInstance();
        }
        imageAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.ImageAdInfo, com.google.ads.googleads.v14.common.ImageAdInfo.Builder, com.google.ads.googleads.v14.common.ImageAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.ImageAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 22;
      onChanged();
      return imageAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.VideoAdInfo, com.google.ads.googleads.v14.common.VideoAdInfo.Builder, com.google.ads.googleads.v14.common.VideoAdInfoOrBuilder> videoAdBuilder_;
    /**
     * <pre>
     * Details pertaining to a Video ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.VideoAdInfo video_ad = 24;</code>
     * @return Whether the videoAd field is set.
     */
    @java.lang.Override
    public boolean hasVideoAd() {
      return adDataCase_ == 24;
    }
    /**
     * <pre>
     * Details pertaining to a Video ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.VideoAdInfo video_ad = 24;</code>
     * @return The videoAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.VideoAdInfo getVideoAd() {
      if (videoAdBuilder_ == null) {
        if (adDataCase_ == 24) {
          return (com.google.ads.googleads.v14.common.VideoAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.VideoAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 24) {
          return videoAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.VideoAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a Video ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.VideoAdInfo video_ad = 24;</code>
     */
    public Builder setVideoAd(com.google.ads.googleads.v14.common.VideoAdInfo value) {
      if (videoAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        videoAdBuilder_.setMessage(value);
      }
      adDataCase_ = 24;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Video ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.VideoAdInfo video_ad = 24;</code>
     */
    public Builder setVideoAd(
        com.google.ads.googleads.v14.common.VideoAdInfo.Builder builderForValue) {
      if (videoAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        videoAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 24;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Video ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.VideoAdInfo video_ad = 24;</code>
     */
    public Builder mergeVideoAd(com.google.ads.googleads.v14.common.VideoAdInfo value) {
      if (videoAdBuilder_ == null) {
        if (adDataCase_ == 24 &&
            adData_ != com.google.ads.googleads.v14.common.VideoAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.VideoAdInfo.newBuilder((com.google.ads.googleads.v14.common.VideoAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 24) {
          videoAdBuilder_.mergeFrom(value);
        } else {
          videoAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 24;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Video ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.VideoAdInfo video_ad = 24;</code>
     */
    public Builder clearVideoAd() {
      if (videoAdBuilder_ == null) {
        if (adDataCase_ == 24) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 24) {
          adDataCase_ = 0;
          adData_ = null;
        }
        videoAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Video ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.VideoAdInfo video_ad = 24;</code>
     */
    public com.google.ads.googleads.v14.common.VideoAdInfo.Builder getVideoAdBuilder() {
      return getVideoAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to a Video ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.VideoAdInfo video_ad = 24;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.VideoAdInfoOrBuilder getVideoAdOrBuilder() {
      if ((adDataCase_ == 24) && (videoAdBuilder_ != null)) {
        return videoAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 24) {
          return (com.google.ads.googleads.v14.common.VideoAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.VideoAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a Video ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.VideoAdInfo video_ad = 24;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.VideoAdInfo, com.google.ads.googleads.v14.common.VideoAdInfo.Builder, com.google.ads.googleads.v14.common.VideoAdInfoOrBuilder> 
        getVideoAdFieldBuilder() {
      if (videoAdBuilder_ == null) {
        if (!(adDataCase_ == 24)) {
          adData_ = com.google.ads.googleads.v14.common.VideoAdInfo.getDefaultInstance();
        }
        videoAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.VideoAdInfo, com.google.ads.googleads.v14.common.VideoAdInfo.Builder, com.google.ads.googleads.v14.common.VideoAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.VideoAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 24;
      onChanged();
      return videoAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.VideoResponsiveAdInfo, com.google.ads.googleads.v14.common.VideoResponsiveAdInfo.Builder, com.google.ads.googleads.v14.common.VideoResponsiveAdInfoOrBuilder> videoResponsiveAdBuilder_;
    /**
     * <pre>
     * Details pertaining to a Video responsive ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.VideoResponsiveAdInfo video_responsive_ad = 39;</code>
     * @return Whether the videoResponsiveAd field is set.
     */
    @java.lang.Override
    public boolean hasVideoResponsiveAd() {
      return adDataCase_ == 39;
    }
    /**
     * <pre>
     * Details pertaining to a Video responsive ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.VideoResponsiveAdInfo video_responsive_ad = 39;</code>
     * @return The videoResponsiveAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.VideoResponsiveAdInfo getVideoResponsiveAd() {
      if (videoResponsiveAdBuilder_ == null) {
        if (adDataCase_ == 39) {
          return (com.google.ads.googleads.v14.common.VideoResponsiveAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.VideoResponsiveAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 39) {
          return videoResponsiveAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.VideoResponsiveAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a Video responsive ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.VideoResponsiveAdInfo video_responsive_ad = 39;</code>
     */
    public Builder setVideoResponsiveAd(com.google.ads.googleads.v14.common.VideoResponsiveAdInfo value) {
      if (videoResponsiveAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        videoResponsiveAdBuilder_.setMessage(value);
      }
      adDataCase_ = 39;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Video responsive ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.VideoResponsiveAdInfo video_responsive_ad = 39;</code>
     */
    public Builder setVideoResponsiveAd(
        com.google.ads.googleads.v14.common.VideoResponsiveAdInfo.Builder builderForValue) {
      if (videoResponsiveAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        videoResponsiveAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 39;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Video responsive ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.VideoResponsiveAdInfo video_responsive_ad = 39;</code>
     */
    public Builder mergeVideoResponsiveAd(com.google.ads.googleads.v14.common.VideoResponsiveAdInfo value) {
      if (videoResponsiveAdBuilder_ == null) {
        if (adDataCase_ == 39 &&
            adData_ != com.google.ads.googleads.v14.common.VideoResponsiveAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.VideoResponsiveAdInfo.newBuilder((com.google.ads.googleads.v14.common.VideoResponsiveAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 39) {
          videoResponsiveAdBuilder_.mergeFrom(value);
        } else {
          videoResponsiveAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 39;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Video responsive ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.VideoResponsiveAdInfo video_responsive_ad = 39;</code>
     */
    public Builder clearVideoResponsiveAd() {
      if (videoResponsiveAdBuilder_ == null) {
        if (adDataCase_ == 39) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 39) {
          adDataCase_ = 0;
          adData_ = null;
        }
        videoResponsiveAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Video responsive ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.VideoResponsiveAdInfo video_responsive_ad = 39;</code>
     */
    public com.google.ads.googleads.v14.common.VideoResponsiveAdInfo.Builder getVideoResponsiveAdBuilder() {
      return getVideoResponsiveAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to a Video responsive ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.VideoResponsiveAdInfo video_responsive_ad = 39;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.VideoResponsiveAdInfoOrBuilder getVideoResponsiveAdOrBuilder() {
      if ((adDataCase_ == 39) && (videoResponsiveAdBuilder_ != null)) {
        return videoResponsiveAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 39) {
          return (com.google.ads.googleads.v14.common.VideoResponsiveAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.VideoResponsiveAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a Video responsive ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.VideoResponsiveAdInfo video_responsive_ad = 39;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.VideoResponsiveAdInfo, com.google.ads.googleads.v14.common.VideoResponsiveAdInfo.Builder, com.google.ads.googleads.v14.common.VideoResponsiveAdInfoOrBuilder> 
        getVideoResponsiveAdFieldBuilder() {
      if (videoResponsiveAdBuilder_ == null) {
        if (!(adDataCase_ == 39)) {
          adData_ = com.google.ads.googleads.v14.common.VideoResponsiveAdInfo.getDefaultInstance();
        }
        videoResponsiveAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.VideoResponsiveAdInfo, com.google.ads.googleads.v14.common.VideoResponsiveAdInfo.Builder, com.google.ads.googleads.v14.common.VideoResponsiveAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.VideoResponsiveAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 39;
      onChanged();
      return videoResponsiveAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo, com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo.Builder, com.google.ads.googleads.v14.common.ResponsiveSearchAdInfoOrBuilder> responsiveSearchAdBuilder_;
    /**
     * <pre>
     * Details pertaining to a responsive search ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ResponsiveSearchAdInfo responsive_search_ad = 25;</code>
     * @return Whether the responsiveSearchAd field is set.
     */
    @java.lang.Override
    public boolean hasResponsiveSearchAd() {
      return adDataCase_ == 25;
    }
    /**
     * <pre>
     * Details pertaining to a responsive search ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ResponsiveSearchAdInfo responsive_search_ad = 25;</code>
     * @return The responsiveSearchAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo getResponsiveSearchAd() {
      if (responsiveSearchAdBuilder_ == null) {
        if (adDataCase_ == 25) {
          return (com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 25) {
          return responsiveSearchAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a responsive search ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ResponsiveSearchAdInfo responsive_search_ad = 25;</code>
     */
    public Builder setResponsiveSearchAd(com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo value) {
      if (responsiveSearchAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        responsiveSearchAdBuilder_.setMessage(value);
      }
      adDataCase_ = 25;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a responsive search ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ResponsiveSearchAdInfo responsive_search_ad = 25;</code>
     */
    public Builder setResponsiveSearchAd(
        com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo.Builder builderForValue) {
      if (responsiveSearchAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        responsiveSearchAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 25;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a responsive search ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ResponsiveSearchAdInfo responsive_search_ad = 25;</code>
     */
    public Builder mergeResponsiveSearchAd(com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo value) {
      if (responsiveSearchAdBuilder_ == null) {
        if (adDataCase_ == 25 &&
            adData_ != com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo.newBuilder((com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 25) {
          responsiveSearchAdBuilder_.mergeFrom(value);
        } else {
          responsiveSearchAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 25;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a responsive search ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ResponsiveSearchAdInfo responsive_search_ad = 25;</code>
     */
    public Builder clearResponsiveSearchAd() {
      if (responsiveSearchAdBuilder_ == null) {
        if (adDataCase_ == 25) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 25) {
          adDataCase_ = 0;
          adData_ = null;
        }
        responsiveSearchAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a responsive search ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ResponsiveSearchAdInfo responsive_search_ad = 25;</code>
     */
    public com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo.Builder getResponsiveSearchAdBuilder() {
      return getResponsiveSearchAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to a responsive search ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ResponsiveSearchAdInfo responsive_search_ad = 25;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.ResponsiveSearchAdInfoOrBuilder getResponsiveSearchAdOrBuilder() {
      if ((adDataCase_ == 25) && (responsiveSearchAdBuilder_ != null)) {
        return responsiveSearchAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 25) {
          return (com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a responsive search ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ResponsiveSearchAdInfo responsive_search_ad = 25;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo, com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo.Builder, com.google.ads.googleads.v14.common.ResponsiveSearchAdInfoOrBuilder> 
        getResponsiveSearchAdFieldBuilder() {
      if (responsiveSearchAdBuilder_ == null) {
        if (!(adDataCase_ == 25)) {
          adData_ = com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo.getDefaultInstance();
        }
        responsiveSearchAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo, com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo.Builder, com.google.ads.googleads.v14.common.ResponsiveSearchAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.ResponsiveSearchAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 25;
      onChanged();
      return responsiveSearchAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo, com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo.Builder, com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfoOrBuilder> legacyResponsiveDisplayAdBuilder_;
    /**
     * <pre>
     * Details pertaining to a legacy responsive display ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo legacy_responsive_display_ad = 28;</code>
     * @return Whether the legacyResponsiveDisplayAd field is set.
     */
    @java.lang.Override
    public boolean hasLegacyResponsiveDisplayAd() {
      return adDataCase_ == 28;
    }
    /**
     * <pre>
     * Details pertaining to a legacy responsive display ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo legacy_responsive_display_ad = 28;</code>
     * @return The legacyResponsiveDisplayAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo getLegacyResponsiveDisplayAd() {
      if (legacyResponsiveDisplayAdBuilder_ == null) {
        if (adDataCase_ == 28) {
          return (com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 28) {
          return legacyResponsiveDisplayAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a legacy responsive display ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo legacy_responsive_display_ad = 28;</code>
     */
    public Builder setLegacyResponsiveDisplayAd(com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo value) {
      if (legacyResponsiveDisplayAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        legacyResponsiveDisplayAdBuilder_.setMessage(value);
      }
      adDataCase_ = 28;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a legacy responsive display ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo legacy_responsive_display_ad = 28;</code>
     */
    public Builder setLegacyResponsiveDisplayAd(
        com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo.Builder builderForValue) {
      if (legacyResponsiveDisplayAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        legacyResponsiveDisplayAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 28;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a legacy responsive display ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo legacy_responsive_display_ad = 28;</code>
     */
    public Builder mergeLegacyResponsiveDisplayAd(com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo value) {
      if (legacyResponsiveDisplayAdBuilder_ == null) {
        if (adDataCase_ == 28 &&
            adData_ != com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo.newBuilder((com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 28) {
          legacyResponsiveDisplayAdBuilder_.mergeFrom(value);
        } else {
          legacyResponsiveDisplayAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 28;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a legacy responsive display ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo legacy_responsive_display_ad = 28;</code>
     */
    public Builder clearLegacyResponsiveDisplayAd() {
      if (legacyResponsiveDisplayAdBuilder_ == null) {
        if (adDataCase_ == 28) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 28) {
          adDataCase_ = 0;
          adData_ = null;
        }
        legacyResponsiveDisplayAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a legacy responsive display ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo legacy_responsive_display_ad = 28;</code>
     */
    public com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo.Builder getLegacyResponsiveDisplayAdBuilder() {
      return getLegacyResponsiveDisplayAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to a legacy responsive display ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo legacy_responsive_display_ad = 28;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfoOrBuilder getLegacyResponsiveDisplayAdOrBuilder() {
      if ((adDataCase_ == 28) && (legacyResponsiveDisplayAdBuilder_ != null)) {
        return legacyResponsiveDisplayAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 28) {
          return (com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a legacy responsive display ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo legacy_responsive_display_ad = 28;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo, com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo.Builder, com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfoOrBuilder> 
        getLegacyResponsiveDisplayAdFieldBuilder() {
      if (legacyResponsiveDisplayAdBuilder_ == null) {
        if (!(adDataCase_ == 28)) {
          adData_ = com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo.getDefaultInstance();
        }
        legacyResponsiveDisplayAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo, com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo.Builder, com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.LegacyResponsiveDisplayAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 28;
      onChanged();
      return legacyResponsiveDisplayAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.AppAdInfo, com.google.ads.googleads.v14.common.AppAdInfo.Builder, com.google.ads.googleads.v14.common.AppAdInfoOrBuilder> appAdBuilder_;
    /**
     * <pre>
     * Details pertaining to an app ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppAdInfo app_ad = 29;</code>
     * @return Whether the appAd field is set.
     */
    @java.lang.Override
    public boolean hasAppAd() {
      return adDataCase_ == 29;
    }
    /**
     * <pre>
     * Details pertaining to an app ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppAdInfo app_ad = 29;</code>
     * @return The appAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.AppAdInfo getAppAd() {
      if (appAdBuilder_ == null) {
        if (adDataCase_ == 29) {
          return (com.google.ads.googleads.v14.common.AppAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.AppAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 29) {
          return appAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.AppAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to an app ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppAdInfo app_ad = 29;</code>
     */
    public Builder setAppAd(com.google.ads.googleads.v14.common.AppAdInfo value) {
      if (appAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        appAdBuilder_.setMessage(value);
      }
      adDataCase_ = 29;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to an app ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppAdInfo app_ad = 29;</code>
     */
    public Builder setAppAd(
        com.google.ads.googleads.v14.common.AppAdInfo.Builder builderForValue) {
      if (appAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        appAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 29;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to an app ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppAdInfo app_ad = 29;</code>
     */
    public Builder mergeAppAd(com.google.ads.googleads.v14.common.AppAdInfo value) {
      if (appAdBuilder_ == null) {
        if (adDataCase_ == 29 &&
            adData_ != com.google.ads.googleads.v14.common.AppAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.AppAdInfo.newBuilder((com.google.ads.googleads.v14.common.AppAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 29) {
          appAdBuilder_.mergeFrom(value);
        } else {
          appAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 29;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to an app ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppAdInfo app_ad = 29;</code>
     */
    public Builder clearAppAd() {
      if (appAdBuilder_ == null) {
        if (adDataCase_ == 29) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 29) {
          adDataCase_ = 0;
          adData_ = null;
        }
        appAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to an app ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppAdInfo app_ad = 29;</code>
     */
    public com.google.ads.googleads.v14.common.AppAdInfo.Builder getAppAdBuilder() {
      return getAppAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to an app ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppAdInfo app_ad = 29;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.AppAdInfoOrBuilder getAppAdOrBuilder() {
      if ((adDataCase_ == 29) && (appAdBuilder_ != null)) {
        return appAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 29) {
          return (com.google.ads.googleads.v14.common.AppAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.AppAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to an app ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppAdInfo app_ad = 29;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.AppAdInfo, com.google.ads.googleads.v14.common.AppAdInfo.Builder, com.google.ads.googleads.v14.common.AppAdInfoOrBuilder> 
        getAppAdFieldBuilder() {
      if (appAdBuilder_ == null) {
        if (!(adDataCase_ == 29)) {
          adData_ = com.google.ads.googleads.v14.common.AppAdInfo.getDefaultInstance();
        }
        appAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.AppAdInfo, com.google.ads.googleads.v14.common.AppAdInfo.Builder, com.google.ads.googleads.v14.common.AppAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.AppAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 29;
      onChanged();
      return appAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo, com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo.Builder, com.google.ads.googleads.v14.common.LegacyAppInstallAdInfoOrBuilder> legacyAppInstallAdBuilder_;
    /**
     * <pre>
     * Immutable. Details pertaining to a legacy app install ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LegacyAppInstallAdInfo legacy_app_install_ad = 30 [(.google.api.field_behavior) = IMMUTABLE];</code>
     * @return Whether the legacyAppInstallAd field is set.
     */
    @java.lang.Override
    public boolean hasLegacyAppInstallAd() {
      return adDataCase_ == 30;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to a legacy app install ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LegacyAppInstallAdInfo legacy_app_install_ad = 30 [(.google.api.field_behavior) = IMMUTABLE];</code>
     * @return The legacyAppInstallAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo getLegacyAppInstallAd() {
      if (legacyAppInstallAdBuilder_ == null) {
        if (adDataCase_ == 30) {
          return (com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 30) {
          return legacyAppInstallAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Immutable. Details pertaining to a legacy app install ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LegacyAppInstallAdInfo legacy_app_install_ad = 30 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public Builder setLegacyAppInstallAd(com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo value) {
      if (legacyAppInstallAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        legacyAppInstallAdBuilder_.setMessage(value);
      }
      adDataCase_ = 30;
      return this;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to a legacy app install ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LegacyAppInstallAdInfo legacy_app_install_ad = 30 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public Builder setLegacyAppInstallAd(
        com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo.Builder builderForValue) {
      if (legacyAppInstallAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        legacyAppInstallAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 30;
      return this;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to a legacy app install ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LegacyAppInstallAdInfo legacy_app_install_ad = 30 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public Builder mergeLegacyAppInstallAd(com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo value) {
      if (legacyAppInstallAdBuilder_ == null) {
        if (adDataCase_ == 30 &&
            adData_ != com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo.newBuilder((com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 30) {
          legacyAppInstallAdBuilder_.mergeFrom(value);
        } else {
          legacyAppInstallAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 30;
      return this;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to a legacy app install ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LegacyAppInstallAdInfo legacy_app_install_ad = 30 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public Builder clearLegacyAppInstallAd() {
      if (legacyAppInstallAdBuilder_ == null) {
        if (adDataCase_ == 30) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 30) {
          adDataCase_ = 0;
          adData_ = null;
        }
        legacyAppInstallAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Immutable. Details pertaining to a legacy app install ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LegacyAppInstallAdInfo legacy_app_install_ad = 30 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    public com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo.Builder getLegacyAppInstallAdBuilder() {
      return getLegacyAppInstallAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Immutable. Details pertaining to a legacy app install ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LegacyAppInstallAdInfo legacy_app_install_ad = 30 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.LegacyAppInstallAdInfoOrBuilder getLegacyAppInstallAdOrBuilder() {
      if ((adDataCase_ == 30) && (legacyAppInstallAdBuilder_ != null)) {
        return legacyAppInstallAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 30) {
          return (com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Immutable. Details pertaining to a legacy app install ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LegacyAppInstallAdInfo legacy_app_install_ad = 30 [(.google.api.field_behavior) = IMMUTABLE];</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo, com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo.Builder, com.google.ads.googleads.v14.common.LegacyAppInstallAdInfoOrBuilder> 
        getLegacyAppInstallAdFieldBuilder() {
      if (legacyAppInstallAdBuilder_ == null) {
        if (!(adDataCase_ == 30)) {
          adData_ = com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo.getDefaultInstance();
        }
        legacyAppInstallAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo, com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo.Builder, com.google.ads.googleads.v14.common.LegacyAppInstallAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.LegacyAppInstallAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 30;
      onChanged();
      return legacyAppInstallAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo, com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo.Builder, com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfoOrBuilder> responsiveDisplayAdBuilder_;
    /**
     * <pre>
     * Details pertaining to a responsive display ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo responsive_display_ad = 31;</code>
     * @return Whether the responsiveDisplayAd field is set.
     */
    @java.lang.Override
    public boolean hasResponsiveDisplayAd() {
      return adDataCase_ == 31;
    }
    /**
     * <pre>
     * Details pertaining to a responsive display ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo responsive_display_ad = 31;</code>
     * @return The responsiveDisplayAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo getResponsiveDisplayAd() {
      if (responsiveDisplayAdBuilder_ == null) {
        if (adDataCase_ == 31) {
          return (com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 31) {
          return responsiveDisplayAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a responsive display ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo responsive_display_ad = 31;</code>
     */
    public Builder setResponsiveDisplayAd(com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo value) {
      if (responsiveDisplayAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        responsiveDisplayAdBuilder_.setMessage(value);
      }
      adDataCase_ = 31;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a responsive display ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo responsive_display_ad = 31;</code>
     */
    public Builder setResponsiveDisplayAd(
        com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo.Builder builderForValue) {
      if (responsiveDisplayAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        responsiveDisplayAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 31;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a responsive display ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo responsive_display_ad = 31;</code>
     */
    public Builder mergeResponsiveDisplayAd(com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo value) {
      if (responsiveDisplayAdBuilder_ == null) {
        if (adDataCase_ == 31 &&
            adData_ != com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo.newBuilder((com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 31) {
          responsiveDisplayAdBuilder_.mergeFrom(value);
        } else {
          responsiveDisplayAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 31;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a responsive display ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo responsive_display_ad = 31;</code>
     */
    public Builder clearResponsiveDisplayAd() {
      if (responsiveDisplayAdBuilder_ == null) {
        if (adDataCase_ == 31) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 31) {
          adDataCase_ = 0;
          adData_ = null;
        }
        responsiveDisplayAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a responsive display ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo responsive_display_ad = 31;</code>
     */
    public com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo.Builder getResponsiveDisplayAdBuilder() {
      return getResponsiveDisplayAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to a responsive display ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo responsive_display_ad = 31;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfoOrBuilder getResponsiveDisplayAdOrBuilder() {
      if ((adDataCase_ == 31) && (responsiveDisplayAdBuilder_ != null)) {
        return responsiveDisplayAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 31) {
          return (com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a responsive display ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo responsive_display_ad = 31;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo, com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo.Builder, com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfoOrBuilder> 
        getResponsiveDisplayAdFieldBuilder() {
      if (responsiveDisplayAdBuilder_ == null) {
        if (!(adDataCase_ == 31)) {
          adData_ = com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo.getDefaultInstance();
        }
        responsiveDisplayAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo, com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo.Builder, com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.ResponsiveDisplayAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 31;
      onChanged();
      return responsiveDisplayAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.LocalAdInfo, com.google.ads.googleads.v14.common.LocalAdInfo.Builder, com.google.ads.googleads.v14.common.LocalAdInfoOrBuilder> localAdBuilder_;
    /**
     * <pre>
     * Details pertaining to a local ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LocalAdInfo local_ad = 32;</code>
     * @return Whether the localAd field is set.
     */
    @java.lang.Override
    public boolean hasLocalAd() {
      return adDataCase_ == 32;
    }
    /**
     * <pre>
     * Details pertaining to a local ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LocalAdInfo local_ad = 32;</code>
     * @return The localAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.LocalAdInfo getLocalAd() {
      if (localAdBuilder_ == null) {
        if (adDataCase_ == 32) {
          return (com.google.ads.googleads.v14.common.LocalAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.LocalAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 32) {
          return localAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.LocalAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a local ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LocalAdInfo local_ad = 32;</code>
     */
    public Builder setLocalAd(com.google.ads.googleads.v14.common.LocalAdInfo value) {
      if (localAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        localAdBuilder_.setMessage(value);
      }
      adDataCase_ = 32;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a local ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LocalAdInfo local_ad = 32;</code>
     */
    public Builder setLocalAd(
        com.google.ads.googleads.v14.common.LocalAdInfo.Builder builderForValue) {
      if (localAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        localAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 32;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a local ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LocalAdInfo local_ad = 32;</code>
     */
    public Builder mergeLocalAd(com.google.ads.googleads.v14.common.LocalAdInfo value) {
      if (localAdBuilder_ == null) {
        if (adDataCase_ == 32 &&
            adData_ != com.google.ads.googleads.v14.common.LocalAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.LocalAdInfo.newBuilder((com.google.ads.googleads.v14.common.LocalAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 32) {
          localAdBuilder_.mergeFrom(value);
        } else {
          localAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 32;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a local ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LocalAdInfo local_ad = 32;</code>
     */
    public Builder clearLocalAd() {
      if (localAdBuilder_ == null) {
        if (adDataCase_ == 32) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 32) {
          adDataCase_ = 0;
          adData_ = null;
        }
        localAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a local ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LocalAdInfo local_ad = 32;</code>
     */
    public com.google.ads.googleads.v14.common.LocalAdInfo.Builder getLocalAdBuilder() {
      return getLocalAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to a local ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LocalAdInfo local_ad = 32;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.LocalAdInfoOrBuilder getLocalAdOrBuilder() {
      if ((adDataCase_ == 32) && (localAdBuilder_ != null)) {
        return localAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 32) {
          return (com.google.ads.googleads.v14.common.LocalAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.LocalAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a local ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.LocalAdInfo local_ad = 32;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.LocalAdInfo, com.google.ads.googleads.v14.common.LocalAdInfo.Builder, com.google.ads.googleads.v14.common.LocalAdInfoOrBuilder> 
        getLocalAdFieldBuilder() {
      if (localAdBuilder_ == null) {
        if (!(adDataCase_ == 32)) {
          adData_ = com.google.ads.googleads.v14.common.LocalAdInfo.getDefaultInstance();
        }
        localAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.LocalAdInfo, com.google.ads.googleads.v14.common.LocalAdInfo.Builder, com.google.ads.googleads.v14.common.LocalAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.LocalAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 32;
      onChanged();
      return localAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.DisplayUploadAdInfo, com.google.ads.googleads.v14.common.DisplayUploadAdInfo.Builder, com.google.ads.googleads.v14.common.DisplayUploadAdInfoOrBuilder> displayUploadAdBuilder_;
    /**
     * <pre>
     * Details pertaining to a display upload ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DisplayUploadAdInfo display_upload_ad = 33;</code>
     * @return Whether the displayUploadAd field is set.
     */
    @java.lang.Override
    public boolean hasDisplayUploadAd() {
      return adDataCase_ == 33;
    }
    /**
     * <pre>
     * Details pertaining to a display upload ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DisplayUploadAdInfo display_upload_ad = 33;</code>
     * @return The displayUploadAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.DisplayUploadAdInfo getDisplayUploadAd() {
      if (displayUploadAdBuilder_ == null) {
        if (adDataCase_ == 33) {
          return (com.google.ads.googleads.v14.common.DisplayUploadAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.DisplayUploadAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 33) {
          return displayUploadAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.DisplayUploadAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a display upload ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DisplayUploadAdInfo display_upload_ad = 33;</code>
     */
    public Builder setDisplayUploadAd(com.google.ads.googleads.v14.common.DisplayUploadAdInfo value) {
      if (displayUploadAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        displayUploadAdBuilder_.setMessage(value);
      }
      adDataCase_ = 33;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a display upload ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DisplayUploadAdInfo display_upload_ad = 33;</code>
     */
    public Builder setDisplayUploadAd(
        com.google.ads.googleads.v14.common.DisplayUploadAdInfo.Builder builderForValue) {
      if (displayUploadAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        displayUploadAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 33;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a display upload ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DisplayUploadAdInfo display_upload_ad = 33;</code>
     */
    public Builder mergeDisplayUploadAd(com.google.ads.googleads.v14.common.DisplayUploadAdInfo value) {
      if (displayUploadAdBuilder_ == null) {
        if (adDataCase_ == 33 &&
            adData_ != com.google.ads.googleads.v14.common.DisplayUploadAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.DisplayUploadAdInfo.newBuilder((com.google.ads.googleads.v14.common.DisplayUploadAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 33) {
          displayUploadAdBuilder_.mergeFrom(value);
        } else {
          displayUploadAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 33;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a display upload ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DisplayUploadAdInfo display_upload_ad = 33;</code>
     */
    public Builder clearDisplayUploadAd() {
      if (displayUploadAdBuilder_ == null) {
        if (adDataCase_ == 33) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 33) {
          adDataCase_ = 0;
          adData_ = null;
        }
        displayUploadAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a display upload ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DisplayUploadAdInfo display_upload_ad = 33;</code>
     */
    public com.google.ads.googleads.v14.common.DisplayUploadAdInfo.Builder getDisplayUploadAdBuilder() {
      return getDisplayUploadAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to a display upload ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DisplayUploadAdInfo display_upload_ad = 33;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.DisplayUploadAdInfoOrBuilder getDisplayUploadAdOrBuilder() {
      if ((adDataCase_ == 33) && (displayUploadAdBuilder_ != null)) {
        return displayUploadAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 33) {
          return (com.google.ads.googleads.v14.common.DisplayUploadAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.DisplayUploadAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a display upload ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DisplayUploadAdInfo display_upload_ad = 33;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.DisplayUploadAdInfo, com.google.ads.googleads.v14.common.DisplayUploadAdInfo.Builder, com.google.ads.googleads.v14.common.DisplayUploadAdInfoOrBuilder> 
        getDisplayUploadAdFieldBuilder() {
      if (displayUploadAdBuilder_ == null) {
        if (!(adDataCase_ == 33)) {
          adData_ = com.google.ads.googleads.v14.common.DisplayUploadAdInfo.getDefaultInstance();
        }
        displayUploadAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.DisplayUploadAdInfo, com.google.ads.googleads.v14.common.DisplayUploadAdInfo.Builder, com.google.ads.googleads.v14.common.DisplayUploadAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.DisplayUploadAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 33;
      onChanged();
      return displayUploadAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.AppEngagementAdInfo, com.google.ads.googleads.v14.common.AppEngagementAdInfo.Builder, com.google.ads.googleads.v14.common.AppEngagementAdInfoOrBuilder> appEngagementAdBuilder_;
    /**
     * <pre>
     * Details pertaining to an app engagement ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppEngagementAdInfo app_engagement_ad = 34;</code>
     * @return Whether the appEngagementAd field is set.
     */
    @java.lang.Override
    public boolean hasAppEngagementAd() {
      return adDataCase_ == 34;
    }
    /**
     * <pre>
     * Details pertaining to an app engagement ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppEngagementAdInfo app_engagement_ad = 34;</code>
     * @return The appEngagementAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.AppEngagementAdInfo getAppEngagementAd() {
      if (appEngagementAdBuilder_ == null) {
        if (adDataCase_ == 34) {
          return (com.google.ads.googleads.v14.common.AppEngagementAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.AppEngagementAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 34) {
          return appEngagementAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.AppEngagementAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to an app engagement ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppEngagementAdInfo app_engagement_ad = 34;</code>
     */
    public Builder setAppEngagementAd(com.google.ads.googleads.v14.common.AppEngagementAdInfo value) {
      if (appEngagementAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        appEngagementAdBuilder_.setMessage(value);
      }
      adDataCase_ = 34;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to an app engagement ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppEngagementAdInfo app_engagement_ad = 34;</code>
     */
    public Builder setAppEngagementAd(
        com.google.ads.googleads.v14.common.AppEngagementAdInfo.Builder builderForValue) {
      if (appEngagementAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        appEngagementAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 34;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to an app engagement ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppEngagementAdInfo app_engagement_ad = 34;</code>
     */
    public Builder mergeAppEngagementAd(com.google.ads.googleads.v14.common.AppEngagementAdInfo value) {
      if (appEngagementAdBuilder_ == null) {
        if (adDataCase_ == 34 &&
            adData_ != com.google.ads.googleads.v14.common.AppEngagementAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.AppEngagementAdInfo.newBuilder((com.google.ads.googleads.v14.common.AppEngagementAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 34) {
          appEngagementAdBuilder_.mergeFrom(value);
        } else {
          appEngagementAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 34;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to an app engagement ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppEngagementAdInfo app_engagement_ad = 34;</code>
     */
    public Builder clearAppEngagementAd() {
      if (appEngagementAdBuilder_ == null) {
        if (adDataCase_ == 34) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 34) {
          adDataCase_ = 0;
          adData_ = null;
        }
        appEngagementAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to an app engagement ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppEngagementAdInfo app_engagement_ad = 34;</code>
     */
    public com.google.ads.googleads.v14.common.AppEngagementAdInfo.Builder getAppEngagementAdBuilder() {
      return getAppEngagementAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to an app engagement ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppEngagementAdInfo app_engagement_ad = 34;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.AppEngagementAdInfoOrBuilder getAppEngagementAdOrBuilder() {
      if ((adDataCase_ == 34) && (appEngagementAdBuilder_ != null)) {
        return appEngagementAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 34) {
          return (com.google.ads.googleads.v14.common.AppEngagementAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.AppEngagementAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to an app engagement ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppEngagementAdInfo app_engagement_ad = 34;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.AppEngagementAdInfo, com.google.ads.googleads.v14.common.AppEngagementAdInfo.Builder, com.google.ads.googleads.v14.common.AppEngagementAdInfoOrBuilder> 
        getAppEngagementAdFieldBuilder() {
      if (appEngagementAdBuilder_ == null) {
        if (!(adDataCase_ == 34)) {
          adData_ = com.google.ads.googleads.v14.common.AppEngagementAdInfo.getDefaultInstance();
        }
        appEngagementAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.AppEngagementAdInfo, com.google.ads.googleads.v14.common.AppEngagementAdInfo.Builder, com.google.ads.googleads.v14.common.AppEngagementAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.AppEngagementAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 34;
      onChanged();
      return appEngagementAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo, com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo.Builder, com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfoOrBuilder> shoppingComparisonListingAdBuilder_;
    /**
     * <pre>
     * Details pertaining to a Shopping Comparison Listing ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo shopping_comparison_listing_ad = 36;</code>
     * @return Whether the shoppingComparisonListingAd field is set.
     */
    @java.lang.Override
    public boolean hasShoppingComparisonListingAd() {
      return adDataCase_ == 36;
    }
    /**
     * <pre>
     * Details pertaining to a Shopping Comparison Listing ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo shopping_comparison_listing_ad = 36;</code>
     * @return The shoppingComparisonListingAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo getShoppingComparisonListingAd() {
      if (shoppingComparisonListingAdBuilder_ == null) {
        if (adDataCase_ == 36) {
          return (com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 36) {
          return shoppingComparisonListingAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a Shopping Comparison Listing ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo shopping_comparison_listing_ad = 36;</code>
     */
    public Builder setShoppingComparisonListingAd(com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo value) {
      if (shoppingComparisonListingAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        shoppingComparisonListingAdBuilder_.setMessage(value);
      }
      adDataCase_ = 36;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Shopping Comparison Listing ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo shopping_comparison_listing_ad = 36;</code>
     */
    public Builder setShoppingComparisonListingAd(
        com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo.Builder builderForValue) {
      if (shoppingComparisonListingAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        shoppingComparisonListingAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 36;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Shopping Comparison Listing ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo shopping_comparison_listing_ad = 36;</code>
     */
    public Builder mergeShoppingComparisonListingAd(com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo value) {
      if (shoppingComparisonListingAdBuilder_ == null) {
        if (adDataCase_ == 36 &&
            adData_ != com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo.newBuilder((com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 36) {
          shoppingComparisonListingAdBuilder_.mergeFrom(value);
        } else {
          shoppingComparisonListingAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 36;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Shopping Comparison Listing ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo shopping_comparison_listing_ad = 36;</code>
     */
    public Builder clearShoppingComparisonListingAd() {
      if (shoppingComparisonListingAdBuilder_ == null) {
        if (adDataCase_ == 36) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 36) {
          adDataCase_ = 0;
          adData_ = null;
        }
        shoppingComparisonListingAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Shopping Comparison Listing ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo shopping_comparison_listing_ad = 36;</code>
     */
    public com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo.Builder getShoppingComparisonListingAdBuilder() {
      return getShoppingComparisonListingAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to a Shopping Comparison Listing ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo shopping_comparison_listing_ad = 36;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfoOrBuilder getShoppingComparisonListingAdOrBuilder() {
      if ((adDataCase_ == 36) && (shoppingComparisonListingAdBuilder_ != null)) {
        return shoppingComparisonListingAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 36) {
          return (com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a Shopping Comparison Listing ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo shopping_comparison_listing_ad = 36;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo, com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo.Builder, com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfoOrBuilder> 
        getShoppingComparisonListingAdFieldBuilder() {
      if (shoppingComparisonListingAdBuilder_ == null) {
        if (!(adDataCase_ == 36)) {
          adData_ = com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo.getDefaultInstance();
        }
        shoppingComparisonListingAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo, com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo.Builder, com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.ShoppingComparisonListingAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 36;
      onChanged();
      return shoppingComparisonListingAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.SmartCampaignAdInfo, com.google.ads.googleads.v14.common.SmartCampaignAdInfo.Builder, com.google.ads.googleads.v14.common.SmartCampaignAdInfoOrBuilder> smartCampaignAdBuilder_;
    /**
     * <pre>
     * Details pertaining to a Smart campaign ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.SmartCampaignAdInfo smart_campaign_ad = 48;</code>
     * @return Whether the smartCampaignAd field is set.
     */
    @java.lang.Override
    public boolean hasSmartCampaignAd() {
      return adDataCase_ == 48;
    }
    /**
     * <pre>
     * Details pertaining to a Smart campaign ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.SmartCampaignAdInfo smart_campaign_ad = 48;</code>
     * @return The smartCampaignAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.SmartCampaignAdInfo getSmartCampaignAd() {
      if (smartCampaignAdBuilder_ == null) {
        if (adDataCase_ == 48) {
          return (com.google.ads.googleads.v14.common.SmartCampaignAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.SmartCampaignAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 48) {
          return smartCampaignAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.SmartCampaignAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a Smart campaign ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.SmartCampaignAdInfo smart_campaign_ad = 48;</code>
     */
    public Builder setSmartCampaignAd(com.google.ads.googleads.v14.common.SmartCampaignAdInfo value) {
      if (smartCampaignAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        smartCampaignAdBuilder_.setMessage(value);
      }
      adDataCase_ = 48;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Smart campaign ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.SmartCampaignAdInfo smart_campaign_ad = 48;</code>
     */
    public Builder setSmartCampaignAd(
        com.google.ads.googleads.v14.common.SmartCampaignAdInfo.Builder builderForValue) {
      if (smartCampaignAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        smartCampaignAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 48;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Smart campaign ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.SmartCampaignAdInfo smart_campaign_ad = 48;</code>
     */
    public Builder mergeSmartCampaignAd(com.google.ads.googleads.v14.common.SmartCampaignAdInfo value) {
      if (smartCampaignAdBuilder_ == null) {
        if (adDataCase_ == 48 &&
            adData_ != com.google.ads.googleads.v14.common.SmartCampaignAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.SmartCampaignAdInfo.newBuilder((com.google.ads.googleads.v14.common.SmartCampaignAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 48) {
          smartCampaignAdBuilder_.mergeFrom(value);
        } else {
          smartCampaignAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 48;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Smart campaign ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.SmartCampaignAdInfo smart_campaign_ad = 48;</code>
     */
    public Builder clearSmartCampaignAd() {
      if (smartCampaignAdBuilder_ == null) {
        if (adDataCase_ == 48) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 48) {
          adDataCase_ = 0;
          adData_ = null;
        }
        smartCampaignAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a Smart campaign ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.SmartCampaignAdInfo smart_campaign_ad = 48;</code>
     */
    public com.google.ads.googleads.v14.common.SmartCampaignAdInfo.Builder getSmartCampaignAdBuilder() {
      return getSmartCampaignAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to a Smart campaign ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.SmartCampaignAdInfo smart_campaign_ad = 48;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.SmartCampaignAdInfoOrBuilder getSmartCampaignAdOrBuilder() {
      if ((adDataCase_ == 48) && (smartCampaignAdBuilder_ != null)) {
        return smartCampaignAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 48) {
          return (com.google.ads.googleads.v14.common.SmartCampaignAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.SmartCampaignAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a Smart campaign ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.SmartCampaignAdInfo smart_campaign_ad = 48;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.SmartCampaignAdInfo, com.google.ads.googleads.v14.common.SmartCampaignAdInfo.Builder, com.google.ads.googleads.v14.common.SmartCampaignAdInfoOrBuilder> 
        getSmartCampaignAdFieldBuilder() {
      if (smartCampaignAdBuilder_ == null) {
        if (!(adDataCase_ == 48)) {
          adData_ = com.google.ads.googleads.v14.common.SmartCampaignAdInfo.getDefaultInstance();
        }
        smartCampaignAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.SmartCampaignAdInfo, com.google.ads.googleads.v14.common.SmartCampaignAdInfo.Builder, com.google.ads.googleads.v14.common.SmartCampaignAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.SmartCampaignAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 48;
      onChanged();
      return smartCampaignAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo, com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo.Builder, com.google.ads.googleads.v14.common.AppPreRegistrationAdInfoOrBuilder> appPreRegistrationAdBuilder_;
    /**
     * <pre>
     * Details pertaining to an app pre-registration ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppPreRegistrationAdInfo app_pre_registration_ad = 50;</code>
     * @return Whether the appPreRegistrationAd field is set.
     */
    @java.lang.Override
    public boolean hasAppPreRegistrationAd() {
      return adDataCase_ == 50;
    }
    /**
     * <pre>
     * Details pertaining to an app pre-registration ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppPreRegistrationAdInfo app_pre_registration_ad = 50;</code>
     * @return The appPreRegistrationAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo getAppPreRegistrationAd() {
      if (appPreRegistrationAdBuilder_ == null) {
        if (adDataCase_ == 50) {
          return (com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 50) {
          return appPreRegistrationAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to an app pre-registration ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppPreRegistrationAdInfo app_pre_registration_ad = 50;</code>
     */
    public Builder setAppPreRegistrationAd(com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo value) {
      if (appPreRegistrationAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        appPreRegistrationAdBuilder_.setMessage(value);
      }
      adDataCase_ = 50;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to an app pre-registration ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppPreRegistrationAdInfo app_pre_registration_ad = 50;</code>
     */
    public Builder setAppPreRegistrationAd(
        com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo.Builder builderForValue) {
      if (appPreRegistrationAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        appPreRegistrationAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 50;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to an app pre-registration ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppPreRegistrationAdInfo app_pre_registration_ad = 50;</code>
     */
    public Builder mergeAppPreRegistrationAd(com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo value) {
      if (appPreRegistrationAdBuilder_ == null) {
        if (adDataCase_ == 50 &&
            adData_ != com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo.newBuilder((com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 50) {
          appPreRegistrationAdBuilder_.mergeFrom(value);
        } else {
          appPreRegistrationAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 50;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to an app pre-registration ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppPreRegistrationAdInfo app_pre_registration_ad = 50;</code>
     */
    public Builder clearAppPreRegistrationAd() {
      if (appPreRegistrationAdBuilder_ == null) {
        if (adDataCase_ == 50) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 50) {
          adDataCase_ = 0;
          adData_ = null;
        }
        appPreRegistrationAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to an app pre-registration ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppPreRegistrationAdInfo app_pre_registration_ad = 50;</code>
     */
    public com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo.Builder getAppPreRegistrationAdBuilder() {
      return getAppPreRegistrationAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to an app pre-registration ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppPreRegistrationAdInfo app_pre_registration_ad = 50;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.AppPreRegistrationAdInfoOrBuilder getAppPreRegistrationAdOrBuilder() {
      if ((adDataCase_ == 50) && (appPreRegistrationAdBuilder_ != null)) {
        return appPreRegistrationAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 50) {
          return (com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to an app pre-registration ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.AppPreRegistrationAdInfo app_pre_registration_ad = 50;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo, com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo.Builder, com.google.ads.googleads.v14.common.AppPreRegistrationAdInfoOrBuilder> 
        getAppPreRegistrationAdFieldBuilder() {
      if (appPreRegistrationAdBuilder_ == null) {
        if (!(adDataCase_ == 50)) {
          adData_ = com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo.getDefaultInstance();
        }
        appPreRegistrationAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo, com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo.Builder, com.google.ads.googleads.v14.common.AppPreRegistrationAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.AppPreRegistrationAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 50;
      onChanged();
      return appPreRegistrationAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo, com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo.Builder, com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfoOrBuilder> discoveryMultiAssetAdBuilder_;
    /**
     * <pre>
     * Details pertaining to a discovery multi asset ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo discovery_multi_asset_ad = 51;</code>
     * @return Whether the discoveryMultiAssetAd field is set.
     */
    @java.lang.Override
    public boolean hasDiscoveryMultiAssetAd() {
      return adDataCase_ == 51;
    }
    /**
     * <pre>
     * Details pertaining to a discovery multi asset ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo discovery_multi_asset_ad = 51;</code>
     * @return The discoveryMultiAssetAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo getDiscoveryMultiAssetAd() {
      if (discoveryMultiAssetAdBuilder_ == null) {
        if (adDataCase_ == 51) {
          return (com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 51) {
          return discoveryMultiAssetAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a discovery multi asset ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo discovery_multi_asset_ad = 51;</code>
     */
    public Builder setDiscoveryMultiAssetAd(com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo value) {
      if (discoveryMultiAssetAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        discoveryMultiAssetAdBuilder_.setMessage(value);
      }
      adDataCase_ = 51;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a discovery multi asset ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo discovery_multi_asset_ad = 51;</code>
     */
    public Builder setDiscoveryMultiAssetAd(
        com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo.Builder builderForValue) {
      if (discoveryMultiAssetAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        discoveryMultiAssetAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 51;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a discovery multi asset ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo discovery_multi_asset_ad = 51;</code>
     */
    public Builder mergeDiscoveryMultiAssetAd(com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo value) {
      if (discoveryMultiAssetAdBuilder_ == null) {
        if (adDataCase_ == 51 &&
            adData_ != com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo.newBuilder((com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 51) {
          discoveryMultiAssetAdBuilder_.mergeFrom(value);
        } else {
          discoveryMultiAssetAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 51;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a discovery multi asset ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo discovery_multi_asset_ad = 51;</code>
     */
    public Builder clearDiscoveryMultiAssetAd() {
      if (discoveryMultiAssetAdBuilder_ == null) {
        if (adDataCase_ == 51) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 51) {
          adDataCase_ = 0;
          adData_ = null;
        }
        discoveryMultiAssetAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a discovery multi asset ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo discovery_multi_asset_ad = 51;</code>
     */
    public com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo.Builder getDiscoveryMultiAssetAdBuilder() {
      return getDiscoveryMultiAssetAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to a discovery multi asset ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo discovery_multi_asset_ad = 51;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfoOrBuilder getDiscoveryMultiAssetAdOrBuilder() {
      if ((adDataCase_ == 51) && (discoveryMultiAssetAdBuilder_ != null)) {
        return discoveryMultiAssetAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 51) {
          return (com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a discovery multi asset ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo discovery_multi_asset_ad = 51;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo, com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo.Builder, com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfoOrBuilder> 
        getDiscoveryMultiAssetAdFieldBuilder() {
      if (discoveryMultiAssetAdBuilder_ == null) {
        if (!(adDataCase_ == 51)) {
          adData_ = com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo.getDefaultInstance();
        }
        discoveryMultiAssetAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo, com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo.Builder, com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.DiscoveryMultiAssetAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 51;
      onChanged();
      return discoveryMultiAssetAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo, com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo.Builder, com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfoOrBuilder> discoveryCarouselAdBuilder_;
    /**
     * <pre>
     * Details pertaining to a discovery carousel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo discovery_carousel_ad = 52;</code>
     * @return Whether the discoveryCarouselAd field is set.
     */
    @java.lang.Override
    public boolean hasDiscoveryCarouselAd() {
      return adDataCase_ == 52;
    }
    /**
     * <pre>
     * Details pertaining to a discovery carousel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo discovery_carousel_ad = 52;</code>
     * @return The discoveryCarouselAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo getDiscoveryCarouselAd() {
      if (discoveryCarouselAdBuilder_ == null) {
        if (adDataCase_ == 52) {
          return (com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 52) {
          return discoveryCarouselAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a discovery carousel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo discovery_carousel_ad = 52;</code>
     */
    public Builder setDiscoveryCarouselAd(com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo value) {
      if (discoveryCarouselAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        discoveryCarouselAdBuilder_.setMessage(value);
      }
      adDataCase_ = 52;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a discovery carousel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo discovery_carousel_ad = 52;</code>
     */
    public Builder setDiscoveryCarouselAd(
        com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo.Builder builderForValue) {
      if (discoveryCarouselAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        discoveryCarouselAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 52;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a discovery carousel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo discovery_carousel_ad = 52;</code>
     */
    public Builder mergeDiscoveryCarouselAd(com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo value) {
      if (discoveryCarouselAdBuilder_ == null) {
        if (adDataCase_ == 52 &&
            adData_ != com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo.newBuilder((com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 52) {
          discoveryCarouselAdBuilder_.mergeFrom(value);
        } else {
          discoveryCarouselAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 52;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a discovery carousel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo discovery_carousel_ad = 52;</code>
     */
    public Builder clearDiscoveryCarouselAd() {
      if (discoveryCarouselAdBuilder_ == null) {
        if (adDataCase_ == 52) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 52) {
          adDataCase_ = 0;
          adData_ = null;
        }
        discoveryCarouselAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a discovery carousel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo discovery_carousel_ad = 52;</code>
     */
    public com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo.Builder getDiscoveryCarouselAdBuilder() {
      return getDiscoveryCarouselAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to a discovery carousel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo discovery_carousel_ad = 52;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfoOrBuilder getDiscoveryCarouselAdOrBuilder() {
      if ((adDataCase_ == 52) && (discoveryCarouselAdBuilder_ != null)) {
        return discoveryCarouselAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 52) {
          return (com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a discovery carousel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo discovery_carousel_ad = 52;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo, com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo.Builder, com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfoOrBuilder> 
        getDiscoveryCarouselAdFieldBuilder() {
      if (discoveryCarouselAdBuilder_ == null) {
        if (!(adDataCase_ == 52)) {
          adData_ = com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo.getDefaultInstance();
        }
        discoveryCarouselAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo, com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo.Builder, com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.DiscoveryCarouselAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 52;
      onChanged();
      return discoveryCarouselAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo, com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo.Builder, com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfoOrBuilder> discoveryVideoResponsiveAdBuilder_;
    /**
     * <pre>
     * Details pertaining to a discovery video responsive ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo discovery_video_responsive_ad = 60;</code>
     * @return Whether the discoveryVideoResponsiveAd field is set.
     */
    @java.lang.Override
    public boolean hasDiscoveryVideoResponsiveAd() {
      return adDataCase_ == 60;
    }
    /**
     * <pre>
     * Details pertaining to a discovery video responsive ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo discovery_video_responsive_ad = 60;</code>
     * @return The discoveryVideoResponsiveAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo getDiscoveryVideoResponsiveAd() {
      if (discoveryVideoResponsiveAdBuilder_ == null) {
        if (adDataCase_ == 60) {
          return (com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 60) {
          return discoveryVideoResponsiveAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a discovery video responsive ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo discovery_video_responsive_ad = 60;</code>
     */
    public Builder setDiscoveryVideoResponsiveAd(com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo value) {
      if (discoveryVideoResponsiveAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        discoveryVideoResponsiveAdBuilder_.setMessage(value);
      }
      adDataCase_ = 60;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a discovery video responsive ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo discovery_video_responsive_ad = 60;</code>
     */
    public Builder setDiscoveryVideoResponsiveAd(
        com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo.Builder builderForValue) {
      if (discoveryVideoResponsiveAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        discoveryVideoResponsiveAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 60;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a discovery video responsive ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo discovery_video_responsive_ad = 60;</code>
     */
    public Builder mergeDiscoveryVideoResponsiveAd(com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo value) {
      if (discoveryVideoResponsiveAdBuilder_ == null) {
        if (adDataCase_ == 60 &&
            adData_ != com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo.newBuilder((com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 60) {
          discoveryVideoResponsiveAdBuilder_.mergeFrom(value);
        } else {
          discoveryVideoResponsiveAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 60;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a discovery video responsive ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo discovery_video_responsive_ad = 60;</code>
     */
    public Builder clearDiscoveryVideoResponsiveAd() {
      if (discoveryVideoResponsiveAdBuilder_ == null) {
        if (adDataCase_ == 60) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 60) {
          adDataCase_ = 0;
          adData_ = null;
        }
        discoveryVideoResponsiveAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a discovery video responsive ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo discovery_video_responsive_ad = 60;</code>
     */
    public com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo.Builder getDiscoveryVideoResponsiveAdBuilder() {
      return getDiscoveryVideoResponsiveAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to a discovery video responsive ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo discovery_video_responsive_ad = 60;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfoOrBuilder getDiscoveryVideoResponsiveAdOrBuilder() {
      if ((adDataCase_ == 60) && (discoveryVideoResponsiveAdBuilder_ != null)) {
        return discoveryVideoResponsiveAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 60) {
          return (com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a discovery video responsive ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo discovery_video_responsive_ad = 60;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo, com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo.Builder, com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfoOrBuilder> 
        getDiscoveryVideoResponsiveAdFieldBuilder() {
      if (discoveryVideoResponsiveAdBuilder_ == null) {
        if (!(adDataCase_ == 60)) {
          adData_ = com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo.getDefaultInstance();
        }
        discoveryVideoResponsiveAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo, com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo.Builder, com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.DiscoveryVideoResponsiveAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 60;
      onChanged();
      return discoveryVideoResponsiveAdBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.TravelAdInfo, com.google.ads.googleads.v14.common.TravelAdInfo.Builder, com.google.ads.googleads.v14.common.TravelAdInfoOrBuilder> travelAdBuilder_;
    /**
     * <pre>
     * Details pertaining to a travel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.TravelAdInfo travel_ad = 54;</code>
     * @return Whether the travelAd field is set.
     */
    @java.lang.Override
    public boolean hasTravelAd() {
      return adDataCase_ == 54;
    }
    /**
     * <pre>
     * Details pertaining to a travel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.TravelAdInfo travel_ad = 54;</code>
     * @return The travelAd.
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.TravelAdInfo getTravelAd() {
      if (travelAdBuilder_ == null) {
        if (adDataCase_ == 54) {
          return (com.google.ads.googleads.v14.common.TravelAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.TravelAdInfo.getDefaultInstance();
      } else {
        if (adDataCase_ == 54) {
          return travelAdBuilder_.getMessage();
        }
        return com.google.ads.googleads.v14.common.TravelAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a travel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.TravelAdInfo travel_ad = 54;</code>
     */
    public Builder setTravelAd(com.google.ads.googleads.v14.common.TravelAdInfo value) {
      if (travelAdBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        adData_ = value;
        onChanged();
      } else {
        travelAdBuilder_.setMessage(value);
      }
      adDataCase_ = 54;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a travel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.TravelAdInfo travel_ad = 54;</code>
     */
    public Builder setTravelAd(
        com.google.ads.googleads.v14.common.TravelAdInfo.Builder builderForValue) {
      if (travelAdBuilder_ == null) {
        adData_ = builderForValue.build();
        onChanged();
      } else {
        travelAdBuilder_.setMessage(builderForValue.build());
      }
      adDataCase_ = 54;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a travel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.TravelAdInfo travel_ad = 54;</code>
     */
    public Builder mergeTravelAd(com.google.ads.googleads.v14.common.TravelAdInfo value) {
      if (travelAdBuilder_ == null) {
        if (adDataCase_ == 54 &&
            adData_ != com.google.ads.googleads.v14.common.TravelAdInfo.getDefaultInstance()) {
          adData_ = com.google.ads.googleads.v14.common.TravelAdInfo.newBuilder((com.google.ads.googleads.v14.common.TravelAdInfo) adData_)
              .mergeFrom(value).buildPartial();
        } else {
          adData_ = value;
        }
        onChanged();
      } else {
        if (adDataCase_ == 54) {
          travelAdBuilder_.mergeFrom(value);
        } else {
          travelAdBuilder_.setMessage(value);
        }
      }
      adDataCase_ = 54;
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a travel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.TravelAdInfo travel_ad = 54;</code>
     */
    public Builder clearTravelAd() {
      if (travelAdBuilder_ == null) {
        if (adDataCase_ == 54) {
          adDataCase_ = 0;
          adData_ = null;
          onChanged();
        }
      } else {
        if (adDataCase_ == 54) {
          adDataCase_ = 0;
          adData_ = null;
        }
        travelAdBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Details pertaining to a travel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.TravelAdInfo travel_ad = 54;</code>
     */
    public com.google.ads.googleads.v14.common.TravelAdInfo.Builder getTravelAdBuilder() {
      return getTravelAdFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Details pertaining to a travel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.TravelAdInfo travel_ad = 54;</code>
     */
    @java.lang.Override
    public com.google.ads.googleads.v14.common.TravelAdInfoOrBuilder getTravelAdOrBuilder() {
      if ((adDataCase_ == 54) && (travelAdBuilder_ != null)) {
        return travelAdBuilder_.getMessageOrBuilder();
      } else {
        if (adDataCase_ == 54) {
          return (com.google.ads.googleads.v14.common.TravelAdInfo) adData_;
        }
        return com.google.ads.googleads.v14.common.TravelAdInfo.getDefaultInstance();
      }
    }
    /**
     * <pre>
     * Details pertaining to a travel ad.
     * </pre>
     *
     * <code>.google.ads.googleads.v14.common.TravelAdInfo travel_ad = 54;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        com.google.ads.googleads.v14.common.TravelAdInfo, com.google.ads.googleads.v14.common.TravelAdInfo.Builder, com.google.ads.googleads.v14.common.TravelAdInfoOrBuilder> 
        getTravelAdFieldBuilder() {
      if (travelAdBuilder_ == null) {
        if (!(adDataCase_ == 54)) {
          adData_ = com.google.ads.googleads.v14.common.TravelAdInfo.getDefaultInstance();
        }
        travelAdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            com.google.ads.googleads.v14.common.TravelAdInfo, com.google.ads.googleads.v14.common.TravelAdInfo.Builder, com.google.ads.googleads.v14.common.TravelAdInfoOrBuilder>(
                (com.google.ads.googleads.v14.common.TravelAdInfo) adData_,
                getParentForChildren(),
                isClean());
        adData_ = null;
      }
      adDataCase_ = 54;
      onChanged();
      return travelAdBuilder_;
    }
    @java.lang.Override
    public final Builder setUnknownFields(
        final com.google.protobuf.UnknownFieldSet unknownFields) {
      return super.setUnknownFields(unknownFields);
    }

    @java.lang.Override
    public final Builder mergeUnknownFields(
        final com.google.protobuf.UnknownFieldSet unknownFields) {
      return super.mergeUnknownFields(unknownFields);
    }


    // @@protoc_insertion_point(builder_scope:google.ads.googleads.v14.resources.Ad)
  }

  // @@protoc_insertion_point(class_scope:google.ads.googleads.v14.resources.Ad)
  private static final com.google.ads.googleads.v14.resources.Ad DEFAULT_INSTANCE;
  static {
    DEFAULT_INSTANCE = new com.google.ads.googleads.v14.resources.Ad();
  }

  public static com.google.ads.googleads.v14.resources.Ad getDefaultInstance() {
    return DEFAULT_INSTANCE;
  }

  private static final com.google.protobuf.Parser<Ad>
      PARSER = new com.google.protobuf.AbstractParser<Ad>() {
    @java.lang.Override
    public Ad parsePartialFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      Builder builder = newBuilder();
      try {
        builder.mergeFrom(input, extensionRegistry);
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(builder.buildPartial());
      } catch (com.google.protobuf.UninitializedMessageException e) {
        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(e)
            .setUnfinishedMessage(builder.buildPartial());
      }
      return builder.buildPartial();
    }
  };

  public static com.google.protobuf.Parser<Ad> parser() {
    return PARSER;
  }

  @java.lang.Override
  public com.google.protobuf.Parser<Ad> getParserForType() {
    return PARSER;
  }

  @java.lang.Override
  public com.google.ads.googleads.v14.resources.Ad getDefaultInstanceForType() {
    return DEFAULT_INSTANCE;
  }

}

