// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: metadata.proto

package com.spotify.metadata;

public final class Metadata {
  private Metadata() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  public interface ArtistOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.Artist)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional bytes gid = 1;</code>
     * @return Whether the gid field is set.
     */
    boolean hasGid();
    /**
     * <code>optional bytes gid = 1;</code>
     * @return The gid.
     */
    com.google.protobuf.ByteString getGid();

    /**
     * <code>optional string name = 2;</code>
     * @return Whether the name field is set.
     */
    boolean hasName();
    /**
     * <code>optional string name = 2;</code>
     * @return The name.
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 2;</code>
     * @return The bytes for name.
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <code>optional sint32 popularity = 3;</code>
     * @return Whether the popularity field is set.
     */
    boolean hasPopularity();
    /**
     * <code>optional sint32 popularity = 3;</code>
     * @return The popularity.
     */
    int getPopularity();

    /**
     * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.TopTracks> 
        getTopTrackList();
    /**
     * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
     */
    com.spotify.metadata.Metadata.TopTracks getTopTrack(int index);
    /**
     * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
     */
    int getTopTrackCount();
    /**
     * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.TopTracksOrBuilder> 
        getTopTrackOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
     */
    com.spotify.metadata.Metadata.TopTracksOrBuilder getTopTrackOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.AlbumGroup> 
        getAlbumGroupList();
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
     */
    com.spotify.metadata.Metadata.AlbumGroup getAlbumGroup(int index);
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
     */
    int getAlbumGroupCount();
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.AlbumGroupOrBuilder> 
        getAlbumGroupOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
     */
    com.spotify.metadata.Metadata.AlbumGroupOrBuilder getAlbumGroupOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.AlbumGroup> 
        getSingleGroupList();
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
     */
    com.spotify.metadata.Metadata.AlbumGroup getSingleGroup(int index);
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
     */
    int getSingleGroupCount();
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.AlbumGroupOrBuilder> 
        getSingleGroupOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
     */
    com.spotify.metadata.Metadata.AlbumGroupOrBuilder getSingleGroupOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.AlbumGroup> 
        getCompilationGroupList();
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
     */
    com.spotify.metadata.Metadata.AlbumGroup getCompilationGroup(int index);
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
     */
    int getCompilationGroupCount();
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.AlbumGroupOrBuilder> 
        getCompilationGroupOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
     */
    com.spotify.metadata.Metadata.AlbumGroupOrBuilder getCompilationGroupOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.AlbumGroup> 
        getAppearsOnGroupList();
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
     */
    com.spotify.metadata.Metadata.AlbumGroup getAppearsOnGroup(int index);
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
     */
    int getAppearsOnGroupCount();
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.AlbumGroupOrBuilder> 
        getAppearsOnGroupOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
     */
    com.spotify.metadata.Metadata.AlbumGroupOrBuilder getAppearsOnGroupOrBuilder(
        int index);

    /**
     * <code>repeated string genre = 9;</code>
     * @return A list containing the genre.
     */
    java.util.List<java.lang.String>
        getGenreList();
    /**
     * <code>repeated string genre = 9;</code>
     * @return The count of genre.
     */
    int getGenreCount();
    /**
     * <code>repeated string genre = 9;</code>
     * @param index The index of the element to return.
     * @return The genre at the given index.
     */
    java.lang.String getGenre(int index);
    /**
     * <code>repeated string genre = 9;</code>
     * @param index The index of the value to return.
     * @return The bytes of the genre at the given index.
     */
    com.google.protobuf.ByteString
        getGenreBytes(int index);

    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.ExternalId> 
        getExternalIdList();
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    com.spotify.metadata.Metadata.ExternalId getExternalId(int index);
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    int getExternalIdCount();
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.ExternalIdOrBuilder> 
        getExternalIdOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    com.spotify.metadata.Metadata.ExternalIdOrBuilder getExternalIdOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Image> 
        getPortraitList();
    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
     */
    com.spotify.metadata.Metadata.Image getPortrait(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
     */
    int getPortraitCount();
    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.ImageOrBuilder> 
        getPortraitOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
     */
    com.spotify.metadata.Metadata.ImageOrBuilder getPortraitOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Biography> 
        getBiographyList();
    /**
     * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
     */
    com.spotify.metadata.Metadata.Biography getBiography(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
     */
    int getBiographyCount();
    /**
     * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.BiographyOrBuilder> 
        getBiographyOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
     */
    com.spotify.metadata.Metadata.BiographyOrBuilder getBiographyOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.ActivityPeriod> 
        getActivityPeriodList();
    /**
     * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
     */
    com.spotify.metadata.Metadata.ActivityPeriod getActivityPeriod(int index);
    /**
     * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
     */
    int getActivityPeriodCount();
    /**
     * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.ActivityPeriodOrBuilder> 
        getActivityPeriodOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
     */
    com.spotify.metadata.Metadata.ActivityPeriodOrBuilder getActivityPeriodOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Restriction> 
        getRestrictionList();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    com.spotify.metadata.Metadata.Restriction getRestriction(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    int getRestrictionCount();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.RestrictionOrBuilder> 
        getRestrictionOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    com.spotify.metadata.Metadata.RestrictionOrBuilder getRestrictionOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Artist> 
        getRelatedList();
    /**
     * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
     */
    com.spotify.metadata.Metadata.Artist getRelated(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
     */
    int getRelatedCount();
    /**
     * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.ArtistOrBuilder> 
        getRelatedOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
     */
    com.spotify.metadata.Metadata.ArtistOrBuilder getRelatedOrBuilder(
        int index);

    /**
     * <code>optional bool is_portrait_album_cover = 16;</code>
     * @return Whether the isPortraitAlbumCover field is set.
     */
    boolean hasIsPortraitAlbumCover();
    /**
     * <code>optional bool is_portrait_album_cover = 16;</code>
     * @return The isPortraitAlbumCover.
     */
    boolean getIsPortraitAlbumCover();

    /**
     * <code>optional .spotify.metadata.proto.ImageGroup portrait_group = 17;</code>
     * @return Whether the portraitGroup field is set.
     */
    boolean hasPortraitGroup();
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup portrait_group = 17;</code>
     * @return The portraitGroup.
     */
    com.spotify.metadata.Metadata.ImageGroup getPortraitGroup();
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup portrait_group = 17;</code>
     */
    com.spotify.metadata.Metadata.ImageGroupOrBuilder getPortraitGroupOrBuilder();

    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.SalePeriod> 
        getSalePeriodList();
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
     */
    com.spotify.metadata.Metadata.SalePeriod getSalePeriod(int index);
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
     */
    int getSalePeriodCount();
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.SalePeriodOrBuilder> 
        getSalePeriodOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
     */
    com.spotify.metadata.Metadata.SalePeriodOrBuilder getSalePeriodOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Availability> 
        getAvailabilityList();
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
     */
    com.spotify.metadata.Metadata.Availability getAvailability(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
     */
    int getAvailabilityCount();
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
        getAvailabilityOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
     */
    com.spotify.metadata.Metadata.AvailabilityOrBuilder getAvailabilityOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.Artist}
   */
  public  static final class Artist extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.Artist)
      ArtistOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Artist.newBuilder() to construct.
    private Artist(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Artist() {
      gid_ = com.google.protobuf.ByteString.EMPTY;
      name_ = "";
      topTrack_ = java.util.Collections.emptyList();
      albumGroup_ = java.util.Collections.emptyList();
      singleGroup_ = java.util.Collections.emptyList();
      compilationGroup_ = java.util.Collections.emptyList();
      appearsOnGroup_ = java.util.Collections.emptyList();
      genre_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      externalId_ = java.util.Collections.emptyList();
      portrait_ = java.util.Collections.emptyList();
      biography_ = java.util.Collections.emptyList();
      activityPeriod_ = java.util.Collections.emptyList();
      restriction_ = java.util.Collections.emptyList();
      related_ = java.util.Collections.emptyList();
      salePeriod_ = java.util.Collections.emptyList();
      availability_ = java.util.Collections.emptyList();
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Artist_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Artist_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.Artist.class, com.spotify.metadata.Metadata.Artist.Builder.class);
    }

    private int bitField0_;
    public static final int GID_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString gid_;
    /**
     * <code>optional bytes gid = 1;</code>
     * @return Whether the gid field is set.
     */
    public boolean hasGid() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional bytes gid = 1;</code>
     * @return The gid.
     */
    public com.google.protobuf.ByteString getGid() {
      return gid_;
    }

    public static final int NAME_FIELD_NUMBER = 2;
    private volatile java.lang.Object name_;
    /**
     * <code>optional string name = 2;</code>
     * @return Whether the name field is set.
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional string name = 2;</code>
     * @return The name.
     */
    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();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 2;</code>
     * @return The bytes for name.
     */
    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 POPULARITY_FIELD_NUMBER = 3;
    private int popularity_;
    /**
     * <code>optional sint32 popularity = 3;</code>
     * @return Whether the popularity field is set.
     */
    public boolean hasPopularity() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional sint32 popularity = 3;</code>
     * @return The popularity.
     */
    public int getPopularity() {
      return popularity_;
    }

    public static final int TOP_TRACK_FIELD_NUMBER = 4;
    private java.util.List<com.spotify.metadata.Metadata.TopTracks> topTrack_;
    /**
     * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.TopTracks> getTopTrackList() {
      return topTrack_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.TopTracksOrBuilder> 
        getTopTrackOrBuilderList() {
      return topTrack_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
     */
    public int getTopTrackCount() {
      return topTrack_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
     */
    public com.spotify.metadata.Metadata.TopTracks getTopTrack(int index) {
      return topTrack_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
     */
    public com.spotify.metadata.Metadata.TopTracksOrBuilder getTopTrackOrBuilder(
        int index) {
      return topTrack_.get(index);
    }

    public static final int ALBUM_GROUP_FIELD_NUMBER = 5;
    private java.util.List<com.spotify.metadata.Metadata.AlbumGroup> albumGroup_;
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.AlbumGroup> getAlbumGroupList() {
      return albumGroup_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.AlbumGroupOrBuilder> 
        getAlbumGroupOrBuilderList() {
      return albumGroup_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
     */
    public int getAlbumGroupCount() {
      return albumGroup_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
     */
    public com.spotify.metadata.Metadata.AlbumGroup getAlbumGroup(int index) {
      return albumGroup_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
     */
    public com.spotify.metadata.Metadata.AlbumGroupOrBuilder getAlbumGroupOrBuilder(
        int index) {
      return albumGroup_.get(index);
    }

    public static final int SINGLE_GROUP_FIELD_NUMBER = 6;
    private java.util.List<com.spotify.metadata.Metadata.AlbumGroup> singleGroup_;
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.AlbumGroup> getSingleGroupList() {
      return singleGroup_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.AlbumGroupOrBuilder> 
        getSingleGroupOrBuilderList() {
      return singleGroup_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
     */
    public int getSingleGroupCount() {
      return singleGroup_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
     */
    public com.spotify.metadata.Metadata.AlbumGroup getSingleGroup(int index) {
      return singleGroup_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
     */
    public com.spotify.metadata.Metadata.AlbumGroupOrBuilder getSingleGroupOrBuilder(
        int index) {
      return singleGroup_.get(index);
    }

    public static final int COMPILATION_GROUP_FIELD_NUMBER = 7;
    private java.util.List<com.spotify.metadata.Metadata.AlbumGroup> compilationGroup_;
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.AlbumGroup> getCompilationGroupList() {
      return compilationGroup_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.AlbumGroupOrBuilder> 
        getCompilationGroupOrBuilderList() {
      return compilationGroup_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
     */
    public int getCompilationGroupCount() {
      return compilationGroup_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
     */
    public com.spotify.metadata.Metadata.AlbumGroup getCompilationGroup(int index) {
      return compilationGroup_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
     */
    public com.spotify.metadata.Metadata.AlbumGroupOrBuilder getCompilationGroupOrBuilder(
        int index) {
      return compilationGroup_.get(index);
    }

    public static final int APPEARS_ON_GROUP_FIELD_NUMBER = 8;
    private java.util.List<com.spotify.metadata.Metadata.AlbumGroup> appearsOnGroup_;
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.AlbumGroup> getAppearsOnGroupList() {
      return appearsOnGroup_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.AlbumGroupOrBuilder> 
        getAppearsOnGroupOrBuilderList() {
      return appearsOnGroup_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
     */
    public int getAppearsOnGroupCount() {
      return appearsOnGroup_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
     */
    public com.spotify.metadata.Metadata.AlbumGroup getAppearsOnGroup(int index) {
      return appearsOnGroup_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
     */
    public com.spotify.metadata.Metadata.AlbumGroupOrBuilder getAppearsOnGroupOrBuilder(
        int index) {
      return appearsOnGroup_.get(index);
    }

    public static final int GENRE_FIELD_NUMBER = 9;
    private com.google.protobuf.LazyStringList genre_;
    /**
     * <code>repeated string genre = 9;</code>
     * @return A list containing the genre.
     */
    public com.google.protobuf.ProtocolStringList
        getGenreList() {
      return genre_;
    }
    /**
     * <code>repeated string genre = 9;</code>
     * @return The count of genre.
     */
    public int getGenreCount() {
      return genre_.size();
    }
    /**
     * <code>repeated string genre = 9;</code>
     * @param index The index of the element to return.
     * @return The genre at the given index.
     */
    public java.lang.String getGenre(int index) {
      return genre_.get(index);
    }
    /**
     * <code>repeated string genre = 9;</code>
     * @param index The index of the value to return.
     * @return The bytes of the genre at the given index.
     */
    public com.google.protobuf.ByteString
        getGenreBytes(int index) {
      return genre_.getByteString(index);
    }

    public static final int EXTERNAL_ID_FIELD_NUMBER = 10;
    private java.util.List<com.spotify.metadata.Metadata.ExternalId> externalId_;
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.ExternalId> getExternalIdList() {
      return externalId_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.ExternalIdOrBuilder> 
        getExternalIdOrBuilderList() {
      return externalId_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    public int getExternalIdCount() {
      return externalId_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    public com.spotify.metadata.Metadata.ExternalId getExternalId(int index) {
      return externalId_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    public com.spotify.metadata.Metadata.ExternalIdOrBuilder getExternalIdOrBuilder(
        int index) {
      return externalId_.get(index);
    }

    public static final int PORTRAIT_FIELD_NUMBER = 11;
    private java.util.List<com.spotify.metadata.Metadata.Image> portrait_;
    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Image> getPortraitList() {
      return portrait_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.ImageOrBuilder> 
        getPortraitOrBuilderList() {
      return portrait_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
     */
    public int getPortraitCount() {
      return portrait_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
     */
    public com.spotify.metadata.Metadata.Image getPortrait(int index) {
      return portrait_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
     */
    public com.spotify.metadata.Metadata.ImageOrBuilder getPortraitOrBuilder(
        int index) {
      return portrait_.get(index);
    }

    public static final int BIOGRAPHY_FIELD_NUMBER = 12;
    private java.util.List<com.spotify.metadata.Metadata.Biography> biography_;
    /**
     * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Biography> getBiographyList() {
      return biography_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.BiographyOrBuilder> 
        getBiographyOrBuilderList() {
      return biography_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
     */
    public int getBiographyCount() {
      return biography_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
     */
    public com.spotify.metadata.Metadata.Biography getBiography(int index) {
      return biography_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
     */
    public com.spotify.metadata.Metadata.BiographyOrBuilder getBiographyOrBuilder(
        int index) {
      return biography_.get(index);
    }

    public static final int ACTIVITY_PERIOD_FIELD_NUMBER = 13;
    private java.util.List<com.spotify.metadata.Metadata.ActivityPeriod> activityPeriod_;
    /**
     * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.ActivityPeriod> getActivityPeriodList() {
      return activityPeriod_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.ActivityPeriodOrBuilder> 
        getActivityPeriodOrBuilderList() {
      return activityPeriod_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
     */
    public int getActivityPeriodCount() {
      return activityPeriod_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
     */
    public com.spotify.metadata.Metadata.ActivityPeriod getActivityPeriod(int index) {
      return activityPeriod_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
     */
    public com.spotify.metadata.Metadata.ActivityPeriodOrBuilder getActivityPeriodOrBuilder(
        int index) {
      return activityPeriod_.get(index);
    }

    public static final int RESTRICTION_FIELD_NUMBER = 14;
    private java.util.List<com.spotify.metadata.Metadata.Restriction> restriction_;
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Restriction> getRestrictionList() {
      return restriction_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.RestrictionOrBuilder> 
        getRestrictionOrBuilderList() {
      return restriction_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    public int getRestrictionCount() {
      return restriction_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    public com.spotify.metadata.Metadata.Restriction getRestriction(int index) {
      return restriction_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    public com.spotify.metadata.Metadata.RestrictionOrBuilder getRestrictionOrBuilder(
        int index) {
      return restriction_.get(index);
    }

    public static final int RELATED_FIELD_NUMBER = 15;
    private java.util.List<com.spotify.metadata.Metadata.Artist> related_;
    /**
     * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Artist> getRelatedList() {
      return related_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.ArtistOrBuilder> 
        getRelatedOrBuilderList() {
      return related_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
     */
    public int getRelatedCount() {
      return related_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
     */
    public com.spotify.metadata.Metadata.Artist getRelated(int index) {
      return related_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
     */
    public com.spotify.metadata.Metadata.ArtistOrBuilder getRelatedOrBuilder(
        int index) {
      return related_.get(index);
    }

    public static final int IS_PORTRAIT_ALBUM_COVER_FIELD_NUMBER = 16;
    private boolean isPortraitAlbumCover_;
    /**
     * <code>optional bool is_portrait_album_cover = 16;</code>
     * @return Whether the isPortraitAlbumCover field is set.
     */
    public boolean hasIsPortraitAlbumCover() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional bool is_portrait_album_cover = 16;</code>
     * @return The isPortraitAlbumCover.
     */
    public boolean getIsPortraitAlbumCover() {
      return isPortraitAlbumCover_;
    }

    public static final int PORTRAIT_GROUP_FIELD_NUMBER = 17;
    private com.spotify.metadata.Metadata.ImageGroup portraitGroup_;
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup portrait_group = 17;</code>
     * @return Whether the portraitGroup field is set.
     */
    public boolean hasPortraitGroup() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup portrait_group = 17;</code>
     * @return The portraitGroup.
     */
    public com.spotify.metadata.Metadata.ImageGroup getPortraitGroup() {
      return portraitGroup_ == null ? com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : portraitGroup_;
    }
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup portrait_group = 17;</code>
     */
    public com.spotify.metadata.Metadata.ImageGroupOrBuilder getPortraitGroupOrBuilder() {
      return portraitGroup_ == null ? com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : portraitGroup_;
    }

    public static final int SALE_PERIOD_FIELD_NUMBER = 18;
    private java.util.List<com.spotify.metadata.Metadata.SalePeriod> salePeriod_;
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.SalePeriod> getSalePeriodList() {
      return salePeriod_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.SalePeriodOrBuilder> 
        getSalePeriodOrBuilderList() {
      return salePeriod_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
     */
    public int getSalePeriodCount() {
      return salePeriod_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
     */
    public com.spotify.metadata.Metadata.SalePeriod getSalePeriod(int index) {
      return salePeriod_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
     */
    public com.spotify.metadata.Metadata.SalePeriodOrBuilder getSalePeriodOrBuilder(
        int index) {
      return salePeriod_.get(index);
    }

    public static final int AVAILABILITY_FIELD_NUMBER = 20;
    private java.util.List<com.spotify.metadata.Metadata.Availability> availability_;
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Availability> getAvailabilityList() {
      return availability_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
        getAvailabilityOrBuilderList() {
      return availability_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
     */
    public int getAvailabilityCount() {
      return availability_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
     */
    public com.spotify.metadata.Metadata.Availability getAvailability(int index) {
      return availability_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
     */
    public com.spotify.metadata.Metadata.AvailabilityOrBuilder getAvailabilityOrBuilder(
        int index) {
      return availability_.get(index);
    }

    public static com.spotify.metadata.Metadata.Artist parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Artist parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Artist parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Artist parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Artist parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Artist parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Artist parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Artist 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.spotify.metadata.Metadata.Artist parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Artist 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.spotify.metadata.Metadata.Artist parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Artist 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.spotify.metadata.Metadata.Artist 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.Artist}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.Artist)
        com.spotify.metadata.Metadata.ArtistOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Artist_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Artist_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.Artist.class, com.spotify.metadata.Metadata.Artist.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.Artist.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getTopTrackFieldBuilder();
          getAlbumGroupFieldBuilder();
          getSingleGroupFieldBuilder();
          getCompilationGroupFieldBuilder();
          getAppearsOnGroupFieldBuilder();
          getExternalIdFieldBuilder();
          getPortraitFieldBuilder();
          getBiographyFieldBuilder();
          getActivityPeriodFieldBuilder();
          getRestrictionFieldBuilder();
          getRelatedFieldBuilder();
          getPortraitGroupFieldBuilder();
          getSalePeriodFieldBuilder();
          getAvailabilityFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        gid_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        popularity_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        if (topTrackBuilder_ == null) {
          topTrack_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          topTrackBuilder_.clear();
        }
        if (albumGroupBuilder_ == null) {
          albumGroup_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          albumGroupBuilder_.clear();
        }
        if (singleGroupBuilder_ == null) {
          singleGroup_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          singleGroupBuilder_.clear();
        }
        if (compilationGroupBuilder_ == null) {
          compilationGroup_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          compilationGroupBuilder_.clear();
        }
        if (appearsOnGroupBuilder_ == null) {
          appearsOnGroup_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
        } else {
          appearsOnGroupBuilder_.clear();
        }
        genre_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000100);
        if (externalIdBuilder_ == null) {
          externalId_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
        } else {
          externalIdBuilder_.clear();
        }
        if (portraitBuilder_ == null) {
          portrait_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000400);
        } else {
          portraitBuilder_.clear();
        }
        if (biographyBuilder_ == null) {
          biography_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000800);
        } else {
          biographyBuilder_.clear();
        }
        if (activityPeriodBuilder_ == null) {
          activityPeriod_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00001000);
        } else {
          activityPeriodBuilder_.clear();
        }
        if (restrictionBuilder_ == null) {
          restriction_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00002000);
        } else {
          restrictionBuilder_.clear();
        }
        if (relatedBuilder_ == null) {
          related_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00004000);
        } else {
          relatedBuilder_.clear();
        }
        isPortraitAlbumCover_ = false;
        bitField0_ = (bitField0_ & ~0x00008000);
        if (portraitGroupBuilder_ == null) {
          portraitGroup_ = null;
        } else {
          portraitGroupBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00010000);
        if (salePeriodBuilder_ == null) {
          salePeriod_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00020000);
        } else {
          salePeriodBuilder_.clear();
        }
        if (availabilityBuilder_ == null) {
          availability_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00040000);
        } else {
          availabilityBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Artist_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Artist getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.Artist.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Artist build() {
        com.spotify.metadata.Metadata.Artist result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Artist buildPartial() {
        com.spotify.metadata.Metadata.Artist result = new com.spotify.metadata.Metadata.Artist(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.gid_ = gid_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.popularity_ = popularity_;
          to_bitField0_ |= 0x00000004;
        }
        if (topTrackBuilder_ == null) {
          if (((bitField0_ & 0x00000008) != 0)) {
            topTrack_ = java.util.Collections.unmodifiableList(topTrack_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.topTrack_ = topTrack_;
        } else {
          result.topTrack_ = topTrackBuilder_.build();
        }
        if (albumGroupBuilder_ == null) {
          if (((bitField0_ & 0x00000010) != 0)) {
            albumGroup_ = java.util.Collections.unmodifiableList(albumGroup_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.albumGroup_ = albumGroup_;
        } else {
          result.albumGroup_ = albumGroupBuilder_.build();
        }
        if (singleGroupBuilder_ == null) {
          if (((bitField0_ & 0x00000020) != 0)) {
            singleGroup_ = java.util.Collections.unmodifiableList(singleGroup_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.singleGroup_ = singleGroup_;
        } else {
          result.singleGroup_ = singleGroupBuilder_.build();
        }
        if (compilationGroupBuilder_ == null) {
          if (((bitField0_ & 0x00000040) != 0)) {
            compilationGroup_ = java.util.Collections.unmodifiableList(compilationGroup_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.compilationGroup_ = compilationGroup_;
        } else {
          result.compilationGroup_ = compilationGroupBuilder_.build();
        }
        if (appearsOnGroupBuilder_ == null) {
          if (((bitField0_ & 0x00000080) != 0)) {
            appearsOnGroup_ = java.util.Collections.unmodifiableList(appearsOnGroup_);
            bitField0_ = (bitField0_ & ~0x00000080);
          }
          result.appearsOnGroup_ = appearsOnGroup_;
        } else {
          result.appearsOnGroup_ = appearsOnGroupBuilder_.build();
        }
        if (((bitField0_ & 0x00000100) != 0)) {
          genre_ = genre_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000100);
        }
        result.genre_ = genre_;
        if (externalIdBuilder_ == null) {
          if (((bitField0_ & 0x00000200) != 0)) {
            externalId_ = java.util.Collections.unmodifiableList(externalId_);
            bitField0_ = (bitField0_ & ~0x00000200);
          }
          result.externalId_ = externalId_;
        } else {
          result.externalId_ = externalIdBuilder_.build();
        }
        if (portraitBuilder_ == null) {
          if (((bitField0_ & 0x00000400) != 0)) {
            portrait_ = java.util.Collections.unmodifiableList(portrait_);
            bitField0_ = (bitField0_ & ~0x00000400);
          }
          result.portrait_ = portrait_;
        } else {
          result.portrait_ = portraitBuilder_.build();
        }
        if (biographyBuilder_ == null) {
          if (((bitField0_ & 0x00000800) != 0)) {
            biography_ = java.util.Collections.unmodifiableList(biography_);
            bitField0_ = (bitField0_ & ~0x00000800);
          }
          result.biography_ = biography_;
        } else {
          result.biography_ = biographyBuilder_.build();
        }
        if (activityPeriodBuilder_ == null) {
          if (((bitField0_ & 0x00001000) != 0)) {
            activityPeriod_ = java.util.Collections.unmodifiableList(activityPeriod_);
            bitField0_ = (bitField0_ & ~0x00001000);
          }
          result.activityPeriod_ = activityPeriod_;
        } else {
          result.activityPeriod_ = activityPeriodBuilder_.build();
        }
        if (restrictionBuilder_ == null) {
          if (((bitField0_ & 0x00002000) != 0)) {
            restriction_ = java.util.Collections.unmodifiableList(restriction_);
            bitField0_ = (bitField0_ & ~0x00002000);
          }
          result.restriction_ = restriction_;
        } else {
          result.restriction_ = restrictionBuilder_.build();
        }
        if (relatedBuilder_ == null) {
          if (((bitField0_ & 0x00004000) != 0)) {
            related_ = java.util.Collections.unmodifiableList(related_);
            bitField0_ = (bitField0_ & ~0x00004000);
          }
          result.related_ = related_;
        } else {
          result.related_ = relatedBuilder_.build();
        }
        if (((from_bitField0_ & 0x00008000) != 0)) {
          result.isPortraitAlbumCover_ = isPortraitAlbumCover_;
          to_bitField0_ |= 0x00000008;
        }
        if (((from_bitField0_ & 0x00010000) != 0)) {
          if (portraitGroupBuilder_ == null) {
            result.portraitGroup_ = portraitGroup_;
          } else {
            result.portraitGroup_ = portraitGroupBuilder_.build();
          }
          to_bitField0_ |= 0x00000010;
        }
        if (salePeriodBuilder_ == null) {
          if (((bitField0_ & 0x00020000) != 0)) {
            salePeriod_ = java.util.Collections.unmodifiableList(salePeriod_);
            bitField0_ = (bitField0_ & ~0x00020000);
          }
          result.salePeriod_ = salePeriod_;
        } else {
          result.salePeriod_ = salePeriodBuilder_.build();
        }
        if (availabilityBuilder_ == null) {
          if (((bitField0_ & 0x00040000) != 0)) {
            availability_ = java.util.Collections.unmodifiableList(availability_);
            bitField0_ = (bitField0_ & ~0x00040000);
          }
          result.availability_ = availability_;
        } else {
          result.availability_ = availabilityBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private com.google.protobuf.ByteString gid_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes gid = 1;</code>
       * @return Whether the gid field is set.
       */
      public boolean hasGid() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional bytes gid = 1;</code>
       * @return The gid.
       */
      public com.google.protobuf.ByteString getGid() {
        return gid_;
      }
      /**
       * <code>optional bytes gid = 1;</code>
       * @param value The gid to set.
       * @return This builder for chaining.
       */
      public Builder setGid(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        gid_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes gid = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearGid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        gid_ = getDefaultInstance().getGid();
        onChanged();
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 2;</code>
       * @return Whether the name field is set.
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional string name = 2;</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();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 2;</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;
        }
      }
      /**
       * <code>optional string name = 2;</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();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000002);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 2;</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();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }

      private int popularity_ ;
      /**
       * <code>optional sint32 popularity = 3;</code>
       * @return Whether the popularity field is set.
       */
      public boolean hasPopularity() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional sint32 popularity = 3;</code>
       * @return The popularity.
       */
      public int getPopularity() {
        return popularity_;
      }
      /**
       * <code>optional sint32 popularity = 3;</code>
       * @param value The popularity to set.
       * @return This builder for chaining.
       */
      public Builder setPopularity(int value) {
        bitField0_ |= 0x00000004;
        popularity_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 popularity = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearPopularity() {
        bitField0_ = (bitField0_ & ~0x00000004);
        popularity_ = 0;
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.metadata.Metadata.TopTracks> topTrack_ =
        java.util.Collections.emptyList();
      private void ensureTopTrackIsMutable() {
        if (!((bitField0_ & 0x00000008) != 0)) {
          topTrack_ = new java.util.ArrayList<com.spotify.metadata.Metadata.TopTracks>(topTrack_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.TopTracks, com.spotify.metadata.Metadata.TopTracks.Builder, com.spotify.metadata.Metadata.TopTracksOrBuilder> topTrackBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.TopTracks> getTopTrackList() {
        if (topTrackBuilder_ == null) {
          return java.util.Collections.unmodifiableList(topTrack_);
        } else {
          return topTrackBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
       */
      public int getTopTrackCount() {
        if (topTrackBuilder_ == null) {
          return topTrack_.size();
        } else {
          return topTrackBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
       */
      public com.spotify.metadata.Metadata.TopTracks getTopTrack(int index) {
        if (topTrackBuilder_ == null) {
          return topTrack_.get(index);
        } else {
          return topTrackBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
       */
      public Builder setTopTrack(
          int index, com.spotify.metadata.Metadata.TopTracks value) {
        if (topTrackBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTopTrackIsMutable();
          topTrack_.set(index, value);
          onChanged();
        } else {
          topTrackBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
       */
      public Builder setTopTrack(
          int index, com.spotify.metadata.Metadata.TopTracks.Builder builderForValue) {
        if (topTrackBuilder_ == null) {
          ensureTopTrackIsMutable();
          topTrack_.set(index, builderForValue.build());
          onChanged();
        } else {
          topTrackBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
       */
      public Builder addTopTrack(com.spotify.metadata.Metadata.TopTracks value) {
        if (topTrackBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTopTrackIsMutable();
          topTrack_.add(value);
          onChanged();
        } else {
          topTrackBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
       */
      public Builder addTopTrack(
          int index, com.spotify.metadata.Metadata.TopTracks value) {
        if (topTrackBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTopTrackIsMutable();
          topTrack_.add(index, value);
          onChanged();
        } else {
          topTrackBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
       */
      public Builder addTopTrack(
          com.spotify.metadata.Metadata.TopTracks.Builder builderForValue) {
        if (topTrackBuilder_ == null) {
          ensureTopTrackIsMutable();
          topTrack_.add(builderForValue.build());
          onChanged();
        } else {
          topTrackBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
       */
      public Builder addTopTrack(
          int index, com.spotify.metadata.Metadata.TopTracks.Builder builderForValue) {
        if (topTrackBuilder_ == null) {
          ensureTopTrackIsMutable();
          topTrack_.add(index, builderForValue.build());
          onChanged();
        } else {
          topTrackBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
       */
      public Builder addAllTopTrack(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.TopTracks> values) {
        if (topTrackBuilder_ == null) {
          ensureTopTrackIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, topTrack_);
          onChanged();
        } else {
          topTrackBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
       */
      public Builder clearTopTrack() {
        if (topTrackBuilder_ == null) {
          topTrack_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          topTrackBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
       */
      public Builder removeTopTrack(int index) {
        if (topTrackBuilder_ == null) {
          ensureTopTrackIsMutable();
          topTrack_.remove(index);
          onChanged();
        } else {
          topTrackBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
       */
      public com.spotify.metadata.Metadata.TopTracks.Builder getTopTrackBuilder(
          int index) {
        return getTopTrackFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
       */
      public com.spotify.metadata.Metadata.TopTracksOrBuilder getTopTrackOrBuilder(
          int index) {
        if (topTrackBuilder_ == null) {
          return topTrack_.get(index);  } else {
          return topTrackBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.TopTracksOrBuilder> 
           getTopTrackOrBuilderList() {
        if (topTrackBuilder_ != null) {
          return topTrackBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(topTrack_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
       */
      public com.spotify.metadata.Metadata.TopTracks.Builder addTopTrackBuilder() {
        return getTopTrackFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.TopTracks.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
       */
      public com.spotify.metadata.Metadata.TopTracks.Builder addTopTrackBuilder(
          int index) {
        return getTopTrackFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.TopTracks.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.TopTracks top_track = 4;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.TopTracks.Builder> 
           getTopTrackBuilderList() {
        return getTopTrackFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.TopTracks, com.spotify.metadata.Metadata.TopTracks.Builder, com.spotify.metadata.Metadata.TopTracksOrBuilder> 
          getTopTrackFieldBuilder() {
        if (topTrackBuilder_ == null) {
          topTrackBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.TopTracks, com.spotify.metadata.Metadata.TopTracks.Builder, com.spotify.metadata.Metadata.TopTracksOrBuilder>(
                  topTrack_,
                  ((bitField0_ & 0x00000008) != 0),
                  getParentForChildren(),
                  isClean());
          topTrack_ = null;
        }
        return topTrackBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.AlbumGroup> albumGroup_ =
        java.util.Collections.emptyList();
      private void ensureAlbumGroupIsMutable() {
        if (!((bitField0_ & 0x00000010) != 0)) {
          albumGroup_ = new java.util.ArrayList<com.spotify.metadata.Metadata.AlbumGroup>(albumGroup_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.AlbumGroup, com.spotify.metadata.Metadata.AlbumGroup.Builder, com.spotify.metadata.Metadata.AlbumGroupOrBuilder> albumGroupBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.AlbumGroup> getAlbumGroupList() {
        if (albumGroupBuilder_ == null) {
          return java.util.Collections.unmodifiableList(albumGroup_);
        } else {
          return albumGroupBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
       */
      public int getAlbumGroupCount() {
        if (albumGroupBuilder_ == null) {
          return albumGroup_.size();
        } else {
          return albumGroupBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroup getAlbumGroup(int index) {
        if (albumGroupBuilder_ == null) {
          return albumGroup_.get(index);
        } else {
          return albumGroupBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
       */
      public Builder setAlbumGroup(
          int index, com.spotify.metadata.Metadata.AlbumGroup value) {
        if (albumGroupBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAlbumGroupIsMutable();
          albumGroup_.set(index, value);
          onChanged();
        } else {
          albumGroupBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
       */
      public Builder setAlbumGroup(
          int index, com.spotify.metadata.Metadata.AlbumGroup.Builder builderForValue) {
        if (albumGroupBuilder_ == null) {
          ensureAlbumGroupIsMutable();
          albumGroup_.set(index, builderForValue.build());
          onChanged();
        } else {
          albumGroupBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
       */
      public Builder addAlbumGroup(com.spotify.metadata.Metadata.AlbumGroup value) {
        if (albumGroupBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAlbumGroupIsMutable();
          albumGroup_.add(value);
          onChanged();
        } else {
          albumGroupBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
       */
      public Builder addAlbumGroup(
          int index, com.spotify.metadata.Metadata.AlbumGroup value) {
        if (albumGroupBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAlbumGroupIsMutable();
          albumGroup_.add(index, value);
          onChanged();
        } else {
          albumGroupBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
       */
      public Builder addAlbumGroup(
          com.spotify.metadata.Metadata.AlbumGroup.Builder builderForValue) {
        if (albumGroupBuilder_ == null) {
          ensureAlbumGroupIsMutable();
          albumGroup_.add(builderForValue.build());
          onChanged();
        } else {
          albumGroupBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
       */
      public Builder addAlbumGroup(
          int index, com.spotify.metadata.Metadata.AlbumGroup.Builder builderForValue) {
        if (albumGroupBuilder_ == null) {
          ensureAlbumGroupIsMutable();
          albumGroup_.add(index, builderForValue.build());
          onChanged();
        } else {
          albumGroupBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
       */
      public Builder addAllAlbumGroup(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.AlbumGroup> values) {
        if (albumGroupBuilder_ == null) {
          ensureAlbumGroupIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, albumGroup_);
          onChanged();
        } else {
          albumGroupBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
       */
      public Builder clearAlbumGroup() {
        if (albumGroupBuilder_ == null) {
          albumGroup_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          albumGroupBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
       */
      public Builder removeAlbumGroup(int index) {
        if (albumGroupBuilder_ == null) {
          ensureAlbumGroupIsMutable();
          albumGroup_.remove(index);
          onChanged();
        } else {
          albumGroupBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroup.Builder getAlbumGroupBuilder(
          int index) {
        return getAlbumGroupFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroupOrBuilder getAlbumGroupOrBuilder(
          int index) {
        if (albumGroupBuilder_ == null) {
          return albumGroup_.get(index);  } else {
          return albumGroupBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.AlbumGroupOrBuilder> 
           getAlbumGroupOrBuilderList() {
        if (albumGroupBuilder_ != null) {
          return albumGroupBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(albumGroup_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroup.Builder addAlbumGroupBuilder() {
        return getAlbumGroupFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.AlbumGroup.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroup.Builder addAlbumGroupBuilder(
          int index) {
        return getAlbumGroupFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.AlbumGroup.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup album_group = 5;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.AlbumGroup.Builder> 
           getAlbumGroupBuilderList() {
        return getAlbumGroupFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.AlbumGroup, com.spotify.metadata.Metadata.AlbumGroup.Builder, com.spotify.metadata.Metadata.AlbumGroupOrBuilder> 
          getAlbumGroupFieldBuilder() {
        if (albumGroupBuilder_ == null) {
          albumGroupBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.AlbumGroup, com.spotify.metadata.Metadata.AlbumGroup.Builder, com.spotify.metadata.Metadata.AlbumGroupOrBuilder>(
                  albumGroup_,
                  ((bitField0_ & 0x00000010) != 0),
                  getParentForChildren(),
                  isClean());
          albumGroup_ = null;
        }
        return albumGroupBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.AlbumGroup> singleGroup_ =
        java.util.Collections.emptyList();
      private void ensureSingleGroupIsMutable() {
        if (!((bitField0_ & 0x00000020) != 0)) {
          singleGroup_ = new java.util.ArrayList<com.spotify.metadata.Metadata.AlbumGroup>(singleGroup_);
          bitField0_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.AlbumGroup, com.spotify.metadata.Metadata.AlbumGroup.Builder, com.spotify.metadata.Metadata.AlbumGroupOrBuilder> singleGroupBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.AlbumGroup> getSingleGroupList() {
        if (singleGroupBuilder_ == null) {
          return java.util.Collections.unmodifiableList(singleGroup_);
        } else {
          return singleGroupBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
       */
      public int getSingleGroupCount() {
        if (singleGroupBuilder_ == null) {
          return singleGroup_.size();
        } else {
          return singleGroupBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroup getSingleGroup(int index) {
        if (singleGroupBuilder_ == null) {
          return singleGroup_.get(index);
        } else {
          return singleGroupBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
       */
      public Builder setSingleGroup(
          int index, com.spotify.metadata.Metadata.AlbumGroup value) {
        if (singleGroupBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSingleGroupIsMutable();
          singleGroup_.set(index, value);
          onChanged();
        } else {
          singleGroupBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
       */
      public Builder setSingleGroup(
          int index, com.spotify.metadata.Metadata.AlbumGroup.Builder builderForValue) {
        if (singleGroupBuilder_ == null) {
          ensureSingleGroupIsMutable();
          singleGroup_.set(index, builderForValue.build());
          onChanged();
        } else {
          singleGroupBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
       */
      public Builder addSingleGroup(com.spotify.metadata.Metadata.AlbumGroup value) {
        if (singleGroupBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSingleGroupIsMutable();
          singleGroup_.add(value);
          onChanged();
        } else {
          singleGroupBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
       */
      public Builder addSingleGroup(
          int index, com.spotify.metadata.Metadata.AlbumGroup value) {
        if (singleGroupBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSingleGroupIsMutable();
          singleGroup_.add(index, value);
          onChanged();
        } else {
          singleGroupBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
       */
      public Builder addSingleGroup(
          com.spotify.metadata.Metadata.AlbumGroup.Builder builderForValue) {
        if (singleGroupBuilder_ == null) {
          ensureSingleGroupIsMutable();
          singleGroup_.add(builderForValue.build());
          onChanged();
        } else {
          singleGroupBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
       */
      public Builder addSingleGroup(
          int index, com.spotify.metadata.Metadata.AlbumGroup.Builder builderForValue) {
        if (singleGroupBuilder_ == null) {
          ensureSingleGroupIsMutable();
          singleGroup_.add(index, builderForValue.build());
          onChanged();
        } else {
          singleGroupBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
       */
      public Builder addAllSingleGroup(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.AlbumGroup> values) {
        if (singleGroupBuilder_ == null) {
          ensureSingleGroupIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, singleGroup_);
          onChanged();
        } else {
          singleGroupBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
       */
      public Builder clearSingleGroup() {
        if (singleGroupBuilder_ == null) {
          singleGroup_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          singleGroupBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
       */
      public Builder removeSingleGroup(int index) {
        if (singleGroupBuilder_ == null) {
          ensureSingleGroupIsMutable();
          singleGroup_.remove(index);
          onChanged();
        } else {
          singleGroupBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroup.Builder getSingleGroupBuilder(
          int index) {
        return getSingleGroupFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroupOrBuilder getSingleGroupOrBuilder(
          int index) {
        if (singleGroupBuilder_ == null) {
          return singleGroup_.get(index);  } else {
          return singleGroupBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.AlbumGroupOrBuilder> 
           getSingleGroupOrBuilderList() {
        if (singleGroupBuilder_ != null) {
          return singleGroupBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(singleGroup_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroup.Builder addSingleGroupBuilder() {
        return getSingleGroupFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.AlbumGroup.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroup.Builder addSingleGroupBuilder(
          int index) {
        return getSingleGroupFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.AlbumGroup.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup single_group = 6;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.AlbumGroup.Builder> 
           getSingleGroupBuilderList() {
        return getSingleGroupFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.AlbumGroup, com.spotify.metadata.Metadata.AlbumGroup.Builder, com.spotify.metadata.Metadata.AlbumGroupOrBuilder> 
          getSingleGroupFieldBuilder() {
        if (singleGroupBuilder_ == null) {
          singleGroupBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.AlbumGroup, com.spotify.metadata.Metadata.AlbumGroup.Builder, com.spotify.metadata.Metadata.AlbumGroupOrBuilder>(
                  singleGroup_,
                  ((bitField0_ & 0x00000020) != 0),
                  getParentForChildren(),
                  isClean());
          singleGroup_ = null;
        }
        return singleGroupBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.AlbumGroup> compilationGroup_ =
        java.util.Collections.emptyList();
      private void ensureCompilationGroupIsMutable() {
        if (!((bitField0_ & 0x00000040) != 0)) {
          compilationGroup_ = new java.util.ArrayList<com.spotify.metadata.Metadata.AlbumGroup>(compilationGroup_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.AlbumGroup, com.spotify.metadata.Metadata.AlbumGroup.Builder, com.spotify.metadata.Metadata.AlbumGroupOrBuilder> compilationGroupBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.AlbumGroup> getCompilationGroupList() {
        if (compilationGroupBuilder_ == null) {
          return java.util.Collections.unmodifiableList(compilationGroup_);
        } else {
          return compilationGroupBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
       */
      public int getCompilationGroupCount() {
        if (compilationGroupBuilder_ == null) {
          return compilationGroup_.size();
        } else {
          return compilationGroupBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroup getCompilationGroup(int index) {
        if (compilationGroupBuilder_ == null) {
          return compilationGroup_.get(index);
        } else {
          return compilationGroupBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
       */
      public Builder setCompilationGroup(
          int index, com.spotify.metadata.Metadata.AlbumGroup value) {
        if (compilationGroupBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCompilationGroupIsMutable();
          compilationGroup_.set(index, value);
          onChanged();
        } else {
          compilationGroupBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
       */
      public Builder setCompilationGroup(
          int index, com.spotify.metadata.Metadata.AlbumGroup.Builder builderForValue) {
        if (compilationGroupBuilder_ == null) {
          ensureCompilationGroupIsMutable();
          compilationGroup_.set(index, builderForValue.build());
          onChanged();
        } else {
          compilationGroupBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
       */
      public Builder addCompilationGroup(com.spotify.metadata.Metadata.AlbumGroup value) {
        if (compilationGroupBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCompilationGroupIsMutable();
          compilationGroup_.add(value);
          onChanged();
        } else {
          compilationGroupBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
       */
      public Builder addCompilationGroup(
          int index, com.spotify.metadata.Metadata.AlbumGroup value) {
        if (compilationGroupBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCompilationGroupIsMutable();
          compilationGroup_.add(index, value);
          onChanged();
        } else {
          compilationGroupBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
       */
      public Builder addCompilationGroup(
          com.spotify.metadata.Metadata.AlbumGroup.Builder builderForValue) {
        if (compilationGroupBuilder_ == null) {
          ensureCompilationGroupIsMutable();
          compilationGroup_.add(builderForValue.build());
          onChanged();
        } else {
          compilationGroupBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
       */
      public Builder addCompilationGroup(
          int index, com.spotify.metadata.Metadata.AlbumGroup.Builder builderForValue) {
        if (compilationGroupBuilder_ == null) {
          ensureCompilationGroupIsMutable();
          compilationGroup_.add(index, builderForValue.build());
          onChanged();
        } else {
          compilationGroupBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
       */
      public Builder addAllCompilationGroup(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.AlbumGroup> values) {
        if (compilationGroupBuilder_ == null) {
          ensureCompilationGroupIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, compilationGroup_);
          onChanged();
        } else {
          compilationGroupBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
       */
      public Builder clearCompilationGroup() {
        if (compilationGroupBuilder_ == null) {
          compilationGroup_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          compilationGroupBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
       */
      public Builder removeCompilationGroup(int index) {
        if (compilationGroupBuilder_ == null) {
          ensureCompilationGroupIsMutable();
          compilationGroup_.remove(index);
          onChanged();
        } else {
          compilationGroupBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroup.Builder getCompilationGroupBuilder(
          int index) {
        return getCompilationGroupFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroupOrBuilder getCompilationGroupOrBuilder(
          int index) {
        if (compilationGroupBuilder_ == null) {
          return compilationGroup_.get(index);  } else {
          return compilationGroupBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.AlbumGroupOrBuilder> 
           getCompilationGroupOrBuilderList() {
        if (compilationGroupBuilder_ != null) {
          return compilationGroupBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(compilationGroup_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroup.Builder addCompilationGroupBuilder() {
        return getCompilationGroupFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.AlbumGroup.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroup.Builder addCompilationGroupBuilder(
          int index) {
        return getCompilationGroupFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.AlbumGroup.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup compilation_group = 7;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.AlbumGroup.Builder> 
           getCompilationGroupBuilderList() {
        return getCompilationGroupFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.AlbumGroup, com.spotify.metadata.Metadata.AlbumGroup.Builder, com.spotify.metadata.Metadata.AlbumGroupOrBuilder> 
          getCompilationGroupFieldBuilder() {
        if (compilationGroupBuilder_ == null) {
          compilationGroupBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.AlbumGroup, com.spotify.metadata.Metadata.AlbumGroup.Builder, com.spotify.metadata.Metadata.AlbumGroupOrBuilder>(
                  compilationGroup_,
                  ((bitField0_ & 0x00000040) != 0),
                  getParentForChildren(),
                  isClean());
          compilationGroup_ = null;
        }
        return compilationGroupBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.AlbumGroup> appearsOnGroup_ =
        java.util.Collections.emptyList();
      private void ensureAppearsOnGroupIsMutable() {
        if (!((bitField0_ & 0x00000080) != 0)) {
          appearsOnGroup_ = new java.util.ArrayList<com.spotify.metadata.Metadata.AlbumGroup>(appearsOnGroup_);
          bitField0_ |= 0x00000080;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.AlbumGroup, com.spotify.metadata.Metadata.AlbumGroup.Builder, com.spotify.metadata.Metadata.AlbumGroupOrBuilder> appearsOnGroupBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.AlbumGroup> getAppearsOnGroupList() {
        if (appearsOnGroupBuilder_ == null) {
          return java.util.Collections.unmodifiableList(appearsOnGroup_);
        } else {
          return appearsOnGroupBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
       */
      public int getAppearsOnGroupCount() {
        if (appearsOnGroupBuilder_ == null) {
          return appearsOnGroup_.size();
        } else {
          return appearsOnGroupBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroup getAppearsOnGroup(int index) {
        if (appearsOnGroupBuilder_ == null) {
          return appearsOnGroup_.get(index);
        } else {
          return appearsOnGroupBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
       */
      public Builder setAppearsOnGroup(
          int index, com.spotify.metadata.Metadata.AlbumGroup value) {
        if (appearsOnGroupBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAppearsOnGroupIsMutable();
          appearsOnGroup_.set(index, value);
          onChanged();
        } else {
          appearsOnGroupBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
       */
      public Builder setAppearsOnGroup(
          int index, com.spotify.metadata.Metadata.AlbumGroup.Builder builderForValue) {
        if (appearsOnGroupBuilder_ == null) {
          ensureAppearsOnGroupIsMutable();
          appearsOnGroup_.set(index, builderForValue.build());
          onChanged();
        } else {
          appearsOnGroupBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
       */
      public Builder addAppearsOnGroup(com.spotify.metadata.Metadata.AlbumGroup value) {
        if (appearsOnGroupBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAppearsOnGroupIsMutable();
          appearsOnGroup_.add(value);
          onChanged();
        } else {
          appearsOnGroupBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
       */
      public Builder addAppearsOnGroup(
          int index, com.spotify.metadata.Metadata.AlbumGroup value) {
        if (appearsOnGroupBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAppearsOnGroupIsMutable();
          appearsOnGroup_.add(index, value);
          onChanged();
        } else {
          appearsOnGroupBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
       */
      public Builder addAppearsOnGroup(
          com.spotify.metadata.Metadata.AlbumGroup.Builder builderForValue) {
        if (appearsOnGroupBuilder_ == null) {
          ensureAppearsOnGroupIsMutable();
          appearsOnGroup_.add(builderForValue.build());
          onChanged();
        } else {
          appearsOnGroupBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
       */
      public Builder addAppearsOnGroup(
          int index, com.spotify.metadata.Metadata.AlbumGroup.Builder builderForValue) {
        if (appearsOnGroupBuilder_ == null) {
          ensureAppearsOnGroupIsMutable();
          appearsOnGroup_.add(index, builderForValue.build());
          onChanged();
        } else {
          appearsOnGroupBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
       */
      public Builder addAllAppearsOnGroup(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.AlbumGroup> values) {
        if (appearsOnGroupBuilder_ == null) {
          ensureAppearsOnGroupIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, appearsOnGroup_);
          onChanged();
        } else {
          appearsOnGroupBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
       */
      public Builder clearAppearsOnGroup() {
        if (appearsOnGroupBuilder_ == null) {
          appearsOnGroup_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
          onChanged();
        } else {
          appearsOnGroupBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
       */
      public Builder removeAppearsOnGroup(int index) {
        if (appearsOnGroupBuilder_ == null) {
          ensureAppearsOnGroupIsMutable();
          appearsOnGroup_.remove(index);
          onChanged();
        } else {
          appearsOnGroupBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroup.Builder getAppearsOnGroupBuilder(
          int index) {
        return getAppearsOnGroupFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroupOrBuilder getAppearsOnGroupOrBuilder(
          int index) {
        if (appearsOnGroupBuilder_ == null) {
          return appearsOnGroup_.get(index);  } else {
          return appearsOnGroupBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.AlbumGroupOrBuilder> 
           getAppearsOnGroupOrBuilderList() {
        if (appearsOnGroupBuilder_ != null) {
          return appearsOnGroupBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(appearsOnGroup_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroup.Builder addAppearsOnGroupBuilder() {
        return getAppearsOnGroupFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.AlbumGroup.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
       */
      public com.spotify.metadata.Metadata.AlbumGroup.Builder addAppearsOnGroupBuilder(
          int index) {
        return getAppearsOnGroupFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.AlbumGroup.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.AlbumGroup appears_on_group = 8;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.AlbumGroup.Builder> 
           getAppearsOnGroupBuilderList() {
        return getAppearsOnGroupFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.AlbumGroup, com.spotify.metadata.Metadata.AlbumGroup.Builder, com.spotify.metadata.Metadata.AlbumGroupOrBuilder> 
          getAppearsOnGroupFieldBuilder() {
        if (appearsOnGroupBuilder_ == null) {
          appearsOnGroupBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.AlbumGroup, com.spotify.metadata.Metadata.AlbumGroup.Builder, com.spotify.metadata.Metadata.AlbumGroupOrBuilder>(
                  appearsOnGroup_,
                  ((bitField0_ & 0x00000080) != 0),
                  getParentForChildren(),
                  isClean());
          appearsOnGroup_ = null;
        }
        return appearsOnGroupBuilder_;
      }

      private com.google.protobuf.LazyStringList genre_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureGenreIsMutable() {
        if (!((bitField0_ & 0x00000100) != 0)) {
          genre_ = new com.google.protobuf.LazyStringArrayList(genre_);
          bitField0_ |= 0x00000100;
         }
      }
      /**
       * <code>repeated string genre = 9;</code>
       * @return A list containing the genre.
       */
      public com.google.protobuf.ProtocolStringList
          getGenreList() {
        return genre_.getUnmodifiableView();
      }
      /**
       * <code>repeated string genre = 9;</code>
       * @return The count of genre.
       */
      public int getGenreCount() {
        return genre_.size();
      }
      /**
       * <code>repeated string genre = 9;</code>
       * @param index The index of the element to return.
       * @return The genre at the given index.
       */
      public java.lang.String getGenre(int index) {
        return genre_.get(index);
      }
      /**
       * <code>repeated string genre = 9;</code>
       * @param index The index of the value to return.
       * @return The bytes of the genre at the given index.
       */
      public com.google.protobuf.ByteString
          getGenreBytes(int index) {
        return genre_.getByteString(index);
      }
      /**
       * <code>repeated string genre = 9;</code>
       * @param index The index to set the value at.
       * @param value The genre to set.
       * @return This builder for chaining.
       */
      public Builder setGenre(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGenreIsMutable();
        genre_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string genre = 9;</code>
       * @param value The genre to add.
       * @return This builder for chaining.
       */
      public Builder addGenre(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGenreIsMutable();
        genre_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string genre = 9;</code>
       * @param values The genre to add.
       * @return This builder for chaining.
       */
      public Builder addAllGenre(
          java.lang.Iterable<java.lang.String> values) {
        ensureGenreIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, genre_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string genre = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearGenre() {
        genre_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000100);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string genre = 9;</code>
       * @param value The bytes of the genre to add.
       * @return This builder for chaining.
       */
      public Builder addGenreBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGenreIsMutable();
        genre_.add(value);
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.metadata.Metadata.ExternalId> externalId_ =
        java.util.Collections.emptyList();
      private void ensureExternalIdIsMutable() {
        if (!((bitField0_ & 0x00000200) != 0)) {
          externalId_ = new java.util.ArrayList<com.spotify.metadata.Metadata.ExternalId>(externalId_);
          bitField0_ |= 0x00000200;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.ExternalId, com.spotify.metadata.Metadata.ExternalId.Builder, com.spotify.metadata.Metadata.ExternalIdOrBuilder> externalIdBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.ExternalId> getExternalIdList() {
        if (externalIdBuilder_ == null) {
          return java.util.Collections.unmodifiableList(externalId_);
        } else {
          return externalIdBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public int getExternalIdCount() {
        if (externalIdBuilder_ == null) {
          return externalId_.size();
        } else {
          return externalIdBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public com.spotify.metadata.Metadata.ExternalId getExternalId(int index) {
        if (externalIdBuilder_ == null) {
          return externalId_.get(index);
        } else {
          return externalIdBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder setExternalId(
          int index, com.spotify.metadata.Metadata.ExternalId value) {
        if (externalIdBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExternalIdIsMutable();
          externalId_.set(index, value);
          onChanged();
        } else {
          externalIdBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder setExternalId(
          int index, com.spotify.metadata.Metadata.ExternalId.Builder builderForValue) {
        if (externalIdBuilder_ == null) {
          ensureExternalIdIsMutable();
          externalId_.set(index, builderForValue.build());
          onChanged();
        } else {
          externalIdBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder addExternalId(com.spotify.metadata.Metadata.ExternalId value) {
        if (externalIdBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExternalIdIsMutable();
          externalId_.add(value);
          onChanged();
        } else {
          externalIdBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder addExternalId(
          int index, com.spotify.metadata.Metadata.ExternalId value) {
        if (externalIdBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExternalIdIsMutable();
          externalId_.add(index, value);
          onChanged();
        } else {
          externalIdBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder addExternalId(
          com.spotify.metadata.Metadata.ExternalId.Builder builderForValue) {
        if (externalIdBuilder_ == null) {
          ensureExternalIdIsMutable();
          externalId_.add(builderForValue.build());
          onChanged();
        } else {
          externalIdBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder addExternalId(
          int index, com.spotify.metadata.Metadata.ExternalId.Builder builderForValue) {
        if (externalIdBuilder_ == null) {
          ensureExternalIdIsMutable();
          externalId_.add(index, builderForValue.build());
          onChanged();
        } else {
          externalIdBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder addAllExternalId(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.ExternalId> values) {
        if (externalIdBuilder_ == null) {
          ensureExternalIdIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, externalId_);
          onChanged();
        } else {
          externalIdBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder clearExternalId() {
        if (externalIdBuilder_ == null) {
          externalId_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
          onChanged();
        } else {
          externalIdBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder removeExternalId(int index) {
        if (externalIdBuilder_ == null) {
          ensureExternalIdIsMutable();
          externalId_.remove(index);
          onChanged();
        } else {
          externalIdBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public com.spotify.metadata.Metadata.ExternalId.Builder getExternalIdBuilder(
          int index) {
        return getExternalIdFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public com.spotify.metadata.Metadata.ExternalIdOrBuilder getExternalIdOrBuilder(
          int index) {
        if (externalIdBuilder_ == null) {
          return externalId_.get(index);  } else {
          return externalIdBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.ExternalIdOrBuilder> 
           getExternalIdOrBuilderList() {
        if (externalIdBuilder_ != null) {
          return externalIdBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(externalId_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public com.spotify.metadata.Metadata.ExternalId.Builder addExternalIdBuilder() {
        return getExternalIdFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.ExternalId.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public com.spotify.metadata.Metadata.ExternalId.Builder addExternalIdBuilder(
          int index) {
        return getExternalIdFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.ExternalId.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.ExternalId.Builder> 
           getExternalIdBuilderList() {
        return getExternalIdFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.ExternalId, com.spotify.metadata.Metadata.ExternalId.Builder, com.spotify.metadata.Metadata.ExternalIdOrBuilder> 
          getExternalIdFieldBuilder() {
        if (externalIdBuilder_ == null) {
          externalIdBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.ExternalId, com.spotify.metadata.Metadata.ExternalId.Builder, com.spotify.metadata.Metadata.ExternalIdOrBuilder>(
                  externalId_,
                  ((bitField0_ & 0x00000200) != 0),
                  getParentForChildren(),
                  isClean());
          externalId_ = null;
        }
        return externalIdBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.Image> portrait_ =
        java.util.Collections.emptyList();
      private void ensurePortraitIsMutable() {
        if (!((bitField0_ & 0x00000400) != 0)) {
          portrait_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Image>(portrait_);
          bitField0_ |= 0x00000400;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Image, com.spotify.metadata.Metadata.Image.Builder, com.spotify.metadata.Metadata.ImageOrBuilder> portraitBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Image> getPortraitList() {
        if (portraitBuilder_ == null) {
          return java.util.Collections.unmodifiableList(portrait_);
        } else {
          return portraitBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
       */
      public int getPortraitCount() {
        if (portraitBuilder_ == null) {
          return portrait_.size();
        } else {
          return portraitBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
       */
      public com.spotify.metadata.Metadata.Image getPortrait(int index) {
        if (portraitBuilder_ == null) {
          return portrait_.get(index);
        } else {
          return portraitBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
       */
      public Builder setPortrait(
          int index, com.spotify.metadata.Metadata.Image value) {
        if (portraitBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePortraitIsMutable();
          portrait_.set(index, value);
          onChanged();
        } else {
          portraitBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
       */
      public Builder setPortrait(
          int index, com.spotify.metadata.Metadata.Image.Builder builderForValue) {
        if (portraitBuilder_ == null) {
          ensurePortraitIsMutable();
          portrait_.set(index, builderForValue.build());
          onChanged();
        } else {
          portraitBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
       */
      public Builder addPortrait(com.spotify.metadata.Metadata.Image value) {
        if (portraitBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePortraitIsMutable();
          portrait_.add(value);
          onChanged();
        } else {
          portraitBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
       */
      public Builder addPortrait(
          int index, com.spotify.metadata.Metadata.Image value) {
        if (portraitBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePortraitIsMutable();
          portrait_.add(index, value);
          onChanged();
        } else {
          portraitBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
       */
      public Builder addPortrait(
          com.spotify.metadata.Metadata.Image.Builder builderForValue) {
        if (portraitBuilder_ == null) {
          ensurePortraitIsMutable();
          portrait_.add(builderForValue.build());
          onChanged();
        } else {
          portraitBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
       */
      public Builder addPortrait(
          int index, com.spotify.metadata.Metadata.Image.Builder builderForValue) {
        if (portraitBuilder_ == null) {
          ensurePortraitIsMutable();
          portrait_.add(index, builderForValue.build());
          onChanged();
        } else {
          portraitBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
       */
      public Builder addAllPortrait(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Image> values) {
        if (portraitBuilder_ == null) {
          ensurePortraitIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, portrait_);
          onChanged();
        } else {
          portraitBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
       */
      public Builder clearPortrait() {
        if (portraitBuilder_ == null) {
          portrait_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000400);
          onChanged();
        } else {
          portraitBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
       */
      public Builder removePortrait(int index) {
        if (portraitBuilder_ == null) {
          ensurePortraitIsMutable();
          portrait_.remove(index);
          onChanged();
        } else {
          portraitBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
       */
      public com.spotify.metadata.Metadata.Image.Builder getPortraitBuilder(
          int index) {
        return getPortraitFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
       */
      public com.spotify.metadata.Metadata.ImageOrBuilder getPortraitOrBuilder(
          int index) {
        if (portraitBuilder_ == null) {
          return portrait_.get(index);  } else {
          return portraitBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.ImageOrBuilder> 
           getPortraitOrBuilderList() {
        if (portraitBuilder_ != null) {
          return portraitBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(portrait_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
       */
      public com.spotify.metadata.Metadata.Image.Builder addPortraitBuilder() {
        return getPortraitFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Image.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
       */
      public com.spotify.metadata.Metadata.Image.Builder addPortraitBuilder(
          int index) {
        return getPortraitFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Image.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 11;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Image.Builder> 
           getPortraitBuilderList() {
        return getPortraitFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Image, com.spotify.metadata.Metadata.Image.Builder, com.spotify.metadata.Metadata.ImageOrBuilder> 
          getPortraitFieldBuilder() {
        if (portraitBuilder_ == null) {
          portraitBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Image, com.spotify.metadata.Metadata.Image.Builder, com.spotify.metadata.Metadata.ImageOrBuilder>(
                  portrait_,
                  ((bitField0_ & 0x00000400) != 0),
                  getParentForChildren(),
                  isClean());
          portrait_ = null;
        }
        return portraitBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.Biography> biography_ =
        java.util.Collections.emptyList();
      private void ensureBiographyIsMutable() {
        if (!((bitField0_ & 0x00000800) != 0)) {
          biography_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Biography>(biography_);
          bitField0_ |= 0x00000800;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Biography, com.spotify.metadata.Metadata.Biography.Builder, com.spotify.metadata.Metadata.BiographyOrBuilder> biographyBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Biography> getBiographyList() {
        if (biographyBuilder_ == null) {
          return java.util.Collections.unmodifiableList(biography_);
        } else {
          return biographyBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
       */
      public int getBiographyCount() {
        if (biographyBuilder_ == null) {
          return biography_.size();
        } else {
          return biographyBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
       */
      public com.spotify.metadata.Metadata.Biography getBiography(int index) {
        if (biographyBuilder_ == null) {
          return biography_.get(index);
        } else {
          return biographyBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
       */
      public Builder setBiography(
          int index, com.spotify.metadata.Metadata.Biography value) {
        if (biographyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBiographyIsMutable();
          biography_.set(index, value);
          onChanged();
        } else {
          biographyBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
       */
      public Builder setBiography(
          int index, com.spotify.metadata.Metadata.Biography.Builder builderForValue) {
        if (biographyBuilder_ == null) {
          ensureBiographyIsMutable();
          biography_.set(index, builderForValue.build());
          onChanged();
        } else {
          biographyBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
       */
      public Builder addBiography(com.spotify.metadata.Metadata.Biography value) {
        if (biographyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBiographyIsMutable();
          biography_.add(value);
          onChanged();
        } else {
          biographyBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
       */
      public Builder addBiography(
          int index, com.spotify.metadata.Metadata.Biography value) {
        if (biographyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBiographyIsMutable();
          biography_.add(index, value);
          onChanged();
        } else {
          biographyBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
       */
      public Builder addBiography(
          com.spotify.metadata.Metadata.Biography.Builder builderForValue) {
        if (biographyBuilder_ == null) {
          ensureBiographyIsMutable();
          biography_.add(builderForValue.build());
          onChanged();
        } else {
          biographyBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
       */
      public Builder addBiography(
          int index, com.spotify.metadata.Metadata.Biography.Builder builderForValue) {
        if (biographyBuilder_ == null) {
          ensureBiographyIsMutable();
          biography_.add(index, builderForValue.build());
          onChanged();
        } else {
          biographyBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
       */
      public Builder addAllBiography(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Biography> values) {
        if (biographyBuilder_ == null) {
          ensureBiographyIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, biography_);
          onChanged();
        } else {
          biographyBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
       */
      public Builder clearBiography() {
        if (biographyBuilder_ == null) {
          biography_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000800);
          onChanged();
        } else {
          biographyBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
       */
      public Builder removeBiography(int index) {
        if (biographyBuilder_ == null) {
          ensureBiographyIsMutable();
          biography_.remove(index);
          onChanged();
        } else {
          biographyBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
       */
      public com.spotify.metadata.Metadata.Biography.Builder getBiographyBuilder(
          int index) {
        return getBiographyFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
       */
      public com.spotify.metadata.Metadata.BiographyOrBuilder getBiographyOrBuilder(
          int index) {
        if (biographyBuilder_ == null) {
          return biography_.get(index);  } else {
          return biographyBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.BiographyOrBuilder> 
           getBiographyOrBuilderList() {
        if (biographyBuilder_ != null) {
          return biographyBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(biography_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
       */
      public com.spotify.metadata.Metadata.Biography.Builder addBiographyBuilder() {
        return getBiographyFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Biography.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
       */
      public com.spotify.metadata.Metadata.Biography.Builder addBiographyBuilder(
          int index) {
        return getBiographyFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Biography.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Biography biography = 12;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Biography.Builder> 
           getBiographyBuilderList() {
        return getBiographyFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Biography, com.spotify.metadata.Metadata.Biography.Builder, com.spotify.metadata.Metadata.BiographyOrBuilder> 
          getBiographyFieldBuilder() {
        if (biographyBuilder_ == null) {
          biographyBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Biography, com.spotify.metadata.Metadata.Biography.Builder, com.spotify.metadata.Metadata.BiographyOrBuilder>(
                  biography_,
                  ((bitField0_ & 0x00000800) != 0),
                  getParentForChildren(),
                  isClean());
          biography_ = null;
        }
        return biographyBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.ActivityPeriod> activityPeriod_ =
        java.util.Collections.emptyList();
      private void ensureActivityPeriodIsMutable() {
        if (!((bitField0_ & 0x00001000) != 0)) {
          activityPeriod_ = new java.util.ArrayList<com.spotify.metadata.Metadata.ActivityPeriod>(activityPeriod_);
          bitField0_ |= 0x00001000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.ActivityPeriod, com.spotify.metadata.Metadata.ActivityPeriod.Builder, com.spotify.metadata.Metadata.ActivityPeriodOrBuilder> activityPeriodBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.ActivityPeriod> getActivityPeriodList() {
        if (activityPeriodBuilder_ == null) {
          return java.util.Collections.unmodifiableList(activityPeriod_);
        } else {
          return activityPeriodBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
       */
      public int getActivityPeriodCount() {
        if (activityPeriodBuilder_ == null) {
          return activityPeriod_.size();
        } else {
          return activityPeriodBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
       */
      public com.spotify.metadata.Metadata.ActivityPeriod getActivityPeriod(int index) {
        if (activityPeriodBuilder_ == null) {
          return activityPeriod_.get(index);
        } else {
          return activityPeriodBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
       */
      public Builder setActivityPeriod(
          int index, com.spotify.metadata.Metadata.ActivityPeriod value) {
        if (activityPeriodBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureActivityPeriodIsMutable();
          activityPeriod_.set(index, value);
          onChanged();
        } else {
          activityPeriodBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
       */
      public Builder setActivityPeriod(
          int index, com.spotify.metadata.Metadata.ActivityPeriod.Builder builderForValue) {
        if (activityPeriodBuilder_ == null) {
          ensureActivityPeriodIsMutable();
          activityPeriod_.set(index, builderForValue.build());
          onChanged();
        } else {
          activityPeriodBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
       */
      public Builder addActivityPeriod(com.spotify.metadata.Metadata.ActivityPeriod value) {
        if (activityPeriodBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureActivityPeriodIsMutable();
          activityPeriod_.add(value);
          onChanged();
        } else {
          activityPeriodBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
       */
      public Builder addActivityPeriod(
          int index, com.spotify.metadata.Metadata.ActivityPeriod value) {
        if (activityPeriodBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureActivityPeriodIsMutable();
          activityPeriod_.add(index, value);
          onChanged();
        } else {
          activityPeriodBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
       */
      public Builder addActivityPeriod(
          com.spotify.metadata.Metadata.ActivityPeriod.Builder builderForValue) {
        if (activityPeriodBuilder_ == null) {
          ensureActivityPeriodIsMutable();
          activityPeriod_.add(builderForValue.build());
          onChanged();
        } else {
          activityPeriodBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
       */
      public Builder addActivityPeriod(
          int index, com.spotify.metadata.Metadata.ActivityPeriod.Builder builderForValue) {
        if (activityPeriodBuilder_ == null) {
          ensureActivityPeriodIsMutable();
          activityPeriod_.add(index, builderForValue.build());
          onChanged();
        } else {
          activityPeriodBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
       */
      public Builder addAllActivityPeriod(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.ActivityPeriod> values) {
        if (activityPeriodBuilder_ == null) {
          ensureActivityPeriodIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, activityPeriod_);
          onChanged();
        } else {
          activityPeriodBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
       */
      public Builder clearActivityPeriod() {
        if (activityPeriodBuilder_ == null) {
          activityPeriod_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00001000);
          onChanged();
        } else {
          activityPeriodBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
       */
      public Builder removeActivityPeriod(int index) {
        if (activityPeriodBuilder_ == null) {
          ensureActivityPeriodIsMutable();
          activityPeriod_.remove(index);
          onChanged();
        } else {
          activityPeriodBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
       */
      public com.spotify.metadata.Metadata.ActivityPeriod.Builder getActivityPeriodBuilder(
          int index) {
        return getActivityPeriodFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
       */
      public com.spotify.metadata.Metadata.ActivityPeriodOrBuilder getActivityPeriodOrBuilder(
          int index) {
        if (activityPeriodBuilder_ == null) {
          return activityPeriod_.get(index);  } else {
          return activityPeriodBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.ActivityPeriodOrBuilder> 
           getActivityPeriodOrBuilderList() {
        if (activityPeriodBuilder_ != null) {
          return activityPeriodBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(activityPeriod_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
       */
      public com.spotify.metadata.Metadata.ActivityPeriod.Builder addActivityPeriodBuilder() {
        return getActivityPeriodFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.ActivityPeriod.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
       */
      public com.spotify.metadata.Metadata.ActivityPeriod.Builder addActivityPeriodBuilder(
          int index) {
        return getActivityPeriodFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.ActivityPeriod.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.ActivityPeriod activity_period = 13;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.ActivityPeriod.Builder> 
           getActivityPeriodBuilderList() {
        return getActivityPeriodFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.ActivityPeriod, com.spotify.metadata.Metadata.ActivityPeriod.Builder, com.spotify.metadata.Metadata.ActivityPeriodOrBuilder> 
          getActivityPeriodFieldBuilder() {
        if (activityPeriodBuilder_ == null) {
          activityPeriodBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.ActivityPeriod, com.spotify.metadata.Metadata.ActivityPeriod.Builder, com.spotify.metadata.Metadata.ActivityPeriodOrBuilder>(
                  activityPeriod_,
                  ((bitField0_ & 0x00001000) != 0),
                  getParentForChildren(),
                  isClean());
          activityPeriod_ = null;
        }
        return activityPeriodBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.Restriction> restriction_ =
        java.util.Collections.emptyList();
      private void ensureRestrictionIsMutable() {
        if (!((bitField0_ & 0x00002000) != 0)) {
          restriction_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Restriction>(restriction_);
          bitField0_ |= 0x00002000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Restriction, com.spotify.metadata.Metadata.Restriction.Builder, com.spotify.metadata.Metadata.RestrictionOrBuilder> restrictionBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Restriction> getRestrictionList() {
        if (restrictionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(restriction_);
        } else {
          return restrictionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public int getRestrictionCount() {
        if (restrictionBuilder_ == null) {
          return restriction_.size();
        } else {
          return restrictionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public com.spotify.metadata.Metadata.Restriction getRestriction(int index) {
        if (restrictionBuilder_ == null) {
          return restriction_.get(index);
        } else {
          return restrictionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public Builder setRestriction(
          int index, com.spotify.metadata.Metadata.Restriction value) {
        if (restrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRestrictionIsMutable();
          restriction_.set(index, value);
          onChanged();
        } else {
          restrictionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public Builder setRestriction(
          int index, com.spotify.metadata.Metadata.Restriction.Builder builderForValue) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.set(index, builderForValue.build());
          onChanged();
        } else {
          restrictionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public Builder addRestriction(com.spotify.metadata.Metadata.Restriction value) {
        if (restrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRestrictionIsMutable();
          restriction_.add(value);
          onChanged();
        } else {
          restrictionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public Builder addRestriction(
          int index, com.spotify.metadata.Metadata.Restriction value) {
        if (restrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRestrictionIsMutable();
          restriction_.add(index, value);
          onChanged();
        } else {
          restrictionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public Builder addRestriction(
          com.spotify.metadata.Metadata.Restriction.Builder builderForValue) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.add(builderForValue.build());
          onChanged();
        } else {
          restrictionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public Builder addRestriction(
          int index, com.spotify.metadata.Metadata.Restriction.Builder builderForValue) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.add(index, builderForValue.build());
          onChanged();
        } else {
          restrictionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public Builder addAllRestriction(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Restriction> values) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, restriction_);
          onChanged();
        } else {
          restrictionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public Builder clearRestriction() {
        if (restrictionBuilder_ == null) {
          restriction_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00002000);
          onChanged();
        } else {
          restrictionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public Builder removeRestriction(int index) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.remove(index);
          onChanged();
        } else {
          restrictionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public com.spotify.metadata.Metadata.Restriction.Builder getRestrictionBuilder(
          int index) {
        return getRestrictionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public com.spotify.metadata.Metadata.RestrictionOrBuilder getRestrictionOrBuilder(
          int index) {
        if (restrictionBuilder_ == null) {
          return restriction_.get(index);  } else {
          return restrictionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.RestrictionOrBuilder> 
           getRestrictionOrBuilderList() {
        if (restrictionBuilder_ != null) {
          return restrictionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(restriction_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public com.spotify.metadata.Metadata.Restriction.Builder addRestrictionBuilder() {
        return getRestrictionFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Restriction.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public com.spotify.metadata.Metadata.Restriction.Builder addRestrictionBuilder(
          int index) {
        return getRestrictionFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Restriction.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Restriction.Builder> 
           getRestrictionBuilderList() {
        return getRestrictionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Restriction, com.spotify.metadata.Metadata.Restriction.Builder, com.spotify.metadata.Metadata.RestrictionOrBuilder> 
          getRestrictionFieldBuilder() {
        if (restrictionBuilder_ == null) {
          restrictionBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Restriction, com.spotify.metadata.Metadata.Restriction.Builder, com.spotify.metadata.Metadata.RestrictionOrBuilder>(
                  restriction_,
                  ((bitField0_ & 0x00002000) != 0),
                  getParentForChildren(),
                  isClean());
          restriction_ = null;
        }
        return restrictionBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.Artist> related_ =
        java.util.Collections.emptyList();
      private void ensureRelatedIsMutable() {
        if (!((bitField0_ & 0x00004000) != 0)) {
          related_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Artist>(related_);
          bitField0_ |= 0x00004000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Artist, com.spotify.metadata.Metadata.Artist.Builder, com.spotify.metadata.Metadata.ArtistOrBuilder> relatedBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Artist> getRelatedList() {
        if (relatedBuilder_ == null) {
          return java.util.Collections.unmodifiableList(related_);
        } else {
          return relatedBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
       */
      public int getRelatedCount() {
        if (relatedBuilder_ == null) {
          return related_.size();
        } else {
          return relatedBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
       */
      public com.spotify.metadata.Metadata.Artist getRelated(int index) {
        if (relatedBuilder_ == null) {
          return related_.get(index);
        } else {
          return relatedBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
       */
      public Builder setRelated(
          int index, com.spotify.metadata.Metadata.Artist value) {
        if (relatedBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRelatedIsMutable();
          related_.set(index, value);
          onChanged();
        } else {
          relatedBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
       */
      public Builder setRelated(
          int index, com.spotify.metadata.Metadata.Artist.Builder builderForValue) {
        if (relatedBuilder_ == null) {
          ensureRelatedIsMutable();
          related_.set(index, builderForValue.build());
          onChanged();
        } else {
          relatedBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
       */
      public Builder addRelated(com.spotify.metadata.Metadata.Artist value) {
        if (relatedBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRelatedIsMutable();
          related_.add(value);
          onChanged();
        } else {
          relatedBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
       */
      public Builder addRelated(
          int index, com.spotify.metadata.Metadata.Artist value) {
        if (relatedBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRelatedIsMutable();
          related_.add(index, value);
          onChanged();
        } else {
          relatedBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
       */
      public Builder addRelated(
          com.spotify.metadata.Metadata.Artist.Builder builderForValue) {
        if (relatedBuilder_ == null) {
          ensureRelatedIsMutable();
          related_.add(builderForValue.build());
          onChanged();
        } else {
          relatedBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
       */
      public Builder addRelated(
          int index, com.spotify.metadata.Metadata.Artist.Builder builderForValue) {
        if (relatedBuilder_ == null) {
          ensureRelatedIsMutable();
          related_.add(index, builderForValue.build());
          onChanged();
        } else {
          relatedBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
       */
      public Builder addAllRelated(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Artist> values) {
        if (relatedBuilder_ == null) {
          ensureRelatedIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, related_);
          onChanged();
        } else {
          relatedBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
       */
      public Builder clearRelated() {
        if (relatedBuilder_ == null) {
          related_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00004000);
          onChanged();
        } else {
          relatedBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
       */
      public Builder removeRelated(int index) {
        if (relatedBuilder_ == null) {
          ensureRelatedIsMutable();
          related_.remove(index);
          onChanged();
        } else {
          relatedBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
       */
      public com.spotify.metadata.Metadata.Artist.Builder getRelatedBuilder(
          int index) {
        return getRelatedFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
       */
      public com.spotify.metadata.Metadata.ArtistOrBuilder getRelatedOrBuilder(
          int index) {
        if (relatedBuilder_ == null) {
          return related_.get(index);  } else {
          return relatedBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.ArtistOrBuilder> 
           getRelatedOrBuilderList() {
        if (relatedBuilder_ != null) {
          return relatedBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(related_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
       */
      public com.spotify.metadata.Metadata.Artist.Builder addRelatedBuilder() {
        return getRelatedFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Artist.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
       */
      public com.spotify.metadata.Metadata.Artist.Builder addRelatedBuilder(
          int index) {
        return getRelatedFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Artist.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist related = 15;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Artist.Builder> 
           getRelatedBuilderList() {
        return getRelatedFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Artist, com.spotify.metadata.Metadata.Artist.Builder, com.spotify.metadata.Metadata.ArtistOrBuilder> 
          getRelatedFieldBuilder() {
        if (relatedBuilder_ == null) {
          relatedBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Artist, com.spotify.metadata.Metadata.Artist.Builder, com.spotify.metadata.Metadata.ArtistOrBuilder>(
                  related_,
                  ((bitField0_ & 0x00004000) != 0),
                  getParentForChildren(),
                  isClean());
          related_ = null;
        }
        return relatedBuilder_;
      }

      private boolean isPortraitAlbumCover_ ;
      /**
       * <code>optional bool is_portrait_album_cover = 16;</code>
       * @return Whether the isPortraitAlbumCover field is set.
       */
      public boolean hasIsPortraitAlbumCover() {
        return ((bitField0_ & 0x00008000) != 0);
      }
      /**
       * <code>optional bool is_portrait_album_cover = 16;</code>
       * @return The isPortraitAlbumCover.
       */
      public boolean getIsPortraitAlbumCover() {
        return isPortraitAlbumCover_;
      }
      /**
       * <code>optional bool is_portrait_album_cover = 16;</code>
       * @param value The isPortraitAlbumCover to set.
       * @return This builder for chaining.
       */
      public Builder setIsPortraitAlbumCover(boolean value) {
        bitField0_ |= 0x00008000;
        isPortraitAlbumCover_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool is_portrait_album_cover = 16;</code>
       * @return This builder for chaining.
       */
      public Builder clearIsPortraitAlbumCover() {
        bitField0_ = (bitField0_ & ~0x00008000);
        isPortraitAlbumCover_ = false;
        onChanged();
        return this;
      }

      private com.spotify.metadata.Metadata.ImageGroup portraitGroup_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.ImageGroup, com.spotify.metadata.Metadata.ImageGroup.Builder, com.spotify.metadata.Metadata.ImageGroupOrBuilder> portraitGroupBuilder_;
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup portrait_group = 17;</code>
       * @return Whether the portraitGroup field is set.
       */
      public boolean hasPortraitGroup() {
        return ((bitField0_ & 0x00010000) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup portrait_group = 17;</code>
       * @return The portraitGroup.
       */
      public com.spotify.metadata.Metadata.ImageGroup getPortraitGroup() {
        if (portraitGroupBuilder_ == null) {
          return portraitGroup_ == null ? com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : portraitGroup_;
        } else {
          return portraitGroupBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup portrait_group = 17;</code>
       */
      public Builder setPortraitGroup(com.spotify.metadata.Metadata.ImageGroup value) {
        if (portraitGroupBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          portraitGroup_ = value;
          onChanged();
        } else {
          portraitGroupBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup portrait_group = 17;</code>
       */
      public Builder setPortraitGroup(
          com.spotify.metadata.Metadata.ImageGroup.Builder builderForValue) {
        if (portraitGroupBuilder_ == null) {
          portraitGroup_ = builderForValue.build();
          onChanged();
        } else {
          portraitGroupBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup portrait_group = 17;</code>
       */
      public Builder mergePortraitGroup(com.spotify.metadata.Metadata.ImageGroup value) {
        if (portraitGroupBuilder_ == null) {
          if (((bitField0_ & 0x00010000) != 0) &&
              portraitGroup_ != null &&
              portraitGroup_ != com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance()) {
            portraitGroup_ =
              com.spotify.metadata.Metadata.ImageGroup.newBuilder(portraitGroup_).mergeFrom(value).buildPartial();
          } else {
            portraitGroup_ = value;
          }
          onChanged();
        } else {
          portraitGroupBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup portrait_group = 17;</code>
       */
      public Builder clearPortraitGroup() {
        if (portraitGroupBuilder_ == null) {
          portraitGroup_ = null;
          onChanged();
        } else {
          portraitGroupBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00010000);
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup portrait_group = 17;</code>
       */
      public com.spotify.metadata.Metadata.ImageGroup.Builder getPortraitGroupBuilder() {
        bitField0_ |= 0x00010000;
        onChanged();
        return getPortraitGroupFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup portrait_group = 17;</code>
       */
      public com.spotify.metadata.Metadata.ImageGroupOrBuilder getPortraitGroupOrBuilder() {
        if (portraitGroupBuilder_ != null) {
          return portraitGroupBuilder_.getMessageOrBuilder();
        } else {
          return portraitGroup_ == null ?
              com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : portraitGroup_;
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup portrait_group = 17;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.ImageGroup, com.spotify.metadata.Metadata.ImageGroup.Builder, com.spotify.metadata.Metadata.ImageGroupOrBuilder> 
          getPortraitGroupFieldBuilder() {
        if (portraitGroupBuilder_ == null) {
          portraitGroupBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.metadata.Metadata.ImageGroup, com.spotify.metadata.Metadata.ImageGroup.Builder, com.spotify.metadata.Metadata.ImageGroupOrBuilder>(
                  getPortraitGroup(),
                  getParentForChildren(),
                  isClean());
          portraitGroup_ = null;
        }
        return portraitGroupBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.SalePeriod> salePeriod_ =
        java.util.Collections.emptyList();
      private void ensureSalePeriodIsMutable() {
        if (!((bitField0_ & 0x00020000) != 0)) {
          salePeriod_ = new java.util.ArrayList<com.spotify.metadata.Metadata.SalePeriod>(salePeriod_);
          bitField0_ |= 0x00020000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.SalePeriod, com.spotify.metadata.Metadata.SalePeriod.Builder, com.spotify.metadata.Metadata.SalePeriodOrBuilder> salePeriodBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.SalePeriod> getSalePeriodList() {
        if (salePeriodBuilder_ == null) {
          return java.util.Collections.unmodifiableList(salePeriod_);
        } else {
          return salePeriodBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
       */
      public int getSalePeriodCount() {
        if (salePeriodBuilder_ == null) {
          return salePeriod_.size();
        } else {
          return salePeriodBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
       */
      public com.spotify.metadata.Metadata.SalePeriod getSalePeriod(int index) {
        if (salePeriodBuilder_ == null) {
          return salePeriod_.get(index);
        } else {
          return salePeriodBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
       */
      public Builder setSalePeriod(
          int index, com.spotify.metadata.Metadata.SalePeriod value) {
        if (salePeriodBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSalePeriodIsMutable();
          salePeriod_.set(index, value);
          onChanged();
        } else {
          salePeriodBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
       */
      public Builder setSalePeriod(
          int index, com.spotify.metadata.Metadata.SalePeriod.Builder builderForValue) {
        if (salePeriodBuilder_ == null) {
          ensureSalePeriodIsMutable();
          salePeriod_.set(index, builderForValue.build());
          onChanged();
        } else {
          salePeriodBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
       */
      public Builder addSalePeriod(com.spotify.metadata.Metadata.SalePeriod value) {
        if (salePeriodBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSalePeriodIsMutable();
          salePeriod_.add(value);
          onChanged();
        } else {
          salePeriodBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
       */
      public Builder addSalePeriod(
          int index, com.spotify.metadata.Metadata.SalePeriod value) {
        if (salePeriodBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSalePeriodIsMutable();
          salePeriod_.add(index, value);
          onChanged();
        } else {
          salePeriodBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
       */
      public Builder addSalePeriod(
          com.spotify.metadata.Metadata.SalePeriod.Builder builderForValue) {
        if (salePeriodBuilder_ == null) {
          ensureSalePeriodIsMutable();
          salePeriod_.add(builderForValue.build());
          onChanged();
        } else {
          salePeriodBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
       */
      public Builder addSalePeriod(
          int index, com.spotify.metadata.Metadata.SalePeriod.Builder builderForValue) {
        if (salePeriodBuilder_ == null) {
          ensureSalePeriodIsMutable();
          salePeriod_.add(index, builderForValue.build());
          onChanged();
        } else {
          salePeriodBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
       */
      public Builder addAllSalePeriod(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.SalePeriod> values) {
        if (salePeriodBuilder_ == null) {
          ensureSalePeriodIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, salePeriod_);
          onChanged();
        } else {
          salePeriodBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
       */
      public Builder clearSalePeriod() {
        if (salePeriodBuilder_ == null) {
          salePeriod_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00020000);
          onChanged();
        } else {
          salePeriodBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
       */
      public Builder removeSalePeriod(int index) {
        if (salePeriodBuilder_ == null) {
          ensureSalePeriodIsMutable();
          salePeriod_.remove(index);
          onChanged();
        } else {
          salePeriodBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
       */
      public com.spotify.metadata.Metadata.SalePeriod.Builder getSalePeriodBuilder(
          int index) {
        return getSalePeriodFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
       */
      public com.spotify.metadata.Metadata.SalePeriodOrBuilder getSalePeriodOrBuilder(
          int index) {
        if (salePeriodBuilder_ == null) {
          return salePeriod_.get(index);  } else {
          return salePeriodBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.SalePeriodOrBuilder> 
           getSalePeriodOrBuilderList() {
        if (salePeriodBuilder_ != null) {
          return salePeriodBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(salePeriod_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
       */
      public com.spotify.metadata.Metadata.SalePeriod.Builder addSalePeriodBuilder() {
        return getSalePeriodFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.SalePeriod.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
       */
      public com.spotify.metadata.Metadata.SalePeriod.Builder addSalePeriodBuilder(
          int index) {
        return getSalePeriodFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.SalePeriod.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 18;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.SalePeriod.Builder> 
           getSalePeriodBuilderList() {
        return getSalePeriodFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.SalePeriod, com.spotify.metadata.Metadata.SalePeriod.Builder, com.spotify.metadata.Metadata.SalePeriodOrBuilder> 
          getSalePeriodFieldBuilder() {
        if (salePeriodBuilder_ == null) {
          salePeriodBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.SalePeriod, com.spotify.metadata.Metadata.SalePeriod.Builder, com.spotify.metadata.Metadata.SalePeriodOrBuilder>(
                  salePeriod_,
                  ((bitField0_ & 0x00020000) != 0),
                  getParentForChildren(),
                  isClean());
          salePeriod_ = null;
        }
        return salePeriodBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.Availability> availability_ =
        java.util.Collections.emptyList();
      private void ensureAvailabilityIsMutable() {
        if (!((bitField0_ & 0x00040000) != 0)) {
          availability_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Availability>(availability_);
          bitField0_ |= 0x00040000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Availability, com.spotify.metadata.Metadata.Availability.Builder, com.spotify.metadata.Metadata.AvailabilityOrBuilder> availabilityBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Availability> getAvailabilityList() {
        if (availabilityBuilder_ == null) {
          return java.util.Collections.unmodifiableList(availability_);
        } else {
          return availabilityBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
       */
      public int getAvailabilityCount() {
        if (availabilityBuilder_ == null) {
          return availability_.size();
        } else {
          return availabilityBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
       */
      public com.spotify.metadata.Metadata.Availability getAvailability(int index) {
        if (availabilityBuilder_ == null) {
          return availability_.get(index);
        } else {
          return availabilityBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
       */
      public Builder setAvailability(
          int index, com.spotify.metadata.Metadata.Availability value) {
        if (availabilityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAvailabilityIsMutable();
          availability_.set(index, value);
          onChanged();
        } else {
          availabilityBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
       */
      public Builder setAvailability(
          int index, com.spotify.metadata.Metadata.Availability.Builder builderForValue) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.set(index, builderForValue.build());
          onChanged();
        } else {
          availabilityBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
       */
      public Builder addAvailability(com.spotify.metadata.Metadata.Availability value) {
        if (availabilityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAvailabilityIsMutable();
          availability_.add(value);
          onChanged();
        } else {
          availabilityBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
       */
      public Builder addAvailability(
          int index, com.spotify.metadata.Metadata.Availability value) {
        if (availabilityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAvailabilityIsMutable();
          availability_.add(index, value);
          onChanged();
        } else {
          availabilityBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
       */
      public Builder addAvailability(
          com.spotify.metadata.Metadata.Availability.Builder builderForValue) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.add(builderForValue.build());
          onChanged();
        } else {
          availabilityBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
       */
      public Builder addAvailability(
          int index, com.spotify.metadata.Metadata.Availability.Builder builderForValue) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.add(index, builderForValue.build());
          onChanged();
        } else {
          availabilityBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
       */
      public Builder addAllAvailability(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Availability> values) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, availability_);
          onChanged();
        } else {
          availabilityBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
       */
      public Builder clearAvailability() {
        if (availabilityBuilder_ == null) {
          availability_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00040000);
          onChanged();
        } else {
          availabilityBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
       */
      public Builder removeAvailability(int index) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.remove(index);
          onChanged();
        } else {
          availabilityBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
       */
      public com.spotify.metadata.Metadata.Availability.Builder getAvailabilityBuilder(
          int index) {
        return getAvailabilityFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
       */
      public com.spotify.metadata.Metadata.AvailabilityOrBuilder getAvailabilityOrBuilder(
          int index) {
        if (availabilityBuilder_ == null) {
          return availability_.get(index);  } else {
          return availabilityBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
           getAvailabilityOrBuilderList() {
        if (availabilityBuilder_ != null) {
          return availabilityBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(availability_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
       */
      public com.spotify.metadata.Metadata.Availability.Builder addAvailabilityBuilder() {
        return getAvailabilityFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Availability.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
       */
      public com.spotify.metadata.Metadata.Availability.Builder addAvailabilityBuilder(
          int index) {
        return getAvailabilityFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Availability.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 20;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Availability.Builder> 
           getAvailabilityBuilderList() {
        return getAvailabilityFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Availability, com.spotify.metadata.Metadata.Availability.Builder, com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
          getAvailabilityFieldBuilder() {
        if (availabilityBuilder_ == null) {
          availabilityBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Availability, com.spotify.metadata.Metadata.Availability.Builder, com.spotify.metadata.Metadata.AvailabilityOrBuilder>(
                  availability_,
                  ((bitField0_ & 0x00040000) != 0),
                  getParentForChildren(),
                  isClean());
          availability_ = null;
        }
        return availabilityBuilder_;
      }
      @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:spotify.metadata.proto.Artist)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.Artist)
    private static final com.spotify.metadata.Metadata.Artist DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.Artist();
    }

    public static com.spotify.metadata.Metadata.Artist getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Artist>
        PARSER = new com.google.protobuf.AbstractParser<Artist>() {
      @java.lang.Override
      public Artist 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.Artist getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AlbumOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.Album)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional bytes gid = 1;</code>
     * @return Whether the gid field is set.
     */
    boolean hasGid();
    /**
     * <code>optional bytes gid = 1;</code>
     * @return The gid.
     */
    com.google.protobuf.ByteString getGid();

    /**
     * <code>optional string name = 2;</code>
     * @return Whether the name field is set.
     */
    boolean hasName();
    /**
     * <code>optional string name = 2;</code>
     * @return The name.
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 2;</code>
     * @return The bytes for name.
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Artist> 
        getArtistList();
    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
     */
    com.spotify.metadata.Metadata.Artist getArtist(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
     */
    int getArtistCount();
    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.ArtistOrBuilder> 
        getArtistOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
     */
    com.spotify.metadata.Metadata.ArtistOrBuilder getArtistOrBuilder(
        int index);

    /**
     * <code>optional .spotify.metadata.proto.Album.Type type = 4;</code>
     * @return Whether the type field is set.
     */
    boolean hasType();
    /**
     * <code>optional .spotify.metadata.proto.Album.Type type = 4;</code>
     * @return The type.
     */
    com.spotify.metadata.Metadata.Album.Type getType();

    /**
     * <code>optional string label = 5;</code>
     * @return Whether the label field is set.
     */
    boolean hasLabel();
    /**
     * <code>optional string label = 5;</code>
     * @return The label.
     */
    java.lang.String getLabel();
    /**
     * <code>optional string label = 5;</code>
     * @return The bytes for label.
     */
    com.google.protobuf.ByteString
        getLabelBytes();

    /**
     * <code>optional .spotify.metadata.proto.Date date = 6;</code>
     * @return Whether the date field is set.
     */
    boolean hasDate();
    /**
     * <code>optional .spotify.metadata.proto.Date date = 6;</code>
     * @return The date.
     */
    com.spotify.metadata.Metadata.Date getDate();
    /**
     * <code>optional .spotify.metadata.proto.Date date = 6;</code>
     */
    com.spotify.metadata.Metadata.DateOrBuilder getDateOrBuilder();

    /**
     * <code>optional sint32 popularity = 7;</code>
     * @return Whether the popularity field is set.
     */
    boolean hasPopularity();
    /**
     * <code>optional sint32 popularity = 7;</code>
     * @return The popularity.
     */
    int getPopularity();

    /**
     * <code>repeated string genre = 8;</code>
     * @return A list containing the genre.
     */
    java.util.List<java.lang.String>
        getGenreList();
    /**
     * <code>repeated string genre = 8;</code>
     * @return The count of genre.
     */
    int getGenreCount();
    /**
     * <code>repeated string genre = 8;</code>
     * @param index The index of the element to return.
     * @return The genre at the given index.
     */
    java.lang.String getGenre(int index);
    /**
     * <code>repeated string genre = 8;</code>
     * @param index The index of the value to return.
     * @return The bytes of the genre at the given index.
     */
    com.google.protobuf.ByteString
        getGenreBytes(int index);

    /**
     * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Image> 
        getCoverList();
    /**
     * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
     */
    com.spotify.metadata.Metadata.Image getCover(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
     */
    int getCoverCount();
    /**
     * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.ImageOrBuilder> 
        getCoverOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
     */
    com.spotify.metadata.Metadata.ImageOrBuilder getCoverOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.ExternalId> 
        getExternalIdList();
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    com.spotify.metadata.Metadata.ExternalId getExternalId(int index);
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    int getExternalIdCount();
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.ExternalIdOrBuilder> 
        getExternalIdOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    com.spotify.metadata.Metadata.ExternalIdOrBuilder getExternalIdOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Disc> 
        getDiscList();
    /**
     * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
     */
    com.spotify.metadata.Metadata.Disc getDisc(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
     */
    int getDiscCount();
    /**
     * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.DiscOrBuilder> 
        getDiscOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
     */
    com.spotify.metadata.Metadata.DiscOrBuilder getDiscOrBuilder(
        int index);

    /**
     * <code>repeated string review = 12;</code>
     * @return A list containing the review.
     */
    java.util.List<java.lang.String>
        getReviewList();
    /**
     * <code>repeated string review = 12;</code>
     * @return The count of review.
     */
    int getReviewCount();
    /**
     * <code>repeated string review = 12;</code>
     * @param index The index of the element to return.
     * @return The review at the given index.
     */
    java.lang.String getReview(int index);
    /**
     * <code>repeated string review = 12;</code>
     * @param index The index of the value to return.
     * @return The bytes of the review at the given index.
     */
    com.google.protobuf.ByteString
        getReviewBytes(int index);

    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Copyright> 
        getCopyrightList();
    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
     */
    com.spotify.metadata.Metadata.Copyright getCopyright(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
     */
    int getCopyrightCount();
    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.CopyrightOrBuilder> 
        getCopyrightOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
     */
    com.spotify.metadata.Metadata.CopyrightOrBuilder getCopyrightOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Restriction> 
        getRestrictionList();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    com.spotify.metadata.Metadata.Restriction getRestriction(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    int getRestrictionCount();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.RestrictionOrBuilder> 
        getRestrictionOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    com.spotify.metadata.Metadata.RestrictionOrBuilder getRestrictionOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Album> 
        getRelatedList();
    /**
     * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
     */
    com.spotify.metadata.Metadata.Album getRelated(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
     */
    int getRelatedCount();
    /**
     * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.AlbumOrBuilder> 
        getRelatedOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
     */
    com.spotify.metadata.Metadata.AlbumOrBuilder getRelatedOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.SalePeriod> 
        getSalePeriodList();
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
     */
    com.spotify.metadata.Metadata.SalePeriod getSalePeriod(int index);
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
     */
    int getSalePeriodCount();
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.SalePeriodOrBuilder> 
        getSalePeriodOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
     */
    com.spotify.metadata.Metadata.SalePeriodOrBuilder getSalePeriodOrBuilder(
        int index);

    /**
     * <code>optional .spotify.metadata.proto.ImageGroup cover_group = 17;</code>
     * @return Whether the coverGroup field is set.
     */
    boolean hasCoverGroup();
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup cover_group = 17;</code>
     * @return The coverGroup.
     */
    com.spotify.metadata.Metadata.ImageGroup getCoverGroup();
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup cover_group = 17;</code>
     */
    com.spotify.metadata.Metadata.ImageGroupOrBuilder getCoverGroupOrBuilder();

    /**
     * <code>optional string original_title = 18;</code>
     * @return Whether the originalTitle field is set.
     */
    boolean hasOriginalTitle();
    /**
     * <code>optional string original_title = 18;</code>
     * @return The originalTitle.
     */
    java.lang.String getOriginalTitle();
    /**
     * <code>optional string original_title = 18;</code>
     * @return The bytes for originalTitle.
     */
    com.google.protobuf.ByteString
        getOriginalTitleBytes();

    /**
     * <code>optional string version_title = 19;</code>
     * @return Whether the versionTitle field is set.
     */
    boolean hasVersionTitle();
    /**
     * <code>optional string version_title = 19;</code>
     * @return The versionTitle.
     */
    java.lang.String getVersionTitle();
    /**
     * <code>optional string version_title = 19;</code>
     * @return The bytes for versionTitle.
     */
    com.google.protobuf.ByteString
        getVersionTitleBytes();

    /**
     * <code>optional string type_str = 20;</code>
     * @return Whether the typeStr field is set.
     */
    boolean hasTypeStr();
    /**
     * <code>optional string type_str = 20;</code>
     * @return The typeStr.
     */
    java.lang.String getTypeStr();
    /**
     * <code>optional string type_str = 20;</code>
     * @return The bytes for typeStr.
     */
    com.google.protobuf.ByteString
        getTypeStrBytes();

    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Availability> 
        getAvailabilityList();
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
     */
    com.spotify.metadata.Metadata.Availability getAvailability(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
     */
    int getAvailabilityCount();
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
        getAvailabilityOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
     */
    com.spotify.metadata.Metadata.AvailabilityOrBuilder getAvailabilityOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.Album}
   */
  public  static final class Album extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.Album)
      AlbumOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Album.newBuilder() to construct.
    private Album(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Album() {
      gid_ = com.google.protobuf.ByteString.EMPTY;
      name_ = "";
      artist_ = java.util.Collections.emptyList();
      type_ = 1;
      label_ = "";
      genre_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      cover_ = java.util.Collections.emptyList();
      externalId_ = java.util.Collections.emptyList();
      disc_ = java.util.Collections.emptyList();
      review_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      copyright_ = java.util.Collections.emptyList();
      restriction_ = java.util.Collections.emptyList();
      related_ = java.util.Collections.emptyList();
      salePeriod_ = java.util.Collections.emptyList();
      originalTitle_ = "";
      versionTitle_ = "";
      typeStr_ = "";
      availability_ = java.util.Collections.emptyList();
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Album_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Album_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.Album.class, com.spotify.metadata.Metadata.Album.Builder.class);
    }

    /**
     * Protobuf enum {@code spotify.metadata.proto.Album.Type}
     */
    public enum Type
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>ALBUM = 1;</code>
       */
      ALBUM(1),
      /**
       * <code>SINGLE = 2;</code>
       */
      SINGLE(2),
      /**
       * <code>COMPILATION = 3;</code>
       */
      COMPILATION(3),
      /**
       * <code>EP = 4;</code>
       */
      EP(4),
      /**
       * <code>AUDIOBOOK = 5;</code>
       */
      AUDIOBOOK(5),
      /**
       * <code>PODCAST = 6;</code>
       */
      PODCAST(6),
      ;

      /**
       * <code>ALBUM = 1;</code>
       */
      public static final int ALBUM_VALUE = 1;
      /**
       * <code>SINGLE = 2;</code>
       */
      public static final int SINGLE_VALUE = 2;
      /**
       * <code>COMPILATION = 3;</code>
       */
      public static final int COMPILATION_VALUE = 3;
      /**
       * <code>EP = 4;</code>
       */
      public static final int EP_VALUE = 4;
      /**
       * <code>AUDIOBOOK = 5;</code>
       */
      public static final int AUDIOBOOK_VALUE = 5;
      /**
       * <code>PODCAST = 6;</code>
       */
      public static final int PODCAST_VALUE = 6;


      public final int getNumber() {
        return value;
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static Type valueOf(int value) {
        return forNumber(value);
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static Type forNumber(int value) {
        switch (value) {
          case 1: return ALBUM;
          case 2: return SINGLE;
          case 3: return COMPILATION;
          case 4: return EP;
          case 5: return AUDIOBOOK;
          case 6: return PODCAST;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static final com.google.protobuf.Internal.EnumLiteMap<
          Type> internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Type>() {
              public Type findValueByNumber(int number) {
                return Type.forNumber(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.Album.getDescriptor().getEnumTypes().get(0);
      }

      private static final Type[] VALUES = values();

      public static Type valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

      private Type(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:spotify.metadata.proto.Album.Type)
    }

    private int bitField0_;
    public static final int GID_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString gid_;
    /**
     * <code>optional bytes gid = 1;</code>
     * @return Whether the gid field is set.
     */
    public boolean hasGid() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional bytes gid = 1;</code>
     * @return The gid.
     */
    public com.google.protobuf.ByteString getGid() {
      return gid_;
    }

    public static final int NAME_FIELD_NUMBER = 2;
    private volatile java.lang.Object name_;
    /**
     * <code>optional string name = 2;</code>
     * @return Whether the name field is set.
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional string name = 2;</code>
     * @return The name.
     */
    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();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 2;</code>
     * @return The bytes for name.
     */
    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 ARTIST_FIELD_NUMBER = 3;
    private java.util.List<com.spotify.metadata.Metadata.Artist> artist_;
    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Artist> getArtistList() {
      return artist_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.ArtistOrBuilder> 
        getArtistOrBuilderList() {
      return artist_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
     */
    public int getArtistCount() {
      return artist_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
     */
    public com.spotify.metadata.Metadata.Artist getArtist(int index) {
      return artist_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
     */
    public com.spotify.metadata.Metadata.ArtistOrBuilder getArtistOrBuilder(
        int index) {
      return artist_.get(index);
    }

    public static final int TYPE_FIELD_NUMBER = 4;
    private int type_;
    /**
     * <code>optional .spotify.metadata.proto.Album.Type type = 4;</code>
     * @return Whether the type field is set.
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.Album.Type type = 4;</code>
     * @return The type.
     */
    public com.spotify.metadata.Metadata.Album.Type getType() {
      @SuppressWarnings("deprecation")
      com.spotify.metadata.Metadata.Album.Type result = com.spotify.metadata.Metadata.Album.Type.valueOf(type_);
      return result == null ? com.spotify.metadata.Metadata.Album.Type.ALBUM : result;
    }

    public static final int LABEL_FIELD_NUMBER = 5;
    private volatile java.lang.Object label_;
    /**
     * <code>optional string label = 5;</code>
     * @return Whether the label field is set.
     */
    public boolean hasLabel() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional string label = 5;</code>
     * @return The label.
     */
    public java.lang.String getLabel() {
      java.lang.Object ref = label_;
      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();
        if (bs.isValidUtf8()) {
          label_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string label = 5;</code>
     * @return The bytes for label.
     */
    public com.google.protobuf.ByteString
        getLabelBytes() {
      java.lang.Object ref = label_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        label_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DATE_FIELD_NUMBER = 6;
    private com.spotify.metadata.Metadata.Date date_;
    /**
     * <code>optional .spotify.metadata.proto.Date date = 6;</code>
     * @return Whether the date field is set.
     */
    public boolean hasDate() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.Date date = 6;</code>
     * @return The date.
     */
    public com.spotify.metadata.Metadata.Date getDate() {
      return date_ == null ? com.spotify.metadata.Metadata.Date.getDefaultInstance() : date_;
    }
    /**
     * <code>optional .spotify.metadata.proto.Date date = 6;</code>
     */
    public com.spotify.metadata.Metadata.DateOrBuilder getDateOrBuilder() {
      return date_ == null ? com.spotify.metadata.Metadata.Date.getDefaultInstance() : date_;
    }

    public static final int POPULARITY_FIELD_NUMBER = 7;
    private int popularity_;
    /**
     * <code>optional sint32 popularity = 7;</code>
     * @return Whether the popularity field is set.
     */
    public boolean hasPopularity() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional sint32 popularity = 7;</code>
     * @return The popularity.
     */
    public int getPopularity() {
      return popularity_;
    }

    public static final int GENRE_FIELD_NUMBER = 8;
    private com.google.protobuf.LazyStringList genre_;
    /**
     * <code>repeated string genre = 8;</code>
     * @return A list containing the genre.
     */
    public com.google.protobuf.ProtocolStringList
        getGenreList() {
      return genre_;
    }
    /**
     * <code>repeated string genre = 8;</code>
     * @return The count of genre.
     */
    public int getGenreCount() {
      return genre_.size();
    }
    /**
     * <code>repeated string genre = 8;</code>
     * @param index The index of the element to return.
     * @return The genre at the given index.
     */
    public java.lang.String getGenre(int index) {
      return genre_.get(index);
    }
    /**
     * <code>repeated string genre = 8;</code>
     * @param index The index of the value to return.
     * @return The bytes of the genre at the given index.
     */
    public com.google.protobuf.ByteString
        getGenreBytes(int index) {
      return genre_.getByteString(index);
    }

    public static final int COVER_FIELD_NUMBER = 9;
    private java.util.List<com.spotify.metadata.Metadata.Image> cover_;
    /**
     * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Image> getCoverList() {
      return cover_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.ImageOrBuilder> 
        getCoverOrBuilderList() {
      return cover_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
     */
    public int getCoverCount() {
      return cover_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
     */
    public com.spotify.metadata.Metadata.Image getCover(int index) {
      return cover_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
     */
    public com.spotify.metadata.Metadata.ImageOrBuilder getCoverOrBuilder(
        int index) {
      return cover_.get(index);
    }

    public static final int EXTERNAL_ID_FIELD_NUMBER = 10;
    private java.util.List<com.spotify.metadata.Metadata.ExternalId> externalId_;
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.ExternalId> getExternalIdList() {
      return externalId_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.ExternalIdOrBuilder> 
        getExternalIdOrBuilderList() {
      return externalId_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    public int getExternalIdCount() {
      return externalId_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    public com.spotify.metadata.Metadata.ExternalId getExternalId(int index) {
      return externalId_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    public com.spotify.metadata.Metadata.ExternalIdOrBuilder getExternalIdOrBuilder(
        int index) {
      return externalId_.get(index);
    }

    public static final int DISC_FIELD_NUMBER = 11;
    private java.util.List<com.spotify.metadata.Metadata.Disc> disc_;
    /**
     * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Disc> getDiscList() {
      return disc_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.DiscOrBuilder> 
        getDiscOrBuilderList() {
      return disc_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
     */
    public int getDiscCount() {
      return disc_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
     */
    public com.spotify.metadata.Metadata.Disc getDisc(int index) {
      return disc_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
     */
    public com.spotify.metadata.Metadata.DiscOrBuilder getDiscOrBuilder(
        int index) {
      return disc_.get(index);
    }

    public static final int REVIEW_FIELD_NUMBER = 12;
    private com.google.protobuf.LazyStringList review_;
    /**
     * <code>repeated string review = 12;</code>
     * @return A list containing the review.
     */
    public com.google.protobuf.ProtocolStringList
        getReviewList() {
      return review_;
    }
    /**
     * <code>repeated string review = 12;</code>
     * @return The count of review.
     */
    public int getReviewCount() {
      return review_.size();
    }
    /**
     * <code>repeated string review = 12;</code>
     * @param index The index of the element to return.
     * @return The review at the given index.
     */
    public java.lang.String getReview(int index) {
      return review_.get(index);
    }
    /**
     * <code>repeated string review = 12;</code>
     * @param index The index of the value to return.
     * @return The bytes of the review at the given index.
     */
    public com.google.protobuf.ByteString
        getReviewBytes(int index) {
      return review_.getByteString(index);
    }

    public static final int COPYRIGHT_FIELD_NUMBER = 13;
    private java.util.List<com.spotify.metadata.Metadata.Copyright> copyright_;
    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Copyright> getCopyrightList() {
      return copyright_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.CopyrightOrBuilder> 
        getCopyrightOrBuilderList() {
      return copyright_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
     */
    public int getCopyrightCount() {
      return copyright_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
     */
    public com.spotify.metadata.Metadata.Copyright getCopyright(int index) {
      return copyright_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
     */
    public com.spotify.metadata.Metadata.CopyrightOrBuilder getCopyrightOrBuilder(
        int index) {
      return copyright_.get(index);
    }

    public static final int RESTRICTION_FIELD_NUMBER = 14;
    private java.util.List<com.spotify.metadata.Metadata.Restriction> restriction_;
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Restriction> getRestrictionList() {
      return restriction_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.RestrictionOrBuilder> 
        getRestrictionOrBuilderList() {
      return restriction_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    public int getRestrictionCount() {
      return restriction_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    public com.spotify.metadata.Metadata.Restriction getRestriction(int index) {
      return restriction_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
     */
    public com.spotify.metadata.Metadata.RestrictionOrBuilder getRestrictionOrBuilder(
        int index) {
      return restriction_.get(index);
    }

    public static final int RELATED_FIELD_NUMBER = 15;
    private java.util.List<com.spotify.metadata.Metadata.Album> related_;
    /**
     * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Album> getRelatedList() {
      return related_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.AlbumOrBuilder> 
        getRelatedOrBuilderList() {
      return related_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
     */
    public int getRelatedCount() {
      return related_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
     */
    public com.spotify.metadata.Metadata.Album getRelated(int index) {
      return related_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
     */
    public com.spotify.metadata.Metadata.AlbumOrBuilder getRelatedOrBuilder(
        int index) {
      return related_.get(index);
    }

    public static final int SALE_PERIOD_FIELD_NUMBER = 16;
    private java.util.List<com.spotify.metadata.Metadata.SalePeriod> salePeriod_;
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.SalePeriod> getSalePeriodList() {
      return salePeriod_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.SalePeriodOrBuilder> 
        getSalePeriodOrBuilderList() {
      return salePeriod_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
     */
    public int getSalePeriodCount() {
      return salePeriod_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
     */
    public com.spotify.metadata.Metadata.SalePeriod getSalePeriod(int index) {
      return salePeriod_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
     */
    public com.spotify.metadata.Metadata.SalePeriodOrBuilder getSalePeriodOrBuilder(
        int index) {
      return salePeriod_.get(index);
    }

    public static final int COVER_GROUP_FIELD_NUMBER = 17;
    private com.spotify.metadata.Metadata.ImageGroup coverGroup_;
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup cover_group = 17;</code>
     * @return Whether the coverGroup field is set.
     */
    public boolean hasCoverGroup() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup cover_group = 17;</code>
     * @return The coverGroup.
     */
    public com.spotify.metadata.Metadata.ImageGroup getCoverGroup() {
      return coverGroup_ == null ? com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : coverGroup_;
    }
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup cover_group = 17;</code>
     */
    public com.spotify.metadata.Metadata.ImageGroupOrBuilder getCoverGroupOrBuilder() {
      return coverGroup_ == null ? com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : coverGroup_;
    }

    public static final int ORIGINAL_TITLE_FIELD_NUMBER = 18;
    private volatile java.lang.Object originalTitle_;
    /**
     * <code>optional string original_title = 18;</code>
     * @return Whether the originalTitle field is set.
     */
    public boolean hasOriginalTitle() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <code>optional string original_title = 18;</code>
     * @return The originalTitle.
     */
    public java.lang.String getOriginalTitle() {
      java.lang.Object ref = originalTitle_;
      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();
        if (bs.isValidUtf8()) {
          originalTitle_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string original_title = 18;</code>
     * @return The bytes for originalTitle.
     */
    public com.google.protobuf.ByteString
        getOriginalTitleBytes() {
      java.lang.Object ref = originalTitle_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        originalTitle_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VERSION_TITLE_FIELD_NUMBER = 19;
    private volatile java.lang.Object versionTitle_;
    /**
     * <code>optional string version_title = 19;</code>
     * @return Whether the versionTitle field is set.
     */
    public boolean hasVersionTitle() {
      return ((bitField0_ & 0x00000100) != 0);
    }
    /**
     * <code>optional string version_title = 19;</code>
     * @return The versionTitle.
     */
    public java.lang.String getVersionTitle() {
      java.lang.Object ref = versionTitle_;
      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();
        if (bs.isValidUtf8()) {
          versionTitle_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string version_title = 19;</code>
     * @return The bytes for versionTitle.
     */
    public com.google.protobuf.ByteString
        getVersionTitleBytes() {
      java.lang.Object ref = versionTitle_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        versionTitle_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TYPE_STR_FIELD_NUMBER = 20;
    private volatile java.lang.Object typeStr_;
    /**
     * <code>optional string type_str = 20;</code>
     * @return Whether the typeStr field is set.
     */
    public boolean hasTypeStr() {
      return ((bitField0_ & 0x00000200) != 0);
    }
    /**
     * <code>optional string type_str = 20;</code>
     * @return The typeStr.
     */
    public java.lang.String getTypeStr() {
      java.lang.Object ref = typeStr_;
      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();
        if (bs.isValidUtf8()) {
          typeStr_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string type_str = 20;</code>
     * @return The bytes for typeStr.
     */
    public com.google.protobuf.ByteString
        getTypeStrBytes() {
      java.lang.Object ref = typeStr_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        typeStr_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int AVAILABILITY_FIELD_NUMBER = 23;
    private java.util.List<com.spotify.metadata.Metadata.Availability> availability_;
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Availability> getAvailabilityList() {
      return availability_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
        getAvailabilityOrBuilderList() {
      return availability_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
     */
    public int getAvailabilityCount() {
      return availability_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
     */
    public com.spotify.metadata.Metadata.Availability getAvailability(int index) {
      return availability_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
     */
    public com.spotify.metadata.Metadata.AvailabilityOrBuilder getAvailabilityOrBuilder(
        int index) {
      return availability_.get(index);
    }

    public static com.spotify.metadata.Metadata.Album parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Album parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Album parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Album parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Album parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Album parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Album parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Album 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.spotify.metadata.Metadata.Album parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Album 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.spotify.metadata.Metadata.Album parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Album 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.spotify.metadata.Metadata.Album 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.Album}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.Album)
        com.spotify.metadata.Metadata.AlbumOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Album_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Album_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.Album.class, com.spotify.metadata.Metadata.Album.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.Album.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getArtistFieldBuilder();
          getDateFieldBuilder();
          getCoverFieldBuilder();
          getExternalIdFieldBuilder();
          getDiscFieldBuilder();
          getCopyrightFieldBuilder();
          getRestrictionFieldBuilder();
          getRelatedFieldBuilder();
          getSalePeriodFieldBuilder();
          getCoverGroupFieldBuilder();
          getAvailabilityFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        gid_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        if (artistBuilder_ == null) {
          artist_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          artistBuilder_.clear();
        }
        type_ = 1;
        bitField0_ = (bitField0_ & ~0x00000008);
        label_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        if (dateBuilder_ == null) {
          date_ = null;
        } else {
          dateBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        popularity_ = 0;
        bitField0_ = (bitField0_ & ~0x00000040);
        genre_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000080);
        if (coverBuilder_ == null) {
          cover_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
        } else {
          coverBuilder_.clear();
        }
        if (externalIdBuilder_ == null) {
          externalId_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
        } else {
          externalIdBuilder_.clear();
        }
        if (discBuilder_ == null) {
          disc_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000400);
        } else {
          discBuilder_.clear();
        }
        review_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000800);
        if (copyrightBuilder_ == null) {
          copyright_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00001000);
        } else {
          copyrightBuilder_.clear();
        }
        if (restrictionBuilder_ == null) {
          restriction_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00002000);
        } else {
          restrictionBuilder_.clear();
        }
        if (relatedBuilder_ == null) {
          related_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00004000);
        } else {
          relatedBuilder_.clear();
        }
        if (salePeriodBuilder_ == null) {
          salePeriod_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00008000);
        } else {
          salePeriodBuilder_.clear();
        }
        if (coverGroupBuilder_ == null) {
          coverGroup_ = null;
        } else {
          coverGroupBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00010000);
        originalTitle_ = "";
        bitField0_ = (bitField0_ & ~0x00020000);
        versionTitle_ = "";
        bitField0_ = (bitField0_ & ~0x00040000);
        typeStr_ = "";
        bitField0_ = (bitField0_ & ~0x00080000);
        if (availabilityBuilder_ == null) {
          availability_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00100000);
        } else {
          availabilityBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Album_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Album getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.Album.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Album build() {
        com.spotify.metadata.Metadata.Album result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Album buildPartial() {
        com.spotify.metadata.Metadata.Album result = new com.spotify.metadata.Metadata.Album(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.gid_ = gid_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.name_ = name_;
        if (artistBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0)) {
            artist_ = java.util.Collections.unmodifiableList(artist_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.artist_ = artist_;
        } else {
          result.artist_ = artistBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          to_bitField0_ |= 0x00000004;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000010) != 0)) {
          to_bitField0_ |= 0x00000008;
        }
        result.label_ = label_;
        if (((from_bitField0_ & 0x00000020) != 0)) {
          if (dateBuilder_ == null) {
            result.date_ = date_;
          } else {
            result.date_ = dateBuilder_.build();
          }
          to_bitField0_ |= 0x00000010;
        }
        if (((from_bitField0_ & 0x00000040) != 0)) {
          result.popularity_ = popularity_;
          to_bitField0_ |= 0x00000020;
        }
        if (((bitField0_ & 0x00000080) != 0)) {
          genre_ = genre_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000080);
        }
        result.genre_ = genre_;
        if (coverBuilder_ == null) {
          if (((bitField0_ & 0x00000100) != 0)) {
            cover_ = java.util.Collections.unmodifiableList(cover_);
            bitField0_ = (bitField0_ & ~0x00000100);
          }
          result.cover_ = cover_;
        } else {
          result.cover_ = coverBuilder_.build();
        }
        if (externalIdBuilder_ == null) {
          if (((bitField0_ & 0x00000200) != 0)) {
            externalId_ = java.util.Collections.unmodifiableList(externalId_);
            bitField0_ = (bitField0_ & ~0x00000200);
          }
          result.externalId_ = externalId_;
        } else {
          result.externalId_ = externalIdBuilder_.build();
        }
        if (discBuilder_ == null) {
          if (((bitField0_ & 0x00000400) != 0)) {
            disc_ = java.util.Collections.unmodifiableList(disc_);
            bitField0_ = (bitField0_ & ~0x00000400);
          }
          result.disc_ = disc_;
        } else {
          result.disc_ = discBuilder_.build();
        }
        if (((bitField0_ & 0x00000800) != 0)) {
          review_ = review_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000800);
        }
        result.review_ = review_;
        if (copyrightBuilder_ == null) {
          if (((bitField0_ & 0x00001000) != 0)) {
            copyright_ = java.util.Collections.unmodifiableList(copyright_);
            bitField0_ = (bitField0_ & ~0x00001000);
          }
          result.copyright_ = copyright_;
        } else {
          result.copyright_ = copyrightBuilder_.build();
        }
        if (restrictionBuilder_ == null) {
          if (((bitField0_ & 0x00002000) != 0)) {
            restriction_ = java.util.Collections.unmodifiableList(restriction_);
            bitField0_ = (bitField0_ & ~0x00002000);
          }
          result.restriction_ = restriction_;
        } else {
          result.restriction_ = restrictionBuilder_.build();
        }
        if (relatedBuilder_ == null) {
          if (((bitField0_ & 0x00004000) != 0)) {
            related_ = java.util.Collections.unmodifiableList(related_);
            bitField0_ = (bitField0_ & ~0x00004000);
          }
          result.related_ = related_;
        } else {
          result.related_ = relatedBuilder_.build();
        }
        if (salePeriodBuilder_ == null) {
          if (((bitField0_ & 0x00008000) != 0)) {
            salePeriod_ = java.util.Collections.unmodifiableList(salePeriod_);
            bitField0_ = (bitField0_ & ~0x00008000);
          }
          result.salePeriod_ = salePeriod_;
        } else {
          result.salePeriod_ = salePeriodBuilder_.build();
        }
        if (((from_bitField0_ & 0x00010000) != 0)) {
          if (coverGroupBuilder_ == null) {
            result.coverGroup_ = coverGroup_;
          } else {
            result.coverGroup_ = coverGroupBuilder_.build();
          }
          to_bitField0_ |= 0x00000040;
        }
        if (((from_bitField0_ & 0x00020000) != 0)) {
          to_bitField0_ |= 0x00000080;
        }
        result.originalTitle_ = originalTitle_;
        if (((from_bitField0_ & 0x00040000) != 0)) {
          to_bitField0_ |= 0x00000100;
        }
        result.versionTitle_ = versionTitle_;
        if (((from_bitField0_ & 0x00080000) != 0)) {
          to_bitField0_ |= 0x00000200;
        }
        result.typeStr_ = typeStr_;
        if (availabilityBuilder_ == null) {
          if (((bitField0_ & 0x00100000) != 0)) {
            availability_ = java.util.Collections.unmodifiableList(availability_);
            bitField0_ = (bitField0_ & ~0x00100000);
          }
          result.availability_ = availability_;
        } else {
          result.availability_ = availabilityBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private com.google.protobuf.ByteString gid_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes gid = 1;</code>
       * @return Whether the gid field is set.
       */
      public boolean hasGid() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional bytes gid = 1;</code>
       * @return The gid.
       */
      public com.google.protobuf.ByteString getGid() {
        return gid_;
      }
      /**
       * <code>optional bytes gid = 1;</code>
       * @param value The gid to set.
       * @return This builder for chaining.
       */
      public Builder setGid(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        gid_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes gid = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearGid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        gid_ = getDefaultInstance().getGid();
        onChanged();
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 2;</code>
       * @return Whether the name field is set.
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional string name = 2;</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();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 2;</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;
        }
      }
      /**
       * <code>optional string name = 2;</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();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000002);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 2;</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();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.metadata.Metadata.Artist> artist_ =
        java.util.Collections.emptyList();
      private void ensureArtistIsMutable() {
        if (!((bitField0_ & 0x00000004) != 0)) {
          artist_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Artist>(artist_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Artist, com.spotify.metadata.Metadata.Artist.Builder, com.spotify.metadata.Metadata.ArtistOrBuilder> artistBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Artist> getArtistList() {
        if (artistBuilder_ == null) {
          return java.util.Collections.unmodifiableList(artist_);
        } else {
          return artistBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
       */
      public int getArtistCount() {
        if (artistBuilder_ == null) {
          return artist_.size();
        } else {
          return artistBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
       */
      public com.spotify.metadata.Metadata.Artist getArtist(int index) {
        if (artistBuilder_ == null) {
          return artist_.get(index);
        } else {
          return artistBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
       */
      public Builder setArtist(
          int index, com.spotify.metadata.Metadata.Artist value) {
        if (artistBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArtistIsMutable();
          artist_.set(index, value);
          onChanged();
        } else {
          artistBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
       */
      public Builder setArtist(
          int index, com.spotify.metadata.Metadata.Artist.Builder builderForValue) {
        if (artistBuilder_ == null) {
          ensureArtistIsMutable();
          artist_.set(index, builderForValue.build());
          onChanged();
        } else {
          artistBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
       */
      public Builder addArtist(com.spotify.metadata.Metadata.Artist value) {
        if (artistBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArtistIsMutable();
          artist_.add(value);
          onChanged();
        } else {
          artistBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
       */
      public Builder addArtist(
          int index, com.spotify.metadata.Metadata.Artist value) {
        if (artistBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArtistIsMutable();
          artist_.add(index, value);
          onChanged();
        } else {
          artistBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
       */
      public Builder addArtist(
          com.spotify.metadata.Metadata.Artist.Builder builderForValue) {
        if (artistBuilder_ == null) {
          ensureArtistIsMutable();
          artist_.add(builderForValue.build());
          onChanged();
        } else {
          artistBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
       */
      public Builder addArtist(
          int index, com.spotify.metadata.Metadata.Artist.Builder builderForValue) {
        if (artistBuilder_ == null) {
          ensureArtistIsMutable();
          artist_.add(index, builderForValue.build());
          onChanged();
        } else {
          artistBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
       */
      public Builder addAllArtist(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Artist> values) {
        if (artistBuilder_ == null) {
          ensureArtistIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, artist_);
          onChanged();
        } else {
          artistBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
       */
      public Builder clearArtist() {
        if (artistBuilder_ == null) {
          artist_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          artistBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
       */
      public Builder removeArtist(int index) {
        if (artistBuilder_ == null) {
          ensureArtistIsMutable();
          artist_.remove(index);
          onChanged();
        } else {
          artistBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
       */
      public com.spotify.metadata.Metadata.Artist.Builder getArtistBuilder(
          int index) {
        return getArtistFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
       */
      public com.spotify.metadata.Metadata.ArtistOrBuilder getArtistOrBuilder(
          int index) {
        if (artistBuilder_ == null) {
          return artist_.get(index);  } else {
          return artistBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.ArtistOrBuilder> 
           getArtistOrBuilderList() {
        if (artistBuilder_ != null) {
          return artistBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(artist_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
       */
      public com.spotify.metadata.Metadata.Artist.Builder addArtistBuilder() {
        return getArtistFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Artist.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
       */
      public com.spotify.metadata.Metadata.Artist.Builder addArtistBuilder(
          int index) {
        return getArtistFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Artist.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 3;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Artist.Builder> 
           getArtistBuilderList() {
        return getArtistFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Artist, com.spotify.metadata.Metadata.Artist.Builder, com.spotify.metadata.Metadata.ArtistOrBuilder> 
          getArtistFieldBuilder() {
        if (artistBuilder_ == null) {
          artistBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Artist, com.spotify.metadata.Metadata.Artist.Builder, com.spotify.metadata.Metadata.ArtistOrBuilder>(
                  artist_,
                  ((bitField0_ & 0x00000004) != 0),
                  getParentForChildren(),
                  isClean());
          artist_ = null;
        }
        return artistBuilder_;
      }

      private int type_ = 1;
      /**
       * <code>optional .spotify.metadata.proto.Album.Type type = 4;</code>
       * @return Whether the type field is set.
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.Album.Type type = 4;</code>
       * @return The type.
       */
      public com.spotify.metadata.Metadata.Album.Type getType() {
        @SuppressWarnings("deprecation")
        com.spotify.metadata.Metadata.Album.Type result = com.spotify.metadata.Metadata.Album.Type.valueOf(type_);
        return result == null ? com.spotify.metadata.Metadata.Album.Type.ALBUM : result;
      }
      /**
       * <code>optional .spotify.metadata.proto.Album.Type type = 4;</code>
       * @param value The type to set.
       * @return This builder for chaining.
       */
      public Builder setType(com.spotify.metadata.Metadata.Album.Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        type_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Album.Type type = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000008);
        type_ = 1;
        onChanged();
        return this;
      }

      private java.lang.Object label_ = "";
      /**
       * <code>optional string label = 5;</code>
       * @return Whether the label field is set.
       */
      public boolean hasLabel() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>optional string label = 5;</code>
       * @return The label.
       */
      public java.lang.String getLabel() {
        java.lang.Object ref = label_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            label_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string label = 5;</code>
       * @return The bytes for label.
       */
      public com.google.protobuf.ByteString
          getLabelBytes() {
        java.lang.Object ref = label_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          label_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string label = 5;</code>
       * @param value The label to set.
       * @return This builder for chaining.
       */
      public Builder setLabel(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        label_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string label = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearLabel() {
        bitField0_ = (bitField0_ & ~0x00000010);
        label_ = getDefaultInstance().getLabel();
        onChanged();
        return this;
      }
      /**
       * <code>optional string label = 5;</code>
       * @param value The bytes for label to set.
       * @return This builder for chaining.
       */
      public Builder setLabelBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        label_ = value;
        onChanged();
        return this;
      }

      private com.spotify.metadata.Metadata.Date date_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.Date, com.spotify.metadata.Metadata.Date.Builder, com.spotify.metadata.Metadata.DateOrBuilder> dateBuilder_;
      /**
       * <code>optional .spotify.metadata.proto.Date date = 6;</code>
       * @return Whether the date field is set.
       */
      public boolean hasDate() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.Date date = 6;</code>
       * @return The date.
       */
      public com.spotify.metadata.Metadata.Date getDate() {
        if (dateBuilder_ == null) {
          return date_ == null ? com.spotify.metadata.Metadata.Date.getDefaultInstance() : date_;
        } else {
          return dateBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.Date date = 6;</code>
       */
      public Builder setDate(com.spotify.metadata.Metadata.Date value) {
        if (dateBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          date_ = value;
          onChanged();
        } else {
          dateBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date date = 6;</code>
       */
      public Builder setDate(
          com.spotify.metadata.Metadata.Date.Builder builderForValue) {
        if (dateBuilder_ == null) {
          date_ = builderForValue.build();
          onChanged();
        } else {
          dateBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date date = 6;</code>
       */
      public Builder mergeDate(com.spotify.metadata.Metadata.Date value) {
        if (dateBuilder_ == null) {
          if (((bitField0_ & 0x00000020) != 0) &&
              date_ != null &&
              date_ != com.spotify.metadata.Metadata.Date.getDefaultInstance()) {
            date_ =
              com.spotify.metadata.Metadata.Date.newBuilder(date_).mergeFrom(value).buildPartial();
          } else {
            date_ = value;
          }
          onChanged();
        } else {
          dateBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date date = 6;</code>
       */
      public Builder clearDate() {
        if (dateBuilder_ == null) {
          date_ = null;
          onChanged();
        } else {
          dateBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date date = 6;</code>
       */
      public com.spotify.metadata.Metadata.Date.Builder getDateBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getDateFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.metadata.proto.Date date = 6;</code>
       */
      public com.spotify.metadata.Metadata.DateOrBuilder getDateOrBuilder() {
        if (dateBuilder_ != null) {
          return dateBuilder_.getMessageOrBuilder();
        } else {
          return date_ == null ?
              com.spotify.metadata.Metadata.Date.getDefaultInstance() : date_;
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.Date date = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.Date, com.spotify.metadata.Metadata.Date.Builder, com.spotify.metadata.Metadata.DateOrBuilder> 
          getDateFieldBuilder() {
        if (dateBuilder_ == null) {
          dateBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.metadata.Metadata.Date, com.spotify.metadata.Metadata.Date.Builder, com.spotify.metadata.Metadata.DateOrBuilder>(
                  getDate(),
                  getParentForChildren(),
                  isClean());
          date_ = null;
        }
        return dateBuilder_;
      }

      private int popularity_ ;
      /**
       * <code>optional sint32 popularity = 7;</code>
       * @return Whether the popularity field is set.
       */
      public boolean hasPopularity() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <code>optional sint32 popularity = 7;</code>
       * @return The popularity.
       */
      public int getPopularity() {
        return popularity_;
      }
      /**
       * <code>optional sint32 popularity = 7;</code>
       * @param value The popularity to set.
       * @return This builder for chaining.
       */
      public Builder setPopularity(int value) {
        bitField0_ |= 0x00000040;
        popularity_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 popularity = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearPopularity() {
        bitField0_ = (bitField0_ & ~0x00000040);
        popularity_ = 0;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList genre_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureGenreIsMutable() {
        if (!((bitField0_ & 0x00000080) != 0)) {
          genre_ = new com.google.protobuf.LazyStringArrayList(genre_);
          bitField0_ |= 0x00000080;
         }
      }
      /**
       * <code>repeated string genre = 8;</code>
       * @return A list containing the genre.
       */
      public com.google.protobuf.ProtocolStringList
          getGenreList() {
        return genre_.getUnmodifiableView();
      }
      /**
       * <code>repeated string genre = 8;</code>
       * @return The count of genre.
       */
      public int getGenreCount() {
        return genre_.size();
      }
      /**
       * <code>repeated string genre = 8;</code>
       * @param index The index of the element to return.
       * @return The genre at the given index.
       */
      public java.lang.String getGenre(int index) {
        return genre_.get(index);
      }
      /**
       * <code>repeated string genre = 8;</code>
       * @param index The index of the value to return.
       * @return The bytes of the genre at the given index.
       */
      public com.google.protobuf.ByteString
          getGenreBytes(int index) {
        return genre_.getByteString(index);
      }
      /**
       * <code>repeated string genre = 8;</code>
       * @param index The index to set the value at.
       * @param value The genre to set.
       * @return This builder for chaining.
       */
      public Builder setGenre(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGenreIsMutable();
        genre_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string genre = 8;</code>
       * @param value The genre to add.
       * @return This builder for chaining.
       */
      public Builder addGenre(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGenreIsMutable();
        genre_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string genre = 8;</code>
       * @param values The genre to add.
       * @return This builder for chaining.
       */
      public Builder addAllGenre(
          java.lang.Iterable<java.lang.String> values) {
        ensureGenreIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, genre_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string genre = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearGenre() {
        genre_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000080);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string genre = 8;</code>
       * @param value The bytes of the genre to add.
       * @return This builder for chaining.
       */
      public Builder addGenreBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGenreIsMutable();
        genre_.add(value);
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.metadata.Metadata.Image> cover_ =
        java.util.Collections.emptyList();
      private void ensureCoverIsMutable() {
        if (!((bitField0_ & 0x00000100) != 0)) {
          cover_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Image>(cover_);
          bitField0_ |= 0x00000100;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Image, com.spotify.metadata.Metadata.Image.Builder, com.spotify.metadata.Metadata.ImageOrBuilder> coverBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Image> getCoverList() {
        if (coverBuilder_ == null) {
          return java.util.Collections.unmodifiableList(cover_);
        } else {
          return coverBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
       */
      public int getCoverCount() {
        if (coverBuilder_ == null) {
          return cover_.size();
        } else {
          return coverBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
       */
      public com.spotify.metadata.Metadata.Image getCover(int index) {
        if (coverBuilder_ == null) {
          return cover_.get(index);
        } else {
          return coverBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
       */
      public Builder setCover(
          int index, com.spotify.metadata.Metadata.Image value) {
        if (coverBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCoverIsMutable();
          cover_.set(index, value);
          onChanged();
        } else {
          coverBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
       */
      public Builder setCover(
          int index, com.spotify.metadata.Metadata.Image.Builder builderForValue) {
        if (coverBuilder_ == null) {
          ensureCoverIsMutable();
          cover_.set(index, builderForValue.build());
          onChanged();
        } else {
          coverBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
       */
      public Builder addCover(com.spotify.metadata.Metadata.Image value) {
        if (coverBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCoverIsMutable();
          cover_.add(value);
          onChanged();
        } else {
          coverBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
       */
      public Builder addCover(
          int index, com.spotify.metadata.Metadata.Image value) {
        if (coverBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCoverIsMutable();
          cover_.add(index, value);
          onChanged();
        } else {
          coverBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
       */
      public Builder addCover(
          com.spotify.metadata.Metadata.Image.Builder builderForValue) {
        if (coverBuilder_ == null) {
          ensureCoverIsMutable();
          cover_.add(builderForValue.build());
          onChanged();
        } else {
          coverBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
       */
      public Builder addCover(
          int index, com.spotify.metadata.Metadata.Image.Builder builderForValue) {
        if (coverBuilder_ == null) {
          ensureCoverIsMutable();
          cover_.add(index, builderForValue.build());
          onChanged();
        } else {
          coverBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
       */
      public Builder addAllCover(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Image> values) {
        if (coverBuilder_ == null) {
          ensureCoverIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, cover_);
          onChanged();
        } else {
          coverBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
       */
      public Builder clearCover() {
        if (coverBuilder_ == null) {
          cover_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
          onChanged();
        } else {
          coverBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
       */
      public Builder removeCover(int index) {
        if (coverBuilder_ == null) {
          ensureCoverIsMutable();
          cover_.remove(index);
          onChanged();
        } else {
          coverBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
       */
      public com.spotify.metadata.Metadata.Image.Builder getCoverBuilder(
          int index) {
        return getCoverFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
       */
      public com.spotify.metadata.Metadata.ImageOrBuilder getCoverOrBuilder(
          int index) {
        if (coverBuilder_ == null) {
          return cover_.get(index);  } else {
          return coverBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.ImageOrBuilder> 
           getCoverOrBuilderList() {
        if (coverBuilder_ != null) {
          return coverBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(cover_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
       */
      public com.spotify.metadata.Metadata.Image.Builder addCoverBuilder() {
        return getCoverFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Image.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
       */
      public com.spotify.metadata.Metadata.Image.Builder addCoverBuilder(
          int index) {
        return getCoverFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Image.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image cover = 9;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Image.Builder> 
           getCoverBuilderList() {
        return getCoverFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Image, com.spotify.metadata.Metadata.Image.Builder, com.spotify.metadata.Metadata.ImageOrBuilder> 
          getCoverFieldBuilder() {
        if (coverBuilder_ == null) {
          coverBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Image, com.spotify.metadata.Metadata.Image.Builder, com.spotify.metadata.Metadata.ImageOrBuilder>(
                  cover_,
                  ((bitField0_ & 0x00000100) != 0),
                  getParentForChildren(),
                  isClean());
          cover_ = null;
        }
        return coverBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.ExternalId> externalId_ =
        java.util.Collections.emptyList();
      private void ensureExternalIdIsMutable() {
        if (!((bitField0_ & 0x00000200) != 0)) {
          externalId_ = new java.util.ArrayList<com.spotify.metadata.Metadata.ExternalId>(externalId_);
          bitField0_ |= 0x00000200;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.ExternalId, com.spotify.metadata.Metadata.ExternalId.Builder, com.spotify.metadata.Metadata.ExternalIdOrBuilder> externalIdBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.ExternalId> getExternalIdList() {
        if (externalIdBuilder_ == null) {
          return java.util.Collections.unmodifiableList(externalId_);
        } else {
          return externalIdBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public int getExternalIdCount() {
        if (externalIdBuilder_ == null) {
          return externalId_.size();
        } else {
          return externalIdBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public com.spotify.metadata.Metadata.ExternalId getExternalId(int index) {
        if (externalIdBuilder_ == null) {
          return externalId_.get(index);
        } else {
          return externalIdBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder setExternalId(
          int index, com.spotify.metadata.Metadata.ExternalId value) {
        if (externalIdBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExternalIdIsMutable();
          externalId_.set(index, value);
          onChanged();
        } else {
          externalIdBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder setExternalId(
          int index, com.spotify.metadata.Metadata.ExternalId.Builder builderForValue) {
        if (externalIdBuilder_ == null) {
          ensureExternalIdIsMutable();
          externalId_.set(index, builderForValue.build());
          onChanged();
        } else {
          externalIdBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder addExternalId(com.spotify.metadata.Metadata.ExternalId value) {
        if (externalIdBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExternalIdIsMutable();
          externalId_.add(value);
          onChanged();
        } else {
          externalIdBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder addExternalId(
          int index, com.spotify.metadata.Metadata.ExternalId value) {
        if (externalIdBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExternalIdIsMutable();
          externalId_.add(index, value);
          onChanged();
        } else {
          externalIdBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder addExternalId(
          com.spotify.metadata.Metadata.ExternalId.Builder builderForValue) {
        if (externalIdBuilder_ == null) {
          ensureExternalIdIsMutable();
          externalId_.add(builderForValue.build());
          onChanged();
        } else {
          externalIdBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder addExternalId(
          int index, com.spotify.metadata.Metadata.ExternalId.Builder builderForValue) {
        if (externalIdBuilder_ == null) {
          ensureExternalIdIsMutable();
          externalId_.add(index, builderForValue.build());
          onChanged();
        } else {
          externalIdBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder addAllExternalId(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.ExternalId> values) {
        if (externalIdBuilder_ == null) {
          ensureExternalIdIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, externalId_);
          onChanged();
        } else {
          externalIdBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder clearExternalId() {
        if (externalIdBuilder_ == null) {
          externalId_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
          onChanged();
        } else {
          externalIdBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder removeExternalId(int index) {
        if (externalIdBuilder_ == null) {
          ensureExternalIdIsMutable();
          externalId_.remove(index);
          onChanged();
        } else {
          externalIdBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public com.spotify.metadata.Metadata.ExternalId.Builder getExternalIdBuilder(
          int index) {
        return getExternalIdFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public com.spotify.metadata.Metadata.ExternalIdOrBuilder getExternalIdOrBuilder(
          int index) {
        if (externalIdBuilder_ == null) {
          return externalId_.get(index);  } else {
          return externalIdBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.ExternalIdOrBuilder> 
           getExternalIdOrBuilderList() {
        if (externalIdBuilder_ != null) {
          return externalIdBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(externalId_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public com.spotify.metadata.Metadata.ExternalId.Builder addExternalIdBuilder() {
        return getExternalIdFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.ExternalId.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public com.spotify.metadata.Metadata.ExternalId.Builder addExternalIdBuilder(
          int index) {
        return getExternalIdFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.ExternalId.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.ExternalId.Builder> 
           getExternalIdBuilderList() {
        return getExternalIdFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.ExternalId, com.spotify.metadata.Metadata.ExternalId.Builder, com.spotify.metadata.Metadata.ExternalIdOrBuilder> 
          getExternalIdFieldBuilder() {
        if (externalIdBuilder_ == null) {
          externalIdBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.ExternalId, com.spotify.metadata.Metadata.ExternalId.Builder, com.spotify.metadata.Metadata.ExternalIdOrBuilder>(
                  externalId_,
                  ((bitField0_ & 0x00000200) != 0),
                  getParentForChildren(),
                  isClean());
          externalId_ = null;
        }
        return externalIdBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.Disc> disc_ =
        java.util.Collections.emptyList();
      private void ensureDiscIsMutable() {
        if (!((bitField0_ & 0x00000400) != 0)) {
          disc_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Disc>(disc_);
          bitField0_ |= 0x00000400;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Disc, com.spotify.metadata.Metadata.Disc.Builder, com.spotify.metadata.Metadata.DiscOrBuilder> discBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Disc> getDiscList() {
        if (discBuilder_ == null) {
          return java.util.Collections.unmodifiableList(disc_);
        } else {
          return discBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
       */
      public int getDiscCount() {
        if (discBuilder_ == null) {
          return disc_.size();
        } else {
          return discBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
       */
      public com.spotify.metadata.Metadata.Disc getDisc(int index) {
        if (discBuilder_ == null) {
          return disc_.get(index);
        } else {
          return discBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
       */
      public Builder setDisc(
          int index, com.spotify.metadata.Metadata.Disc value) {
        if (discBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDiscIsMutable();
          disc_.set(index, value);
          onChanged();
        } else {
          discBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
       */
      public Builder setDisc(
          int index, com.spotify.metadata.Metadata.Disc.Builder builderForValue) {
        if (discBuilder_ == null) {
          ensureDiscIsMutable();
          disc_.set(index, builderForValue.build());
          onChanged();
        } else {
          discBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
       */
      public Builder addDisc(com.spotify.metadata.Metadata.Disc value) {
        if (discBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDiscIsMutable();
          disc_.add(value);
          onChanged();
        } else {
          discBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
       */
      public Builder addDisc(
          int index, com.spotify.metadata.Metadata.Disc value) {
        if (discBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDiscIsMutable();
          disc_.add(index, value);
          onChanged();
        } else {
          discBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
       */
      public Builder addDisc(
          com.spotify.metadata.Metadata.Disc.Builder builderForValue) {
        if (discBuilder_ == null) {
          ensureDiscIsMutable();
          disc_.add(builderForValue.build());
          onChanged();
        } else {
          discBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
       */
      public Builder addDisc(
          int index, com.spotify.metadata.Metadata.Disc.Builder builderForValue) {
        if (discBuilder_ == null) {
          ensureDiscIsMutable();
          disc_.add(index, builderForValue.build());
          onChanged();
        } else {
          discBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
       */
      public Builder addAllDisc(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Disc> values) {
        if (discBuilder_ == null) {
          ensureDiscIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, disc_);
          onChanged();
        } else {
          discBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
       */
      public Builder clearDisc() {
        if (discBuilder_ == null) {
          disc_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000400);
          onChanged();
        } else {
          discBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
       */
      public Builder removeDisc(int index) {
        if (discBuilder_ == null) {
          ensureDiscIsMutable();
          disc_.remove(index);
          onChanged();
        } else {
          discBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
       */
      public com.spotify.metadata.Metadata.Disc.Builder getDiscBuilder(
          int index) {
        return getDiscFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
       */
      public com.spotify.metadata.Metadata.DiscOrBuilder getDiscOrBuilder(
          int index) {
        if (discBuilder_ == null) {
          return disc_.get(index);  } else {
          return discBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.DiscOrBuilder> 
           getDiscOrBuilderList() {
        if (discBuilder_ != null) {
          return discBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(disc_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
       */
      public com.spotify.metadata.Metadata.Disc.Builder addDiscBuilder() {
        return getDiscFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Disc.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
       */
      public com.spotify.metadata.Metadata.Disc.Builder addDiscBuilder(
          int index) {
        return getDiscFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Disc.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Disc disc = 11;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Disc.Builder> 
           getDiscBuilderList() {
        return getDiscFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Disc, com.spotify.metadata.Metadata.Disc.Builder, com.spotify.metadata.Metadata.DiscOrBuilder> 
          getDiscFieldBuilder() {
        if (discBuilder_ == null) {
          discBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Disc, com.spotify.metadata.Metadata.Disc.Builder, com.spotify.metadata.Metadata.DiscOrBuilder>(
                  disc_,
                  ((bitField0_ & 0x00000400) != 0),
                  getParentForChildren(),
                  isClean());
          disc_ = null;
        }
        return discBuilder_;
      }

      private com.google.protobuf.LazyStringList review_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureReviewIsMutable() {
        if (!((bitField0_ & 0x00000800) != 0)) {
          review_ = new com.google.protobuf.LazyStringArrayList(review_);
          bitField0_ |= 0x00000800;
         }
      }
      /**
       * <code>repeated string review = 12;</code>
       * @return A list containing the review.
       */
      public com.google.protobuf.ProtocolStringList
          getReviewList() {
        return review_.getUnmodifiableView();
      }
      /**
       * <code>repeated string review = 12;</code>
       * @return The count of review.
       */
      public int getReviewCount() {
        return review_.size();
      }
      /**
       * <code>repeated string review = 12;</code>
       * @param index The index of the element to return.
       * @return The review at the given index.
       */
      public java.lang.String getReview(int index) {
        return review_.get(index);
      }
      /**
       * <code>repeated string review = 12;</code>
       * @param index The index of the value to return.
       * @return The bytes of the review at the given index.
       */
      public com.google.protobuf.ByteString
          getReviewBytes(int index) {
        return review_.getByteString(index);
      }
      /**
       * <code>repeated string review = 12;</code>
       * @param index The index to set the value at.
       * @param value The review to set.
       * @return This builder for chaining.
       */
      public Builder setReview(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureReviewIsMutable();
        review_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string review = 12;</code>
       * @param value The review to add.
       * @return This builder for chaining.
       */
      public Builder addReview(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureReviewIsMutable();
        review_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string review = 12;</code>
       * @param values The review to add.
       * @return This builder for chaining.
       */
      public Builder addAllReview(
          java.lang.Iterable<java.lang.String> values) {
        ensureReviewIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, review_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string review = 12;</code>
       * @return This builder for chaining.
       */
      public Builder clearReview() {
        review_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000800);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string review = 12;</code>
       * @param value The bytes of the review to add.
       * @return This builder for chaining.
       */
      public Builder addReviewBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureReviewIsMutable();
        review_.add(value);
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.metadata.Metadata.Copyright> copyright_ =
        java.util.Collections.emptyList();
      private void ensureCopyrightIsMutable() {
        if (!((bitField0_ & 0x00001000) != 0)) {
          copyright_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Copyright>(copyright_);
          bitField0_ |= 0x00001000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Copyright, com.spotify.metadata.Metadata.Copyright.Builder, com.spotify.metadata.Metadata.CopyrightOrBuilder> copyrightBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Copyright> getCopyrightList() {
        if (copyrightBuilder_ == null) {
          return java.util.Collections.unmodifiableList(copyright_);
        } else {
          return copyrightBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
       */
      public int getCopyrightCount() {
        if (copyrightBuilder_ == null) {
          return copyright_.size();
        } else {
          return copyrightBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
       */
      public com.spotify.metadata.Metadata.Copyright getCopyright(int index) {
        if (copyrightBuilder_ == null) {
          return copyright_.get(index);
        } else {
          return copyrightBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
       */
      public Builder setCopyright(
          int index, com.spotify.metadata.Metadata.Copyright value) {
        if (copyrightBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCopyrightIsMutable();
          copyright_.set(index, value);
          onChanged();
        } else {
          copyrightBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
       */
      public Builder setCopyright(
          int index, com.spotify.metadata.Metadata.Copyright.Builder builderForValue) {
        if (copyrightBuilder_ == null) {
          ensureCopyrightIsMutable();
          copyright_.set(index, builderForValue.build());
          onChanged();
        } else {
          copyrightBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
       */
      public Builder addCopyright(com.spotify.metadata.Metadata.Copyright value) {
        if (copyrightBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCopyrightIsMutable();
          copyright_.add(value);
          onChanged();
        } else {
          copyrightBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
       */
      public Builder addCopyright(
          int index, com.spotify.metadata.Metadata.Copyright value) {
        if (copyrightBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCopyrightIsMutable();
          copyright_.add(index, value);
          onChanged();
        } else {
          copyrightBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
       */
      public Builder addCopyright(
          com.spotify.metadata.Metadata.Copyright.Builder builderForValue) {
        if (copyrightBuilder_ == null) {
          ensureCopyrightIsMutable();
          copyright_.add(builderForValue.build());
          onChanged();
        } else {
          copyrightBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
       */
      public Builder addCopyright(
          int index, com.spotify.metadata.Metadata.Copyright.Builder builderForValue) {
        if (copyrightBuilder_ == null) {
          ensureCopyrightIsMutable();
          copyright_.add(index, builderForValue.build());
          onChanged();
        } else {
          copyrightBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
       */
      public Builder addAllCopyright(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Copyright> values) {
        if (copyrightBuilder_ == null) {
          ensureCopyrightIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, copyright_);
          onChanged();
        } else {
          copyrightBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
       */
      public Builder clearCopyright() {
        if (copyrightBuilder_ == null) {
          copyright_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00001000);
          onChanged();
        } else {
          copyrightBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
       */
      public Builder removeCopyright(int index) {
        if (copyrightBuilder_ == null) {
          ensureCopyrightIsMutable();
          copyright_.remove(index);
          onChanged();
        } else {
          copyrightBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
       */
      public com.spotify.metadata.Metadata.Copyright.Builder getCopyrightBuilder(
          int index) {
        return getCopyrightFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
       */
      public com.spotify.metadata.Metadata.CopyrightOrBuilder getCopyrightOrBuilder(
          int index) {
        if (copyrightBuilder_ == null) {
          return copyright_.get(index);  } else {
          return copyrightBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.CopyrightOrBuilder> 
           getCopyrightOrBuilderList() {
        if (copyrightBuilder_ != null) {
          return copyrightBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(copyright_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
       */
      public com.spotify.metadata.Metadata.Copyright.Builder addCopyrightBuilder() {
        return getCopyrightFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Copyright.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
       */
      public com.spotify.metadata.Metadata.Copyright.Builder addCopyrightBuilder(
          int index) {
        return getCopyrightFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Copyright.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 13;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Copyright.Builder> 
           getCopyrightBuilderList() {
        return getCopyrightFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Copyright, com.spotify.metadata.Metadata.Copyright.Builder, com.spotify.metadata.Metadata.CopyrightOrBuilder> 
          getCopyrightFieldBuilder() {
        if (copyrightBuilder_ == null) {
          copyrightBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Copyright, com.spotify.metadata.Metadata.Copyright.Builder, com.spotify.metadata.Metadata.CopyrightOrBuilder>(
                  copyright_,
                  ((bitField0_ & 0x00001000) != 0),
                  getParentForChildren(),
                  isClean());
          copyright_ = null;
        }
        return copyrightBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.Restriction> restriction_ =
        java.util.Collections.emptyList();
      private void ensureRestrictionIsMutable() {
        if (!((bitField0_ & 0x00002000) != 0)) {
          restriction_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Restriction>(restriction_);
          bitField0_ |= 0x00002000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Restriction, com.spotify.metadata.Metadata.Restriction.Builder, com.spotify.metadata.Metadata.RestrictionOrBuilder> restrictionBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Restriction> getRestrictionList() {
        if (restrictionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(restriction_);
        } else {
          return restrictionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public int getRestrictionCount() {
        if (restrictionBuilder_ == null) {
          return restriction_.size();
        } else {
          return restrictionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public com.spotify.metadata.Metadata.Restriction getRestriction(int index) {
        if (restrictionBuilder_ == null) {
          return restriction_.get(index);
        } else {
          return restrictionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public Builder setRestriction(
          int index, com.spotify.metadata.Metadata.Restriction value) {
        if (restrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRestrictionIsMutable();
          restriction_.set(index, value);
          onChanged();
        } else {
          restrictionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public Builder setRestriction(
          int index, com.spotify.metadata.Metadata.Restriction.Builder builderForValue) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.set(index, builderForValue.build());
          onChanged();
        } else {
          restrictionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public Builder addRestriction(com.spotify.metadata.Metadata.Restriction value) {
        if (restrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRestrictionIsMutable();
          restriction_.add(value);
          onChanged();
        } else {
          restrictionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public Builder addRestriction(
          int index, com.spotify.metadata.Metadata.Restriction value) {
        if (restrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRestrictionIsMutable();
          restriction_.add(index, value);
          onChanged();
        } else {
          restrictionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public Builder addRestriction(
          com.spotify.metadata.Metadata.Restriction.Builder builderForValue) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.add(builderForValue.build());
          onChanged();
        } else {
          restrictionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public Builder addRestriction(
          int index, com.spotify.metadata.Metadata.Restriction.Builder builderForValue) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.add(index, builderForValue.build());
          onChanged();
        } else {
          restrictionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public Builder addAllRestriction(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Restriction> values) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, restriction_);
          onChanged();
        } else {
          restrictionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public Builder clearRestriction() {
        if (restrictionBuilder_ == null) {
          restriction_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00002000);
          onChanged();
        } else {
          restrictionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public Builder removeRestriction(int index) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.remove(index);
          onChanged();
        } else {
          restrictionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public com.spotify.metadata.Metadata.Restriction.Builder getRestrictionBuilder(
          int index) {
        return getRestrictionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public com.spotify.metadata.Metadata.RestrictionOrBuilder getRestrictionOrBuilder(
          int index) {
        if (restrictionBuilder_ == null) {
          return restriction_.get(index);  } else {
          return restrictionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.RestrictionOrBuilder> 
           getRestrictionOrBuilderList() {
        if (restrictionBuilder_ != null) {
          return restrictionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(restriction_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public com.spotify.metadata.Metadata.Restriction.Builder addRestrictionBuilder() {
        return getRestrictionFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Restriction.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public com.spotify.metadata.Metadata.Restriction.Builder addRestrictionBuilder(
          int index) {
        return getRestrictionFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Restriction.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 14;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Restriction.Builder> 
           getRestrictionBuilderList() {
        return getRestrictionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Restriction, com.spotify.metadata.Metadata.Restriction.Builder, com.spotify.metadata.Metadata.RestrictionOrBuilder> 
          getRestrictionFieldBuilder() {
        if (restrictionBuilder_ == null) {
          restrictionBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Restriction, com.spotify.metadata.Metadata.Restriction.Builder, com.spotify.metadata.Metadata.RestrictionOrBuilder>(
                  restriction_,
                  ((bitField0_ & 0x00002000) != 0),
                  getParentForChildren(),
                  isClean());
          restriction_ = null;
        }
        return restrictionBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.Album> related_ =
        java.util.Collections.emptyList();
      private void ensureRelatedIsMutable() {
        if (!((bitField0_ & 0x00004000) != 0)) {
          related_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Album>(related_);
          bitField0_ |= 0x00004000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Album, com.spotify.metadata.Metadata.Album.Builder, com.spotify.metadata.Metadata.AlbumOrBuilder> relatedBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Album> getRelatedList() {
        if (relatedBuilder_ == null) {
          return java.util.Collections.unmodifiableList(related_);
        } else {
          return relatedBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
       */
      public int getRelatedCount() {
        if (relatedBuilder_ == null) {
          return related_.size();
        } else {
          return relatedBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
       */
      public com.spotify.metadata.Metadata.Album getRelated(int index) {
        if (relatedBuilder_ == null) {
          return related_.get(index);
        } else {
          return relatedBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
       */
      public Builder setRelated(
          int index, com.spotify.metadata.Metadata.Album value) {
        if (relatedBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRelatedIsMutable();
          related_.set(index, value);
          onChanged();
        } else {
          relatedBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
       */
      public Builder setRelated(
          int index, com.spotify.metadata.Metadata.Album.Builder builderForValue) {
        if (relatedBuilder_ == null) {
          ensureRelatedIsMutable();
          related_.set(index, builderForValue.build());
          onChanged();
        } else {
          relatedBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
       */
      public Builder addRelated(com.spotify.metadata.Metadata.Album value) {
        if (relatedBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRelatedIsMutable();
          related_.add(value);
          onChanged();
        } else {
          relatedBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
       */
      public Builder addRelated(
          int index, com.spotify.metadata.Metadata.Album value) {
        if (relatedBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRelatedIsMutable();
          related_.add(index, value);
          onChanged();
        } else {
          relatedBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
       */
      public Builder addRelated(
          com.spotify.metadata.Metadata.Album.Builder builderForValue) {
        if (relatedBuilder_ == null) {
          ensureRelatedIsMutable();
          related_.add(builderForValue.build());
          onChanged();
        } else {
          relatedBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
       */
      public Builder addRelated(
          int index, com.spotify.metadata.Metadata.Album.Builder builderForValue) {
        if (relatedBuilder_ == null) {
          ensureRelatedIsMutable();
          related_.add(index, builderForValue.build());
          onChanged();
        } else {
          relatedBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
       */
      public Builder addAllRelated(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Album> values) {
        if (relatedBuilder_ == null) {
          ensureRelatedIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, related_);
          onChanged();
        } else {
          relatedBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
       */
      public Builder clearRelated() {
        if (relatedBuilder_ == null) {
          related_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00004000);
          onChanged();
        } else {
          relatedBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
       */
      public Builder removeRelated(int index) {
        if (relatedBuilder_ == null) {
          ensureRelatedIsMutable();
          related_.remove(index);
          onChanged();
        } else {
          relatedBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
       */
      public com.spotify.metadata.Metadata.Album.Builder getRelatedBuilder(
          int index) {
        return getRelatedFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
       */
      public com.spotify.metadata.Metadata.AlbumOrBuilder getRelatedOrBuilder(
          int index) {
        if (relatedBuilder_ == null) {
          return related_.get(index);  } else {
          return relatedBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.AlbumOrBuilder> 
           getRelatedOrBuilderList() {
        if (relatedBuilder_ != null) {
          return relatedBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(related_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
       */
      public com.spotify.metadata.Metadata.Album.Builder addRelatedBuilder() {
        return getRelatedFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Album.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
       */
      public com.spotify.metadata.Metadata.Album.Builder addRelatedBuilder(
          int index) {
        return getRelatedFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Album.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album related = 15;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Album.Builder> 
           getRelatedBuilderList() {
        return getRelatedFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Album, com.spotify.metadata.Metadata.Album.Builder, com.spotify.metadata.Metadata.AlbumOrBuilder> 
          getRelatedFieldBuilder() {
        if (relatedBuilder_ == null) {
          relatedBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Album, com.spotify.metadata.Metadata.Album.Builder, com.spotify.metadata.Metadata.AlbumOrBuilder>(
                  related_,
                  ((bitField0_ & 0x00004000) != 0),
                  getParentForChildren(),
                  isClean());
          related_ = null;
        }
        return relatedBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.SalePeriod> salePeriod_ =
        java.util.Collections.emptyList();
      private void ensureSalePeriodIsMutable() {
        if (!((bitField0_ & 0x00008000) != 0)) {
          salePeriod_ = new java.util.ArrayList<com.spotify.metadata.Metadata.SalePeriod>(salePeriod_);
          bitField0_ |= 0x00008000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.SalePeriod, com.spotify.metadata.Metadata.SalePeriod.Builder, com.spotify.metadata.Metadata.SalePeriodOrBuilder> salePeriodBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.SalePeriod> getSalePeriodList() {
        if (salePeriodBuilder_ == null) {
          return java.util.Collections.unmodifiableList(salePeriod_);
        } else {
          return salePeriodBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
       */
      public int getSalePeriodCount() {
        if (salePeriodBuilder_ == null) {
          return salePeriod_.size();
        } else {
          return salePeriodBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
       */
      public com.spotify.metadata.Metadata.SalePeriod getSalePeriod(int index) {
        if (salePeriodBuilder_ == null) {
          return salePeriod_.get(index);
        } else {
          return salePeriodBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
       */
      public Builder setSalePeriod(
          int index, com.spotify.metadata.Metadata.SalePeriod value) {
        if (salePeriodBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSalePeriodIsMutable();
          salePeriod_.set(index, value);
          onChanged();
        } else {
          salePeriodBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
       */
      public Builder setSalePeriod(
          int index, com.spotify.metadata.Metadata.SalePeriod.Builder builderForValue) {
        if (salePeriodBuilder_ == null) {
          ensureSalePeriodIsMutable();
          salePeriod_.set(index, builderForValue.build());
          onChanged();
        } else {
          salePeriodBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
       */
      public Builder addSalePeriod(com.spotify.metadata.Metadata.SalePeriod value) {
        if (salePeriodBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSalePeriodIsMutable();
          salePeriod_.add(value);
          onChanged();
        } else {
          salePeriodBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
       */
      public Builder addSalePeriod(
          int index, com.spotify.metadata.Metadata.SalePeriod value) {
        if (salePeriodBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSalePeriodIsMutable();
          salePeriod_.add(index, value);
          onChanged();
        } else {
          salePeriodBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
       */
      public Builder addSalePeriod(
          com.spotify.metadata.Metadata.SalePeriod.Builder builderForValue) {
        if (salePeriodBuilder_ == null) {
          ensureSalePeriodIsMutable();
          salePeriod_.add(builderForValue.build());
          onChanged();
        } else {
          salePeriodBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
       */
      public Builder addSalePeriod(
          int index, com.spotify.metadata.Metadata.SalePeriod.Builder builderForValue) {
        if (salePeriodBuilder_ == null) {
          ensureSalePeriodIsMutable();
          salePeriod_.add(index, builderForValue.build());
          onChanged();
        } else {
          salePeriodBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
       */
      public Builder addAllSalePeriod(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.SalePeriod> values) {
        if (salePeriodBuilder_ == null) {
          ensureSalePeriodIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, salePeriod_);
          onChanged();
        } else {
          salePeriodBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
       */
      public Builder clearSalePeriod() {
        if (salePeriodBuilder_ == null) {
          salePeriod_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00008000);
          onChanged();
        } else {
          salePeriodBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
       */
      public Builder removeSalePeriod(int index) {
        if (salePeriodBuilder_ == null) {
          ensureSalePeriodIsMutable();
          salePeriod_.remove(index);
          onChanged();
        } else {
          salePeriodBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
       */
      public com.spotify.metadata.Metadata.SalePeriod.Builder getSalePeriodBuilder(
          int index) {
        return getSalePeriodFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
       */
      public com.spotify.metadata.Metadata.SalePeriodOrBuilder getSalePeriodOrBuilder(
          int index) {
        if (salePeriodBuilder_ == null) {
          return salePeriod_.get(index);  } else {
          return salePeriodBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.SalePeriodOrBuilder> 
           getSalePeriodOrBuilderList() {
        if (salePeriodBuilder_ != null) {
          return salePeriodBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(salePeriod_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
       */
      public com.spotify.metadata.Metadata.SalePeriod.Builder addSalePeriodBuilder() {
        return getSalePeriodFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.SalePeriod.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
       */
      public com.spotify.metadata.Metadata.SalePeriod.Builder addSalePeriodBuilder(
          int index) {
        return getSalePeriodFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.SalePeriod.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 16;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.SalePeriod.Builder> 
           getSalePeriodBuilderList() {
        return getSalePeriodFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.SalePeriod, com.spotify.metadata.Metadata.SalePeriod.Builder, com.spotify.metadata.Metadata.SalePeriodOrBuilder> 
          getSalePeriodFieldBuilder() {
        if (salePeriodBuilder_ == null) {
          salePeriodBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.SalePeriod, com.spotify.metadata.Metadata.SalePeriod.Builder, com.spotify.metadata.Metadata.SalePeriodOrBuilder>(
                  salePeriod_,
                  ((bitField0_ & 0x00008000) != 0),
                  getParentForChildren(),
                  isClean());
          salePeriod_ = null;
        }
        return salePeriodBuilder_;
      }

      private com.spotify.metadata.Metadata.ImageGroup coverGroup_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.ImageGroup, com.spotify.metadata.Metadata.ImageGroup.Builder, com.spotify.metadata.Metadata.ImageGroupOrBuilder> coverGroupBuilder_;
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_group = 17;</code>
       * @return Whether the coverGroup field is set.
       */
      public boolean hasCoverGroup() {
        return ((bitField0_ & 0x00010000) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_group = 17;</code>
       * @return The coverGroup.
       */
      public com.spotify.metadata.Metadata.ImageGroup getCoverGroup() {
        if (coverGroupBuilder_ == null) {
          return coverGroup_ == null ? com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : coverGroup_;
        } else {
          return coverGroupBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_group = 17;</code>
       */
      public Builder setCoverGroup(com.spotify.metadata.Metadata.ImageGroup value) {
        if (coverGroupBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          coverGroup_ = value;
          onChanged();
        } else {
          coverGroupBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_group = 17;</code>
       */
      public Builder setCoverGroup(
          com.spotify.metadata.Metadata.ImageGroup.Builder builderForValue) {
        if (coverGroupBuilder_ == null) {
          coverGroup_ = builderForValue.build();
          onChanged();
        } else {
          coverGroupBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_group = 17;</code>
       */
      public Builder mergeCoverGroup(com.spotify.metadata.Metadata.ImageGroup value) {
        if (coverGroupBuilder_ == null) {
          if (((bitField0_ & 0x00010000) != 0) &&
              coverGroup_ != null &&
              coverGroup_ != com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance()) {
            coverGroup_ =
              com.spotify.metadata.Metadata.ImageGroup.newBuilder(coverGroup_).mergeFrom(value).buildPartial();
          } else {
            coverGroup_ = value;
          }
          onChanged();
        } else {
          coverGroupBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_group = 17;</code>
       */
      public Builder clearCoverGroup() {
        if (coverGroupBuilder_ == null) {
          coverGroup_ = null;
          onChanged();
        } else {
          coverGroupBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00010000);
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_group = 17;</code>
       */
      public com.spotify.metadata.Metadata.ImageGroup.Builder getCoverGroupBuilder() {
        bitField0_ |= 0x00010000;
        onChanged();
        return getCoverGroupFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_group = 17;</code>
       */
      public com.spotify.metadata.Metadata.ImageGroupOrBuilder getCoverGroupOrBuilder() {
        if (coverGroupBuilder_ != null) {
          return coverGroupBuilder_.getMessageOrBuilder();
        } else {
          return coverGroup_ == null ?
              com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : coverGroup_;
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_group = 17;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.ImageGroup, com.spotify.metadata.Metadata.ImageGroup.Builder, com.spotify.metadata.Metadata.ImageGroupOrBuilder> 
          getCoverGroupFieldBuilder() {
        if (coverGroupBuilder_ == null) {
          coverGroupBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.metadata.Metadata.ImageGroup, com.spotify.metadata.Metadata.ImageGroup.Builder, com.spotify.metadata.Metadata.ImageGroupOrBuilder>(
                  getCoverGroup(),
                  getParentForChildren(),
                  isClean());
          coverGroup_ = null;
        }
        return coverGroupBuilder_;
      }

      private java.lang.Object originalTitle_ = "";
      /**
       * <code>optional string original_title = 18;</code>
       * @return Whether the originalTitle field is set.
       */
      public boolean hasOriginalTitle() {
        return ((bitField0_ & 0x00020000) != 0);
      }
      /**
       * <code>optional string original_title = 18;</code>
       * @return The originalTitle.
       */
      public java.lang.String getOriginalTitle() {
        java.lang.Object ref = originalTitle_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            originalTitle_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string original_title = 18;</code>
       * @return The bytes for originalTitle.
       */
      public com.google.protobuf.ByteString
          getOriginalTitleBytes() {
        java.lang.Object ref = originalTitle_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          originalTitle_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string original_title = 18;</code>
       * @param value The originalTitle to set.
       * @return This builder for chaining.
       */
      public Builder setOriginalTitle(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00020000;
        originalTitle_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string original_title = 18;</code>
       * @return This builder for chaining.
       */
      public Builder clearOriginalTitle() {
        bitField0_ = (bitField0_ & ~0x00020000);
        originalTitle_ = getDefaultInstance().getOriginalTitle();
        onChanged();
        return this;
      }
      /**
       * <code>optional string original_title = 18;</code>
       * @param value The bytes for originalTitle to set.
       * @return This builder for chaining.
       */
      public Builder setOriginalTitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00020000;
        originalTitle_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object versionTitle_ = "";
      /**
       * <code>optional string version_title = 19;</code>
       * @return Whether the versionTitle field is set.
       */
      public boolean hasVersionTitle() {
        return ((bitField0_ & 0x00040000) != 0);
      }
      /**
       * <code>optional string version_title = 19;</code>
       * @return The versionTitle.
       */
      public java.lang.String getVersionTitle() {
        java.lang.Object ref = versionTitle_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            versionTitle_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string version_title = 19;</code>
       * @return The bytes for versionTitle.
       */
      public com.google.protobuf.ByteString
          getVersionTitleBytes() {
        java.lang.Object ref = versionTitle_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          versionTitle_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string version_title = 19;</code>
       * @param value The versionTitle to set.
       * @return This builder for chaining.
       */
      public Builder setVersionTitle(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00040000;
        versionTitle_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string version_title = 19;</code>
       * @return This builder for chaining.
       */
      public Builder clearVersionTitle() {
        bitField0_ = (bitField0_ & ~0x00040000);
        versionTitle_ = getDefaultInstance().getVersionTitle();
        onChanged();
        return this;
      }
      /**
       * <code>optional string version_title = 19;</code>
       * @param value The bytes for versionTitle to set.
       * @return This builder for chaining.
       */
      public Builder setVersionTitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00040000;
        versionTitle_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object typeStr_ = "";
      /**
       * <code>optional string type_str = 20;</code>
       * @return Whether the typeStr field is set.
       */
      public boolean hasTypeStr() {
        return ((bitField0_ & 0x00080000) != 0);
      }
      /**
       * <code>optional string type_str = 20;</code>
       * @return The typeStr.
       */
      public java.lang.String getTypeStr() {
        java.lang.Object ref = typeStr_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            typeStr_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string type_str = 20;</code>
       * @return The bytes for typeStr.
       */
      public com.google.protobuf.ByteString
          getTypeStrBytes() {
        java.lang.Object ref = typeStr_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          typeStr_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string type_str = 20;</code>
       * @param value The typeStr to set.
       * @return This builder for chaining.
       */
      public Builder setTypeStr(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00080000;
        typeStr_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string type_str = 20;</code>
       * @return This builder for chaining.
       */
      public Builder clearTypeStr() {
        bitField0_ = (bitField0_ & ~0x00080000);
        typeStr_ = getDefaultInstance().getTypeStr();
        onChanged();
        return this;
      }
      /**
       * <code>optional string type_str = 20;</code>
       * @param value The bytes for typeStr to set.
       * @return This builder for chaining.
       */
      public Builder setTypeStrBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00080000;
        typeStr_ = value;
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.metadata.Metadata.Availability> availability_ =
        java.util.Collections.emptyList();
      private void ensureAvailabilityIsMutable() {
        if (!((bitField0_ & 0x00100000) != 0)) {
          availability_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Availability>(availability_);
          bitField0_ |= 0x00100000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Availability, com.spotify.metadata.Metadata.Availability.Builder, com.spotify.metadata.Metadata.AvailabilityOrBuilder> availabilityBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Availability> getAvailabilityList() {
        if (availabilityBuilder_ == null) {
          return java.util.Collections.unmodifiableList(availability_);
        } else {
          return availabilityBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
       */
      public int getAvailabilityCount() {
        if (availabilityBuilder_ == null) {
          return availability_.size();
        } else {
          return availabilityBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
       */
      public com.spotify.metadata.Metadata.Availability getAvailability(int index) {
        if (availabilityBuilder_ == null) {
          return availability_.get(index);
        } else {
          return availabilityBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
       */
      public Builder setAvailability(
          int index, com.spotify.metadata.Metadata.Availability value) {
        if (availabilityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAvailabilityIsMutable();
          availability_.set(index, value);
          onChanged();
        } else {
          availabilityBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
       */
      public Builder setAvailability(
          int index, com.spotify.metadata.Metadata.Availability.Builder builderForValue) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.set(index, builderForValue.build());
          onChanged();
        } else {
          availabilityBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
       */
      public Builder addAvailability(com.spotify.metadata.Metadata.Availability value) {
        if (availabilityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAvailabilityIsMutable();
          availability_.add(value);
          onChanged();
        } else {
          availabilityBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
       */
      public Builder addAvailability(
          int index, com.spotify.metadata.Metadata.Availability value) {
        if (availabilityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAvailabilityIsMutable();
          availability_.add(index, value);
          onChanged();
        } else {
          availabilityBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
       */
      public Builder addAvailability(
          com.spotify.metadata.Metadata.Availability.Builder builderForValue) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.add(builderForValue.build());
          onChanged();
        } else {
          availabilityBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
       */
      public Builder addAvailability(
          int index, com.spotify.metadata.Metadata.Availability.Builder builderForValue) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.add(index, builderForValue.build());
          onChanged();
        } else {
          availabilityBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
       */
      public Builder addAllAvailability(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Availability> values) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, availability_);
          onChanged();
        } else {
          availabilityBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
       */
      public Builder clearAvailability() {
        if (availabilityBuilder_ == null) {
          availability_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00100000);
          onChanged();
        } else {
          availabilityBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
       */
      public Builder removeAvailability(int index) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.remove(index);
          onChanged();
        } else {
          availabilityBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
       */
      public com.spotify.metadata.Metadata.Availability.Builder getAvailabilityBuilder(
          int index) {
        return getAvailabilityFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
       */
      public com.spotify.metadata.Metadata.AvailabilityOrBuilder getAvailabilityOrBuilder(
          int index) {
        if (availabilityBuilder_ == null) {
          return availability_.get(index);  } else {
          return availabilityBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
           getAvailabilityOrBuilderList() {
        if (availabilityBuilder_ != null) {
          return availabilityBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(availability_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
       */
      public com.spotify.metadata.Metadata.Availability.Builder addAvailabilityBuilder() {
        return getAvailabilityFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Availability.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
       */
      public com.spotify.metadata.Metadata.Availability.Builder addAvailabilityBuilder(
          int index) {
        return getAvailabilityFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Availability.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 23;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Availability.Builder> 
           getAvailabilityBuilderList() {
        return getAvailabilityFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Availability, com.spotify.metadata.Metadata.Availability.Builder, com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
          getAvailabilityFieldBuilder() {
        if (availabilityBuilder_ == null) {
          availabilityBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Availability, com.spotify.metadata.Metadata.Availability.Builder, com.spotify.metadata.Metadata.AvailabilityOrBuilder>(
                  availability_,
                  ((bitField0_ & 0x00100000) != 0),
                  getParentForChildren(),
                  isClean());
          availability_ = null;
        }
        return availabilityBuilder_;
      }
      @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:spotify.metadata.proto.Album)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.Album)
    private static final com.spotify.metadata.Metadata.Album DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.Album();
    }

    public static com.spotify.metadata.Metadata.Album getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Album>
        PARSER = new com.google.protobuf.AbstractParser<Album>() {
      @java.lang.Override
      public Album 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.Album getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface TrackOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.Track)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional bytes gid = 1;</code>
     * @return Whether the gid field is set.
     */
    boolean hasGid();
    /**
     * <code>optional bytes gid = 1;</code>
     * @return The gid.
     */
    com.google.protobuf.ByteString getGid();

    /**
     * <code>optional string name = 2;</code>
     * @return Whether the name field is set.
     */
    boolean hasName();
    /**
     * <code>optional string name = 2;</code>
     * @return The name.
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 2;</code>
     * @return The bytes for name.
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <code>optional .spotify.metadata.proto.Album album = 3;</code>
     * @return Whether the album field is set.
     */
    boolean hasAlbum();
    /**
     * <code>optional .spotify.metadata.proto.Album album = 3;</code>
     * @return The album.
     */
    com.spotify.metadata.Metadata.Album getAlbum();
    /**
     * <code>optional .spotify.metadata.proto.Album album = 3;</code>
     */
    com.spotify.metadata.Metadata.AlbumOrBuilder getAlbumOrBuilder();

    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Artist> 
        getArtistList();
    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
     */
    com.spotify.metadata.Metadata.Artist getArtist(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
     */
    int getArtistCount();
    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.ArtistOrBuilder> 
        getArtistOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
     */
    com.spotify.metadata.Metadata.ArtistOrBuilder getArtistOrBuilder(
        int index);

    /**
     * <code>optional sint32 number = 5;</code>
     * @return Whether the number field is set.
     */
    boolean hasNumber();
    /**
     * <code>optional sint32 number = 5;</code>
     * @return The number.
     */
    int getNumber();

    /**
     * <code>optional sint32 disc_number = 6;</code>
     * @return Whether the discNumber field is set.
     */
    boolean hasDiscNumber();
    /**
     * <code>optional sint32 disc_number = 6;</code>
     * @return The discNumber.
     */
    int getDiscNumber();

    /**
     * <code>optional sint32 duration = 7;</code>
     * @return Whether the duration field is set.
     */
    boolean hasDuration();
    /**
     * <code>optional sint32 duration = 7;</code>
     * @return The duration.
     */
    int getDuration();

    /**
     * <code>optional sint32 popularity = 8;</code>
     * @return Whether the popularity field is set.
     */
    boolean hasPopularity();
    /**
     * <code>optional sint32 popularity = 8;</code>
     * @return The popularity.
     */
    int getPopularity();

    /**
     * <code>optional bool explicit = 9;</code>
     * @return Whether the explicit field is set.
     */
    boolean hasExplicit();
    /**
     * <code>optional bool explicit = 9;</code>
     * @return The explicit.
     */
    boolean getExplicit();

    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.ExternalId> 
        getExternalIdList();
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    com.spotify.metadata.Metadata.ExternalId getExternalId(int index);
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    int getExternalIdCount();
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.ExternalIdOrBuilder> 
        getExternalIdOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    com.spotify.metadata.Metadata.ExternalIdOrBuilder getExternalIdOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Restriction> 
        getRestrictionList();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
     */
    com.spotify.metadata.Metadata.Restriction getRestriction(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
     */
    int getRestrictionCount();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.RestrictionOrBuilder> 
        getRestrictionOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
     */
    com.spotify.metadata.Metadata.RestrictionOrBuilder getRestrictionOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.AudioFile> 
        getFileList();
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
     */
    com.spotify.metadata.Metadata.AudioFile getFile(int index);
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
     */
    int getFileCount();
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.AudioFileOrBuilder> 
        getFileOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
     */
    com.spotify.metadata.Metadata.AudioFileOrBuilder getFileOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Track> 
        getAlternativeList();
    /**
     * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
     */
    com.spotify.metadata.Metadata.Track getAlternative(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
     */
    int getAlternativeCount();
    /**
     * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.TrackOrBuilder> 
        getAlternativeOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
     */
    com.spotify.metadata.Metadata.TrackOrBuilder getAlternativeOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.SalePeriod> 
        getSalePeriodList();
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
     */
    com.spotify.metadata.Metadata.SalePeriod getSalePeriod(int index);
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
     */
    int getSalePeriodCount();
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.SalePeriodOrBuilder> 
        getSalePeriodOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
     */
    com.spotify.metadata.Metadata.SalePeriodOrBuilder getSalePeriodOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.AudioFile> 
        getPreviewList();
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
     */
    com.spotify.metadata.Metadata.AudioFile getPreview(int index);
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
     */
    int getPreviewCount();
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.AudioFileOrBuilder> 
        getPreviewOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
     */
    com.spotify.metadata.Metadata.AudioFileOrBuilder getPreviewOrBuilder(
        int index);

    /**
     * <code>repeated string tags = 16;</code>
     * @return A list containing the tags.
     */
    java.util.List<java.lang.String>
        getTagsList();
    /**
     * <code>repeated string tags = 16;</code>
     * @return The count of tags.
     */
    int getTagsCount();
    /**
     * <code>repeated string tags = 16;</code>
     * @param index The index of the element to return.
     * @return The tags at the given index.
     */
    java.lang.String getTags(int index);
    /**
     * <code>repeated string tags = 16;</code>
     * @param index The index of the value to return.
     * @return The bytes of the tags at the given index.
     */
    com.google.protobuf.ByteString
        getTagsBytes(int index);

    /**
     * <code>optional int64 earliest_live_timestamp = 17;</code>
     * @return Whether the earliestLiveTimestamp field is set.
     */
    boolean hasEarliestLiveTimestamp();
    /**
     * <code>optional int64 earliest_live_timestamp = 17;</code>
     * @return The earliestLiveTimestamp.
     */
    long getEarliestLiveTimestamp();

    /**
     * <code>optional bool has_lyrics = 18;</code>
     * @return Whether the hasLyrics field is set.
     */
    boolean hasHasLyrics();
    /**
     * <code>optional bool has_lyrics = 18;</code>
     * @return The hasLyrics.
     */
    boolean getHasLyrics();

    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Availability> 
        getAvailabilityList();
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
     */
    com.spotify.metadata.Metadata.Availability getAvailability(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
     */
    int getAvailabilityCount();
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
        getAvailabilityOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
     */
    com.spotify.metadata.Metadata.AvailabilityOrBuilder getAvailabilityOrBuilder(
        int index);

    /**
     * <code>optional .spotify.metadata.proto.Licensor licensor = 21;</code>
     * @return Whether the licensor field is set.
     */
    boolean hasLicensor();
    /**
     * <code>optional .spotify.metadata.proto.Licensor licensor = 21;</code>
     * @return The licensor.
     */
    com.spotify.metadata.Metadata.Licensor getLicensor();
    /**
     * <code>optional .spotify.metadata.proto.Licensor licensor = 21;</code>
     */
    com.spotify.metadata.Metadata.LicensorOrBuilder getLicensorOrBuilder();
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.Track}
   */
  public  static final class Track extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.Track)
      TrackOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Track.newBuilder() to construct.
    private Track(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Track() {
      gid_ = com.google.protobuf.ByteString.EMPTY;
      name_ = "";
      artist_ = java.util.Collections.emptyList();
      externalId_ = java.util.Collections.emptyList();
      restriction_ = java.util.Collections.emptyList();
      file_ = java.util.Collections.emptyList();
      alternative_ = java.util.Collections.emptyList();
      salePeriod_ = java.util.Collections.emptyList();
      preview_ = java.util.Collections.emptyList();
      tags_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      availability_ = java.util.Collections.emptyList();
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Track_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Track_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.Track.class, com.spotify.metadata.Metadata.Track.Builder.class);
    }

    private int bitField0_;
    public static final int GID_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString gid_;
    /**
     * <code>optional bytes gid = 1;</code>
     * @return Whether the gid field is set.
     */
    public boolean hasGid() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional bytes gid = 1;</code>
     * @return The gid.
     */
    public com.google.protobuf.ByteString getGid() {
      return gid_;
    }

    public static final int NAME_FIELD_NUMBER = 2;
    private volatile java.lang.Object name_;
    /**
     * <code>optional string name = 2;</code>
     * @return Whether the name field is set.
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional string name = 2;</code>
     * @return The name.
     */
    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();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 2;</code>
     * @return The bytes for name.
     */
    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 ALBUM_FIELD_NUMBER = 3;
    private com.spotify.metadata.Metadata.Album album_;
    /**
     * <code>optional .spotify.metadata.proto.Album album = 3;</code>
     * @return Whether the album field is set.
     */
    public boolean hasAlbum() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.Album album = 3;</code>
     * @return The album.
     */
    public com.spotify.metadata.Metadata.Album getAlbum() {
      return album_ == null ? com.spotify.metadata.Metadata.Album.getDefaultInstance() : album_;
    }
    /**
     * <code>optional .spotify.metadata.proto.Album album = 3;</code>
     */
    public com.spotify.metadata.Metadata.AlbumOrBuilder getAlbumOrBuilder() {
      return album_ == null ? com.spotify.metadata.Metadata.Album.getDefaultInstance() : album_;
    }

    public static final int ARTIST_FIELD_NUMBER = 4;
    private java.util.List<com.spotify.metadata.Metadata.Artist> artist_;
    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Artist> getArtistList() {
      return artist_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.ArtistOrBuilder> 
        getArtistOrBuilderList() {
      return artist_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
     */
    public int getArtistCount() {
      return artist_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
     */
    public com.spotify.metadata.Metadata.Artist getArtist(int index) {
      return artist_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
     */
    public com.spotify.metadata.Metadata.ArtistOrBuilder getArtistOrBuilder(
        int index) {
      return artist_.get(index);
    }

    public static final int NUMBER_FIELD_NUMBER = 5;
    private int number_;
    /**
     * <code>optional sint32 number = 5;</code>
     * @return Whether the number field is set.
     */
    public boolean hasNumber() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional sint32 number = 5;</code>
     * @return The number.
     */
    public int getNumber() {
      return number_;
    }

    public static final int DISC_NUMBER_FIELD_NUMBER = 6;
    private int discNumber_;
    /**
     * <code>optional sint32 disc_number = 6;</code>
     * @return Whether the discNumber field is set.
     */
    public boolean hasDiscNumber() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional sint32 disc_number = 6;</code>
     * @return The discNumber.
     */
    public int getDiscNumber() {
      return discNumber_;
    }

    public static final int DURATION_FIELD_NUMBER = 7;
    private int duration_;
    /**
     * <code>optional sint32 duration = 7;</code>
     * @return Whether the duration field is set.
     */
    public boolean hasDuration() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional sint32 duration = 7;</code>
     * @return The duration.
     */
    public int getDuration() {
      return duration_;
    }

    public static final int POPULARITY_FIELD_NUMBER = 8;
    private int popularity_;
    /**
     * <code>optional sint32 popularity = 8;</code>
     * @return Whether the popularity field is set.
     */
    public boolean hasPopularity() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>optional sint32 popularity = 8;</code>
     * @return The popularity.
     */
    public int getPopularity() {
      return popularity_;
    }

    public static final int EXPLICIT_FIELD_NUMBER = 9;
    private boolean explicit_;
    /**
     * <code>optional bool explicit = 9;</code>
     * @return Whether the explicit field is set.
     */
    public boolean hasExplicit() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <code>optional bool explicit = 9;</code>
     * @return The explicit.
     */
    public boolean getExplicit() {
      return explicit_;
    }

    public static final int EXTERNAL_ID_FIELD_NUMBER = 10;
    private java.util.List<com.spotify.metadata.Metadata.ExternalId> externalId_;
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.ExternalId> getExternalIdList() {
      return externalId_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.ExternalIdOrBuilder> 
        getExternalIdOrBuilderList() {
      return externalId_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    public int getExternalIdCount() {
      return externalId_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    public com.spotify.metadata.Metadata.ExternalId getExternalId(int index) {
      return externalId_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
     */
    public com.spotify.metadata.Metadata.ExternalIdOrBuilder getExternalIdOrBuilder(
        int index) {
      return externalId_.get(index);
    }

    public static final int RESTRICTION_FIELD_NUMBER = 11;
    private java.util.List<com.spotify.metadata.Metadata.Restriction> restriction_;
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Restriction> getRestrictionList() {
      return restriction_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.RestrictionOrBuilder> 
        getRestrictionOrBuilderList() {
      return restriction_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
     */
    public int getRestrictionCount() {
      return restriction_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
     */
    public com.spotify.metadata.Metadata.Restriction getRestriction(int index) {
      return restriction_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
     */
    public com.spotify.metadata.Metadata.RestrictionOrBuilder getRestrictionOrBuilder(
        int index) {
      return restriction_.get(index);
    }

    public static final int FILE_FIELD_NUMBER = 12;
    private java.util.List<com.spotify.metadata.Metadata.AudioFile> file_;
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.AudioFile> getFileList() {
      return file_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.AudioFileOrBuilder> 
        getFileOrBuilderList() {
      return file_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
     */
    public int getFileCount() {
      return file_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
     */
    public com.spotify.metadata.Metadata.AudioFile getFile(int index) {
      return file_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
     */
    public com.spotify.metadata.Metadata.AudioFileOrBuilder getFileOrBuilder(
        int index) {
      return file_.get(index);
    }

    public static final int ALTERNATIVE_FIELD_NUMBER = 13;
    private java.util.List<com.spotify.metadata.Metadata.Track> alternative_;
    /**
     * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Track> getAlternativeList() {
      return alternative_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.TrackOrBuilder> 
        getAlternativeOrBuilderList() {
      return alternative_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
     */
    public int getAlternativeCount() {
      return alternative_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
     */
    public com.spotify.metadata.Metadata.Track getAlternative(int index) {
      return alternative_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
     */
    public com.spotify.metadata.Metadata.TrackOrBuilder getAlternativeOrBuilder(
        int index) {
      return alternative_.get(index);
    }

    public static final int SALE_PERIOD_FIELD_NUMBER = 14;
    private java.util.List<com.spotify.metadata.Metadata.SalePeriod> salePeriod_;
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.SalePeriod> getSalePeriodList() {
      return salePeriod_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.SalePeriodOrBuilder> 
        getSalePeriodOrBuilderList() {
      return salePeriod_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
     */
    public int getSalePeriodCount() {
      return salePeriod_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
     */
    public com.spotify.metadata.Metadata.SalePeriod getSalePeriod(int index) {
      return salePeriod_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
     */
    public com.spotify.metadata.Metadata.SalePeriodOrBuilder getSalePeriodOrBuilder(
        int index) {
      return salePeriod_.get(index);
    }

    public static final int PREVIEW_FIELD_NUMBER = 15;
    private java.util.List<com.spotify.metadata.Metadata.AudioFile> preview_;
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.AudioFile> getPreviewList() {
      return preview_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.AudioFileOrBuilder> 
        getPreviewOrBuilderList() {
      return preview_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
     */
    public int getPreviewCount() {
      return preview_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
     */
    public com.spotify.metadata.Metadata.AudioFile getPreview(int index) {
      return preview_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
     */
    public com.spotify.metadata.Metadata.AudioFileOrBuilder getPreviewOrBuilder(
        int index) {
      return preview_.get(index);
    }

    public static final int TAGS_FIELD_NUMBER = 16;
    private com.google.protobuf.LazyStringList tags_;
    /**
     * <code>repeated string tags = 16;</code>
     * @return A list containing the tags.
     */
    public com.google.protobuf.ProtocolStringList
        getTagsList() {
      return tags_;
    }
    /**
     * <code>repeated string tags = 16;</code>
     * @return The count of tags.
     */
    public int getTagsCount() {
      return tags_.size();
    }
    /**
     * <code>repeated string tags = 16;</code>
     * @param index The index of the element to return.
     * @return The tags at the given index.
     */
    public java.lang.String getTags(int index) {
      return tags_.get(index);
    }
    /**
     * <code>repeated string tags = 16;</code>
     * @param index The index of the value to return.
     * @return The bytes of the tags at the given index.
     */
    public com.google.protobuf.ByteString
        getTagsBytes(int index) {
      return tags_.getByteString(index);
    }

    public static final int EARLIEST_LIVE_TIMESTAMP_FIELD_NUMBER = 17;
    private long earliestLiveTimestamp_;
    /**
     * <code>optional int64 earliest_live_timestamp = 17;</code>
     * @return Whether the earliestLiveTimestamp field is set.
     */
    public boolean hasEarliestLiveTimestamp() {
      return ((bitField0_ & 0x00000100) != 0);
    }
    /**
     * <code>optional int64 earliest_live_timestamp = 17;</code>
     * @return The earliestLiveTimestamp.
     */
    public long getEarliestLiveTimestamp() {
      return earliestLiveTimestamp_;
    }

    public static final int HAS_LYRICS_FIELD_NUMBER = 18;
    private boolean hasLyrics_;
    /**
     * <code>optional bool has_lyrics = 18;</code>
     * @return Whether the hasLyrics field is set.
     */
    public boolean hasHasLyrics() {
      return ((bitField0_ & 0x00000200) != 0);
    }
    /**
     * <code>optional bool has_lyrics = 18;</code>
     * @return The hasLyrics.
     */
    public boolean getHasLyrics() {
      return hasLyrics_;
    }

    public static final int AVAILABILITY_FIELD_NUMBER = 19;
    private java.util.List<com.spotify.metadata.Metadata.Availability> availability_;
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Availability> getAvailabilityList() {
      return availability_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
        getAvailabilityOrBuilderList() {
      return availability_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
     */
    public int getAvailabilityCount() {
      return availability_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
     */
    public com.spotify.metadata.Metadata.Availability getAvailability(int index) {
      return availability_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
     */
    public com.spotify.metadata.Metadata.AvailabilityOrBuilder getAvailabilityOrBuilder(
        int index) {
      return availability_.get(index);
    }

    public static final int LICENSOR_FIELD_NUMBER = 21;
    private com.spotify.metadata.Metadata.Licensor licensor_;
    /**
     * <code>optional .spotify.metadata.proto.Licensor licensor = 21;</code>
     * @return Whether the licensor field is set.
     */
    public boolean hasLicensor() {
      return ((bitField0_ & 0x00000400) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.Licensor licensor = 21;</code>
     * @return The licensor.
     */
    public com.spotify.metadata.Metadata.Licensor getLicensor() {
      return licensor_ == null ? com.spotify.metadata.Metadata.Licensor.getDefaultInstance() : licensor_;
    }
    /**
     * <code>optional .spotify.metadata.proto.Licensor licensor = 21;</code>
     */
    public com.spotify.metadata.Metadata.LicensorOrBuilder getLicensorOrBuilder() {
      return licensor_ == null ? com.spotify.metadata.Metadata.Licensor.getDefaultInstance() : licensor_;
    }

    public static com.spotify.metadata.Metadata.Track parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Track parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Track parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Track parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Track parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Track parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Track parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Track 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.spotify.metadata.Metadata.Track parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Track 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.spotify.metadata.Metadata.Track parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Track 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.spotify.metadata.Metadata.Track 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.Track}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.Track)
        com.spotify.metadata.Metadata.TrackOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Track_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Track_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.Track.class, com.spotify.metadata.Metadata.Track.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.Track.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getAlbumFieldBuilder();
          getArtistFieldBuilder();
          getExternalIdFieldBuilder();
          getRestrictionFieldBuilder();
          getFileFieldBuilder();
          getAlternativeFieldBuilder();
          getSalePeriodFieldBuilder();
          getPreviewFieldBuilder();
          getAvailabilityFieldBuilder();
          getLicensorFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        gid_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        if (albumBuilder_ == null) {
          album_ = null;
        } else {
          albumBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (artistBuilder_ == null) {
          artist_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          artistBuilder_.clear();
        }
        number_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        discNumber_ = 0;
        bitField0_ = (bitField0_ & ~0x00000020);
        duration_ = 0;
        bitField0_ = (bitField0_ & ~0x00000040);
        popularity_ = 0;
        bitField0_ = (bitField0_ & ~0x00000080);
        explicit_ = false;
        bitField0_ = (bitField0_ & ~0x00000100);
        if (externalIdBuilder_ == null) {
          externalId_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
        } else {
          externalIdBuilder_.clear();
        }
        if (restrictionBuilder_ == null) {
          restriction_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000400);
        } else {
          restrictionBuilder_.clear();
        }
        if (fileBuilder_ == null) {
          file_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000800);
        } else {
          fileBuilder_.clear();
        }
        if (alternativeBuilder_ == null) {
          alternative_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00001000);
        } else {
          alternativeBuilder_.clear();
        }
        if (salePeriodBuilder_ == null) {
          salePeriod_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00002000);
        } else {
          salePeriodBuilder_.clear();
        }
        if (previewBuilder_ == null) {
          preview_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00004000);
        } else {
          previewBuilder_.clear();
        }
        tags_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00008000);
        earliestLiveTimestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00010000);
        hasLyrics_ = false;
        bitField0_ = (bitField0_ & ~0x00020000);
        if (availabilityBuilder_ == null) {
          availability_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00040000);
        } else {
          availabilityBuilder_.clear();
        }
        if (licensorBuilder_ == null) {
          licensor_ = null;
        } else {
          licensorBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00080000);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Track_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Track getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.Track.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Track build() {
        com.spotify.metadata.Metadata.Track result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Track buildPartial() {
        com.spotify.metadata.Metadata.Track result = new com.spotify.metadata.Metadata.Track(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.gid_ = gid_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000004) != 0)) {
          if (albumBuilder_ == null) {
            result.album_ = album_;
          } else {
            result.album_ = albumBuilder_.build();
          }
          to_bitField0_ |= 0x00000004;
        }
        if (artistBuilder_ == null) {
          if (((bitField0_ & 0x00000008) != 0)) {
            artist_ = java.util.Collections.unmodifiableList(artist_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.artist_ = artist_;
        } else {
          result.artist_ = artistBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          result.number_ = number_;
          to_bitField0_ |= 0x00000008;
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          result.discNumber_ = discNumber_;
          to_bitField0_ |= 0x00000010;
        }
        if (((from_bitField0_ & 0x00000040) != 0)) {
          result.duration_ = duration_;
          to_bitField0_ |= 0x00000020;
        }
        if (((from_bitField0_ & 0x00000080) != 0)) {
          result.popularity_ = popularity_;
          to_bitField0_ |= 0x00000040;
        }
        if (((from_bitField0_ & 0x00000100) != 0)) {
          result.explicit_ = explicit_;
          to_bitField0_ |= 0x00000080;
        }
        if (externalIdBuilder_ == null) {
          if (((bitField0_ & 0x00000200) != 0)) {
            externalId_ = java.util.Collections.unmodifiableList(externalId_);
            bitField0_ = (bitField0_ & ~0x00000200);
          }
          result.externalId_ = externalId_;
        } else {
          result.externalId_ = externalIdBuilder_.build();
        }
        if (restrictionBuilder_ == null) {
          if (((bitField0_ & 0x00000400) != 0)) {
            restriction_ = java.util.Collections.unmodifiableList(restriction_);
            bitField0_ = (bitField0_ & ~0x00000400);
          }
          result.restriction_ = restriction_;
        } else {
          result.restriction_ = restrictionBuilder_.build();
        }
        if (fileBuilder_ == null) {
          if (((bitField0_ & 0x00000800) != 0)) {
            file_ = java.util.Collections.unmodifiableList(file_);
            bitField0_ = (bitField0_ & ~0x00000800);
          }
          result.file_ = file_;
        } else {
          result.file_ = fileBuilder_.build();
        }
        if (alternativeBuilder_ == null) {
          if (((bitField0_ & 0x00001000) != 0)) {
            alternative_ = java.util.Collections.unmodifiableList(alternative_);
            bitField0_ = (bitField0_ & ~0x00001000);
          }
          result.alternative_ = alternative_;
        } else {
          result.alternative_ = alternativeBuilder_.build();
        }
        if (salePeriodBuilder_ == null) {
          if (((bitField0_ & 0x00002000) != 0)) {
            salePeriod_ = java.util.Collections.unmodifiableList(salePeriod_);
            bitField0_ = (bitField0_ & ~0x00002000);
          }
          result.salePeriod_ = salePeriod_;
        } else {
          result.salePeriod_ = salePeriodBuilder_.build();
        }
        if (previewBuilder_ == null) {
          if (((bitField0_ & 0x00004000) != 0)) {
            preview_ = java.util.Collections.unmodifiableList(preview_);
            bitField0_ = (bitField0_ & ~0x00004000);
          }
          result.preview_ = preview_;
        } else {
          result.preview_ = previewBuilder_.build();
        }
        if (((bitField0_ & 0x00008000) != 0)) {
          tags_ = tags_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00008000);
        }
        result.tags_ = tags_;
        if (((from_bitField0_ & 0x00010000) != 0)) {
          result.earliestLiveTimestamp_ = earliestLiveTimestamp_;
          to_bitField0_ |= 0x00000100;
        }
        if (((from_bitField0_ & 0x00020000) != 0)) {
          result.hasLyrics_ = hasLyrics_;
          to_bitField0_ |= 0x00000200;
        }
        if (availabilityBuilder_ == null) {
          if (((bitField0_ & 0x00040000) != 0)) {
            availability_ = java.util.Collections.unmodifiableList(availability_);
            bitField0_ = (bitField0_ & ~0x00040000);
          }
          result.availability_ = availability_;
        } else {
          result.availability_ = availabilityBuilder_.build();
        }
        if (((from_bitField0_ & 0x00080000) != 0)) {
          if (licensorBuilder_ == null) {
            result.licensor_ = licensor_;
          } else {
            result.licensor_ = licensorBuilder_.build();
          }
          to_bitField0_ |= 0x00000400;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private com.google.protobuf.ByteString gid_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes gid = 1;</code>
       * @return Whether the gid field is set.
       */
      public boolean hasGid() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional bytes gid = 1;</code>
       * @return The gid.
       */
      public com.google.protobuf.ByteString getGid() {
        return gid_;
      }
      /**
       * <code>optional bytes gid = 1;</code>
       * @param value The gid to set.
       * @return This builder for chaining.
       */
      public Builder setGid(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        gid_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes gid = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearGid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        gid_ = getDefaultInstance().getGid();
        onChanged();
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 2;</code>
       * @return Whether the name field is set.
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional string name = 2;</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();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 2;</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;
        }
      }
      /**
       * <code>optional string name = 2;</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();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000002);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 2;</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();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }

      private com.spotify.metadata.Metadata.Album album_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.Album, com.spotify.metadata.Metadata.Album.Builder, com.spotify.metadata.Metadata.AlbumOrBuilder> albumBuilder_;
      /**
       * <code>optional .spotify.metadata.proto.Album album = 3;</code>
       * @return Whether the album field is set.
       */
      public boolean hasAlbum() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.Album album = 3;</code>
       * @return The album.
       */
      public com.spotify.metadata.Metadata.Album getAlbum() {
        if (albumBuilder_ == null) {
          return album_ == null ? com.spotify.metadata.Metadata.Album.getDefaultInstance() : album_;
        } else {
          return albumBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.Album album = 3;</code>
       */
      public Builder setAlbum(com.spotify.metadata.Metadata.Album value) {
        if (albumBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          album_ = value;
          onChanged();
        } else {
          albumBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Album album = 3;</code>
       */
      public Builder setAlbum(
          com.spotify.metadata.Metadata.Album.Builder builderForValue) {
        if (albumBuilder_ == null) {
          album_ = builderForValue.build();
          onChanged();
        } else {
          albumBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Album album = 3;</code>
       */
      public Builder mergeAlbum(com.spotify.metadata.Metadata.Album value) {
        if (albumBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0) &&
              album_ != null &&
              album_ != com.spotify.metadata.Metadata.Album.getDefaultInstance()) {
            album_ =
              com.spotify.metadata.Metadata.Album.newBuilder(album_).mergeFrom(value).buildPartial();
          } else {
            album_ = value;
          }
          onChanged();
        } else {
          albumBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Album album = 3;</code>
       */
      public Builder clearAlbum() {
        if (albumBuilder_ == null) {
          album_ = null;
          onChanged();
        } else {
          albumBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Album album = 3;</code>
       */
      public com.spotify.metadata.Metadata.Album.Builder getAlbumBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getAlbumFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.metadata.proto.Album album = 3;</code>
       */
      public com.spotify.metadata.Metadata.AlbumOrBuilder getAlbumOrBuilder() {
        if (albumBuilder_ != null) {
          return albumBuilder_.getMessageOrBuilder();
        } else {
          return album_ == null ?
              com.spotify.metadata.Metadata.Album.getDefaultInstance() : album_;
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.Album album = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.Album, com.spotify.metadata.Metadata.Album.Builder, com.spotify.metadata.Metadata.AlbumOrBuilder> 
          getAlbumFieldBuilder() {
        if (albumBuilder_ == null) {
          albumBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.metadata.Metadata.Album, com.spotify.metadata.Metadata.Album.Builder, com.spotify.metadata.Metadata.AlbumOrBuilder>(
                  getAlbum(),
                  getParentForChildren(),
                  isClean());
          album_ = null;
        }
        return albumBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.Artist> artist_ =
        java.util.Collections.emptyList();
      private void ensureArtistIsMutable() {
        if (!((bitField0_ & 0x00000008) != 0)) {
          artist_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Artist>(artist_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Artist, com.spotify.metadata.Metadata.Artist.Builder, com.spotify.metadata.Metadata.ArtistOrBuilder> artistBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Artist> getArtistList() {
        if (artistBuilder_ == null) {
          return java.util.Collections.unmodifiableList(artist_);
        } else {
          return artistBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
       */
      public int getArtistCount() {
        if (artistBuilder_ == null) {
          return artist_.size();
        } else {
          return artistBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
       */
      public com.spotify.metadata.Metadata.Artist getArtist(int index) {
        if (artistBuilder_ == null) {
          return artist_.get(index);
        } else {
          return artistBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
       */
      public Builder setArtist(
          int index, com.spotify.metadata.Metadata.Artist value) {
        if (artistBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArtistIsMutable();
          artist_.set(index, value);
          onChanged();
        } else {
          artistBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
       */
      public Builder setArtist(
          int index, com.spotify.metadata.Metadata.Artist.Builder builderForValue) {
        if (artistBuilder_ == null) {
          ensureArtistIsMutable();
          artist_.set(index, builderForValue.build());
          onChanged();
        } else {
          artistBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
       */
      public Builder addArtist(com.spotify.metadata.Metadata.Artist value) {
        if (artistBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArtistIsMutable();
          artist_.add(value);
          onChanged();
        } else {
          artistBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
       */
      public Builder addArtist(
          int index, com.spotify.metadata.Metadata.Artist value) {
        if (artistBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArtistIsMutable();
          artist_.add(index, value);
          onChanged();
        } else {
          artistBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
       */
      public Builder addArtist(
          com.spotify.metadata.Metadata.Artist.Builder builderForValue) {
        if (artistBuilder_ == null) {
          ensureArtistIsMutable();
          artist_.add(builderForValue.build());
          onChanged();
        } else {
          artistBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
       */
      public Builder addArtist(
          int index, com.spotify.metadata.Metadata.Artist.Builder builderForValue) {
        if (artistBuilder_ == null) {
          ensureArtistIsMutable();
          artist_.add(index, builderForValue.build());
          onChanged();
        } else {
          artistBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
       */
      public Builder addAllArtist(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Artist> values) {
        if (artistBuilder_ == null) {
          ensureArtistIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, artist_);
          onChanged();
        } else {
          artistBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
       */
      public Builder clearArtist() {
        if (artistBuilder_ == null) {
          artist_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          artistBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
       */
      public Builder removeArtist(int index) {
        if (artistBuilder_ == null) {
          ensureArtistIsMutable();
          artist_.remove(index);
          onChanged();
        } else {
          artistBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
       */
      public com.spotify.metadata.Metadata.Artist.Builder getArtistBuilder(
          int index) {
        return getArtistFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
       */
      public com.spotify.metadata.Metadata.ArtistOrBuilder getArtistOrBuilder(
          int index) {
        if (artistBuilder_ == null) {
          return artist_.get(index);  } else {
          return artistBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.ArtistOrBuilder> 
           getArtistOrBuilderList() {
        if (artistBuilder_ != null) {
          return artistBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(artist_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
       */
      public com.spotify.metadata.Metadata.Artist.Builder addArtistBuilder() {
        return getArtistFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Artist.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
       */
      public com.spotify.metadata.Metadata.Artist.Builder addArtistBuilder(
          int index) {
        return getArtistFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Artist.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Artist artist = 4;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Artist.Builder> 
           getArtistBuilderList() {
        return getArtistFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Artist, com.spotify.metadata.Metadata.Artist.Builder, com.spotify.metadata.Metadata.ArtistOrBuilder> 
          getArtistFieldBuilder() {
        if (artistBuilder_ == null) {
          artistBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Artist, com.spotify.metadata.Metadata.Artist.Builder, com.spotify.metadata.Metadata.ArtistOrBuilder>(
                  artist_,
                  ((bitField0_ & 0x00000008) != 0),
                  getParentForChildren(),
                  isClean());
          artist_ = null;
        }
        return artistBuilder_;
      }

      private int number_ ;
      /**
       * <code>optional sint32 number = 5;</code>
       * @return Whether the number field is set.
       */
      public boolean hasNumber() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>optional sint32 number = 5;</code>
       * @return The number.
       */
      public int getNumber() {
        return number_;
      }
      /**
       * <code>optional sint32 number = 5;</code>
       * @param value The number to set.
       * @return This builder for chaining.
       */
      public Builder setNumber(int value) {
        bitField0_ |= 0x00000010;
        number_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 number = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearNumber() {
        bitField0_ = (bitField0_ & ~0x00000010);
        number_ = 0;
        onChanged();
        return this;
      }

      private int discNumber_ ;
      /**
       * <code>optional sint32 disc_number = 6;</code>
       * @return Whether the discNumber field is set.
       */
      public boolean hasDiscNumber() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>optional sint32 disc_number = 6;</code>
       * @return The discNumber.
       */
      public int getDiscNumber() {
        return discNumber_;
      }
      /**
       * <code>optional sint32 disc_number = 6;</code>
       * @param value The discNumber to set.
       * @return This builder for chaining.
       */
      public Builder setDiscNumber(int value) {
        bitField0_ |= 0x00000020;
        discNumber_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 disc_number = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearDiscNumber() {
        bitField0_ = (bitField0_ & ~0x00000020);
        discNumber_ = 0;
        onChanged();
        return this;
      }

      private int duration_ ;
      /**
       * <code>optional sint32 duration = 7;</code>
       * @return Whether the duration field is set.
       */
      public boolean hasDuration() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <code>optional sint32 duration = 7;</code>
       * @return The duration.
       */
      public int getDuration() {
        return duration_;
      }
      /**
       * <code>optional sint32 duration = 7;</code>
       * @param value The duration to set.
       * @return This builder for chaining.
       */
      public Builder setDuration(int value) {
        bitField0_ |= 0x00000040;
        duration_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 duration = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearDuration() {
        bitField0_ = (bitField0_ & ~0x00000040);
        duration_ = 0;
        onChanged();
        return this;
      }

      private int popularity_ ;
      /**
       * <code>optional sint32 popularity = 8;</code>
       * @return Whether the popularity field is set.
       */
      public boolean hasPopularity() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <code>optional sint32 popularity = 8;</code>
       * @return The popularity.
       */
      public int getPopularity() {
        return popularity_;
      }
      /**
       * <code>optional sint32 popularity = 8;</code>
       * @param value The popularity to set.
       * @return This builder for chaining.
       */
      public Builder setPopularity(int value) {
        bitField0_ |= 0x00000080;
        popularity_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 popularity = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearPopularity() {
        bitField0_ = (bitField0_ & ~0x00000080);
        popularity_ = 0;
        onChanged();
        return this;
      }

      private boolean explicit_ ;
      /**
       * <code>optional bool explicit = 9;</code>
       * @return Whether the explicit field is set.
       */
      public boolean hasExplicit() {
        return ((bitField0_ & 0x00000100) != 0);
      }
      /**
       * <code>optional bool explicit = 9;</code>
       * @return The explicit.
       */
      public boolean getExplicit() {
        return explicit_;
      }
      /**
       * <code>optional bool explicit = 9;</code>
       * @param value The explicit to set.
       * @return This builder for chaining.
       */
      public Builder setExplicit(boolean value) {
        bitField0_ |= 0x00000100;
        explicit_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool explicit = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearExplicit() {
        bitField0_ = (bitField0_ & ~0x00000100);
        explicit_ = false;
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.metadata.Metadata.ExternalId> externalId_ =
        java.util.Collections.emptyList();
      private void ensureExternalIdIsMutable() {
        if (!((bitField0_ & 0x00000200) != 0)) {
          externalId_ = new java.util.ArrayList<com.spotify.metadata.Metadata.ExternalId>(externalId_);
          bitField0_ |= 0x00000200;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.ExternalId, com.spotify.metadata.Metadata.ExternalId.Builder, com.spotify.metadata.Metadata.ExternalIdOrBuilder> externalIdBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.ExternalId> getExternalIdList() {
        if (externalIdBuilder_ == null) {
          return java.util.Collections.unmodifiableList(externalId_);
        } else {
          return externalIdBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public int getExternalIdCount() {
        if (externalIdBuilder_ == null) {
          return externalId_.size();
        } else {
          return externalIdBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public com.spotify.metadata.Metadata.ExternalId getExternalId(int index) {
        if (externalIdBuilder_ == null) {
          return externalId_.get(index);
        } else {
          return externalIdBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder setExternalId(
          int index, com.spotify.metadata.Metadata.ExternalId value) {
        if (externalIdBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExternalIdIsMutable();
          externalId_.set(index, value);
          onChanged();
        } else {
          externalIdBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder setExternalId(
          int index, com.spotify.metadata.Metadata.ExternalId.Builder builderForValue) {
        if (externalIdBuilder_ == null) {
          ensureExternalIdIsMutable();
          externalId_.set(index, builderForValue.build());
          onChanged();
        } else {
          externalIdBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder addExternalId(com.spotify.metadata.Metadata.ExternalId value) {
        if (externalIdBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExternalIdIsMutable();
          externalId_.add(value);
          onChanged();
        } else {
          externalIdBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder addExternalId(
          int index, com.spotify.metadata.Metadata.ExternalId value) {
        if (externalIdBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExternalIdIsMutable();
          externalId_.add(index, value);
          onChanged();
        } else {
          externalIdBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder addExternalId(
          com.spotify.metadata.Metadata.ExternalId.Builder builderForValue) {
        if (externalIdBuilder_ == null) {
          ensureExternalIdIsMutable();
          externalId_.add(builderForValue.build());
          onChanged();
        } else {
          externalIdBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder addExternalId(
          int index, com.spotify.metadata.Metadata.ExternalId.Builder builderForValue) {
        if (externalIdBuilder_ == null) {
          ensureExternalIdIsMutable();
          externalId_.add(index, builderForValue.build());
          onChanged();
        } else {
          externalIdBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder addAllExternalId(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.ExternalId> values) {
        if (externalIdBuilder_ == null) {
          ensureExternalIdIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, externalId_);
          onChanged();
        } else {
          externalIdBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder clearExternalId() {
        if (externalIdBuilder_ == null) {
          externalId_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
          onChanged();
        } else {
          externalIdBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public Builder removeExternalId(int index) {
        if (externalIdBuilder_ == null) {
          ensureExternalIdIsMutable();
          externalId_.remove(index);
          onChanged();
        } else {
          externalIdBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public com.spotify.metadata.Metadata.ExternalId.Builder getExternalIdBuilder(
          int index) {
        return getExternalIdFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public com.spotify.metadata.Metadata.ExternalIdOrBuilder getExternalIdOrBuilder(
          int index) {
        if (externalIdBuilder_ == null) {
          return externalId_.get(index);  } else {
          return externalIdBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.ExternalIdOrBuilder> 
           getExternalIdOrBuilderList() {
        if (externalIdBuilder_ != null) {
          return externalIdBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(externalId_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public com.spotify.metadata.Metadata.ExternalId.Builder addExternalIdBuilder() {
        return getExternalIdFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.ExternalId.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public com.spotify.metadata.Metadata.ExternalId.Builder addExternalIdBuilder(
          int index) {
        return getExternalIdFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.ExternalId.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.ExternalId external_id = 10;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.ExternalId.Builder> 
           getExternalIdBuilderList() {
        return getExternalIdFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.ExternalId, com.spotify.metadata.Metadata.ExternalId.Builder, com.spotify.metadata.Metadata.ExternalIdOrBuilder> 
          getExternalIdFieldBuilder() {
        if (externalIdBuilder_ == null) {
          externalIdBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.ExternalId, com.spotify.metadata.Metadata.ExternalId.Builder, com.spotify.metadata.Metadata.ExternalIdOrBuilder>(
                  externalId_,
                  ((bitField0_ & 0x00000200) != 0),
                  getParentForChildren(),
                  isClean());
          externalId_ = null;
        }
        return externalIdBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.Restriction> restriction_ =
        java.util.Collections.emptyList();
      private void ensureRestrictionIsMutable() {
        if (!((bitField0_ & 0x00000400) != 0)) {
          restriction_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Restriction>(restriction_);
          bitField0_ |= 0x00000400;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Restriction, com.spotify.metadata.Metadata.Restriction.Builder, com.spotify.metadata.Metadata.RestrictionOrBuilder> restrictionBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Restriction> getRestrictionList() {
        if (restrictionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(restriction_);
        } else {
          return restrictionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
       */
      public int getRestrictionCount() {
        if (restrictionBuilder_ == null) {
          return restriction_.size();
        } else {
          return restrictionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
       */
      public com.spotify.metadata.Metadata.Restriction getRestriction(int index) {
        if (restrictionBuilder_ == null) {
          return restriction_.get(index);
        } else {
          return restrictionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
       */
      public Builder setRestriction(
          int index, com.spotify.metadata.Metadata.Restriction value) {
        if (restrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRestrictionIsMutable();
          restriction_.set(index, value);
          onChanged();
        } else {
          restrictionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
       */
      public Builder setRestriction(
          int index, com.spotify.metadata.Metadata.Restriction.Builder builderForValue) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.set(index, builderForValue.build());
          onChanged();
        } else {
          restrictionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
       */
      public Builder addRestriction(com.spotify.metadata.Metadata.Restriction value) {
        if (restrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRestrictionIsMutable();
          restriction_.add(value);
          onChanged();
        } else {
          restrictionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
       */
      public Builder addRestriction(
          int index, com.spotify.metadata.Metadata.Restriction value) {
        if (restrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRestrictionIsMutable();
          restriction_.add(index, value);
          onChanged();
        } else {
          restrictionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
       */
      public Builder addRestriction(
          com.spotify.metadata.Metadata.Restriction.Builder builderForValue) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.add(builderForValue.build());
          onChanged();
        } else {
          restrictionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
       */
      public Builder addRestriction(
          int index, com.spotify.metadata.Metadata.Restriction.Builder builderForValue) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.add(index, builderForValue.build());
          onChanged();
        } else {
          restrictionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
       */
      public Builder addAllRestriction(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Restriction> values) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, restriction_);
          onChanged();
        } else {
          restrictionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
       */
      public Builder clearRestriction() {
        if (restrictionBuilder_ == null) {
          restriction_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000400);
          onChanged();
        } else {
          restrictionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
       */
      public Builder removeRestriction(int index) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.remove(index);
          onChanged();
        } else {
          restrictionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
       */
      public com.spotify.metadata.Metadata.Restriction.Builder getRestrictionBuilder(
          int index) {
        return getRestrictionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
       */
      public com.spotify.metadata.Metadata.RestrictionOrBuilder getRestrictionOrBuilder(
          int index) {
        if (restrictionBuilder_ == null) {
          return restriction_.get(index);  } else {
          return restrictionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.RestrictionOrBuilder> 
           getRestrictionOrBuilderList() {
        if (restrictionBuilder_ != null) {
          return restrictionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(restriction_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
       */
      public com.spotify.metadata.Metadata.Restriction.Builder addRestrictionBuilder() {
        return getRestrictionFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Restriction.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
       */
      public com.spotify.metadata.Metadata.Restriction.Builder addRestrictionBuilder(
          int index) {
        return getRestrictionFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Restriction.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 11;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Restriction.Builder> 
           getRestrictionBuilderList() {
        return getRestrictionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Restriction, com.spotify.metadata.Metadata.Restriction.Builder, com.spotify.metadata.Metadata.RestrictionOrBuilder> 
          getRestrictionFieldBuilder() {
        if (restrictionBuilder_ == null) {
          restrictionBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Restriction, com.spotify.metadata.Metadata.Restriction.Builder, com.spotify.metadata.Metadata.RestrictionOrBuilder>(
                  restriction_,
                  ((bitField0_ & 0x00000400) != 0),
                  getParentForChildren(),
                  isClean());
          restriction_ = null;
        }
        return restrictionBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.AudioFile> file_ =
        java.util.Collections.emptyList();
      private void ensureFileIsMutable() {
        if (!((bitField0_ & 0x00000800) != 0)) {
          file_ = new java.util.ArrayList<com.spotify.metadata.Metadata.AudioFile>(file_);
          bitField0_ |= 0x00000800;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.AudioFile, com.spotify.metadata.Metadata.AudioFile.Builder, com.spotify.metadata.Metadata.AudioFileOrBuilder> fileBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.AudioFile> getFileList() {
        if (fileBuilder_ == null) {
          return java.util.Collections.unmodifiableList(file_);
        } else {
          return fileBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
       */
      public int getFileCount() {
        if (fileBuilder_ == null) {
          return file_.size();
        } else {
          return fileBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
       */
      public com.spotify.metadata.Metadata.AudioFile getFile(int index) {
        if (fileBuilder_ == null) {
          return file_.get(index);
        } else {
          return fileBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
       */
      public Builder setFile(
          int index, com.spotify.metadata.Metadata.AudioFile value) {
        if (fileBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFileIsMutable();
          file_.set(index, value);
          onChanged();
        } else {
          fileBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
       */
      public Builder setFile(
          int index, com.spotify.metadata.Metadata.AudioFile.Builder builderForValue) {
        if (fileBuilder_ == null) {
          ensureFileIsMutable();
          file_.set(index, builderForValue.build());
          onChanged();
        } else {
          fileBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
       */
      public Builder addFile(com.spotify.metadata.Metadata.AudioFile value) {
        if (fileBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFileIsMutable();
          file_.add(value);
          onChanged();
        } else {
          fileBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
       */
      public Builder addFile(
          int index, com.spotify.metadata.Metadata.AudioFile value) {
        if (fileBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFileIsMutable();
          file_.add(index, value);
          onChanged();
        } else {
          fileBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
       */
      public Builder addFile(
          com.spotify.metadata.Metadata.AudioFile.Builder builderForValue) {
        if (fileBuilder_ == null) {
          ensureFileIsMutable();
          file_.add(builderForValue.build());
          onChanged();
        } else {
          fileBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
       */
      public Builder addFile(
          int index, com.spotify.metadata.Metadata.AudioFile.Builder builderForValue) {
        if (fileBuilder_ == null) {
          ensureFileIsMutable();
          file_.add(index, builderForValue.build());
          onChanged();
        } else {
          fileBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
       */
      public Builder addAllFile(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.AudioFile> values) {
        if (fileBuilder_ == null) {
          ensureFileIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, file_);
          onChanged();
        } else {
          fileBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
       */
      public Builder clearFile() {
        if (fileBuilder_ == null) {
          file_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000800);
          onChanged();
        } else {
          fileBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
       */
      public Builder removeFile(int index) {
        if (fileBuilder_ == null) {
          ensureFileIsMutable();
          file_.remove(index);
          onChanged();
        } else {
          fileBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
       */
      public com.spotify.metadata.Metadata.AudioFile.Builder getFileBuilder(
          int index) {
        return getFileFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
       */
      public com.spotify.metadata.Metadata.AudioFileOrBuilder getFileOrBuilder(
          int index) {
        if (fileBuilder_ == null) {
          return file_.get(index);  } else {
          return fileBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.AudioFileOrBuilder> 
           getFileOrBuilderList() {
        if (fileBuilder_ != null) {
          return fileBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(file_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
       */
      public com.spotify.metadata.Metadata.AudioFile.Builder addFileBuilder() {
        return getFileFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.AudioFile.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
       */
      public com.spotify.metadata.Metadata.AudioFile.Builder addFileBuilder(
          int index) {
        return getFileFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.AudioFile.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile file = 12;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.AudioFile.Builder> 
           getFileBuilderList() {
        return getFileFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.AudioFile, com.spotify.metadata.Metadata.AudioFile.Builder, com.spotify.metadata.Metadata.AudioFileOrBuilder> 
          getFileFieldBuilder() {
        if (fileBuilder_ == null) {
          fileBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.AudioFile, com.spotify.metadata.Metadata.AudioFile.Builder, com.spotify.metadata.Metadata.AudioFileOrBuilder>(
                  file_,
                  ((bitField0_ & 0x00000800) != 0),
                  getParentForChildren(),
                  isClean());
          file_ = null;
        }
        return fileBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.Track> alternative_ =
        java.util.Collections.emptyList();
      private void ensureAlternativeIsMutable() {
        if (!((bitField0_ & 0x00001000) != 0)) {
          alternative_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Track>(alternative_);
          bitField0_ |= 0x00001000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Track, com.spotify.metadata.Metadata.Track.Builder, com.spotify.metadata.Metadata.TrackOrBuilder> alternativeBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Track> getAlternativeList() {
        if (alternativeBuilder_ == null) {
          return java.util.Collections.unmodifiableList(alternative_);
        } else {
          return alternativeBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
       */
      public int getAlternativeCount() {
        if (alternativeBuilder_ == null) {
          return alternative_.size();
        } else {
          return alternativeBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
       */
      public com.spotify.metadata.Metadata.Track getAlternative(int index) {
        if (alternativeBuilder_ == null) {
          return alternative_.get(index);
        } else {
          return alternativeBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
       */
      public Builder setAlternative(
          int index, com.spotify.metadata.Metadata.Track value) {
        if (alternativeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAlternativeIsMutable();
          alternative_.set(index, value);
          onChanged();
        } else {
          alternativeBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
       */
      public Builder setAlternative(
          int index, com.spotify.metadata.Metadata.Track.Builder builderForValue) {
        if (alternativeBuilder_ == null) {
          ensureAlternativeIsMutable();
          alternative_.set(index, builderForValue.build());
          onChanged();
        } else {
          alternativeBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
       */
      public Builder addAlternative(com.spotify.metadata.Metadata.Track value) {
        if (alternativeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAlternativeIsMutable();
          alternative_.add(value);
          onChanged();
        } else {
          alternativeBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
       */
      public Builder addAlternative(
          int index, com.spotify.metadata.Metadata.Track value) {
        if (alternativeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAlternativeIsMutable();
          alternative_.add(index, value);
          onChanged();
        } else {
          alternativeBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
       */
      public Builder addAlternative(
          com.spotify.metadata.Metadata.Track.Builder builderForValue) {
        if (alternativeBuilder_ == null) {
          ensureAlternativeIsMutable();
          alternative_.add(builderForValue.build());
          onChanged();
        } else {
          alternativeBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
       */
      public Builder addAlternative(
          int index, com.spotify.metadata.Metadata.Track.Builder builderForValue) {
        if (alternativeBuilder_ == null) {
          ensureAlternativeIsMutable();
          alternative_.add(index, builderForValue.build());
          onChanged();
        } else {
          alternativeBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
       */
      public Builder addAllAlternative(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Track> values) {
        if (alternativeBuilder_ == null) {
          ensureAlternativeIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, alternative_);
          onChanged();
        } else {
          alternativeBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
       */
      public Builder clearAlternative() {
        if (alternativeBuilder_ == null) {
          alternative_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00001000);
          onChanged();
        } else {
          alternativeBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
       */
      public Builder removeAlternative(int index) {
        if (alternativeBuilder_ == null) {
          ensureAlternativeIsMutable();
          alternative_.remove(index);
          onChanged();
        } else {
          alternativeBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
       */
      public com.spotify.metadata.Metadata.Track.Builder getAlternativeBuilder(
          int index) {
        return getAlternativeFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
       */
      public com.spotify.metadata.Metadata.TrackOrBuilder getAlternativeOrBuilder(
          int index) {
        if (alternativeBuilder_ == null) {
          return alternative_.get(index);  } else {
          return alternativeBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.TrackOrBuilder> 
           getAlternativeOrBuilderList() {
        if (alternativeBuilder_ != null) {
          return alternativeBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(alternative_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
       */
      public com.spotify.metadata.Metadata.Track.Builder addAlternativeBuilder() {
        return getAlternativeFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Track.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
       */
      public com.spotify.metadata.Metadata.Track.Builder addAlternativeBuilder(
          int index) {
        return getAlternativeFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Track.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track alternative = 13;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Track.Builder> 
           getAlternativeBuilderList() {
        return getAlternativeFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Track, com.spotify.metadata.Metadata.Track.Builder, com.spotify.metadata.Metadata.TrackOrBuilder> 
          getAlternativeFieldBuilder() {
        if (alternativeBuilder_ == null) {
          alternativeBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Track, com.spotify.metadata.Metadata.Track.Builder, com.spotify.metadata.Metadata.TrackOrBuilder>(
                  alternative_,
                  ((bitField0_ & 0x00001000) != 0),
                  getParentForChildren(),
                  isClean());
          alternative_ = null;
        }
        return alternativeBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.SalePeriod> salePeriod_ =
        java.util.Collections.emptyList();
      private void ensureSalePeriodIsMutable() {
        if (!((bitField0_ & 0x00002000) != 0)) {
          salePeriod_ = new java.util.ArrayList<com.spotify.metadata.Metadata.SalePeriod>(salePeriod_);
          bitField0_ |= 0x00002000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.SalePeriod, com.spotify.metadata.Metadata.SalePeriod.Builder, com.spotify.metadata.Metadata.SalePeriodOrBuilder> salePeriodBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.SalePeriod> getSalePeriodList() {
        if (salePeriodBuilder_ == null) {
          return java.util.Collections.unmodifiableList(salePeriod_);
        } else {
          return salePeriodBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
       */
      public int getSalePeriodCount() {
        if (salePeriodBuilder_ == null) {
          return salePeriod_.size();
        } else {
          return salePeriodBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
       */
      public com.spotify.metadata.Metadata.SalePeriod getSalePeriod(int index) {
        if (salePeriodBuilder_ == null) {
          return salePeriod_.get(index);
        } else {
          return salePeriodBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
       */
      public Builder setSalePeriod(
          int index, com.spotify.metadata.Metadata.SalePeriod value) {
        if (salePeriodBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSalePeriodIsMutable();
          salePeriod_.set(index, value);
          onChanged();
        } else {
          salePeriodBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
       */
      public Builder setSalePeriod(
          int index, com.spotify.metadata.Metadata.SalePeriod.Builder builderForValue) {
        if (salePeriodBuilder_ == null) {
          ensureSalePeriodIsMutable();
          salePeriod_.set(index, builderForValue.build());
          onChanged();
        } else {
          salePeriodBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
       */
      public Builder addSalePeriod(com.spotify.metadata.Metadata.SalePeriod value) {
        if (salePeriodBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSalePeriodIsMutable();
          salePeriod_.add(value);
          onChanged();
        } else {
          salePeriodBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
       */
      public Builder addSalePeriod(
          int index, com.spotify.metadata.Metadata.SalePeriod value) {
        if (salePeriodBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSalePeriodIsMutable();
          salePeriod_.add(index, value);
          onChanged();
        } else {
          salePeriodBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
       */
      public Builder addSalePeriod(
          com.spotify.metadata.Metadata.SalePeriod.Builder builderForValue) {
        if (salePeriodBuilder_ == null) {
          ensureSalePeriodIsMutable();
          salePeriod_.add(builderForValue.build());
          onChanged();
        } else {
          salePeriodBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
       */
      public Builder addSalePeriod(
          int index, com.spotify.metadata.Metadata.SalePeriod.Builder builderForValue) {
        if (salePeriodBuilder_ == null) {
          ensureSalePeriodIsMutable();
          salePeriod_.add(index, builderForValue.build());
          onChanged();
        } else {
          salePeriodBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
       */
      public Builder addAllSalePeriod(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.SalePeriod> values) {
        if (salePeriodBuilder_ == null) {
          ensureSalePeriodIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, salePeriod_);
          onChanged();
        } else {
          salePeriodBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
       */
      public Builder clearSalePeriod() {
        if (salePeriodBuilder_ == null) {
          salePeriod_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00002000);
          onChanged();
        } else {
          salePeriodBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
       */
      public Builder removeSalePeriod(int index) {
        if (salePeriodBuilder_ == null) {
          ensureSalePeriodIsMutable();
          salePeriod_.remove(index);
          onChanged();
        } else {
          salePeriodBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
       */
      public com.spotify.metadata.Metadata.SalePeriod.Builder getSalePeriodBuilder(
          int index) {
        return getSalePeriodFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
       */
      public com.spotify.metadata.Metadata.SalePeriodOrBuilder getSalePeriodOrBuilder(
          int index) {
        if (salePeriodBuilder_ == null) {
          return salePeriod_.get(index);  } else {
          return salePeriodBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.SalePeriodOrBuilder> 
           getSalePeriodOrBuilderList() {
        if (salePeriodBuilder_ != null) {
          return salePeriodBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(salePeriod_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
       */
      public com.spotify.metadata.Metadata.SalePeriod.Builder addSalePeriodBuilder() {
        return getSalePeriodFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.SalePeriod.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
       */
      public com.spotify.metadata.Metadata.SalePeriod.Builder addSalePeriodBuilder(
          int index) {
        return getSalePeriodFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.SalePeriod.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.SalePeriod sale_period = 14;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.SalePeriod.Builder> 
           getSalePeriodBuilderList() {
        return getSalePeriodFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.SalePeriod, com.spotify.metadata.Metadata.SalePeriod.Builder, com.spotify.metadata.Metadata.SalePeriodOrBuilder> 
          getSalePeriodFieldBuilder() {
        if (salePeriodBuilder_ == null) {
          salePeriodBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.SalePeriod, com.spotify.metadata.Metadata.SalePeriod.Builder, com.spotify.metadata.Metadata.SalePeriodOrBuilder>(
                  salePeriod_,
                  ((bitField0_ & 0x00002000) != 0),
                  getParentForChildren(),
                  isClean());
          salePeriod_ = null;
        }
        return salePeriodBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.AudioFile> preview_ =
        java.util.Collections.emptyList();
      private void ensurePreviewIsMutable() {
        if (!((bitField0_ & 0x00004000) != 0)) {
          preview_ = new java.util.ArrayList<com.spotify.metadata.Metadata.AudioFile>(preview_);
          bitField0_ |= 0x00004000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.AudioFile, com.spotify.metadata.Metadata.AudioFile.Builder, com.spotify.metadata.Metadata.AudioFileOrBuilder> previewBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.AudioFile> getPreviewList() {
        if (previewBuilder_ == null) {
          return java.util.Collections.unmodifiableList(preview_);
        } else {
          return previewBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
       */
      public int getPreviewCount() {
        if (previewBuilder_ == null) {
          return preview_.size();
        } else {
          return previewBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
       */
      public com.spotify.metadata.Metadata.AudioFile getPreview(int index) {
        if (previewBuilder_ == null) {
          return preview_.get(index);
        } else {
          return previewBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
       */
      public Builder setPreview(
          int index, com.spotify.metadata.Metadata.AudioFile value) {
        if (previewBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePreviewIsMutable();
          preview_.set(index, value);
          onChanged();
        } else {
          previewBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
       */
      public Builder setPreview(
          int index, com.spotify.metadata.Metadata.AudioFile.Builder builderForValue) {
        if (previewBuilder_ == null) {
          ensurePreviewIsMutable();
          preview_.set(index, builderForValue.build());
          onChanged();
        } else {
          previewBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
       */
      public Builder addPreview(com.spotify.metadata.Metadata.AudioFile value) {
        if (previewBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePreviewIsMutable();
          preview_.add(value);
          onChanged();
        } else {
          previewBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
       */
      public Builder addPreview(
          int index, com.spotify.metadata.Metadata.AudioFile value) {
        if (previewBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePreviewIsMutable();
          preview_.add(index, value);
          onChanged();
        } else {
          previewBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
       */
      public Builder addPreview(
          com.spotify.metadata.Metadata.AudioFile.Builder builderForValue) {
        if (previewBuilder_ == null) {
          ensurePreviewIsMutable();
          preview_.add(builderForValue.build());
          onChanged();
        } else {
          previewBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
       */
      public Builder addPreview(
          int index, com.spotify.metadata.Metadata.AudioFile.Builder builderForValue) {
        if (previewBuilder_ == null) {
          ensurePreviewIsMutable();
          preview_.add(index, builderForValue.build());
          onChanged();
        } else {
          previewBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
       */
      public Builder addAllPreview(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.AudioFile> values) {
        if (previewBuilder_ == null) {
          ensurePreviewIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, preview_);
          onChanged();
        } else {
          previewBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
       */
      public Builder clearPreview() {
        if (previewBuilder_ == null) {
          preview_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00004000);
          onChanged();
        } else {
          previewBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
       */
      public Builder removePreview(int index) {
        if (previewBuilder_ == null) {
          ensurePreviewIsMutable();
          preview_.remove(index);
          onChanged();
        } else {
          previewBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
       */
      public com.spotify.metadata.Metadata.AudioFile.Builder getPreviewBuilder(
          int index) {
        return getPreviewFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
       */
      public com.spotify.metadata.Metadata.AudioFileOrBuilder getPreviewOrBuilder(
          int index) {
        if (previewBuilder_ == null) {
          return preview_.get(index);  } else {
          return previewBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.AudioFileOrBuilder> 
           getPreviewOrBuilderList() {
        if (previewBuilder_ != null) {
          return previewBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(preview_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
       */
      public com.spotify.metadata.Metadata.AudioFile.Builder addPreviewBuilder() {
        return getPreviewFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.AudioFile.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
       */
      public com.spotify.metadata.Metadata.AudioFile.Builder addPreviewBuilder(
          int index) {
        return getPreviewFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.AudioFile.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile preview = 15;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.AudioFile.Builder> 
           getPreviewBuilderList() {
        return getPreviewFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.AudioFile, com.spotify.metadata.Metadata.AudioFile.Builder, com.spotify.metadata.Metadata.AudioFileOrBuilder> 
          getPreviewFieldBuilder() {
        if (previewBuilder_ == null) {
          previewBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.AudioFile, com.spotify.metadata.Metadata.AudioFile.Builder, com.spotify.metadata.Metadata.AudioFileOrBuilder>(
                  preview_,
                  ((bitField0_ & 0x00004000) != 0),
                  getParentForChildren(),
                  isClean());
          preview_ = null;
        }
        return previewBuilder_;
      }

      private com.google.protobuf.LazyStringList tags_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureTagsIsMutable() {
        if (!((bitField0_ & 0x00008000) != 0)) {
          tags_ = new com.google.protobuf.LazyStringArrayList(tags_);
          bitField0_ |= 0x00008000;
         }
      }
      /**
       * <code>repeated string tags = 16;</code>
       * @return A list containing the tags.
       */
      public com.google.protobuf.ProtocolStringList
          getTagsList() {
        return tags_.getUnmodifiableView();
      }
      /**
       * <code>repeated string tags = 16;</code>
       * @return The count of tags.
       */
      public int getTagsCount() {
        return tags_.size();
      }
      /**
       * <code>repeated string tags = 16;</code>
       * @param index The index of the element to return.
       * @return The tags at the given index.
       */
      public java.lang.String getTags(int index) {
        return tags_.get(index);
      }
      /**
       * <code>repeated string tags = 16;</code>
       * @param index The index of the value to return.
       * @return The bytes of the tags at the given index.
       */
      public com.google.protobuf.ByteString
          getTagsBytes(int index) {
        return tags_.getByteString(index);
      }
      /**
       * <code>repeated string tags = 16;</code>
       * @param index The index to set the value at.
       * @param value The tags to set.
       * @return This builder for chaining.
       */
      public Builder setTags(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureTagsIsMutable();
        tags_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string tags = 16;</code>
       * @param value The tags to add.
       * @return This builder for chaining.
       */
      public Builder addTags(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureTagsIsMutable();
        tags_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string tags = 16;</code>
       * @param values The tags to add.
       * @return This builder for chaining.
       */
      public Builder addAllTags(
          java.lang.Iterable<java.lang.String> values) {
        ensureTagsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, tags_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string tags = 16;</code>
       * @return This builder for chaining.
       */
      public Builder clearTags() {
        tags_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00008000);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string tags = 16;</code>
       * @param value The bytes of the tags to add.
       * @return This builder for chaining.
       */
      public Builder addTagsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureTagsIsMutable();
        tags_.add(value);
        onChanged();
        return this;
      }

      private long earliestLiveTimestamp_ ;
      /**
       * <code>optional int64 earliest_live_timestamp = 17;</code>
       * @return Whether the earliestLiveTimestamp field is set.
       */
      public boolean hasEarliestLiveTimestamp() {
        return ((bitField0_ & 0x00010000) != 0);
      }
      /**
       * <code>optional int64 earliest_live_timestamp = 17;</code>
       * @return The earliestLiveTimestamp.
       */
      public long getEarliestLiveTimestamp() {
        return earliestLiveTimestamp_;
      }
      /**
       * <code>optional int64 earliest_live_timestamp = 17;</code>
       * @param value The earliestLiveTimestamp to set.
       * @return This builder for chaining.
       */
      public Builder setEarliestLiveTimestamp(long value) {
        bitField0_ |= 0x00010000;
        earliestLiveTimestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 earliest_live_timestamp = 17;</code>
       * @return This builder for chaining.
       */
      public Builder clearEarliestLiveTimestamp() {
        bitField0_ = (bitField0_ & ~0x00010000);
        earliestLiveTimestamp_ = 0L;
        onChanged();
        return this;
      }

      private boolean hasLyrics_ ;
      /**
       * <code>optional bool has_lyrics = 18;</code>
       * @return Whether the hasLyrics field is set.
       */
      public boolean hasHasLyrics() {
        return ((bitField0_ & 0x00020000) != 0);
      }
      /**
       * <code>optional bool has_lyrics = 18;</code>
       * @return The hasLyrics.
       */
      public boolean getHasLyrics() {
        return hasLyrics_;
      }
      /**
       * <code>optional bool has_lyrics = 18;</code>
       * @param value The hasLyrics to set.
       * @return This builder for chaining.
       */
      public Builder setHasLyrics(boolean value) {
        bitField0_ |= 0x00020000;
        hasLyrics_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool has_lyrics = 18;</code>
       * @return This builder for chaining.
       */
      public Builder clearHasLyrics() {
        bitField0_ = (bitField0_ & ~0x00020000);
        hasLyrics_ = false;
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.metadata.Metadata.Availability> availability_ =
        java.util.Collections.emptyList();
      private void ensureAvailabilityIsMutable() {
        if (!((bitField0_ & 0x00040000) != 0)) {
          availability_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Availability>(availability_);
          bitField0_ |= 0x00040000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Availability, com.spotify.metadata.Metadata.Availability.Builder, com.spotify.metadata.Metadata.AvailabilityOrBuilder> availabilityBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Availability> getAvailabilityList() {
        if (availabilityBuilder_ == null) {
          return java.util.Collections.unmodifiableList(availability_);
        } else {
          return availabilityBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
       */
      public int getAvailabilityCount() {
        if (availabilityBuilder_ == null) {
          return availability_.size();
        } else {
          return availabilityBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
       */
      public com.spotify.metadata.Metadata.Availability getAvailability(int index) {
        if (availabilityBuilder_ == null) {
          return availability_.get(index);
        } else {
          return availabilityBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
       */
      public Builder setAvailability(
          int index, com.spotify.metadata.Metadata.Availability value) {
        if (availabilityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAvailabilityIsMutable();
          availability_.set(index, value);
          onChanged();
        } else {
          availabilityBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
       */
      public Builder setAvailability(
          int index, com.spotify.metadata.Metadata.Availability.Builder builderForValue) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.set(index, builderForValue.build());
          onChanged();
        } else {
          availabilityBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
       */
      public Builder addAvailability(com.spotify.metadata.Metadata.Availability value) {
        if (availabilityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAvailabilityIsMutable();
          availability_.add(value);
          onChanged();
        } else {
          availabilityBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
       */
      public Builder addAvailability(
          int index, com.spotify.metadata.Metadata.Availability value) {
        if (availabilityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAvailabilityIsMutable();
          availability_.add(index, value);
          onChanged();
        } else {
          availabilityBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
       */
      public Builder addAvailability(
          com.spotify.metadata.Metadata.Availability.Builder builderForValue) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.add(builderForValue.build());
          onChanged();
        } else {
          availabilityBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
       */
      public Builder addAvailability(
          int index, com.spotify.metadata.Metadata.Availability.Builder builderForValue) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.add(index, builderForValue.build());
          onChanged();
        } else {
          availabilityBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
       */
      public Builder addAllAvailability(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Availability> values) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, availability_);
          onChanged();
        } else {
          availabilityBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
       */
      public Builder clearAvailability() {
        if (availabilityBuilder_ == null) {
          availability_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00040000);
          onChanged();
        } else {
          availabilityBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
       */
      public Builder removeAvailability(int index) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.remove(index);
          onChanged();
        } else {
          availabilityBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
       */
      public com.spotify.metadata.Metadata.Availability.Builder getAvailabilityBuilder(
          int index) {
        return getAvailabilityFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
       */
      public com.spotify.metadata.Metadata.AvailabilityOrBuilder getAvailabilityOrBuilder(
          int index) {
        if (availabilityBuilder_ == null) {
          return availability_.get(index);  } else {
          return availabilityBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
           getAvailabilityOrBuilderList() {
        if (availabilityBuilder_ != null) {
          return availabilityBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(availability_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
       */
      public com.spotify.metadata.Metadata.Availability.Builder addAvailabilityBuilder() {
        return getAvailabilityFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Availability.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
       */
      public com.spotify.metadata.Metadata.Availability.Builder addAvailabilityBuilder(
          int index) {
        return getAvailabilityFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Availability.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 19;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Availability.Builder> 
           getAvailabilityBuilderList() {
        return getAvailabilityFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Availability, com.spotify.metadata.Metadata.Availability.Builder, com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
          getAvailabilityFieldBuilder() {
        if (availabilityBuilder_ == null) {
          availabilityBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Availability, com.spotify.metadata.Metadata.Availability.Builder, com.spotify.metadata.Metadata.AvailabilityOrBuilder>(
                  availability_,
                  ((bitField0_ & 0x00040000) != 0),
                  getParentForChildren(),
                  isClean());
          availability_ = null;
        }
        return availabilityBuilder_;
      }

      private com.spotify.metadata.Metadata.Licensor licensor_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.Licensor, com.spotify.metadata.Metadata.Licensor.Builder, com.spotify.metadata.Metadata.LicensorOrBuilder> licensorBuilder_;
      /**
       * <code>optional .spotify.metadata.proto.Licensor licensor = 21;</code>
       * @return Whether the licensor field is set.
       */
      public boolean hasLicensor() {
        return ((bitField0_ & 0x00080000) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.Licensor licensor = 21;</code>
       * @return The licensor.
       */
      public com.spotify.metadata.Metadata.Licensor getLicensor() {
        if (licensorBuilder_ == null) {
          return licensor_ == null ? com.spotify.metadata.Metadata.Licensor.getDefaultInstance() : licensor_;
        } else {
          return licensorBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.Licensor licensor = 21;</code>
       */
      public Builder setLicensor(com.spotify.metadata.Metadata.Licensor value) {
        if (licensorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          licensor_ = value;
          onChanged();
        } else {
          licensorBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00080000;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Licensor licensor = 21;</code>
       */
      public Builder setLicensor(
          com.spotify.metadata.Metadata.Licensor.Builder builderForValue) {
        if (licensorBuilder_ == null) {
          licensor_ = builderForValue.build();
          onChanged();
        } else {
          licensorBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00080000;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Licensor licensor = 21;</code>
       */
      public Builder mergeLicensor(com.spotify.metadata.Metadata.Licensor value) {
        if (licensorBuilder_ == null) {
          if (((bitField0_ & 0x00080000) != 0) &&
              licensor_ != null &&
              licensor_ != com.spotify.metadata.Metadata.Licensor.getDefaultInstance()) {
            licensor_ =
              com.spotify.metadata.Metadata.Licensor.newBuilder(licensor_).mergeFrom(value).buildPartial();
          } else {
            licensor_ = value;
          }
          onChanged();
        } else {
          licensorBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00080000;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Licensor licensor = 21;</code>
       */
      public Builder clearLicensor() {
        if (licensorBuilder_ == null) {
          licensor_ = null;
          onChanged();
        } else {
          licensorBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00080000);
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Licensor licensor = 21;</code>
       */
      public com.spotify.metadata.Metadata.Licensor.Builder getLicensorBuilder() {
        bitField0_ |= 0x00080000;
        onChanged();
        return getLicensorFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.metadata.proto.Licensor licensor = 21;</code>
       */
      public com.spotify.metadata.Metadata.LicensorOrBuilder getLicensorOrBuilder() {
        if (licensorBuilder_ != null) {
          return licensorBuilder_.getMessageOrBuilder();
        } else {
          return licensor_ == null ?
              com.spotify.metadata.Metadata.Licensor.getDefaultInstance() : licensor_;
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.Licensor licensor = 21;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.Licensor, com.spotify.metadata.Metadata.Licensor.Builder, com.spotify.metadata.Metadata.LicensorOrBuilder> 
          getLicensorFieldBuilder() {
        if (licensorBuilder_ == null) {
          licensorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.metadata.Metadata.Licensor, com.spotify.metadata.Metadata.Licensor.Builder, com.spotify.metadata.Metadata.LicensorOrBuilder>(
                  getLicensor(),
                  getParentForChildren(),
                  isClean());
          licensor_ = null;
        }
        return licensorBuilder_;
      }
      @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:spotify.metadata.proto.Track)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.Track)
    private static final com.spotify.metadata.Metadata.Track DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.Track();
    }

    public static com.spotify.metadata.Metadata.Track getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Track>
        PARSER = new com.google.protobuf.AbstractParser<Track>() {
      @java.lang.Override
      public Track 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.Track getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ShowOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.Show)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional bytes gid = 1;</code>
     * @return Whether the gid field is set.
     */
    boolean hasGid();
    /**
     * <code>optional bytes gid = 1;</code>
     * @return The gid.
     */
    com.google.protobuf.ByteString getGid();

    /**
     * <code>optional string name = 2;</code>
     * @return Whether the name field is set.
     */
    boolean hasName();
    /**
     * <code>optional string name = 2;</code>
     * @return The name.
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 2;</code>
     * @return The bytes for name.
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <code>optional string description = 64;</code>
     * @return Whether the description field is set.
     */
    boolean hasDescription();
    /**
     * <code>optional string description = 64;</code>
     * @return The description.
     */
    java.lang.String getDescription();
    /**
     * <code>optional string description = 64;</code>
     * @return The bytes for description.
     */
    com.google.protobuf.ByteString
        getDescriptionBytes();

    /**
     * <code>optional sint32 deprecated_popularity = 65 [deprecated = true];</code>
     * @return Whether the deprecatedPopularity field is set.
     */
    @java.lang.Deprecated boolean hasDeprecatedPopularity();
    /**
     * <code>optional sint32 deprecated_popularity = 65 [deprecated = true];</code>
     * @return The deprecatedPopularity.
     */
    @java.lang.Deprecated int getDeprecatedPopularity();

    /**
     * <code>optional string publisher = 66;</code>
     * @return Whether the publisher field is set.
     */
    boolean hasPublisher();
    /**
     * <code>optional string publisher = 66;</code>
     * @return The publisher.
     */
    java.lang.String getPublisher();
    /**
     * <code>optional string publisher = 66;</code>
     * @return The bytes for publisher.
     */
    com.google.protobuf.ByteString
        getPublisherBytes();

    /**
     * <code>optional string language = 67;</code>
     * @return Whether the language field is set.
     */
    boolean hasLanguage();
    /**
     * <code>optional string language = 67;</code>
     * @return The language.
     */
    java.lang.String getLanguage();
    /**
     * <code>optional string language = 67;</code>
     * @return The bytes for language.
     */
    com.google.protobuf.ByteString
        getLanguageBytes();

    /**
     * <code>optional bool explicit = 68;</code>
     * @return Whether the explicit field is set.
     */
    boolean hasExplicit();
    /**
     * <code>optional bool explicit = 68;</code>
     * @return The explicit.
     */
    boolean getExplicit();

    /**
     * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 69;</code>
     * @return Whether the coverImage field is set.
     */
    boolean hasCoverImage();
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 69;</code>
     * @return The coverImage.
     */
    com.spotify.metadata.Metadata.ImageGroup getCoverImage();
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 69;</code>
     */
    com.spotify.metadata.Metadata.ImageGroupOrBuilder getCoverImageOrBuilder();

    /**
     * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Episode> 
        getEpisodeList();
    /**
     * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
     */
    com.spotify.metadata.Metadata.Episode getEpisode(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
     */
    int getEpisodeCount();
    /**
     * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.EpisodeOrBuilder> 
        getEpisodeOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
     */
    com.spotify.metadata.Metadata.EpisodeOrBuilder getEpisodeOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Copyright> 
        getCopyrightList();
    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
     */
    com.spotify.metadata.Metadata.Copyright getCopyright(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
     */
    int getCopyrightCount();
    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.CopyrightOrBuilder> 
        getCopyrightOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
     */
    com.spotify.metadata.Metadata.CopyrightOrBuilder getCopyrightOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Restriction> 
        getRestrictionList();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
     */
    com.spotify.metadata.Metadata.Restriction getRestriction(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
     */
    int getRestrictionCount();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.RestrictionOrBuilder> 
        getRestrictionOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
     */
    com.spotify.metadata.Metadata.RestrictionOrBuilder getRestrictionOrBuilder(
        int index);

    /**
     * <code>repeated string keyword = 73;</code>
     * @return A list containing the keyword.
     */
    java.util.List<java.lang.String>
        getKeywordList();
    /**
     * <code>repeated string keyword = 73;</code>
     * @return The count of keyword.
     */
    int getKeywordCount();
    /**
     * <code>repeated string keyword = 73;</code>
     * @param index The index of the element to return.
     * @return The keyword at the given index.
     */
    java.lang.String getKeyword(int index);
    /**
     * <code>repeated string keyword = 73;</code>
     * @param index The index of the value to return.
     * @return The bytes of the keyword at the given index.
     */
    com.google.protobuf.ByteString
        getKeywordBytes(int index);

    /**
     * <code>optional .spotify.metadata.proto.Show.MediaType media_type = 74;</code>
     * @return Whether the mediaType field is set.
     */
    boolean hasMediaType();
    /**
     * <code>optional .spotify.metadata.proto.Show.MediaType media_type = 74;</code>
     * @return The mediaType.
     */
    com.spotify.metadata.Metadata.Show.MediaType getMediaType();

    /**
     * <code>optional .spotify.metadata.proto.Show.ConsumptionOrder consumption_order = 75;</code>
     * @return Whether the consumptionOrder field is set.
     */
    boolean hasConsumptionOrder();
    /**
     * <code>optional .spotify.metadata.proto.Show.ConsumptionOrder consumption_order = 75;</code>
     * @return The consumptionOrder.
     */
    com.spotify.metadata.Metadata.Show.ConsumptionOrder getConsumptionOrder();

    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Availability> 
        getAvailabilityList();
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
     */
    com.spotify.metadata.Metadata.Availability getAvailability(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
     */
    int getAvailabilityCount();
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
        getAvailabilityOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
     */
    com.spotify.metadata.Metadata.AvailabilityOrBuilder getAvailabilityOrBuilder(
        int index);

    /**
     * <code>optional string trailer_uri = 83;</code>
     * @return Whether the trailerUri field is set.
     */
    boolean hasTrailerUri();
    /**
     * <code>optional string trailer_uri = 83;</code>
     * @return The trailerUri.
     */
    java.lang.String getTrailerUri();
    /**
     * <code>optional string trailer_uri = 83;</code>
     * @return The bytes for trailerUri.
     */
    com.google.protobuf.ByteString
        getTrailerUriBytes();
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.Show}
   */
  public  static final class Show extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.Show)
      ShowOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Show.newBuilder() to construct.
    private Show(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Show() {
      gid_ = com.google.protobuf.ByteString.EMPTY;
      name_ = "";
      description_ = "";
      publisher_ = "";
      language_ = "";
      episode_ = java.util.Collections.emptyList();
      copyright_ = java.util.Collections.emptyList();
      restriction_ = java.util.Collections.emptyList();
      keyword_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      mediaType_ = 0;
      consumptionOrder_ = 1;
      availability_ = java.util.Collections.emptyList();
      trailerUri_ = "";
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Show_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Show_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.Show.class, com.spotify.metadata.Metadata.Show.Builder.class);
    }

    /**
     * Protobuf enum {@code spotify.metadata.proto.Show.MediaType}
     */
    public enum MediaType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>MIXED = 0;</code>
       */
      MIXED(0),
      /**
       * <code>AUDIO = 1;</code>
       */
      AUDIO(1),
      /**
       * <code>VIDEO = 2;</code>
       */
      VIDEO(2),
      ;

      /**
       * <code>MIXED = 0;</code>
       */
      public static final int MIXED_VALUE = 0;
      /**
       * <code>AUDIO = 1;</code>
       */
      public static final int AUDIO_VALUE = 1;
      /**
       * <code>VIDEO = 2;</code>
       */
      public static final int VIDEO_VALUE = 2;


      public final int getNumber() {
        return value;
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static MediaType valueOf(int value) {
        return forNumber(value);
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static MediaType forNumber(int value) {
        switch (value) {
          case 0: return MIXED;
          case 1: return AUDIO;
          case 2: return VIDEO;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<MediaType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static final com.google.protobuf.Internal.EnumLiteMap<
          MediaType> internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<MediaType>() {
              public MediaType findValueByNumber(int number) {
                return MediaType.forNumber(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.Show.getDescriptor().getEnumTypes().get(0);
      }

      private static final MediaType[] VALUES = values();

      public static MediaType valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

      private MediaType(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:spotify.metadata.proto.Show.MediaType)
    }

    /**
     * Protobuf enum {@code spotify.metadata.proto.Show.ConsumptionOrder}
     */
    public enum ConsumptionOrder
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>SEQUENTIAL = 1;</code>
       */
      SEQUENTIAL(1),
      /**
       * <code>EPISODIC = 2;</code>
       */
      EPISODIC(2),
      /**
       * <code>RECENT = 3;</code>
       */
      RECENT(3),
      ;

      /**
       * <code>SEQUENTIAL = 1;</code>
       */
      public static final int SEQUENTIAL_VALUE = 1;
      /**
       * <code>EPISODIC = 2;</code>
       */
      public static final int EPISODIC_VALUE = 2;
      /**
       * <code>RECENT = 3;</code>
       */
      public static final int RECENT_VALUE = 3;


      public final int getNumber() {
        return value;
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static ConsumptionOrder valueOf(int value) {
        return forNumber(value);
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static ConsumptionOrder forNumber(int value) {
        switch (value) {
          case 1: return SEQUENTIAL;
          case 2: return EPISODIC;
          case 3: return RECENT;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<ConsumptionOrder>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static final com.google.protobuf.Internal.EnumLiteMap<
          ConsumptionOrder> internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<ConsumptionOrder>() {
              public ConsumptionOrder findValueByNumber(int number) {
                return ConsumptionOrder.forNumber(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.Show.getDescriptor().getEnumTypes().get(1);
      }

      private static final ConsumptionOrder[] VALUES = values();

      public static ConsumptionOrder valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

      private ConsumptionOrder(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:spotify.metadata.proto.Show.ConsumptionOrder)
    }

    private int bitField0_;
    public static final int GID_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString gid_;
    /**
     * <code>optional bytes gid = 1;</code>
     * @return Whether the gid field is set.
     */
    public boolean hasGid() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional bytes gid = 1;</code>
     * @return The gid.
     */
    public com.google.protobuf.ByteString getGid() {
      return gid_;
    }

    public static final int NAME_FIELD_NUMBER = 2;
    private volatile java.lang.Object name_;
    /**
     * <code>optional string name = 2;</code>
     * @return Whether the name field is set.
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional string name = 2;</code>
     * @return The name.
     */
    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();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 2;</code>
     * @return The bytes for name.
     */
    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 DESCRIPTION_FIELD_NUMBER = 64;
    private volatile java.lang.Object description_;
    /**
     * <code>optional string description = 64;</code>
     * @return Whether the description field is set.
     */
    public boolean hasDescription() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional string description = 64;</code>
     * @return The description.
     */
    public java.lang.String getDescription() {
      java.lang.Object ref = description_;
      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();
        if (bs.isValidUtf8()) {
          description_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string description = 64;</code>
     * @return The bytes for description.
     */
    public com.google.protobuf.ByteString
        getDescriptionBytes() {
      java.lang.Object ref = description_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        description_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DEPRECATED_POPULARITY_FIELD_NUMBER = 65;
    private int deprecatedPopularity_;
    /**
     * <code>optional sint32 deprecated_popularity = 65 [deprecated = true];</code>
     * @return Whether the deprecatedPopularity field is set.
     */
    @java.lang.Deprecated public boolean hasDeprecatedPopularity() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional sint32 deprecated_popularity = 65 [deprecated = true];</code>
     * @return The deprecatedPopularity.
     */
    @java.lang.Deprecated public int getDeprecatedPopularity() {
      return deprecatedPopularity_;
    }

    public static final int PUBLISHER_FIELD_NUMBER = 66;
    private volatile java.lang.Object publisher_;
    /**
     * <code>optional string publisher = 66;</code>
     * @return Whether the publisher field is set.
     */
    public boolean hasPublisher() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional string publisher = 66;</code>
     * @return The publisher.
     */
    public java.lang.String getPublisher() {
      java.lang.Object ref = publisher_;
      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();
        if (bs.isValidUtf8()) {
          publisher_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string publisher = 66;</code>
     * @return The bytes for publisher.
     */
    public com.google.protobuf.ByteString
        getPublisherBytes() {
      java.lang.Object ref = publisher_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        publisher_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int LANGUAGE_FIELD_NUMBER = 67;
    private volatile java.lang.Object language_;
    /**
     * <code>optional string language = 67;</code>
     * @return Whether the language field is set.
     */
    public boolean hasLanguage() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional string language = 67;</code>
     * @return The language.
     */
    public java.lang.String getLanguage() {
      java.lang.Object ref = language_;
      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();
        if (bs.isValidUtf8()) {
          language_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string language = 67;</code>
     * @return The bytes for language.
     */
    public com.google.protobuf.ByteString
        getLanguageBytes() {
      java.lang.Object ref = language_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        language_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int EXPLICIT_FIELD_NUMBER = 68;
    private boolean explicit_;
    /**
     * <code>optional bool explicit = 68;</code>
     * @return Whether the explicit field is set.
     */
    public boolean hasExplicit() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>optional bool explicit = 68;</code>
     * @return The explicit.
     */
    public boolean getExplicit() {
      return explicit_;
    }

    public static final int COVER_IMAGE_FIELD_NUMBER = 69;
    private com.spotify.metadata.Metadata.ImageGroup coverImage_;
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 69;</code>
     * @return Whether the coverImage field is set.
     */
    public boolean hasCoverImage() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 69;</code>
     * @return The coverImage.
     */
    public com.spotify.metadata.Metadata.ImageGroup getCoverImage() {
      return coverImage_ == null ? com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : coverImage_;
    }
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 69;</code>
     */
    public com.spotify.metadata.Metadata.ImageGroupOrBuilder getCoverImageOrBuilder() {
      return coverImage_ == null ? com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : coverImage_;
    }

    public static final int EPISODE_FIELD_NUMBER = 70;
    private java.util.List<com.spotify.metadata.Metadata.Episode> episode_;
    /**
     * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Episode> getEpisodeList() {
      return episode_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.EpisodeOrBuilder> 
        getEpisodeOrBuilderList() {
      return episode_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
     */
    public int getEpisodeCount() {
      return episode_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
     */
    public com.spotify.metadata.Metadata.Episode getEpisode(int index) {
      return episode_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
     */
    public com.spotify.metadata.Metadata.EpisodeOrBuilder getEpisodeOrBuilder(
        int index) {
      return episode_.get(index);
    }

    public static final int COPYRIGHT_FIELD_NUMBER = 71;
    private java.util.List<com.spotify.metadata.Metadata.Copyright> copyright_;
    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Copyright> getCopyrightList() {
      return copyright_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.CopyrightOrBuilder> 
        getCopyrightOrBuilderList() {
      return copyright_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
     */
    public int getCopyrightCount() {
      return copyright_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
     */
    public com.spotify.metadata.Metadata.Copyright getCopyright(int index) {
      return copyright_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
     */
    public com.spotify.metadata.Metadata.CopyrightOrBuilder getCopyrightOrBuilder(
        int index) {
      return copyright_.get(index);
    }

    public static final int RESTRICTION_FIELD_NUMBER = 72;
    private java.util.List<com.spotify.metadata.Metadata.Restriction> restriction_;
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Restriction> getRestrictionList() {
      return restriction_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.RestrictionOrBuilder> 
        getRestrictionOrBuilderList() {
      return restriction_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
     */
    public int getRestrictionCount() {
      return restriction_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
     */
    public com.spotify.metadata.Metadata.Restriction getRestriction(int index) {
      return restriction_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
     */
    public com.spotify.metadata.Metadata.RestrictionOrBuilder getRestrictionOrBuilder(
        int index) {
      return restriction_.get(index);
    }

    public static final int KEYWORD_FIELD_NUMBER = 73;
    private com.google.protobuf.LazyStringList keyword_;
    /**
     * <code>repeated string keyword = 73;</code>
     * @return A list containing the keyword.
     */
    public com.google.protobuf.ProtocolStringList
        getKeywordList() {
      return keyword_;
    }
    /**
     * <code>repeated string keyword = 73;</code>
     * @return The count of keyword.
     */
    public int getKeywordCount() {
      return keyword_.size();
    }
    /**
     * <code>repeated string keyword = 73;</code>
     * @param index The index of the element to return.
     * @return The keyword at the given index.
     */
    public java.lang.String getKeyword(int index) {
      return keyword_.get(index);
    }
    /**
     * <code>repeated string keyword = 73;</code>
     * @param index The index of the value to return.
     * @return The bytes of the keyword at the given index.
     */
    public com.google.protobuf.ByteString
        getKeywordBytes(int index) {
      return keyword_.getByteString(index);
    }

    public static final int MEDIA_TYPE_FIELD_NUMBER = 74;
    private int mediaType_;
    /**
     * <code>optional .spotify.metadata.proto.Show.MediaType media_type = 74;</code>
     * @return Whether the mediaType field is set.
     */
    public boolean hasMediaType() {
      return ((bitField0_ & 0x00000100) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.Show.MediaType media_type = 74;</code>
     * @return The mediaType.
     */
    public com.spotify.metadata.Metadata.Show.MediaType getMediaType() {
      @SuppressWarnings("deprecation")
      com.spotify.metadata.Metadata.Show.MediaType result = com.spotify.metadata.Metadata.Show.MediaType.valueOf(mediaType_);
      return result == null ? com.spotify.metadata.Metadata.Show.MediaType.MIXED : result;
    }

    public static final int CONSUMPTION_ORDER_FIELD_NUMBER = 75;
    private int consumptionOrder_;
    /**
     * <code>optional .spotify.metadata.proto.Show.ConsumptionOrder consumption_order = 75;</code>
     * @return Whether the consumptionOrder field is set.
     */
    public boolean hasConsumptionOrder() {
      return ((bitField0_ & 0x00000200) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.Show.ConsumptionOrder consumption_order = 75;</code>
     * @return The consumptionOrder.
     */
    public com.spotify.metadata.Metadata.Show.ConsumptionOrder getConsumptionOrder() {
      @SuppressWarnings("deprecation")
      com.spotify.metadata.Metadata.Show.ConsumptionOrder result = com.spotify.metadata.Metadata.Show.ConsumptionOrder.valueOf(consumptionOrder_);
      return result == null ? com.spotify.metadata.Metadata.Show.ConsumptionOrder.SEQUENTIAL : result;
    }

    public static final int AVAILABILITY_FIELD_NUMBER = 78;
    private java.util.List<com.spotify.metadata.Metadata.Availability> availability_;
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Availability> getAvailabilityList() {
      return availability_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
        getAvailabilityOrBuilderList() {
      return availability_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
     */
    public int getAvailabilityCount() {
      return availability_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
     */
    public com.spotify.metadata.Metadata.Availability getAvailability(int index) {
      return availability_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
     */
    public com.spotify.metadata.Metadata.AvailabilityOrBuilder getAvailabilityOrBuilder(
        int index) {
      return availability_.get(index);
    }

    public static final int TRAILER_URI_FIELD_NUMBER = 83;
    private volatile java.lang.Object trailerUri_;
    /**
     * <code>optional string trailer_uri = 83;</code>
     * @return Whether the trailerUri field is set.
     */
    public boolean hasTrailerUri() {
      return ((bitField0_ & 0x00000400) != 0);
    }
    /**
     * <code>optional string trailer_uri = 83;</code>
     * @return The trailerUri.
     */
    public java.lang.String getTrailerUri() {
      java.lang.Object ref = trailerUri_;
      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();
        if (bs.isValidUtf8()) {
          trailerUri_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string trailer_uri = 83;</code>
     * @return The bytes for trailerUri.
     */
    public com.google.protobuf.ByteString
        getTrailerUriBytes() {
      java.lang.Object ref = trailerUri_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        trailerUri_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static com.spotify.metadata.Metadata.Show parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Show parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Show parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Show parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Show parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Show parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Show parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Show 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.spotify.metadata.Metadata.Show parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Show 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.spotify.metadata.Metadata.Show parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Show 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.spotify.metadata.Metadata.Show 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.Show}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.Show)
        com.spotify.metadata.Metadata.ShowOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Show_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Show_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.Show.class, com.spotify.metadata.Metadata.Show.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.Show.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getCoverImageFieldBuilder();
          getEpisodeFieldBuilder();
          getCopyrightFieldBuilder();
          getRestrictionFieldBuilder();
          getAvailabilityFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        gid_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        description_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        deprecatedPopularity_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        publisher_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        language_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        explicit_ = false;
        bitField0_ = (bitField0_ & ~0x00000040);
        if (coverImageBuilder_ == null) {
          coverImage_ = null;
        } else {
          coverImageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        if (episodeBuilder_ == null) {
          episode_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
        } else {
          episodeBuilder_.clear();
        }
        if (copyrightBuilder_ == null) {
          copyright_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
        } else {
          copyrightBuilder_.clear();
        }
        if (restrictionBuilder_ == null) {
          restriction_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000400);
        } else {
          restrictionBuilder_.clear();
        }
        keyword_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000800);
        mediaType_ = 0;
        bitField0_ = (bitField0_ & ~0x00001000);
        consumptionOrder_ = 1;
        bitField0_ = (bitField0_ & ~0x00002000);
        if (availabilityBuilder_ == null) {
          availability_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00004000);
        } else {
          availabilityBuilder_.clear();
        }
        trailerUri_ = "";
        bitField0_ = (bitField0_ & ~0x00008000);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Show_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Show getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.Show.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Show build() {
        com.spotify.metadata.Metadata.Show result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Show buildPartial() {
        com.spotify.metadata.Metadata.Show result = new com.spotify.metadata.Metadata.Show(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.gid_ = gid_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000004) != 0)) {
          to_bitField0_ |= 0x00000004;
        }
        result.description_ = description_;
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.deprecatedPopularity_ = deprecatedPopularity_;
          to_bitField0_ |= 0x00000008;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          to_bitField0_ |= 0x00000010;
        }
        result.publisher_ = publisher_;
        if (((from_bitField0_ & 0x00000020) != 0)) {
          to_bitField0_ |= 0x00000020;
        }
        result.language_ = language_;
        if (((from_bitField0_ & 0x00000040) != 0)) {
          result.explicit_ = explicit_;
          to_bitField0_ |= 0x00000040;
        }
        if (((from_bitField0_ & 0x00000080) != 0)) {
          if (coverImageBuilder_ == null) {
            result.coverImage_ = coverImage_;
          } else {
            result.coverImage_ = coverImageBuilder_.build();
          }
          to_bitField0_ |= 0x00000080;
        }
        if (episodeBuilder_ == null) {
          if (((bitField0_ & 0x00000100) != 0)) {
            episode_ = java.util.Collections.unmodifiableList(episode_);
            bitField0_ = (bitField0_ & ~0x00000100);
          }
          result.episode_ = episode_;
        } else {
          result.episode_ = episodeBuilder_.build();
        }
        if (copyrightBuilder_ == null) {
          if (((bitField0_ & 0x00000200) != 0)) {
            copyright_ = java.util.Collections.unmodifiableList(copyright_);
            bitField0_ = (bitField0_ & ~0x00000200);
          }
          result.copyright_ = copyright_;
        } else {
          result.copyright_ = copyrightBuilder_.build();
        }
        if (restrictionBuilder_ == null) {
          if (((bitField0_ & 0x00000400) != 0)) {
            restriction_ = java.util.Collections.unmodifiableList(restriction_);
            bitField0_ = (bitField0_ & ~0x00000400);
          }
          result.restriction_ = restriction_;
        } else {
          result.restriction_ = restrictionBuilder_.build();
        }
        if (((bitField0_ & 0x00000800) != 0)) {
          keyword_ = keyword_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000800);
        }
        result.keyword_ = keyword_;
        if (((from_bitField0_ & 0x00001000) != 0)) {
          to_bitField0_ |= 0x00000100;
        }
        result.mediaType_ = mediaType_;
        if (((from_bitField0_ & 0x00002000) != 0)) {
          to_bitField0_ |= 0x00000200;
        }
        result.consumptionOrder_ = consumptionOrder_;
        if (availabilityBuilder_ == null) {
          if (((bitField0_ & 0x00004000) != 0)) {
            availability_ = java.util.Collections.unmodifiableList(availability_);
            bitField0_ = (bitField0_ & ~0x00004000);
          }
          result.availability_ = availability_;
        } else {
          result.availability_ = availabilityBuilder_.build();
        }
        if (((from_bitField0_ & 0x00008000) != 0)) {
          to_bitField0_ |= 0x00000400;
        }
        result.trailerUri_ = trailerUri_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private com.google.protobuf.ByteString gid_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes gid = 1;</code>
       * @return Whether the gid field is set.
       */
      public boolean hasGid() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional bytes gid = 1;</code>
       * @return The gid.
       */
      public com.google.protobuf.ByteString getGid() {
        return gid_;
      }
      /**
       * <code>optional bytes gid = 1;</code>
       * @param value The gid to set.
       * @return This builder for chaining.
       */
      public Builder setGid(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        gid_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes gid = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearGid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        gid_ = getDefaultInstance().getGid();
        onChanged();
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 2;</code>
       * @return Whether the name field is set.
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional string name = 2;</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();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 2;</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;
        }
      }
      /**
       * <code>optional string name = 2;</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();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000002);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 2;</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();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object description_ = "";
      /**
       * <code>optional string description = 64;</code>
       * @return Whether the description field is set.
       */
      public boolean hasDescription() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional string description = 64;</code>
       * @return The description.
       */
      public java.lang.String getDescription() {
        java.lang.Object ref = description_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            description_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string description = 64;</code>
       * @return The bytes for description.
       */
      public com.google.protobuf.ByteString
          getDescriptionBytes() {
        java.lang.Object ref = description_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          description_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string description = 64;</code>
       * @param value The description to set.
       * @return This builder for chaining.
       */
      public Builder setDescription(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        description_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string description = 64;</code>
       * @return This builder for chaining.
       */
      public Builder clearDescription() {
        bitField0_ = (bitField0_ & ~0x00000004);
        description_ = getDefaultInstance().getDescription();
        onChanged();
        return this;
      }
      /**
       * <code>optional string description = 64;</code>
       * @param value The bytes for description to set.
       * @return This builder for chaining.
       */
      public Builder setDescriptionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        description_ = value;
        onChanged();
        return this;
      }

      private int deprecatedPopularity_ ;
      /**
       * <code>optional sint32 deprecated_popularity = 65 [deprecated = true];</code>
       * @return Whether the deprecatedPopularity field is set.
       */
      @java.lang.Deprecated public boolean hasDeprecatedPopularity() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional sint32 deprecated_popularity = 65 [deprecated = true];</code>
       * @return The deprecatedPopularity.
       */
      @java.lang.Deprecated public int getDeprecatedPopularity() {
        return deprecatedPopularity_;
      }
      /**
       * <code>optional sint32 deprecated_popularity = 65 [deprecated = true];</code>
       * @param value The deprecatedPopularity to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setDeprecatedPopularity(int value) {
        bitField0_ |= 0x00000008;
        deprecatedPopularity_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 deprecated_popularity = 65 [deprecated = true];</code>
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder clearDeprecatedPopularity() {
        bitField0_ = (bitField0_ & ~0x00000008);
        deprecatedPopularity_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object publisher_ = "";
      /**
       * <code>optional string publisher = 66;</code>
       * @return Whether the publisher field is set.
       */
      public boolean hasPublisher() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>optional string publisher = 66;</code>
       * @return The publisher.
       */
      public java.lang.String getPublisher() {
        java.lang.Object ref = publisher_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            publisher_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string publisher = 66;</code>
       * @return The bytes for publisher.
       */
      public com.google.protobuf.ByteString
          getPublisherBytes() {
        java.lang.Object ref = publisher_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          publisher_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string publisher = 66;</code>
       * @param value The publisher to set.
       * @return This builder for chaining.
       */
      public Builder setPublisher(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        publisher_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string publisher = 66;</code>
       * @return This builder for chaining.
       */
      public Builder clearPublisher() {
        bitField0_ = (bitField0_ & ~0x00000010);
        publisher_ = getDefaultInstance().getPublisher();
        onChanged();
        return this;
      }
      /**
       * <code>optional string publisher = 66;</code>
       * @param value The bytes for publisher to set.
       * @return This builder for chaining.
       */
      public Builder setPublisherBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        publisher_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object language_ = "";
      /**
       * <code>optional string language = 67;</code>
       * @return Whether the language field is set.
       */
      public boolean hasLanguage() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>optional string language = 67;</code>
       * @return The language.
       */
      public java.lang.String getLanguage() {
        java.lang.Object ref = language_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            language_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string language = 67;</code>
       * @return The bytes for language.
       */
      public com.google.protobuf.ByteString
          getLanguageBytes() {
        java.lang.Object ref = language_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          language_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string language = 67;</code>
       * @param value The language to set.
       * @return This builder for chaining.
       */
      public Builder setLanguage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        language_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string language = 67;</code>
       * @return This builder for chaining.
       */
      public Builder clearLanguage() {
        bitField0_ = (bitField0_ & ~0x00000020);
        language_ = getDefaultInstance().getLanguage();
        onChanged();
        return this;
      }
      /**
       * <code>optional string language = 67;</code>
       * @param value The bytes for language to set.
       * @return This builder for chaining.
       */
      public Builder setLanguageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        language_ = value;
        onChanged();
        return this;
      }

      private boolean explicit_ ;
      /**
       * <code>optional bool explicit = 68;</code>
       * @return Whether the explicit field is set.
       */
      public boolean hasExplicit() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <code>optional bool explicit = 68;</code>
       * @return The explicit.
       */
      public boolean getExplicit() {
        return explicit_;
      }
      /**
       * <code>optional bool explicit = 68;</code>
       * @param value The explicit to set.
       * @return This builder for chaining.
       */
      public Builder setExplicit(boolean value) {
        bitField0_ |= 0x00000040;
        explicit_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool explicit = 68;</code>
       * @return This builder for chaining.
       */
      public Builder clearExplicit() {
        bitField0_ = (bitField0_ & ~0x00000040);
        explicit_ = false;
        onChanged();
        return this;
      }

      private com.spotify.metadata.Metadata.ImageGroup coverImage_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.ImageGroup, com.spotify.metadata.Metadata.ImageGroup.Builder, com.spotify.metadata.Metadata.ImageGroupOrBuilder> coverImageBuilder_;
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 69;</code>
       * @return Whether the coverImage field is set.
       */
      public boolean hasCoverImage() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 69;</code>
       * @return The coverImage.
       */
      public com.spotify.metadata.Metadata.ImageGroup getCoverImage() {
        if (coverImageBuilder_ == null) {
          return coverImage_ == null ? com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : coverImage_;
        } else {
          return coverImageBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 69;</code>
       */
      public Builder setCoverImage(com.spotify.metadata.Metadata.ImageGroup value) {
        if (coverImageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          coverImage_ = value;
          onChanged();
        } else {
          coverImageBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 69;</code>
       */
      public Builder setCoverImage(
          com.spotify.metadata.Metadata.ImageGroup.Builder builderForValue) {
        if (coverImageBuilder_ == null) {
          coverImage_ = builderForValue.build();
          onChanged();
        } else {
          coverImageBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 69;</code>
       */
      public Builder mergeCoverImage(com.spotify.metadata.Metadata.ImageGroup value) {
        if (coverImageBuilder_ == null) {
          if (((bitField0_ & 0x00000080) != 0) &&
              coverImage_ != null &&
              coverImage_ != com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance()) {
            coverImage_ =
              com.spotify.metadata.Metadata.ImageGroup.newBuilder(coverImage_).mergeFrom(value).buildPartial();
          } else {
            coverImage_ = value;
          }
          onChanged();
        } else {
          coverImageBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 69;</code>
       */
      public Builder clearCoverImage() {
        if (coverImageBuilder_ == null) {
          coverImage_ = null;
          onChanged();
        } else {
          coverImageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 69;</code>
       */
      public com.spotify.metadata.Metadata.ImageGroup.Builder getCoverImageBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getCoverImageFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 69;</code>
       */
      public com.spotify.metadata.Metadata.ImageGroupOrBuilder getCoverImageOrBuilder() {
        if (coverImageBuilder_ != null) {
          return coverImageBuilder_.getMessageOrBuilder();
        } else {
          return coverImage_ == null ?
              com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : coverImage_;
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 69;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.ImageGroup, com.spotify.metadata.Metadata.ImageGroup.Builder, com.spotify.metadata.Metadata.ImageGroupOrBuilder> 
          getCoverImageFieldBuilder() {
        if (coverImageBuilder_ == null) {
          coverImageBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.metadata.Metadata.ImageGroup, com.spotify.metadata.Metadata.ImageGroup.Builder, com.spotify.metadata.Metadata.ImageGroupOrBuilder>(
                  getCoverImage(),
                  getParentForChildren(),
                  isClean());
          coverImage_ = null;
        }
        return coverImageBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.Episode> episode_ =
        java.util.Collections.emptyList();
      private void ensureEpisodeIsMutable() {
        if (!((bitField0_ & 0x00000100) != 0)) {
          episode_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Episode>(episode_);
          bitField0_ |= 0x00000100;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Episode, com.spotify.metadata.Metadata.Episode.Builder, com.spotify.metadata.Metadata.EpisodeOrBuilder> episodeBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Episode> getEpisodeList() {
        if (episodeBuilder_ == null) {
          return java.util.Collections.unmodifiableList(episode_);
        } else {
          return episodeBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
       */
      public int getEpisodeCount() {
        if (episodeBuilder_ == null) {
          return episode_.size();
        } else {
          return episodeBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
       */
      public com.spotify.metadata.Metadata.Episode getEpisode(int index) {
        if (episodeBuilder_ == null) {
          return episode_.get(index);
        } else {
          return episodeBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
       */
      public Builder setEpisode(
          int index, com.spotify.metadata.Metadata.Episode value) {
        if (episodeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEpisodeIsMutable();
          episode_.set(index, value);
          onChanged();
        } else {
          episodeBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
       */
      public Builder setEpisode(
          int index, com.spotify.metadata.Metadata.Episode.Builder builderForValue) {
        if (episodeBuilder_ == null) {
          ensureEpisodeIsMutable();
          episode_.set(index, builderForValue.build());
          onChanged();
        } else {
          episodeBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
       */
      public Builder addEpisode(com.spotify.metadata.Metadata.Episode value) {
        if (episodeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEpisodeIsMutable();
          episode_.add(value);
          onChanged();
        } else {
          episodeBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
       */
      public Builder addEpisode(
          int index, com.spotify.metadata.Metadata.Episode value) {
        if (episodeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEpisodeIsMutable();
          episode_.add(index, value);
          onChanged();
        } else {
          episodeBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
       */
      public Builder addEpisode(
          com.spotify.metadata.Metadata.Episode.Builder builderForValue) {
        if (episodeBuilder_ == null) {
          ensureEpisodeIsMutable();
          episode_.add(builderForValue.build());
          onChanged();
        } else {
          episodeBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
       */
      public Builder addEpisode(
          int index, com.spotify.metadata.Metadata.Episode.Builder builderForValue) {
        if (episodeBuilder_ == null) {
          ensureEpisodeIsMutable();
          episode_.add(index, builderForValue.build());
          onChanged();
        } else {
          episodeBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
       */
      public Builder addAllEpisode(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Episode> values) {
        if (episodeBuilder_ == null) {
          ensureEpisodeIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, episode_);
          onChanged();
        } else {
          episodeBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
       */
      public Builder clearEpisode() {
        if (episodeBuilder_ == null) {
          episode_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
          onChanged();
        } else {
          episodeBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
       */
      public Builder removeEpisode(int index) {
        if (episodeBuilder_ == null) {
          ensureEpisodeIsMutable();
          episode_.remove(index);
          onChanged();
        } else {
          episodeBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
       */
      public com.spotify.metadata.Metadata.Episode.Builder getEpisodeBuilder(
          int index) {
        return getEpisodeFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
       */
      public com.spotify.metadata.Metadata.EpisodeOrBuilder getEpisodeOrBuilder(
          int index) {
        if (episodeBuilder_ == null) {
          return episode_.get(index);  } else {
          return episodeBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.EpisodeOrBuilder> 
           getEpisodeOrBuilderList() {
        if (episodeBuilder_ != null) {
          return episodeBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(episode_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
       */
      public com.spotify.metadata.Metadata.Episode.Builder addEpisodeBuilder() {
        return getEpisodeFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Episode.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
       */
      public com.spotify.metadata.Metadata.Episode.Builder addEpisodeBuilder(
          int index) {
        return getEpisodeFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Episode.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Episode episode = 70;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Episode.Builder> 
           getEpisodeBuilderList() {
        return getEpisodeFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Episode, com.spotify.metadata.Metadata.Episode.Builder, com.spotify.metadata.Metadata.EpisodeOrBuilder> 
          getEpisodeFieldBuilder() {
        if (episodeBuilder_ == null) {
          episodeBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Episode, com.spotify.metadata.Metadata.Episode.Builder, com.spotify.metadata.Metadata.EpisodeOrBuilder>(
                  episode_,
                  ((bitField0_ & 0x00000100) != 0),
                  getParentForChildren(),
                  isClean());
          episode_ = null;
        }
        return episodeBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.Copyright> copyright_ =
        java.util.Collections.emptyList();
      private void ensureCopyrightIsMutable() {
        if (!((bitField0_ & 0x00000200) != 0)) {
          copyright_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Copyright>(copyright_);
          bitField0_ |= 0x00000200;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Copyright, com.spotify.metadata.Metadata.Copyright.Builder, com.spotify.metadata.Metadata.CopyrightOrBuilder> copyrightBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Copyright> getCopyrightList() {
        if (copyrightBuilder_ == null) {
          return java.util.Collections.unmodifiableList(copyright_);
        } else {
          return copyrightBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
       */
      public int getCopyrightCount() {
        if (copyrightBuilder_ == null) {
          return copyright_.size();
        } else {
          return copyrightBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
       */
      public com.spotify.metadata.Metadata.Copyright getCopyright(int index) {
        if (copyrightBuilder_ == null) {
          return copyright_.get(index);
        } else {
          return copyrightBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
       */
      public Builder setCopyright(
          int index, com.spotify.metadata.Metadata.Copyright value) {
        if (copyrightBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCopyrightIsMutable();
          copyright_.set(index, value);
          onChanged();
        } else {
          copyrightBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
       */
      public Builder setCopyright(
          int index, com.spotify.metadata.Metadata.Copyright.Builder builderForValue) {
        if (copyrightBuilder_ == null) {
          ensureCopyrightIsMutable();
          copyright_.set(index, builderForValue.build());
          onChanged();
        } else {
          copyrightBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
       */
      public Builder addCopyright(com.spotify.metadata.Metadata.Copyright value) {
        if (copyrightBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCopyrightIsMutable();
          copyright_.add(value);
          onChanged();
        } else {
          copyrightBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
       */
      public Builder addCopyright(
          int index, com.spotify.metadata.Metadata.Copyright value) {
        if (copyrightBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCopyrightIsMutable();
          copyright_.add(index, value);
          onChanged();
        } else {
          copyrightBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
       */
      public Builder addCopyright(
          com.spotify.metadata.Metadata.Copyright.Builder builderForValue) {
        if (copyrightBuilder_ == null) {
          ensureCopyrightIsMutable();
          copyright_.add(builderForValue.build());
          onChanged();
        } else {
          copyrightBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
       */
      public Builder addCopyright(
          int index, com.spotify.metadata.Metadata.Copyright.Builder builderForValue) {
        if (copyrightBuilder_ == null) {
          ensureCopyrightIsMutable();
          copyright_.add(index, builderForValue.build());
          onChanged();
        } else {
          copyrightBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
       */
      public Builder addAllCopyright(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Copyright> values) {
        if (copyrightBuilder_ == null) {
          ensureCopyrightIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, copyright_);
          onChanged();
        } else {
          copyrightBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
       */
      public Builder clearCopyright() {
        if (copyrightBuilder_ == null) {
          copyright_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
          onChanged();
        } else {
          copyrightBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
       */
      public Builder removeCopyright(int index) {
        if (copyrightBuilder_ == null) {
          ensureCopyrightIsMutable();
          copyright_.remove(index);
          onChanged();
        } else {
          copyrightBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
       */
      public com.spotify.metadata.Metadata.Copyright.Builder getCopyrightBuilder(
          int index) {
        return getCopyrightFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
       */
      public com.spotify.metadata.Metadata.CopyrightOrBuilder getCopyrightOrBuilder(
          int index) {
        if (copyrightBuilder_ == null) {
          return copyright_.get(index);  } else {
          return copyrightBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.CopyrightOrBuilder> 
           getCopyrightOrBuilderList() {
        if (copyrightBuilder_ != null) {
          return copyrightBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(copyright_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
       */
      public com.spotify.metadata.Metadata.Copyright.Builder addCopyrightBuilder() {
        return getCopyrightFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Copyright.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
       */
      public com.spotify.metadata.Metadata.Copyright.Builder addCopyrightBuilder(
          int index) {
        return getCopyrightFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Copyright.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Copyright copyright = 71;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Copyright.Builder> 
           getCopyrightBuilderList() {
        return getCopyrightFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Copyright, com.spotify.metadata.Metadata.Copyright.Builder, com.spotify.metadata.Metadata.CopyrightOrBuilder> 
          getCopyrightFieldBuilder() {
        if (copyrightBuilder_ == null) {
          copyrightBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Copyright, com.spotify.metadata.Metadata.Copyright.Builder, com.spotify.metadata.Metadata.CopyrightOrBuilder>(
                  copyright_,
                  ((bitField0_ & 0x00000200) != 0),
                  getParentForChildren(),
                  isClean());
          copyright_ = null;
        }
        return copyrightBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.Restriction> restriction_ =
        java.util.Collections.emptyList();
      private void ensureRestrictionIsMutable() {
        if (!((bitField0_ & 0x00000400) != 0)) {
          restriction_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Restriction>(restriction_);
          bitField0_ |= 0x00000400;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Restriction, com.spotify.metadata.Metadata.Restriction.Builder, com.spotify.metadata.Metadata.RestrictionOrBuilder> restrictionBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Restriction> getRestrictionList() {
        if (restrictionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(restriction_);
        } else {
          return restrictionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
       */
      public int getRestrictionCount() {
        if (restrictionBuilder_ == null) {
          return restriction_.size();
        } else {
          return restrictionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
       */
      public com.spotify.metadata.Metadata.Restriction getRestriction(int index) {
        if (restrictionBuilder_ == null) {
          return restriction_.get(index);
        } else {
          return restrictionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
       */
      public Builder setRestriction(
          int index, com.spotify.metadata.Metadata.Restriction value) {
        if (restrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRestrictionIsMutable();
          restriction_.set(index, value);
          onChanged();
        } else {
          restrictionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
       */
      public Builder setRestriction(
          int index, com.spotify.metadata.Metadata.Restriction.Builder builderForValue) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.set(index, builderForValue.build());
          onChanged();
        } else {
          restrictionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
       */
      public Builder addRestriction(com.spotify.metadata.Metadata.Restriction value) {
        if (restrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRestrictionIsMutable();
          restriction_.add(value);
          onChanged();
        } else {
          restrictionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
       */
      public Builder addRestriction(
          int index, com.spotify.metadata.Metadata.Restriction value) {
        if (restrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRestrictionIsMutable();
          restriction_.add(index, value);
          onChanged();
        } else {
          restrictionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
       */
      public Builder addRestriction(
          com.spotify.metadata.Metadata.Restriction.Builder builderForValue) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.add(builderForValue.build());
          onChanged();
        } else {
          restrictionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
       */
      public Builder addRestriction(
          int index, com.spotify.metadata.Metadata.Restriction.Builder builderForValue) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.add(index, builderForValue.build());
          onChanged();
        } else {
          restrictionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
       */
      public Builder addAllRestriction(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Restriction> values) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, restriction_);
          onChanged();
        } else {
          restrictionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
       */
      public Builder clearRestriction() {
        if (restrictionBuilder_ == null) {
          restriction_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000400);
          onChanged();
        } else {
          restrictionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
       */
      public Builder removeRestriction(int index) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.remove(index);
          onChanged();
        } else {
          restrictionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
       */
      public com.spotify.metadata.Metadata.Restriction.Builder getRestrictionBuilder(
          int index) {
        return getRestrictionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
       */
      public com.spotify.metadata.Metadata.RestrictionOrBuilder getRestrictionOrBuilder(
          int index) {
        if (restrictionBuilder_ == null) {
          return restriction_.get(index);  } else {
          return restrictionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.RestrictionOrBuilder> 
           getRestrictionOrBuilderList() {
        if (restrictionBuilder_ != null) {
          return restrictionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(restriction_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
       */
      public com.spotify.metadata.Metadata.Restriction.Builder addRestrictionBuilder() {
        return getRestrictionFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Restriction.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
       */
      public com.spotify.metadata.Metadata.Restriction.Builder addRestrictionBuilder(
          int index) {
        return getRestrictionFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Restriction.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 72;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Restriction.Builder> 
           getRestrictionBuilderList() {
        return getRestrictionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Restriction, com.spotify.metadata.Metadata.Restriction.Builder, com.spotify.metadata.Metadata.RestrictionOrBuilder> 
          getRestrictionFieldBuilder() {
        if (restrictionBuilder_ == null) {
          restrictionBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Restriction, com.spotify.metadata.Metadata.Restriction.Builder, com.spotify.metadata.Metadata.RestrictionOrBuilder>(
                  restriction_,
                  ((bitField0_ & 0x00000400) != 0),
                  getParentForChildren(),
                  isClean());
          restriction_ = null;
        }
        return restrictionBuilder_;
      }

      private com.google.protobuf.LazyStringList keyword_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureKeywordIsMutable() {
        if (!((bitField0_ & 0x00000800) != 0)) {
          keyword_ = new com.google.protobuf.LazyStringArrayList(keyword_);
          bitField0_ |= 0x00000800;
         }
      }
      /**
       * <code>repeated string keyword = 73;</code>
       * @return A list containing the keyword.
       */
      public com.google.protobuf.ProtocolStringList
          getKeywordList() {
        return keyword_.getUnmodifiableView();
      }
      /**
       * <code>repeated string keyword = 73;</code>
       * @return The count of keyword.
       */
      public int getKeywordCount() {
        return keyword_.size();
      }
      /**
       * <code>repeated string keyword = 73;</code>
       * @param index The index of the element to return.
       * @return The keyword at the given index.
       */
      public java.lang.String getKeyword(int index) {
        return keyword_.get(index);
      }
      /**
       * <code>repeated string keyword = 73;</code>
       * @param index The index of the value to return.
       * @return The bytes of the keyword at the given index.
       */
      public com.google.protobuf.ByteString
          getKeywordBytes(int index) {
        return keyword_.getByteString(index);
      }
      /**
       * <code>repeated string keyword = 73;</code>
       * @param index The index to set the value at.
       * @param value The keyword to set.
       * @return This builder for chaining.
       */
      public Builder setKeyword(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureKeywordIsMutable();
        keyword_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string keyword = 73;</code>
       * @param value The keyword to add.
       * @return This builder for chaining.
       */
      public Builder addKeyword(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureKeywordIsMutable();
        keyword_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string keyword = 73;</code>
       * @param values The keyword to add.
       * @return This builder for chaining.
       */
      public Builder addAllKeyword(
          java.lang.Iterable<java.lang.String> values) {
        ensureKeywordIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, keyword_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string keyword = 73;</code>
       * @return This builder for chaining.
       */
      public Builder clearKeyword() {
        keyword_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000800);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string keyword = 73;</code>
       * @param value The bytes of the keyword to add.
       * @return This builder for chaining.
       */
      public Builder addKeywordBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureKeywordIsMutable();
        keyword_.add(value);
        onChanged();
        return this;
      }

      private int mediaType_ = 0;
      /**
       * <code>optional .spotify.metadata.proto.Show.MediaType media_type = 74;</code>
       * @return Whether the mediaType field is set.
       */
      public boolean hasMediaType() {
        return ((bitField0_ & 0x00001000) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.Show.MediaType media_type = 74;</code>
       * @return The mediaType.
       */
      public com.spotify.metadata.Metadata.Show.MediaType getMediaType() {
        @SuppressWarnings("deprecation")
        com.spotify.metadata.Metadata.Show.MediaType result = com.spotify.metadata.Metadata.Show.MediaType.valueOf(mediaType_);
        return result == null ? com.spotify.metadata.Metadata.Show.MediaType.MIXED : result;
      }
      /**
       * <code>optional .spotify.metadata.proto.Show.MediaType media_type = 74;</code>
       * @param value The mediaType to set.
       * @return This builder for chaining.
       */
      public Builder setMediaType(com.spotify.metadata.Metadata.Show.MediaType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00001000;
        mediaType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Show.MediaType media_type = 74;</code>
       * @return This builder for chaining.
       */
      public Builder clearMediaType() {
        bitField0_ = (bitField0_ & ~0x00001000);
        mediaType_ = 0;
        onChanged();
        return this;
      }

      private int consumptionOrder_ = 1;
      /**
       * <code>optional .spotify.metadata.proto.Show.ConsumptionOrder consumption_order = 75;</code>
       * @return Whether the consumptionOrder field is set.
       */
      public boolean hasConsumptionOrder() {
        return ((bitField0_ & 0x00002000) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.Show.ConsumptionOrder consumption_order = 75;</code>
       * @return The consumptionOrder.
       */
      public com.spotify.metadata.Metadata.Show.ConsumptionOrder getConsumptionOrder() {
        @SuppressWarnings("deprecation")
        com.spotify.metadata.Metadata.Show.ConsumptionOrder result = com.spotify.metadata.Metadata.Show.ConsumptionOrder.valueOf(consumptionOrder_);
        return result == null ? com.spotify.metadata.Metadata.Show.ConsumptionOrder.SEQUENTIAL : result;
      }
      /**
       * <code>optional .spotify.metadata.proto.Show.ConsumptionOrder consumption_order = 75;</code>
       * @param value The consumptionOrder to set.
       * @return This builder for chaining.
       */
      public Builder setConsumptionOrder(com.spotify.metadata.Metadata.Show.ConsumptionOrder value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00002000;
        consumptionOrder_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Show.ConsumptionOrder consumption_order = 75;</code>
       * @return This builder for chaining.
       */
      public Builder clearConsumptionOrder() {
        bitField0_ = (bitField0_ & ~0x00002000);
        consumptionOrder_ = 1;
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.metadata.Metadata.Availability> availability_ =
        java.util.Collections.emptyList();
      private void ensureAvailabilityIsMutable() {
        if (!((bitField0_ & 0x00004000) != 0)) {
          availability_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Availability>(availability_);
          bitField0_ |= 0x00004000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Availability, com.spotify.metadata.Metadata.Availability.Builder, com.spotify.metadata.Metadata.AvailabilityOrBuilder> availabilityBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Availability> getAvailabilityList() {
        if (availabilityBuilder_ == null) {
          return java.util.Collections.unmodifiableList(availability_);
        } else {
          return availabilityBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
       */
      public int getAvailabilityCount() {
        if (availabilityBuilder_ == null) {
          return availability_.size();
        } else {
          return availabilityBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
       */
      public com.spotify.metadata.Metadata.Availability getAvailability(int index) {
        if (availabilityBuilder_ == null) {
          return availability_.get(index);
        } else {
          return availabilityBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
       */
      public Builder setAvailability(
          int index, com.spotify.metadata.Metadata.Availability value) {
        if (availabilityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAvailabilityIsMutable();
          availability_.set(index, value);
          onChanged();
        } else {
          availabilityBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
       */
      public Builder setAvailability(
          int index, com.spotify.metadata.Metadata.Availability.Builder builderForValue) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.set(index, builderForValue.build());
          onChanged();
        } else {
          availabilityBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
       */
      public Builder addAvailability(com.spotify.metadata.Metadata.Availability value) {
        if (availabilityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAvailabilityIsMutable();
          availability_.add(value);
          onChanged();
        } else {
          availabilityBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
       */
      public Builder addAvailability(
          int index, com.spotify.metadata.Metadata.Availability value) {
        if (availabilityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAvailabilityIsMutable();
          availability_.add(index, value);
          onChanged();
        } else {
          availabilityBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
       */
      public Builder addAvailability(
          com.spotify.metadata.Metadata.Availability.Builder builderForValue) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.add(builderForValue.build());
          onChanged();
        } else {
          availabilityBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
       */
      public Builder addAvailability(
          int index, com.spotify.metadata.Metadata.Availability.Builder builderForValue) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.add(index, builderForValue.build());
          onChanged();
        } else {
          availabilityBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
       */
      public Builder addAllAvailability(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Availability> values) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, availability_);
          onChanged();
        } else {
          availabilityBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
       */
      public Builder clearAvailability() {
        if (availabilityBuilder_ == null) {
          availability_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00004000);
          onChanged();
        } else {
          availabilityBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
       */
      public Builder removeAvailability(int index) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.remove(index);
          onChanged();
        } else {
          availabilityBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
       */
      public com.spotify.metadata.Metadata.Availability.Builder getAvailabilityBuilder(
          int index) {
        return getAvailabilityFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
       */
      public com.spotify.metadata.Metadata.AvailabilityOrBuilder getAvailabilityOrBuilder(
          int index) {
        if (availabilityBuilder_ == null) {
          return availability_.get(index);  } else {
          return availabilityBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
           getAvailabilityOrBuilderList() {
        if (availabilityBuilder_ != null) {
          return availabilityBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(availability_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
       */
      public com.spotify.metadata.Metadata.Availability.Builder addAvailabilityBuilder() {
        return getAvailabilityFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Availability.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
       */
      public com.spotify.metadata.Metadata.Availability.Builder addAvailabilityBuilder(
          int index) {
        return getAvailabilityFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Availability.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 78;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Availability.Builder> 
           getAvailabilityBuilderList() {
        return getAvailabilityFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Availability, com.spotify.metadata.Metadata.Availability.Builder, com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
          getAvailabilityFieldBuilder() {
        if (availabilityBuilder_ == null) {
          availabilityBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Availability, com.spotify.metadata.Metadata.Availability.Builder, com.spotify.metadata.Metadata.AvailabilityOrBuilder>(
                  availability_,
                  ((bitField0_ & 0x00004000) != 0),
                  getParentForChildren(),
                  isClean());
          availability_ = null;
        }
        return availabilityBuilder_;
      }

      private java.lang.Object trailerUri_ = "";
      /**
       * <code>optional string trailer_uri = 83;</code>
       * @return Whether the trailerUri field is set.
       */
      public boolean hasTrailerUri() {
        return ((bitField0_ & 0x00008000) != 0);
      }
      /**
       * <code>optional string trailer_uri = 83;</code>
       * @return The trailerUri.
       */
      public java.lang.String getTrailerUri() {
        java.lang.Object ref = trailerUri_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            trailerUri_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string trailer_uri = 83;</code>
       * @return The bytes for trailerUri.
       */
      public com.google.protobuf.ByteString
          getTrailerUriBytes() {
        java.lang.Object ref = trailerUri_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          trailerUri_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string trailer_uri = 83;</code>
       * @param value The trailerUri to set.
       * @return This builder for chaining.
       */
      public Builder setTrailerUri(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00008000;
        trailerUri_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string trailer_uri = 83;</code>
       * @return This builder for chaining.
       */
      public Builder clearTrailerUri() {
        bitField0_ = (bitField0_ & ~0x00008000);
        trailerUri_ = getDefaultInstance().getTrailerUri();
        onChanged();
        return this;
      }
      /**
       * <code>optional string trailer_uri = 83;</code>
       * @param value The bytes for trailerUri to set.
       * @return This builder for chaining.
       */
      public Builder setTrailerUriBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00008000;
        trailerUri_ = value;
        onChanged();
        return this;
      }
      @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:spotify.metadata.proto.Show)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.Show)
    private static final com.spotify.metadata.Metadata.Show DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.Show();
    }

    public static com.spotify.metadata.Metadata.Show getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Show>
        PARSER = new com.google.protobuf.AbstractParser<Show>() {
      @java.lang.Override
      public Show 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.Show getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface EpisodeOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.Episode)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional bytes gid = 1;</code>
     * @return Whether the gid field is set.
     */
    boolean hasGid();
    /**
     * <code>optional bytes gid = 1;</code>
     * @return The gid.
     */
    com.google.protobuf.ByteString getGid();

    /**
     * <code>optional string name = 2;</code>
     * @return Whether the name field is set.
     */
    boolean hasName();
    /**
     * <code>optional string name = 2;</code>
     * @return The name.
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 2;</code>
     * @return The bytes for name.
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <code>optional sint32 duration = 7;</code>
     * @return Whether the duration field is set.
     */
    boolean hasDuration();
    /**
     * <code>optional sint32 duration = 7;</code>
     * @return The duration.
     */
    int getDuration();

    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.AudioFile> 
        getAudioList();
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
     */
    com.spotify.metadata.Metadata.AudioFile getAudio(int index);
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
     */
    int getAudioCount();
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.AudioFileOrBuilder> 
        getAudioOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
     */
    com.spotify.metadata.Metadata.AudioFileOrBuilder getAudioOrBuilder(
        int index);

    /**
     * <code>optional string description = 64;</code>
     * @return Whether the description field is set.
     */
    boolean hasDescription();
    /**
     * <code>optional string description = 64;</code>
     * @return The description.
     */
    java.lang.String getDescription();
    /**
     * <code>optional string description = 64;</code>
     * @return The bytes for description.
     */
    com.google.protobuf.ByteString
        getDescriptionBytes();

    /**
     * <code>optional sint32 number = 65;</code>
     * @return Whether the number field is set.
     */
    boolean hasNumber();
    /**
     * <code>optional sint32 number = 65;</code>
     * @return The number.
     */
    int getNumber();

    /**
     * <code>optional .spotify.metadata.proto.Date publish_time = 66;</code>
     * @return Whether the publishTime field is set.
     */
    boolean hasPublishTime();
    /**
     * <code>optional .spotify.metadata.proto.Date publish_time = 66;</code>
     * @return The publishTime.
     */
    com.spotify.metadata.Metadata.Date getPublishTime();
    /**
     * <code>optional .spotify.metadata.proto.Date publish_time = 66;</code>
     */
    com.spotify.metadata.Metadata.DateOrBuilder getPublishTimeOrBuilder();

    /**
     * <code>optional sint32 deprecated_popularity = 67 [deprecated = true];</code>
     * @return Whether the deprecatedPopularity field is set.
     */
    @java.lang.Deprecated boolean hasDeprecatedPopularity();
    /**
     * <code>optional sint32 deprecated_popularity = 67 [deprecated = true];</code>
     * @return The deprecatedPopularity.
     */
    @java.lang.Deprecated int getDeprecatedPopularity();

    /**
     * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 68;</code>
     * @return Whether the coverImage field is set.
     */
    boolean hasCoverImage();
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 68;</code>
     * @return The coverImage.
     */
    com.spotify.metadata.Metadata.ImageGroup getCoverImage();
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 68;</code>
     */
    com.spotify.metadata.Metadata.ImageGroupOrBuilder getCoverImageOrBuilder();

    /**
     * <code>optional string language = 69;</code>
     * @return Whether the language field is set.
     */
    boolean hasLanguage();
    /**
     * <code>optional string language = 69;</code>
     * @return The language.
     */
    java.lang.String getLanguage();
    /**
     * <code>optional string language = 69;</code>
     * @return The bytes for language.
     */
    com.google.protobuf.ByteString
        getLanguageBytes();

    /**
     * <code>optional bool explicit = 70;</code>
     * @return Whether the explicit field is set.
     */
    boolean hasExplicit();
    /**
     * <code>optional bool explicit = 70;</code>
     * @return The explicit.
     */
    boolean getExplicit();

    /**
     * <code>optional .spotify.metadata.proto.Show show = 71;</code>
     * @return Whether the show field is set.
     */
    boolean hasShow();
    /**
     * <code>optional .spotify.metadata.proto.Show show = 71;</code>
     * @return The show.
     */
    com.spotify.metadata.Metadata.Show getShow();
    /**
     * <code>optional .spotify.metadata.proto.Show show = 71;</code>
     */
    com.spotify.metadata.Metadata.ShowOrBuilder getShowOrBuilder();

    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.VideoFile> 
        getVideoList();
    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
     */
    com.spotify.metadata.Metadata.VideoFile getVideo(int index);
    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
     */
    int getVideoCount();
    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.VideoFileOrBuilder> 
        getVideoOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
     */
    com.spotify.metadata.Metadata.VideoFileOrBuilder getVideoOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.VideoFile> 
        getVideoPreviewList();
    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
     */
    com.spotify.metadata.Metadata.VideoFile getVideoPreview(int index);
    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
     */
    int getVideoPreviewCount();
    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.VideoFileOrBuilder> 
        getVideoPreviewOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
     */
    com.spotify.metadata.Metadata.VideoFileOrBuilder getVideoPreviewOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.AudioFile> 
        getAudioPreviewList();
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
     */
    com.spotify.metadata.Metadata.AudioFile getAudioPreview(int index);
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
     */
    int getAudioPreviewCount();
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.AudioFileOrBuilder> 
        getAudioPreviewOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
     */
    com.spotify.metadata.Metadata.AudioFileOrBuilder getAudioPreviewOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Restriction> 
        getRestrictionList();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
     */
    com.spotify.metadata.Metadata.Restriction getRestriction(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
     */
    int getRestrictionCount();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.RestrictionOrBuilder> 
        getRestrictionOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
     */
    com.spotify.metadata.Metadata.RestrictionOrBuilder getRestrictionOrBuilder(
        int index);

    /**
     * <code>optional .spotify.metadata.proto.ImageGroup freeze_frame = 76;</code>
     * @return Whether the freezeFrame field is set.
     */
    boolean hasFreezeFrame();
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup freeze_frame = 76;</code>
     * @return The freezeFrame.
     */
    com.spotify.metadata.Metadata.ImageGroup getFreezeFrame();
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup freeze_frame = 76;</code>
     */
    com.spotify.metadata.Metadata.ImageGroupOrBuilder getFreezeFrameOrBuilder();

    /**
     * <code>repeated string keyword = 77;</code>
     * @return A list containing the keyword.
     */
    java.util.List<java.lang.String>
        getKeywordList();
    /**
     * <code>repeated string keyword = 77;</code>
     * @return The count of keyword.
     */
    int getKeywordCount();
    /**
     * <code>repeated string keyword = 77;</code>
     * @param index The index of the element to return.
     * @return The keyword at the given index.
     */
    java.lang.String getKeyword(int index);
    /**
     * <code>repeated string keyword = 77;</code>
     * @param index The index of the value to return.
     * @return The bytes of the keyword at the given index.
     */
    com.google.protobuf.ByteString
        getKeywordBytes(int index);

    /**
     * <code>optional bool allow_background_playback = 81;</code>
     * @return Whether the allowBackgroundPlayback field is set.
     */
    boolean hasAllowBackgroundPlayback();
    /**
     * <code>optional bool allow_background_playback = 81;</code>
     * @return The allowBackgroundPlayback.
     */
    boolean getAllowBackgroundPlayback();

    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Availability> 
        getAvailabilityList();
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
     */
    com.spotify.metadata.Metadata.Availability getAvailability(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
     */
    int getAvailabilityCount();
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
        getAvailabilityOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
     */
    com.spotify.metadata.Metadata.AvailabilityOrBuilder getAvailabilityOrBuilder(
        int index);

    /**
     * <code>optional string external_url = 83;</code>
     * @return Whether the externalUrl field is set.
     */
    boolean hasExternalUrl();
    /**
     * <code>optional string external_url = 83;</code>
     * @return The externalUrl.
     */
    java.lang.String getExternalUrl();
    /**
     * <code>optional string external_url = 83;</code>
     * @return The bytes for externalUrl.
     */
    com.google.protobuf.ByteString
        getExternalUrlBytes();

    /**
     * <code>optional .spotify.metadata.proto.Episode.EpisodeType type = 87;</code>
     * @return Whether the type field is set.
     */
    boolean hasType();
    /**
     * <code>optional .spotify.metadata.proto.Episode.EpisodeType type = 87;</code>
     * @return The type.
     */
    com.spotify.metadata.Metadata.Episode.EpisodeType getType();
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.Episode}
   */
  public  static final class Episode extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.Episode)
      EpisodeOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Episode.newBuilder() to construct.
    private Episode(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Episode() {
      gid_ = com.google.protobuf.ByteString.EMPTY;
      name_ = "";
      audio_ = java.util.Collections.emptyList();
      description_ = "";
      language_ = "";
      video_ = java.util.Collections.emptyList();
      videoPreview_ = java.util.Collections.emptyList();
      audioPreview_ = java.util.Collections.emptyList();
      restriction_ = java.util.Collections.emptyList();
      keyword_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      availability_ = java.util.Collections.emptyList();
      externalUrl_ = "";
      type_ = 0;
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Episode_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Episode_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.Episode.class, com.spotify.metadata.Metadata.Episode.Builder.class);
    }

    /**
     * Protobuf enum {@code spotify.metadata.proto.Episode.EpisodeType}
     */
    public enum EpisodeType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>FULL = 0;</code>
       */
      FULL(0),
      /**
       * <code>TRAILER = 1;</code>
       */
      TRAILER(1),
      /**
       * <code>BONUS = 2;</code>
       */
      BONUS(2),
      ;

      /**
       * <code>FULL = 0;</code>
       */
      public static final int FULL_VALUE = 0;
      /**
       * <code>TRAILER = 1;</code>
       */
      public static final int TRAILER_VALUE = 1;
      /**
       * <code>BONUS = 2;</code>
       */
      public static final int BONUS_VALUE = 2;


      public final int getNumber() {
        return value;
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static EpisodeType valueOf(int value) {
        return forNumber(value);
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static EpisodeType forNumber(int value) {
        switch (value) {
          case 0: return FULL;
          case 1: return TRAILER;
          case 2: return BONUS;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<EpisodeType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static final com.google.protobuf.Internal.EnumLiteMap<
          EpisodeType> internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<EpisodeType>() {
              public EpisodeType findValueByNumber(int number) {
                return EpisodeType.forNumber(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.Episode.getDescriptor().getEnumTypes().get(0);
      }

      private static final EpisodeType[] VALUES = values();

      public static EpisodeType valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

      private EpisodeType(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:spotify.metadata.proto.Episode.EpisodeType)
    }

    private int bitField0_;
    public static final int GID_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString gid_;
    /**
     * <code>optional bytes gid = 1;</code>
     * @return Whether the gid field is set.
     */
    public boolean hasGid() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional bytes gid = 1;</code>
     * @return The gid.
     */
    public com.google.protobuf.ByteString getGid() {
      return gid_;
    }

    public static final int NAME_FIELD_NUMBER = 2;
    private volatile java.lang.Object name_;
    /**
     * <code>optional string name = 2;</code>
     * @return Whether the name field is set.
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional string name = 2;</code>
     * @return The name.
     */
    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();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 2;</code>
     * @return The bytes for name.
     */
    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 DURATION_FIELD_NUMBER = 7;
    private int duration_;
    /**
     * <code>optional sint32 duration = 7;</code>
     * @return Whether the duration field is set.
     */
    public boolean hasDuration() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional sint32 duration = 7;</code>
     * @return The duration.
     */
    public int getDuration() {
      return duration_;
    }

    public static final int AUDIO_FIELD_NUMBER = 12;
    private java.util.List<com.spotify.metadata.Metadata.AudioFile> audio_;
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.AudioFile> getAudioList() {
      return audio_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.AudioFileOrBuilder> 
        getAudioOrBuilderList() {
      return audio_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
     */
    public int getAudioCount() {
      return audio_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
     */
    public com.spotify.metadata.Metadata.AudioFile getAudio(int index) {
      return audio_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
     */
    public com.spotify.metadata.Metadata.AudioFileOrBuilder getAudioOrBuilder(
        int index) {
      return audio_.get(index);
    }

    public static final int DESCRIPTION_FIELD_NUMBER = 64;
    private volatile java.lang.Object description_;
    /**
     * <code>optional string description = 64;</code>
     * @return Whether the description field is set.
     */
    public boolean hasDescription() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional string description = 64;</code>
     * @return The description.
     */
    public java.lang.String getDescription() {
      java.lang.Object ref = description_;
      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();
        if (bs.isValidUtf8()) {
          description_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string description = 64;</code>
     * @return The bytes for description.
     */
    public com.google.protobuf.ByteString
        getDescriptionBytes() {
      java.lang.Object ref = description_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        description_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int NUMBER_FIELD_NUMBER = 65;
    private int number_;
    /**
     * <code>optional sint32 number = 65;</code>
     * @return Whether the number field is set.
     */
    public boolean hasNumber() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional sint32 number = 65;</code>
     * @return The number.
     */
    public int getNumber() {
      return number_;
    }

    public static final int PUBLISH_TIME_FIELD_NUMBER = 66;
    private com.spotify.metadata.Metadata.Date publishTime_;
    /**
     * <code>optional .spotify.metadata.proto.Date publish_time = 66;</code>
     * @return Whether the publishTime field is set.
     */
    public boolean hasPublishTime() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.Date publish_time = 66;</code>
     * @return The publishTime.
     */
    public com.spotify.metadata.Metadata.Date getPublishTime() {
      return publishTime_ == null ? com.spotify.metadata.Metadata.Date.getDefaultInstance() : publishTime_;
    }
    /**
     * <code>optional .spotify.metadata.proto.Date publish_time = 66;</code>
     */
    public com.spotify.metadata.Metadata.DateOrBuilder getPublishTimeOrBuilder() {
      return publishTime_ == null ? com.spotify.metadata.Metadata.Date.getDefaultInstance() : publishTime_;
    }

    public static final int DEPRECATED_POPULARITY_FIELD_NUMBER = 67;
    private int deprecatedPopularity_;
    /**
     * <code>optional sint32 deprecated_popularity = 67 [deprecated = true];</code>
     * @return Whether the deprecatedPopularity field is set.
     */
    @java.lang.Deprecated public boolean hasDeprecatedPopularity() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>optional sint32 deprecated_popularity = 67 [deprecated = true];</code>
     * @return The deprecatedPopularity.
     */
    @java.lang.Deprecated public int getDeprecatedPopularity() {
      return deprecatedPopularity_;
    }

    public static final int COVER_IMAGE_FIELD_NUMBER = 68;
    private com.spotify.metadata.Metadata.ImageGroup coverImage_;
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 68;</code>
     * @return Whether the coverImage field is set.
     */
    public boolean hasCoverImage() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 68;</code>
     * @return The coverImage.
     */
    public com.spotify.metadata.Metadata.ImageGroup getCoverImage() {
      return coverImage_ == null ? com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : coverImage_;
    }
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 68;</code>
     */
    public com.spotify.metadata.Metadata.ImageGroupOrBuilder getCoverImageOrBuilder() {
      return coverImage_ == null ? com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : coverImage_;
    }

    public static final int LANGUAGE_FIELD_NUMBER = 69;
    private volatile java.lang.Object language_;
    /**
     * <code>optional string language = 69;</code>
     * @return Whether the language field is set.
     */
    public boolean hasLanguage() {
      return ((bitField0_ & 0x00000100) != 0);
    }
    /**
     * <code>optional string language = 69;</code>
     * @return The language.
     */
    public java.lang.String getLanguage() {
      java.lang.Object ref = language_;
      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();
        if (bs.isValidUtf8()) {
          language_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string language = 69;</code>
     * @return The bytes for language.
     */
    public com.google.protobuf.ByteString
        getLanguageBytes() {
      java.lang.Object ref = language_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        language_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int EXPLICIT_FIELD_NUMBER = 70;
    private boolean explicit_;
    /**
     * <code>optional bool explicit = 70;</code>
     * @return Whether the explicit field is set.
     */
    public boolean hasExplicit() {
      return ((bitField0_ & 0x00000200) != 0);
    }
    /**
     * <code>optional bool explicit = 70;</code>
     * @return The explicit.
     */
    public boolean getExplicit() {
      return explicit_;
    }

    public static final int SHOW_FIELD_NUMBER = 71;
    private com.spotify.metadata.Metadata.Show show_;
    /**
     * <code>optional .spotify.metadata.proto.Show show = 71;</code>
     * @return Whether the show field is set.
     */
    public boolean hasShow() {
      return ((bitField0_ & 0x00000400) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.Show show = 71;</code>
     * @return The show.
     */
    public com.spotify.metadata.Metadata.Show getShow() {
      return show_ == null ? com.spotify.metadata.Metadata.Show.getDefaultInstance() : show_;
    }
    /**
     * <code>optional .spotify.metadata.proto.Show show = 71;</code>
     */
    public com.spotify.metadata.Metadata.ShowOrBuilder getShowOrBuilder() {
      return show_ == null ? com.spotify.metadata.Metadata.Show.getDefaultInstance() : show_;
    }

    public static final int VIDEO_FIELD_NUMBER = 72;
    private java.util.List<com.spotify.metadata.Metadata.VideoFile> video_;
    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.VideoFile> getVideoList() {
      return video_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.VideoFileOrBuilder> 
        getVideoOrBuilderList() {
      return video_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
     */
    public int getVideoCount() {
      return video_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
     */
    public com.spotify.metadata.Metadata.VideoFile getVideo(int index) {
      return video_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
     */
    public com.spotify.metadata.Metadata.VideoFileOrBuilder getVideoOrBuilder(
        int index) {
      return video_.get(index);
    }

    public static final int VIDEO_PREVIEW_FIELD_NUMBER = 73;
    private java.util.List<com.spotify.metadata.Metadata.VideoFile> videoPreview_;
    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.VideoFile> getVideoPreviewList() {
      return videoPreview_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.VideoFileOrBuilder> 
        getVideoPreviewOrBuilderList() {
      return videoPreview_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
     */
    public int getVideoPreviewCount() {
      return videoPreview_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
     */
    public com.spotify.metadata.Metadata.VideoFile getVideoPreview(int index) {
      return videoPreview_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
     */
    public com.spotify.metadata.Metadata.VideoFileOrBuilder getVideoPreviewOrBuilder(
        int index) {
      return videoPreview_.get(index);
    }

    public static final int AUDIO_PREVIEW_FIELD_NUMBER = 74;
    private java.util.List<com.spotify.metadata.Metadata.AudioFile> audioPreview_;
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.AudioFile> getAudioPreviewList() {
      return audioPreview_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.AudioFileOrBuilder> 
        getAudioPreviewOrBuilderList() {
      return audioPreview_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
     */
    public int getAudioPreviewCount() {
      return audioPreview_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
     */
    public com.spotify.metadata.Metadata.AudioFile getAudioPreview(int index) {
      return audioPreview_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
     */
    public com.spotify.metadata.Metadata.AudioFileOrBuilder getAudioPreviewOrBuilder(
        int index) {
      return audioPreview_.get(index);
    }

    public static final int RESTRICTION_FIELD_NUMBER = 75;
    private java.util.List<com.spotify.metadata.Metadata.Restriction> restriction_;
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Restriction> getRestrictionList() {
      return restriction_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.RestrictionOrBuilder> 
        getRestrictionOrBuilderList() {
      return restriction_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
     */
    public int getRestrictionCount() {
      return restriction_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
     */
    public com.spotify.metadata.Metadata.Restriction getRestriction(int index) {
      return restriction_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
     */
    public com.spotify.metadata.Metadata.RestrictionOrBuilder getRestrictionOrBuilder(
        int index) {
      return restriction_.get(index);
    }

    public static final int FREEZE_FRAME_FIELD_NUMBER = 76;
    private com.spotify.metadata.Metadata.ImageGroup freezeFrame_;
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup freeze_frame = 76;</code>
     * @return Whether the freezeFrame field is set.
     */
    public boolean hasFreezeFrame() {
      return ((bitField0_ & 0x00000800) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup freeze_frame = 76;</code>
     * @return The freezeFrame.
     */
    public com.spotify.metadata.Metadata.ImageGroup getFreezeFrame() {
      return freezeFrame_ == null ? com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : freezeFrame_;
    }
    /**
     * <code>optional .spotify.metadata.proto.ImageGroup freeze_frame = 76;</code>
     */
    public com.spotify.metadata.Metadata.ImageGroupOrBuilder getFreezeFrameOrBuilder() {
      return freezeFrame_ == null ? com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : freezeFrame_;
    }

    public static final int KEYWORD_FIELD_NUMBER = 77;
    private com.google.protobuf.LazyStringList keyword_;
    /**
     * <code>repeated string keyword = 77;</code>
     * @return A list containing the keyword.
     */
    public com.google.protobuf.ProtocolStringList
        getKeywordList() {
      return keyword_;
    }
    /**
     * <code>repeated string keyword = 77;</code>
     * @return The count of keyword.
     */
    public int getKeywordCount() {
      return keyword_.size();
    }
    /**
     * <code>repeated string keyword = 77;</code>
     * @param index The index of the element to return.
     * @return The keyword at the given index.
     */
    public java.lang.String getKeyword(int index) {
      return keyword_.get(index);
    }
    /**
     * <code>repeated string keyword = 77;</code>
     * @param index The index of the value to return.
     * @return The bytes of the keyword at the given index.
     */
    public com.google.protobuf.ByteString
        getKeywordBytes(int index) {
      return keyword_.getByteString(index);
    }

    public static final int ALLOW_BACKGROUND_PLAYBACK_FIELD_NUMBER = 81;
    private boolean allowBackgroundPlayback_;
    /**
     * <code>optional bool allow_background_playback = 81;</code>
     * @return Whether the allowBackgroundPlayback field is set.
     */
    public boolean hasAllowBackgroundPlayback() {
      return ((bitField0_ & 0x00001000) != 0);
    }
    /**
     * <code>optional bool allow_background_playback = 81;</code>
     * @return The allowBackgroundPlayback.
     */
    public boolean getAllowBackgroundPlayback() {
      return allowBackgroundPlayback_;
    }

    public static final int AVAILABILITY_FIELD_NUMBER = 82;
    private java.util.List<com.spotify.metadata.Metadata.Availability> availability_;
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Availability> getAvailabilityList() {
      return availability_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
        getAvailabilityOrBuilderList() {
      return availability_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
     */
    public int getAvailabilityCount() {
      return availability_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
     */
    public com.spotify.metadata.Metadata.Availability getAvailability(int index) {
      return availability_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
     */
    public com.spotify.metadata.Metadata.AvailabilityOrBuilder getAvailabilityOrBuilder(
        int index) {
      return availability_.get(index);
    }

    public static final int EXTERNAL_URL_FIELD_NUMBER = 83;
    private volatile java.lang.Object externalUrl_;
    /**
     * <code>optional string external_url = 83;</code>
     * @return Whether the externalUrl field is set.
     */
    public boolean hasExternalUrl() {
      return ((bitField0_ & 0x00002000) != 0);
    }
    /**
     * <code>optional string external_url = 83;</code>
     * @return The externalUrl.
     */
    public java.lang.String getExternalUrl() {
      java.lang.Object ref = externalUrl_;
      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();
        if (bs.isValidUtf8()) {
          externalUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string external_url = 83;</code>
     * @return The bytes for externalUrl.
     */
    public com.google.protobuf.ByteString
        getExternalUrlBytes() {
      java.lang.Object ref = externalUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        externalUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TYPE_FIELD_NUMBER = 87;
    private int type_;
    /**
     * <code>optional .spotify.metadata.proto.Episode.EpisodeType type = 87;</code>
     * @return Whether the type field is set.
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00004000) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.Episode.EpisodeType type = 87;</code>
     * @return The type.
     */
    public com.spotify.metadata.Metadata.Episode.EpisodeType getType() {
      @SuppressWarnings("deprecation")
      com.spotify.metadata.Metadata.Episode.EpisodeType result = com.spotify.metadata.Metadata.Episode.EpisodeType.valueOf(type_);
      return result == null ? com.spotify.metadata.Metadata.Episode.EpisodeType.FULL : result;
    }

    public static com.spotify.metadata.Metadata.Episode parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Episode parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Episode parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Episode parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Episode parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Episode parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Episode parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Episode 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.spotify.metadata.Metadata.Episode parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Episode 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.spotify.metadata.Metadata.Episode parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Episode 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.spotify.metadata.Metadata.Episode 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.Episode}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.Episode)
        com.spotify.metadata.Metadata.EpisodeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Episode_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Episode_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.Episode.class, com.spotify.metadata.Metadata.Episode.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.Episode.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getAudioFieldBuilder();
          getPublishTimeFieldBuilder();
          getCoverImageFieldBuilder();
          getShowFieldBuilder();
          getVideoFieldBuilder();
          getVideoPreviewFieldBuilder();
          getAudioPreviewFieldBuilder();
          getRestrictionFieldBuilder();
          getFreezeFrameFieldBuilder();
          getAvailabilityFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        gid_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        duration_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        if (audioBuilder_ == null) {
          audio_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          audioBuilder_.clear();
        }
        description_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        number_ = 0;
        bitField0_ = (bitField0_ & ~0x00000020);
        if (publishTimeBuilder_ == null) {
          publishTime_ = null;
        } else {
          publishTimeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        deprecatedPopularity_ = 0;
        bitField0_ = (bitField0_ & ~0x00000080);
        if (coverImageBuilder_ == null) {
          coverImage_ = null;
        } else {
          coverImageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        language_ = "";
        bitField0_ = (bitField0_ & ~0x00000200);
        explicit_ = false;
        bitField0_ = (bitField0_ & ~0x00000400);
        if (showBuilder_ == null) {
          show_ = null;
        } else {
          showBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        if (videoBuilder_ == null) {
          video_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00001000);
        } else {
          videoBuilder_.clear();
        }
        if (videoPreviewBuilder_ == null) {
          videoPreview_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00002000);
        } else {
          videoPreviewBuilder_.clear();
        }
        if (audioPreviewBuilder_ == null) {
          audioPreview_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00004000);
        } else {
          audioPreviewBuilder_.clear();
        }
        if (restrictionBuilder_ == null) {
          restriction_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00008000);
        } else {
          restrictionBuilder_.clear();
        }
        if (freezeFrameBuilder_ == null) {
          freezeFrame_ = null;
        } else {
          freezeFrameBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00010000);
        keyword_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00020000);
        allowBackgroundPlayback_ = false;
        bitField0_ = (bitField0_ & ~0x00040000);
        if (availabilityBuilder_ == null) {
          availability_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00080000);
        } else {
          availabilityBuilder_.clear();
        }
        externalUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00100000);
        type_ = 0;
        bitField0_ = (bitField0_ & ~0x00200000);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Episode_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Episode getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.Episode.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Episode build() {
        com.spotify.metadata.Metadata.Episode result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Episode buildPartial() {
        com.spotify.metadata.Metadata.Episode result = new com.spotify.metadata.Metadata.Episode(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.gid_ = gid_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.duration_ = duration_;
          to_bitField0_ |= 0x00000004;
        }
        if (audioBuilder_ == null) {
          if (((bitField0_ & 0x00000008) != 0)) {
            audio_ = java.util.Collections.unmodifiableList(audio_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.audio_ = audio_;
        } else {
          result.audio_ = audioBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          to_bitField0_ |= 0x00000008;
        }
        result.description_ = description_;
        if (((from_bitField0_ & 0x00000020) != 0)) {
          result.number_ = number_;
          to_bitField0_ |= 0x00000010;
        }
        if (((from_bitField0_ & 0x00000040) != 0)) {
          if (publishTimeBuilder_ == null) {
            result.publishTime_ = publishTime_;
          } else {
            result.publishTime_ = publishTimeBuilder_.build();
          }
          to_bitField0_ |= 0x00000020;
        }
        if (((from_bitField0_ & 0x00000080) != 0)) {
          result.deprecatedPopularity_ = deprecatedPopularity_;
          to_bitField0_ |= 0x00000040;
        }
        if (((from_bitField0_ & 0x00000100) != 0)) {
          if (coverImageBuilder_ == null) {
            result.coverImage_ = coverImage_;
          } else {
            result.coverImage_ = coverImageBuilder_.build();
          }
          to_bitField0_ |= 0x00000080;
        }
        if (((from_bitField0_ & 0x00000200) != 0)) {
          to_bitField0_ |= 0x00000100;
        }
        result.language_ = language_;
        if (((from_bitField0_ & 0x00000400) != 0)) {
          result.explicit_ = explicit_;
          to_bitField0_ |= 0x00000200;
        }
        if (((from_bitField0_ & 0x00000800) != 0)) {
          if (showBuilder_ == null) {
            result.show_ = show_;
          } else {
            result.show_ = showBuilder_.build();
          }
          to_bitField0_ |= 0x00000400;
        }
        if (videoBuilder_ == null) {
          if (((bitField0_ & 0x00001000) != 0)) {
            video_ = java.util.Collections.unmodifiableList(video_);
            bitField0_ = (bitField0_ & ~0x00001000);
          }
          result.video_ = video_;
        } else {
          result.video_ = videoBuilder_.build();
        }
        if (videoPreviewBuilder_ == null) {
          if (((bitField0_ & 0x00002000) != 0)) {
            videoPreview_ = java.util.Collections.unmodifiableList(videoPreview_);
            bitField0_ = (bitField0_ & ~0x00002000);
          }
          result.videoPreview_ = videoPreview_;
        } else {
          result.videoPreview_ = videoPreviewBuilder_.build();
        }
        if (audioPreviewBuilder_ == null) {
          if (((bitField0_ & 0x00004000) != 0)) {
            audioPreview_ = java.util.Collections.unmodifiableList(audioPreview_);
            bitField0_ = (bitField0_ & ~0x00004000);
          }
          result.audioPreview_ = audioPreview_;
        } else {
          result.audioPreview_ = audioPreviewBuilder_.build();
        }
        if (restrictionBuilder_ == null) {
          if (((bitField0_ & 0x00008000) != 0)) {
            restriction_ = java.util.Collections.unmodifiableList(restriction_);
            bitField0_ = (bitField0_ & ~0x00008000);
          }
          result.restriction_ = restriction_;
        } else {
          result.restriction_ = restrictionBuilder_.build();
        }
        if (((from_bitField0_ & 0x00010000) != 0)) {
          if (freezeFrameBuilder_ == null) {
            result.freezeFrame_ = freezeFrame_;
          } else {
            result.freezeFrame_ = freezeFrameBuilder_.build();
          }
          to_bitField0_ |= 0x00000800;
        }
        if (((bitField0_ & 0x00020000) != 0)) {
          keyword_ = keyword_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00020000);
        }
        result.keyword_ = keyword_;
        if (((from_bitField0_ & 0x00040000) != 0)) {
          result.allowBackgroundPlayback_ = allowBackgroundPlayback_;
          to_bitField0_ |= 0x00001000;
        }
        if (availabilityBuilder_ == null) {
          if (((bitField0_ & 0x00080000) != 0)) {
            availability_ = java.util.Collections.unmodifiableList(availability_);
            bitField0_ = (bitField0_ & ~0x00080000);
          }
          result.availability_ = availability_;
        } else {
          result.availability_ = availabilityBuilder_.build();
        }
        if (((from_bitField0_ & 0x00100000) != 0)) {
          to_bitField0_ |= 0x00002000;
        }
        result.externalUrl_ = externalUrl_;
        if (((from_bitField0_ & 0x00200000) != 0)) {
          to_bitField0_ |= 0x00004000;
        }
        result.type_ = type_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private com.google.protobuf.ByteString gid_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes gid = 1;</code>
       * @return Whether the gid field is set.
       */
      public boolean hasGid() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional bytes gid = 1;</code>
       * @return The gid.
       */
      public com.google.protobuf.ByteString getGid() {
        return gid_;
      }
      /**
       * <code>optional bytes gid = 1;</code>
       * @param value The gid to set.
       * @return This builder for chaining.
       */
      public Builder setGid(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        gid_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes gid = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearGid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        gid_ = getDefaultInstance().getGid();
        onChanged();
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 2;</code>
       * @return Whether the name field is set.
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional string name = 2;</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();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 2;</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;
        }
      }
      /**
       * <code>optional string name = 2;</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();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000002);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 2;</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();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }

      private int duration_ ;
      /**
       * <code>optional sint32 duration = 7;</code>
       * @return Whether the duration field is set.
       */
      public boolean hasDuration() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional sint32 duration = 7;</code>
       * @return The duration.
       */
      public int getDuration() {
        return duration_;
      }
      /**
       * <code>optional sint32 duration = 7;</code>
       * @param value The duration to set.
       * @return This builder for chaining.
       */
      public Builder setDuration(int value) {
        bitField0_ |= 0x00000004;
        duration_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 duration = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearDuration() {
        bitField0_ = (bitField0_ & ~0x00000004);
        duration_ = 0;
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.metadata.Metadata.AudioFile> audio_ =
        java.util.Collections.emptyList();
      private void ensureAudioIsMutable() {
        if (!((bitField0_ & 0x00000008) != 0)) {
          audio_ = new java.util.ArrayList<com.spotify.metadata.Metadata.AudioFile>(audio_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.AudioFile, com.spotify.metadata.Metadata.AudioFile.Builder, com.spotify.metadata.Metadata.AudioFileOrBuilder> audioBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.AudioFile> getAudioList() {
        if (audioBuilder_ == null) {
          return java.util.Collections.unmodifiableList(audio_);
        } else {
          return audioBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
       */
      public int getAudioCount() {
        if (audioBuilder_ == null) {
          return audio_.size();
        } else {
          return audioBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
       */
      public com.spotify.metadata.Metadata.AudioFile getAudio(int index) {
        if (audioBuilder_ == null) {
          return audio_.get(index);
        } else {
          return audioBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
       */
      public Builder setAudio(
          int index, com.spotify.metadata.Metadata.AudioFile value) {
        if (audioBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAudioIsMutable();
          audio_.set(index, value);
          onChanged();
        } else {
          audioBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
       */
      public Builder setAudio(
          int index, com.spotify.metadata.Metadata.AudioFile.Builder builderForValue) {
        if (audioBuilder_ == null) {
          ensureAudioIsMutable();
          audio_.set(index, builderForValue.build());
          onChanged();
        } else {
          audioBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
       */
      public Builder addAudio(com.spotify.metadata.Metadata.AudioFile value) {
        if (audioBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAudioIsMutable();
          audio_.add(value);
          onChanged();
        } else {
          audioBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
       */
      public Builder addAudio(
          int index, com.spotify.metadata.Metadata.AudioFile value) {
        if (audioBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAudioIsMutable();
          audio_.add(index, value);
          onChanged();
        } else {
          audioBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
       */
      public Builder addAudio(
          com.spotify.metadata.Metadata.AudioFile.Builder builderForValue) {
        if (audioBuilder_ == null) {
          ensureAudioIsMutable();
          audio_.add(builderForValue.build());
          onChanged();
        } else {
          audioBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
       */
      public Builder addAudio(
          int index, com.spotify.metadata.Metadata.AudioFile.Builder builderForValue) {
        if (audioBuilder_ == null) {
          ensureAudioIsMutable();
          audio_.add(index, builderForValue.build());
          onChanged();
        } else {
          audioBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
       */
      public Builder addAllAudio(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.AudioFile> values) {
        if (audioBuilder_ == null) {
          ensureAudioIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, audio_);
          onChanged();
        } else {
          audioBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
       */
      public Builder clearAudio() {
        if (audioBuilder_ == null) {
          audio_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          audioBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
       */
      public Builder removeAudio(int index) {
        if (audioBuilder_ == null) {
          ensureAudioIsMutable();
          audio_.remove(index);
          onChanged();
        } else {
          audioBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
       */
      public com.spotify.metadata.Metadata.AudioFile.Builder getAudioBuilder(
          int index) {
        return getAudioFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
       */
      public com.spotify.metadata.Metadata.AudioFileOrBuilder getAudioOrBuilder(
          int index) {
        if (audioBuilder_ == null) {
          return audio_.get(index);  } else {
          return audioBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.AudioFileOrBuilder> 
           getAudioOrBuilderList() {
        if (audioBuilder_ != null) {
          return audioBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(audio_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
       */
      public com.spotify.metadata.Metadata.AudioFile.Builder addAudioBuilder() {
        return getAudioFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.AudioFile.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
       */
      public com.spotify.metadata.Metadata.AudioFile.Builder addAudioBuilder(
          int index) {
        return getAudioFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.AudioFile.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio = 12;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.AudioFile.Builder> 
           getAudioBuilderList() {
        return getAudioFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.AudioFile, com.spotify.metadata.Metadata.AudioFile.Builder, com.spotify.metadata.Metadata.AudioFileOrBuilder> 
          getAudioFieldBuilder() {
        if (audioBuilder_ == null) {
          audioBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.AudioFile, com.spotify.metadata.Metadata.AudioFile.Builder, com.spotify.metadata.Metadata.AudioFileOrBuilder>(
                  audio_,
                  ((bitField0_ & 0x00000008) != 0),
                  getParentForChildren(),
                  isClean());
          audio_ = null;
        }
        return audioBuilder_;
      }

      private java.lang.Object description_ = "";
      /**
       * <code>optional string description = 64;</code>
       * @return Whether the description field is set.
       */
      public boolean hasDescription() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>optional string description = 64;</code>
       * @return The description.
       */
      public java.lang.String getDescription() {
        java.lang.Object ref = description_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            description_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string description = 64;</code>
       * @return The bytes for description.
       */
      public com.google.protobuf.ByteString
          getDescriptionBytes() {
        java.lang.Object ref = description_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          description_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string description = 64;</code>
       * @param value The description to set.
       * @return This builder for chaining.
       */
      public Builder setDescription(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        description_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string description = 64;</code>
       * @return This builder for chaining.
       */
      public Builder clearDescription() {
        bitField0_ = (bitField0_ & ~0x00000010);
        description_ = getDefaultInstance().getDescription();
        onChanged();
        return this;
      }
      /**
       * <code>optional string description = 64;</code>
       * @param value The bytes for description to set.
       * @return This builder for chaining.
       */
      public Builder setDescriptionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        description_ = value;
        onChanged();
        return this;
      }

      private int number_ ;
      /**
       * <code>optional sint32 number = 65;</code>
       * @return Whether the number field is set.
       */
      public boolean hasNumber() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>optional sint32 number = 65;</code>
       * @return The number.
       */
      public int getNumber() {
        return number_;
      }
      /**
       * <code>optional sint32 number = 65;</code>
       * @param value The number to set.
       * @return This builder for chaining.
       */
      public Builder setNumber(int value) {
        bitField0_ |= 0x00000020;
        number_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 number = 65;</code>
       * @return This builder for chaining.
       */
      public Builder clearNumber() {
        bitField0_ = (bitField0_ & ~0x00000020);
        number_ = 0;
        onChanged();
        return this;
      }

      private com.spotify.metadata.Metadata.Date publishTime_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.Date, com.spotify.metadata.Metadata.Date.Builder, com.spotify.metadata.Metadata.DateOrBuilder> publishTimeBuilder_;
      /**
       * <code>optional .spotify.metadata.proto.Date publish_time = 66;</code>
       * @return Whether the publishTime field is set.
       */
      public boolean hasPublishTime() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.Date publish_time = 66;</code>
       * @return The publishTime.
       */
      public com.spotify.metadata.Metadata.Date getPublishTime() {
        if (publishTimeBuilder_ == null) {
          return publishTime_ == null ? com.spotify.metadata.Metadata.Date.getDefaultInstance() : publishTime_;
        } else {
          return publishTimeBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.Date publish_time = 66;</code>
       */
      public Builder setPublishTime(com.spotify.metadata.Metadata.Date value) {
        if (publishTimeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          publishTime_ = value;
          onChanged();
        } else {
          publishTimeBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date publish_time = 66;</code>
       */
      public Builder setPublishTime(
          com.spotify.metadata.Metadata.Date.Builder builderForValue) {
        if (publishTimeBuilder_ == null) {
          publishTime_ = builderForValue.build();
          onChanged();
        } else {
          publishTimeBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date publish_time = 66;</code>
       */
      public Builder mergePublishTime(com.spotify.metadata.Metadata.Date value) {
        if (publishTimeBuilder_ == null) {
          if (((bitField0_ & 0x00000040) != 0) &&
              publishTime_ != null &&
              publishTime_ != com.spotify.metadata.Metadata.Date.getDefaultInstance()) {
            publishTime_ =
              com.spotify.metadata.Metadata.Date.newBuilder(publishTime_).mergeFrom(value).buildPartial();
          } else {
            publishTime_ = value;
          }
          onChanged();
        } else {
          publishTimeBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date publish_time = 66;</code>
       */
      public Builder clearPublishTime() {
        if (publishTimeBuilder_ == null) {
          publishTime_ = null;
          onChanged();
        } else {
          publishTimeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date publish_time = 66;</code>
       */
      public com.spotify.metadata.Metadata.Date.Builder getPublishTimeBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getPublishTimeFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.metadata.proto.Date publish_time = 66;</code>
       */
      public com.spotify.metadata.Metadata.DateOrBuilder getPublishTimeOrBuilder() {
        if (publishTimeBuilder_ != null) {
          return publishTimeBuilder_.getMessageOrBuilder();
        } else {
          return publishTime_ == null ?
              com.spotify.metadata.Metadata.Date.getDefaultInstance() : publishTime_;
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.Date publish_time = 66;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.Date, com.spotify.metadata.Metadata.Date.Builder, com.spotify.metadata.Metadata.DateOrBuilder> 
          getPublishTimeFieldBuilder() {
        if (publishTimeBuilder_ == null) {
          publishTimeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.metadata.Metadata.Date, com.spotify.metadata.Metadata.Date.Builder, com.spotify.metadata.Metadata.DateOrBuilder>(
                  getPublishTime(),
                  getParentForChildren(),
                  isClean());
          publishTime_ = null;
        }
        return publishTimeBuilder_;
      }

      private int deprecatedPopularity_ ;
      /**
       * <code>optional sint32 deprecated_popularity = 67 [deprecated = true];</code>
       * @return Whether the deprecatedPopularity field is set.
       */
      @java.lang.Deprecated public boolean hasDeprecatedPopularity() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <code>optional sint32 deprecated_popularity = 67 [deprecated = true];</code>
       * @return The deprecatedPopularity.
       */
      @java.lang.Deprecated public int getDeprecatedPopularity() {
        return deprecatedPopularity_;
      }
      /**
       * <code>optional sint32 deprecated_popularity = 67 [deprecated = true];</code>
       * @param value The deprecatedPopularity to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setDeprecatedPopularity(int value) {
        bitField0_ |= 0x00000080;
        deprecatedPopularity_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 deprecated_popularity = 67 [deprecated = true];</code>
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder clearDeprecatedPopularity() {
        bitField0_ = (bitField0_ & ~0x00000080);
        deprecatedPopularity_ = 0;
        onChanged();
        return this;
      }

      private com.spotify.metadata.Metadata.ImageGroup coverImage_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.ImageGroup, com.spotify.metadata.Metadata.ImageGroup.Builder, com.spotify.metadata.Metadata.ImageGroupOrBuilder> coverImageBuilder_;
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 68;</code>
       * @return Whether the coverImage field is set.
       */
      public boolean hasCoverImage() {
        return ((bitField0_ & 0x00000100) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 68;</code>
       * @return The coverImage.
       */
      public com.spotify.metadata.Metadata.ImageGroup getCoverImage() {
        if (coverImageBuilder_ == null) {
          return coverImage_ == null ? com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : coverImage_;
        } else {
          return coverImageBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 68;</code>
       */
      public Builder setCoverImage(com.spotify.metadata.Metadata.ImageGroup value) {
        if (coverImageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          coverImage_ = value;
          onChanged();
        } else {
          coverImageBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 68;</code>
       */
      public Builder setCoverImage(
          com.spotify.metadata.Metadata.ImageGroup.Builder builderForValue) {
        if (coverImageBuilder_ == null) {
          coverImage_ = builderForValue.build();
          onChanged();
        } else {
          coverImageBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 68;</code>
       */
      public Builder mergeCoverImage(com.spotify.metadata.Metadata.ImageGroup value) {
        if (coverImageBuilder_ == null) {
          if (((bitField0_ & 0x00000100) != 0) &&
              coverImage_ != null &&
              coverImage_ != com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance()) {
            coverImage_ =
              com.spotify.metadata.Metadata.ImageGroup.newBuilder(coverImage_).mergeFrom(value).buildPartial();
          } else {
            coverImage_ = value;
          }
          onChanged();
        } else {
          coverImageBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 68;</code>
       */
      public Builder clearCoverImage() {
        if (coverImageBuilder_ == null) {
          coverImage_ = null;
          onChanged();
        } else {
          coverImageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 68;</code>
       */
      public com.spotify.metadata.Metadata.ImageGroup.Builder getCoverImageBuilder() {
        bitField0_ |= 0x00000100;
        onChanged();
        return getCoverImageFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 68;</code>
       */
      public com.spotify.metadata.Metadata.ImageGroupOrBuilder getCoverImageOrBuilder() {
        if (coverImageBuilder_ != null) {
          return coverImageBuilder_.getMessageOrBuilder();
        } else {
          return coverImage_ == null ?
              com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : coverImage_;
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup cover_image = 68;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.ImageGroup, com.spotify.metadata.Metadata.ImageGroup.Builder, com.spotify.metadata.Metadata.ImageGroupOrBuilder> 
          getCoverImageFieldBuilder() {
        if (coverImageBuilder_ == null) {
          coverImageBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.metadata.Metadata.ImageGroup, com.spotify.metadata.Metadata.ImageGroup.Builder, com.spotify.metadata.Metadata.ImageGroupOrBuilder>(
                  getCoverImage(),
                  getParentForChildren(),
                  isClean());
          coverImage_ = null;
        }
        return coverImageBuilder_;
      }

      private java.lang.Object language_ = "";
      /**
       * <code>optional string language = 69;</code>
       * @return Whether the language field is set.
       */
      public boolean hasLanguage() {
        return ((bitField0_ & 0x00000200) != 0);
      }
      /**
       * <code>optional string language = 69;</code>
       * @return The language.
       */
      public java.lang.String getLanguage() {
        java.lang.Object ref = language_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            language_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string language = 69;</code>
       * @return The bytes for language.
       */
      public com.google.protobuf.ByteString
          getLanguageBytes() {
        java.lang.Object ref = language_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          language_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string language = 69;</code>
       * @param value The language to set.
       * @return This builder for chaining.
       */
      public Builder setLanguage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        language_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string language = 69;</code>
       * @return This builder for chaining.
       */
      public Builder clearLanguage() {
        bitField0_ = (bitField0_ & ~0x00000200);
        language_ = getDefaultInstance().getLanguage();
        onChanged();
        return this;
      }
      /**
       * <code>optional string language = 69;</code>
       * @param value The bytes for language to set.
       * @return This builder for chaining.
       */
      public Builder setLanguageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        language_ = value;
        onChanged();
        return this;
      }

      private boolean explicit_ ;
      /**
       * <code>optional bool explicit = 70;</code>
       * @return Whether the explicit field is set.
       */
      public boolean hasExplicit() {
        return ((bitField0_ & 0x00000400) != 0);
      }
      /**
       * <code>optional bool explicit = 70;</code>
       * @return The explicit.
       */
      public boolean getExplicit() {
        return explicit_;
      }
      /**
       * <code>optional bool explicit = 70;</code>
       * @param value The explicit to set.
       * @return This builder for chaining.
       */
      public Builder setExplicit(boolean value) {
        bitField0_ |= 0x00000400;
        explicit_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool explicit = 70;</code>
       * @return This builder for chaining.
       */
      public Builder clearExplicit() {
        bitField0_ = (bitField0_ & ~0x00000400);
        explicit_ = false;
        onChanged();
        return this;
      }

      private com.spotify.metadata.Metadata.Show show_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.Show, com.spotify.metadata.Metadata.Show.Builder, com.spotify.metadata.Metadata.ShowOrBuilder> showBuilder_;
      /**
       * <code>optional .spotify.metadata.proto.Show show = 71;</code>
       * @return Whether the show field is set.
       */
      public boolean hasShow() {
        return ((bitField0_ & 0x00000800) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.Show show = 71;</code>
       * @return The show.
       */
      public com.spotify.metadata.Metadata.Show getShow() {
        if (showBuilder_ == null) {
          return show_ == null ? com.spotify.metadata.Metadata.Show.getDefaultInstance() : show_;
        } else {
          return showBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.Show show = 71;</code>
       */
      public Builder setShow(com.spotify.metadata.Metadata.Show value) {
        if (showBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          show_ = value;
          onChanged();
        } else {
          showBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Show show = 71;</code>
       */
      public Builder setShow(
          com.spotify.metadata.Metadata.Show.Builder builderForValue) {
        if (showBuilder_ == null) {
          show_ = builderForValue.build();
          onChanged();
        } else {
          showBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Show show = 71;</code>
       */
      public Builder mergeShow(com.spotify.metadata.Metadata.Show value) {
        if (showBuilder_ == null) {
          if (((bitField0_ & 0x00000800) != 0) &&
              show_ != null &&
              show_ != com.spotify.metadata.Metadata.Show.getDefaultInstance()) {
            show_ =
              com.spotify.metadata.Metadata.Show.newBuilder(show_).mergeFrom(value).buildPartial();
          } else {
            show_ = value;
          }
          onChanged();
        } else {
          showBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Show show = 71;</code>
       */
      public Builder clearShow() {
        if (showBuilder_ == null) {
          show_ = null;
          onChanged();
        } else {
          showBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Show show = 71;</code>
       */
      public com.spotify.metadata.Metadata.Show.Builder getShowBuilder() {
        bitField0_ |= 0x00000800;
        onChanged();
        return getShowFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.metadata.proto.Show show = 71;</code>
       */
      public com.spotify.metadata.Metadata.ShowOrBuilder getShowOrBuilder() {
        if (showBuilder_ != null) {
          return showBuilder_.getMessageOrBuilder();
        } else {
          return show_ == null ?
              com.spotify.metadata.Metadata.Show.getDefaultInstance() : show_;
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.Show show = 71;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.Show, com.spotify.metadata.Metadata.Show.Builder, com.spotify.metadata.Metadata.ShowOrBuilder> 
          getShowFieldBuilder() {
        if (showBuilder_ == null) {
          showBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.metadata.Metadata.Show, com.spotify.metadata.Metadata.Show.Builder, com.spotify.metadata.Metadata.ShowOrBuilder>(
                  getShow(),
                  getParentForChildren(),
                  isClean());
          show_ = null;
        }
        return showBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.VideoFile> video_ =
        java.util.Collections.emptyList();
      private void ensureVideoIsMutable() {
        if (!((bitField0_ & 0x00001000) != 0)) {
          video_ = new java.util.ArrayList<com.spotify.metadata.Metadata.VideoFile>(video_);
          bitField0_ |= 0x00001000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.VideoFile, com.spotify.metadata.Metadata.VideoFile.Builder, com.spotify.metadata.Metadata.VideoFileOrBuilder> videoBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.VideoFile> getVideoList() {
        if (videoBuilder_ == null) {
          return java.util.Collections.unmodifiableList(video_);
        } else {
          return videoBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
       */
      public int getVideoCount() {
        if (videoBuilder_ == null) {
          return video_.size();
        } else {
          return videoBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
       */
      public com.spotify.metadata.Metadata.VideoFile getVideo(int index) {
        if (videoBuilder_ == null) {
          return video_.get(index);
        } else {
          return videoBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
       */
      public Builder setVideo(
          int index, com.spotify.metadata.Metadata.VideoFile value) {
        if (videoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureVideoIsMutable();
          video_.set(index, value);
          onChanged();
        } else {
          videoBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
       */
      public Builder setVideo(
          int index, com.spotify.metadata.Metadata.VideoFile.Builder builderForValue) {
        if (videoBuilder_ == null) {
          ensureVideoIsMutable();
          video_.set(index, builderForValue.build());
          onChanged();
        } else {
          videoBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
       */
      public Builder addVideo(com.spotify.metadata.Metadata.VideoFile value) {
        if (videoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureVideoIsMutable();
          video_.add(value);
          onChanged();
        } else {
          videoBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
       */
      public Builder addVideo(
          int index, com.spotify.metadata.Metadata.VideoFile value) {
        if (videoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureVideoIsMutable();
          video_.add(index, value);
          onChanged();
        } else {
          videoBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
       */
      public Builder addVideo(
          com.spotify.metadata.Metadata.VideoFile.Builder builderForValue) {
        if (videoBuilder_ == null) {
          ensureVideoIsMutable();
          video_.add(builderForValue.build());
          onChanged();
        } else {
          videoBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
       */
      public Builder addVideo(
          int index, com.spotify.metadata.Metadata.VideoFile.Builder builderForValue) {
        if (videoBuilder_ == null) {
          ensureVideoIsMutable();
          video_.add(index, builderForValue.build());
          onChanged();
        } else {
          videoBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
       */
      public Builder addAllVideo(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.VideoFile> values) {
        if (videoBuilder_ == null) {
          ensureVideoIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, video_);
          onChanged();
        } else {
          videoBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
       */
      public Builder clearVideo() {
        if (videoBuilder_ == null) {
          video_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00001000);
          onChanged();
        } else {
          videoBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
       */
      public Builder removeVideo(int index) {
        if (videoBuilder_ == null) {
          ensureVideoIsMutable();
          video_.remove(index);
          onChanged();
        } else {
          videoBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
       */
      public com.spotify.metadata.Metadata.VideoFile.Builder getVideoBuilder(
          int index) {
        return getVideoFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
       */
      public com.spotify.metadata.Metadata.VideoFileOrBuilder getVideoOrBuilder(
          int index) {
        if (videoBuilder_ == null) {
          return video_.get(index);  } else {
          return videoBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.VideoFileOrBuilder> 
           getVideoOrBuilderList() {
        if (videoBuilder_ != null) {
          return videoBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(video_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
       */
      public com.spotify.metadata.Metadata.VideoFile.Builder addVideoBuilder() {
        return getVideoFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.VideoFile.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
       */
      public com.spotify.metadata.Metadata.VideoFile.Builder addVideoBuilder(
          int index) {
        return getVideoFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.VideoFile.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video = 72;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.VideoFile.Builder> 
           getVideoBuilderList() {
        return getVideoFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.VideoFile, com.spotify.metadata.Metadata.VideoFile.Builder, com.spotify.metadata.Metadata.VideoFileOrBuilder> 
          getVideoFieldBuilder() {
        if (videoBuilder_ == null) {
          videoBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.VideoFile, com.spotify.metadata.Metadata.VideoFile.Builder, com.spotify.metadata.Metadata.VideoFileOrBuilder>(
                  video_,
                  ((bitField0_ & 0x00001000) != 0),
                  getParentForChildren(),
                  isClean());
          video_ = null;
        }
        return videoBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.VideoFile> videoPreview_ =
        java.util.Collections.emptyList();
      private void ensureVideoPreviewIsMutable() {
        if (!((bitField0_ & 0x00002000) != 0)) {
          videoPreview_ = new java.util.ArrayList<com.spotify.metadata.Metadata.VideoFile>(videoPreview_);
          bitField0_ |= 0x00002000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.VideoFile, com.spotify.metadata.Metadata.VideoFile.Builder, com.spotify.metadata.Metadata.VideoFileOrBuilder> videoPreviewBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.VideoFile> getVideoPreviewList() {
        if (videoPreviewBuilder_ == null) {
          return java.util.Collections.unmodifiableList(videoPreview_);
        } else {
          return videoPreviewBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
       */
      public int getVideoPreviewCount() {
        if (videoPreviewBuilder_ == null) {
          return videoPreview_.size();
        } else {
          return videoPreviewBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
       */
      public com.spotify.metadata.Metadata.VideoFile getVideoPreview(int index) {
        if (videoPreviewBuilder_ == null) {
          return videoPreview_.get(index);
        } else {
          return videoPreviewBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
       */
      public Builder setVideoPreview(
          int index, com.spotify.metadata.Metadata.VideoFile value) {
        if (videoPreviewBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureVideoPreviewIsMutable();
          videoPreview_.set(index, value);
          onChanged();
        } else {
          videoPreviewBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
       */
      public Builder setVideoPreview(
          int index, com.spotify.metadata.Metadata.VideoFile.Builder builderForValue) {
        if (videoPreviewBuilder_ == null) {
          ensureVideoPreviewIsMutable();
          videoPreview_.set(index, builderForValue.build());
          onChanged();
        } else {
          videoPreviewBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
       */
      public Builder addVideoPreview(com.spotify.metadata.Metadata.VideoFile value) {
        if (videoPreviewBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureVideoPreviewIsMutable();
          videoPreview_.add(value);
          onChanged();
        } else {
          videoPreviewBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
       */
      public Builder addVideoPreview(
          int index, com.spotify.metadata.Metadata.VideoFile value) {
        if (videoPreviewBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureVideoPreviewIsMutable();
          videoPreview_.add(index, value);
          onChanged();
        } else {
          videoPreviewBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
       */
      public Builder addVideoPreview(
          com.spotify.metadata.Metadata.VideoFile.Builder builderForValue) {
        if (videoPreviewBuilder_ == null) {
          ensureVideoPreviewIsMutable();
          videoPreview_.add(builderForValue.build());
          onChanged();
        } else {
          videoPreviewBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
       */
      public Builder addVideoPreview(
          int index, com.spotify.metadata.Metadata.VideoFile.Builder builderForValue) {
        if (videoPreviewBuilder_ == null) {
          ensureVideoPreviewIsMutable();
          videoPreview_.add(index, builderForValue.build());
          onChanged();
        } else {
          videoPreviewBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
       */
      public Builder addAllVideoPreview(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.VideoFile> values) {
        if (videoPreviewBuilder_ == null) {
          ensureVideoPreviewIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, videoPreview_);
          onChanged();
        } else {
          videoPreviewBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
       */
      public Builder clearVideoPreview() {
        if (videoPreviewBuilder_ == null) {
          videoPreview_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00002000);
          onChanged();
        } else {
          videoPreviewBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
       */
      public Builder removeVideoPreview(int index) {
        if (videoPreviewBuilder_ == null) {
          ensureVideoPreviewIsMutable();
          videoPreview_.remove(index);
          onChanged();
        } else {
          videoPreviewBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
       */
      public com.spotify.metadata.Metadata.VideoFile.Builder getVideoPreviewBuilder(
          int index) {
        return getVideoPreviewFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
       */
      public com.spotify.metadata.Metadata.VideoFileOrBuilder getVideoPreviewOrBuilder(
          int index) {
        if (videoPreviewBuilder_ == null) {
          return videoPreview_.get(index);  } else {
          return videoPreviewBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.VideoFileOrBuilder> 
           getVideoPreviewOrBuilderList() {
        if (videoPreviewBuilder_ != null) {
          return videoPreviewBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(videoPreview_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
       */
      public com.spotify.metadata.Metadata.VideoFile.Builder addVideoPreviewBuilder() {
        return getVideoPreviewFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.VideoFile.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
       */
      public com.spotify.metadata.Metadata.VideoFile.Builder addVideoPreviewBuilder(
          int index) {
        return getVideoPreviewFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.VideoFile.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.VideoFile video_preview = 73;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.VideoFile.Builder> 
           getVideoPreviewBuilderList() {
        return getVideoPreviewFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.VideoFile, com.spotify.metadata.Metadata.VideoFile.Builder, com.spotify.metadata.Metadata.VideoFileOrBuilder> 
          getVideoPreviewFieldBuilder() {
        if (videoPreviewBuilder_ == null) {
          videoPreviewBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.VideoFile, com.spotify.metadata.Metadata.VideoFile.Builder, com.spotify.metadata.Metadata.VideoFileOrBuilder>(
                  videoPreview_,
                  ((bitField0_ & 0x00002000) != 0),
                  getParentForChildren(),
                  isClean());
          videoPreview_ = null;
        }
        return videoPreviewBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.AudioFile> audioPreview_ =
        java.util.Collections.emptyList();
      private void ensureAudioPreviewIsMutable() {
        if (!((bitField0_ & 0x00004000) != 0)) {
          audioPreview_ = new java.util.ArrayList<com.spotify.metadata.Metadata.AudioFile>(audioPreview_);
          bitField0_ |= 0x00004000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.AudioFile, com.spotify.metadata.Metadata.AudioFile.Builder, com.spotify.metadata.Metadata.AudioFileOrBuilder> audioPreviewBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.AudioFile> getAudioPreviewList() {
        if (audioPreviewBuilder_ == null) {
          return java.util.Collections.unmodifiableList(audioPreview_);
        } else {
          return audioPreviewBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
       */
      public int getAudioPreviewCount() {
        if (audioPreviewBuilder_ == null) {
          return audioPreview_.size();
        } else {
          return audioPreviewBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
       */
      public com.spotify.metadata.Metadata.AudioFile getAudioPreview(int index) {
        if (audioPreviewBuilder_ == null) {
          return audioPreview_.get(index);
        } else {
          return audioPreviewBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
       */
      public Builder setAudioPreview(
          int index, com.spotify.metadata.Metadata.AudioFile value) {
        if (audioPreviewBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAudioPreviewIsMutable();
          audioPreview_.set(index, value);
          onChanged();
        } else {
          audioPreviewBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
       */
      public Builder setAudioPreview(
          int index, com.spotify.metadata.Metadata.AudioFile.Builder builderForValue) {
        if (audioPreviewBuilder_ == null) {
          ensureAudioPreviewIsMutable();
          audioPreview_.set(index, builderForValue.build());
          onChanged();
        } else {
          audioPreviewBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
       */
      public Builder addAudioPreview(com.spotify.metadata.Metadata.AudioFile value) {
        if (audioPreviewBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAudioPreviewIsMutable();
          audioPreview_.add(value);
          onChanged();
        } else {
          audioPreviewBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
       */
      public Builder addAudioPreview(
          int index, com.spotify.metadata.Metadata.AudioFile value) {
        if (audioPreviewBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAudioPreviewIsMutable();
          audioPreview_.add(index, value);
          onChanged();
        } else {
          audioPreviewBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
       */
      public Builder addAudioPreview(
          com.spotify.metadata.Metadata.AudioFile.Builder builderForValue) {
        if (audioPreviewBuilder_ == null) {
          ensureAudioPreviewIsMutable();
          audioPreview_.add(builderForValue.build());
          onChanged();
        } else {
          audioPreviewBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
       */
      public Builder addAudioPreview(
          int index, com.spotify.metadata.Metadata.AudioFile.Builder builderForValue) {
        if (audioPreviewBuilder_ == null) {
          ensureAudioPreviewIsMutable();
          audioPreview_.add(index, builderForValue.build());
          onChanged();
        } else {
          audioPreviewBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
       */
      public Builder addAllAudioPreview(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.AudioFile> values) {
        if (audioPreviewBuilder_ == null) {
          ensureAudioPreviewIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, audioPreview_);
          onChanged();
        } else {
          audioPreviewBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
       */
      public Builder clearAudioPreview() {
        if (audioPreviewBuilder_ == null) {
          audioPreview_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00004000);
          onChanged();
        } else {
          audioPreviewBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
       */
      public Builder removeAudioPreview(int index) {
        if (audioPreviewBuilder_ == null) {
          ensureAudioPreviewIsMutable();
          audioPreview_.remove(index);
          onChanged();
        } else {
          audioPreviewBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
       */
      public com.spotify.metadata.Metadata.AudioFile.Builder getAudioPreviewBuilder(
          int index) {
        return getAudioPreviewFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
       */
      public com.spotify.metadata.Metadata.AudioFileOrBuilder getAudioPreviewOrBuilder(
          int index) {
        if (audioPreviewBuilder_ == null) {
          return audioPreview_.get(index);  } else {
          return audioPreviewBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.AudioFileOrBuilder> 
           getAudioPreviewOrBuilderList() {
        if (audioPreviewBuilder_ != null) {
          return audioPreviewBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(audioPreview_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
       */
      public com.spotify.metadata.Metadata.AudioFile.Builder addAudioPreviewBuilder() {
        return getAudioPreviewFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.AudioFile.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
       */
      public com.spotify.metadata.Metadata.AudioFile.Builder addAudioPreviewBuilder(
          int index) {
        return getAudioPreviewFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.AudioFile.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.AudioFile audio_preview = 74;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.AudioFile.Builder> 
           getAudioPreviewBuilderList() {
        return getAudioPreviewFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.AudioFile, com.spotify.metadata.Metadata.AudioFile.Builder, com.spotify.metadata.Metadata.AudioFileOrBuilder> 
          getAudioPreviewFieldBuilder() {
        if (audioPreviewBuilder_ == null) {
          audioPreviewBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.AudioFile, com.spotify.metadata.Metadata.AudioFile.Builder, com.spotify.metadata.Metadata.AudioFileOrBuilder>(
                  audioPreview_,
                  ((bitField0_ & 0x00004000) != 0),
                  getParentForChildren(),
                  isClean());
          audioPreview_ = null;
        }
        return audioPreviewBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.Restriction> restriction_ =
        java.util.Collections.emptyList();
      private void ensureRestrictionIsMutable() {
        if (!((bitField0_ & 0x00008000) != 0)) {
          restriction_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Restriction>(restriction_);
          bitField0_ |= 0x00008000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Restriction, com.spotify.metadata.Metadata.Restriction.Builder, com.spotify.metadata.Metadata.RestrictionOrBuilder> restrictionBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Restriction> getRestrictionList() {
        if (restrictionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(restriction_);
        } else {
          return restrictionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
       */
      public int getRestrictionCount() {
        if (restrictionBuilder_ == null) {
          return restriction_.size();
        } else {
          return restrictionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
       */
      public com.spotify.metadata.Metadata.Restriction getRestriction(int index) {
        if (restrictionBuilder_ == null) {
          return restriction_.get(index);
        } else {
          return restrictionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
       */
      public Builder setRestriction(
          int index, com.spotify.metadata.Metadata.Restriction value) {
        if (restrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRestrictionIsMutable();
          restriction_.set(index, value);
          onChanged();
        } else {
          restrictionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
       */
      public Builder setRestriction(
          int index, com.spotify.metadata.Metadata.Restriction.Builder builderForValue) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.set(index, builderForValue.build());
          onChanged();
        } else {
          restrictionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
       */
      public Builder addRestriction(com.spotify.metadata.Metadata.Restriction value) {
        if (restrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRestrictionIsMutable();
          restriction_.add(value);
          onChanged();
        } else {
          restrictionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
       */
      public Builder addRestriction(
          int index, com.spotify.metadata.Metadata.Restriction value) {
        if (restrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRestrictionIsMutable();
          restriction_.add(index, value);
          onChanged();
        } else {
          restrictionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
       */
      public Builder addRestriction(
          com.spotify.metadata.Metadata.Restriction.Builder builderForValue) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.add(builderForValue.build());
          onChanged();
        } else {
          restrictionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
       */
      public Builder addRestriction(
          int index, com.spotify.metadata.Metadata.Restriction.Builder builderForValue) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.add(index, builderForValue.build());
          onChanged();
        } else {
          restrictionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
       */
      public Builder addAllRestriction(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Restriction> values) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, restriction_);
          onChanged();
        } else {
          restrictionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
       */
      public Builder clearRestriction() {
        if (restrictionBuilder_ == null) {
          restriction_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00008000);
          onChanged();
        } else {
          restrictionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
       */
      public Builder removeRestriction(int index) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.remove(index);
          onChanged();
        } else {
          restrictionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
       */
      public com.spotify.metadata.Metadata.Restriction.Builder getRestrictionBuilder(
          int index) {
        return getRestrictionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
       */
      public com.spotify.metadata.Metadata.RestrictionOrBuilder getRestrictionOrBuilder(
          int index) {
        if (restrictionBuilder_ == null) {
          return restriction_.get(index);  } else {
          return restrictionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.RestrictionOrBuilder> 
           getRestrictionOrBuilderList() {
        if (restrictionBuilder_ != null) {
          return restrictionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(restriction_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
       */
      public com.spotify.metadata.Metadata.Restriction.Builder addRestrictionBuilder() {
        return getRestrictionFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Restriction.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
       */
      public com.spotify.metadata.Metadata.Restriction.Builder addRestrictionBuilder(
          int index) {
        return getRestrictionFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Restriction.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 75;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Restriction.Builder> 
           getRestrictionBuilderList() {
        return getRestrictionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Restriction, com.spotify.metadata.Metadata.Restriction.Builder, com.spotify.metadata.Metadata.RestrictionOrBuilder> 
          getRestrictionFieldBuilder() {
        if (restrictionBuilder_ == null) {
          restrictionBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Restriction, com.spotify.metadata.Metadata.Restriction.Builder, com.spotify.metadata.Metadata.RestrictionOrBuilder>(
                  restriction_,
                  ((bitField0_ & 0x00008000) != 0),
                  getParentForChildren(),
                  isClean());
          restriction_ = null;
        }
        return restrictionBuilder_;
      }

      private com.spotify.metadata.Metadata.ImageGroup freezeFrame_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.ImageGroup, com.spotify.metadata.Metadata.ImageGroup.Builder, com.spotify.metadata.Metadata.ImageGroupOrBuilder> freezeFrameBuilder_;
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup freeze_frame = 76;</code>
       * @return Whether the freezeFrame field is set.
       */
      public boolean hasFreezeFrame() {
        return ((bitField0_ & 0x00010000) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup freeze_frame = 76;</code>
       * @return The freezeFrame.
       */
      public com.spotify.metadata.Metadata.ImageGroup getFreezeFrame() {
        if (freezeFrameBuilder_ == null) {
          return freezeFrame_ == null ? com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : freezeFrame_;
        } else {
          return freezeFrameBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup freeze_frame = 76;</code>
       */
      public Builder setFreezeFrame(com.spotify.metadata.Metadata.ImageGroup value) {
        if (freezeFrameBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          freezeFrame_ = value;
          onChanged();
        } else {
          freezeFrameBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup freeze_frame = 76;</code>
       */
      public Builder setFreezeFrame(
          com.spotify.metadata.Metadata.ImageGroup.Builder builderForValue) {
        if (freezeFrameBuilder_ == null) {
          freezeFrame_ = builderForValue.build();
          onChanged();
        } else {
          freezeFrameBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup freeze_frame = 76;</code>
       */
      public Builder mergeFreezeFrame(com.spotify.metadata.Metadata.ImageGroup value) {
        if (freezeFrameBuilder_ == null) {
          if (((bitField0_ & 0x00010000) != 0) &&
              freezeFrame_ != null &&
              freezeFrame_ != com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance()) {
            freezeFrame_ =
              com.spotify.metadata.Metadata.ImageGroup.newBuilder(freezeFrame_).mergeFrom(value).buildPartial();
          } else {
            freezeFrame_ = value;
          }
          onChanged();
        } else {
          freezeFrameBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup freeze_frame = 76;</code>
       */
      public Builder clearFreezeFrame() {
        if (freezeFrameBuilder_ == null) {
          freezeFrame_ = null;
          onChanged();
        } else {
          freezeFrameBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00010000);
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup freeze_frame = 76;</code>
       */
      public com.spotify.metadata.Metadata.ImageGroup.Builder getFreezeFrameBuilder() {
        bitField0_ |= 0x00010000;
        onChanged();
        return getFreezeFrameFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup freeze_frame = 76;</code>
       */
      public com.spotify.metadata.Metadata.ImageGroupOrBuilder getFreezeFrameOrBuilder() {
        if (freezeFrameBuilder_ != null) {
          return freezeFrameBuilder_.getMessageOrBuilder();
        } else {
          return freezeFrame_ == null ?
              com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance() : freezeFrame_;
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.ImageGroup freeze_frame = 76;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.ImageGroup, com.spotify.metadata.Metadata.ImageGroup.Builder, com.spotify.metadata.Metadata.ImageGroupOrBuilder> 
          getFreezeFrameFieldBuilder() {
        if (freezeFrameBuilder_ == null) {
          freezeFrameBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.metadata.Metadata.ImageGroup, com.spotify.metadata.Metadata.ImageGroup.Builder, com.spotify.metadata.Metadata.ImageGroupOrBuilder>(
                  getFreezeFrame(),
                  getParentForChildren(),
                  isClean());
          freezeFrame_ = null;
        }
        return freezeFrameBuilder_;
      }

      private com.google.protobuf.LazyStringList keyword_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureKeywordIsMutable() {
        if (!((bitField0_ & 0x00020000) != 0)) {
          keyword_ = new com.google.protobuf.LazyStringArrayList(keyword_);
          bitField0_ |= 0x00020000;
         }
      }
      /**
       * <code>repeated string keyword = 77;</code>
       * @return A list containing the keyword.
       */
      public com.google.protobuf.ProtocolStringList
          getKeywordList() {
        return keyword_.getUnmodifiableView();
      }
      /**
       * <code>repeated string keyword = 77;</code>
       * @return The count of keyword.
       */
      public int getKeywordCount() {
        return keyword_.size();
      }
      /**
       * <code>repeated string keyword = 77;</code>
       * @param index The index of the element to return.
       * @return The keyword at the given index.
       */
      public java.lang.String getKeyword(int index) {
        return keyword_.get(index);
      }
      /**
       * <code>repeated string keyword = 77;</code>
       * @param index The index of the value to return.
       * @return The bytes of the keyword at the given index.
       */
      public com.google.protobuf.ByteString
          getKeywordBytes(int index) {
        return keyword_.getByteString(index);
      }
      /**
       * <code>repeated string keyword = 77;</code>
       * @param index The index to set the value at.
       * @param value The keyword to set.
       * @return This builder for chaining.
       */
      public Builder setKeyword(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureKeywordIsMutable();
        keyword_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string keyword = 77;</code>
       * @param value The keyword to add.
       * @return This builder for chaining.
       */
      public Builder addKeyword(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureKeywordIsMutable();
        keyword_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string keyword = 77;</code>
       * @param values The keyword to add.
       * @return This builder for chaining.
       */
      public Builder addAllKeyword(
          java.lang.Iterable<java.lang.String> values) {
        ensureKeywordIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, keyword_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string keyword = 77;</code>
       * @return This builder for chaining.
       */
      public Builder clearKeyword() {
        keyword_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00020000);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string keyword = 77;</code>
       * @param value The bytes of the keyword to add.
       * @return This builder for chaining.
       */
      public Builder addKeywordBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureKeywordIsMutable();
        keyword_.add(value);
        onChanged();
        return this;
      }

      private boolean allowBackgroundPlayback_ ;
      /**
       * <code>optional bool allow_background_playback = 81;</code>
       * @return Whether the allowBackgroundPlayback field is set.
       */
      public boolean hasAllowBackgroundPlayback() {
        return ((bitField0_ & 0x00040000) != 0);
      }
      /**
       * <code>optional bool allow_background_playback = 81;</code>
       * @return The allowBackgroundPlayback.
       */
      public boolean getAllowBackgroundPlayback() {
        return allowBackgroundPlayback_;
      }
      /**
       * <code>optional bool allow_background_playback = 81;</code>
       * @param value The allowBackgroundPlayback to set.
       * @return This builder for chaining.
       */
      public Builder setAllowBackgroundPlayback(boolean value) {
        bitField0_ |= 0x00040000;
        allowBackgroundPlayback_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool allow_background_playback = 81;</code>
       * @return This builder for chaining.
       */
      public Builder clearAllowBackgroundPlayback() {
        bitField0_ = (bitField0_ & ~0x00040000);
        allowBackgroundPlayback_ = false;
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.metadata.Metadata.Availability> availability_ =
        java.util.Collections.emptyList();
      private void ensureAvailabilityIsMutable() {
        if (!((bitField0_ & 0x00080000) != 0)) {
          availability_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Availability>(availability_);
          bitField0_ |= 0x00080000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Availability, com.spotify.metadata.Metadata.Availability.Builder, com.spotify.metadata.Metadata.AvailabilityOrBuilder> availabilityBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Availability> getAvailabilityList() {
        if (availabilityBuilder_ == null) {
          return java.util.Collections.unmodifiableList(availability_);
        } else {
          return availabilityBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
       */
      public int getAvailabilityCount() {
        if (availabilityBuilder_ == null) {
          return availability_.size();
        } else {
          return availabilityBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
       */
      public com.spotify.metadata.Metadata.Availability getAvailability(int index) {
        if (availabilityBuilder_ == null) {
          return availability_.get(index);
        } else {
          return availabilityBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
       */
      public Builder setAvailability(
          int index, com.spotify.metadata.Metadata.Availability value) {
        if (availabilityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAvailabilityIsMutable();
          availability_.set(index, value);
          onChanged();
        } else {
          availabilityBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
       */
      public Builder setAvailability(
          int index, com.spotify.metadata.Metadata.Availability.Builder builderForValue) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.set(index, builderForValue.build());
          onChanged();
        } else {
          availabilityBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
       */
      public Builder addAvailability(com.spotify.metadata.Metadata.Availability value) {
        if (availabilityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAvailabilityIsMutable();
          availability_.add(value);
          onChanged();
        } else {
          availabilityBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
       */
      public Builder addAvailability(
          int index, com.spotify.metadata.Metadata.Availability value) {
        if (availabilityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAvailabilityIsMutable();
          availability_.add(index, value);
          onChanged();
        } else {
          availabilityBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
       */
      public Builder addAvailability(
          com.spotify.metadata.Metadata.Availability.Builder builderForValue) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.add(builderForValue.build());
          onChanged();
        } else {
          availabilityBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
       */
      public Builder addAvailability(
          int index, com.spotify.metadata.Metadata.Availability.Builder builderForValue) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.add(index, builderForValue.build());
          onChanged();
        } else {
          availabilityBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
       */
      public Builder addAllAvailability(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Availability> values) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, availability_);
          onChanged();
        } else {
          availabilityBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
       */
      public Builder clearAvailability() {
        if (availabilityBuilder_ == null) {
          availability_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00080000);
          onChanged();
        } else {
          availabilityBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
       */
      public Builder removeAvailability(int index) {
        if (availabilityBuilder_ == null) {
          ensureAvailabilityIsMutable();
          availability_.remove(index);
          onChanged();
        } else {
          availabilityBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
       */
      public com.spotify.metadata.Metadata.Availability.Builder getAvailabilityBuilder(
          int index) {
        return getAvailabilityFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
       */
      public com.spotify.metadata.Metadata.AvailabilityOrBuilder getAvailabilityOrBuilder(
          int index) {
        if (availabilityBuilder_ == null) {
          return availability_.get(index);  } else {
          return availabilityBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
           getAvailabilityOrBuilderList() {
        if (availabilityBuilder_ != null) {
          return availabilityBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(availability_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
       */
      public com.spotify.metadata.Metadata.Availability.Builder addAvailabilityBuilder() {
        return getAvailabilityFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Availability.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
       */
      public com.spotify.metadata.Metadata.Availability.Builder addAvailabilityBuilder(
          int index) {
        return getAvailabilityFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Availability.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Availability availability = 82;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Availability.Builder> 
           getAvailabilityBuilderList() {
        return getAvailabilityFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Availability, com.spotify.metadata.Metadata.Availability.Builder, com.spotify.metadata.Metadata.AvailabilityOrBuilder> 
          getAvailabilityFieldBuilder() {
        if (availabilityBuilder_ == null) {
          availabilityBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Availability, com.spotify.metadata.Metadata.Availability.Builder, com.spotify.metadata.Metadata.AvailabilityOrBuilder>(
                  availability_,
                  ((bitField0_ & 0x00080000) != 0),
                  getParentForChildren(),
                  isClean());
          availability_ = null;
        }
        return availabilityBuilder_;
      }

      private java.lang.Object externalUrl_ = "";
      /**
       * <code>optional string external_url = 83;</code>
       * @return Whether the externalUrl field is set.
       */
      public boolean hasExternalUrl() {
        return ((bitField0_ & 0x00100000) != 0);
      }
      /**
       * <code>optional string external_url = 83;</code>
       * @return The externalUrl.
       */
      public java.lang.String getExternalUrl() {
        java.lang.Object ref = externalUrl_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            externalUrl_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string external_url = 83;</code>
       * @return The bytes for externalUrl.
       */
      public com.google.protobuf.ByteString
          getExternalUrlBytes() {
        java.lang.Object ref = externalUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          externalUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string external_url = 83;</code>
       * @param value The externalUrl to set.
       * @return This builder for chaining.
       */
      public Builder setExternalUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00100000;
        externalUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string external_url = 83;</code>
       * @return This builder for chaining.
       */
      public Builder clearExternalUrl() {
        bitField0_ = (bitField0_ & ~0x00100000);
        externalUrl_ = getDefaultInstance().getExternalUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string external_url = 83;</code>
       * @param value The bytes for externalUrl to set.
       * @return This builder for chaining.
       */
      public Builder setExternalUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00100000;
        externalUrl_ = value;
        onChanged();
        return this;
      }

      private int type_ = 0;
      /**
       * <code>optional .spotify.metadata.proto.Episode.EpisodeType type = 87;</code>
       * @return Whether the type field is set.
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00200000) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.Episode.EpisodeType type = 87;</code>
       * @return The type.
       */
      public com.spotify.metadata.Metadata.Episode.EpisodeType getType() {
        @SuppressWarnings("deprecation")
        com.spotify.metadata.Metadata.Episode.EpisodeType result = com.spotify.metadata.Metadata.Episode.EpisodeType.valueOf(type_);
        return result == null ? com.spotify.metadata.Metadata.Episode.EpisodeType.FULL : result;
      }
      /**
       * <code>optional .spotify.metadata.proto.Episode.EpisodeType type = 87;</code>
       * @param value The type to set.
       * @return This builder for chaining.
       */
      public Builder setType(com.spotify.metadata.Metadata.Episode.EpisodeType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00200000;
        type_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Episode.EpisodeType type = 87;</code>
       * @return This builder for chaining.
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00200000);
        type_ = 0;
        onChanged();
        return this;
      }
      @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:spotify.metadata.proto.Episode)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.Episode)
    private static final com.spotify.metadata.Metadata.Episode DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.Episode();
    }

    public static com.spotify.metadata.Metadata.Episode getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Episode>
        PARSER = new com.google.protobuf.AbstractParser<Episode>() {
      @java.lang.Override
      public Episode 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.Episode getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface LicensorOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.Licensor)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional bytes uuid = 1;</code>
     * @return Whether the uuid field is set.
     */
    boolean hasUuid();
    /**
     * <code>optional bytes uuid = 1;</code>
     * @return The uuid.
     */
    com.google.protobuf.ByteString getUuid();
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.Licensor}
   */
  public  static final class Licensor extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.Licensor)
      LicensorOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Licensor.newBuilder() to construct.
    private Licensor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Licensor() {
      uuid_ = com.google.protobuf.ByteString.EMPTY;
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Licensor_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Licensor_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.Licensor.class, com.spotify.metadata.Metadata.Licensor.Builder.class);
    }

    private int bitField0_;
    public static final int UUID_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString uuid_;
    /**
     * <code>optional bytes uuid = 1;</code>
     * @return Whether the uuid field is set.
     */
    public boolean hasUuid() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional bytes uuid = 1;</code>
     * @return The uuid.
     */
    public com.google.protobuf.ByteString getUuid() {
      return uuid_;
    }

    public static com.spotify.metadata.Metadata.Licensor parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Licensor parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Licensor parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Licensor parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Licensor parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Licensor parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Licensor parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Licensor 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.spotify.metadata.Metadata.Licensor parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Licensor 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.spotify.metadata.Metadata.Licensor parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Licensor 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.spotify.metadata.Metadata.Licensor 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.Licensor}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.Licensor)
        com.spotify.metadata.Metadata.LicensorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Licensor_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Licensor_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.Licensor.class, com.spotify.metadata.Metadata.Licensor.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.Licensor.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        uuid_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Licensor_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Licensor getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.Licensor.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Licensor build() {
        com.spotify.metadata.Metadata.Licensor result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Licensor buildPartial() {
        com.spotify.metadata.Metadata.Licensor result = new com.spotify.metadata.Metadata.Licensor(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.uuid_ = uuid_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private com.google.protobuf.ByteString uuid_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes uuid = 1;</code>
       * @return Whether the uuid field is set.
       */
      public boolean hasUuid() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional bytes uuid = 1;</code>
       * @return The uuid.
       */
      public com.google.protobuf.ByteString getUuid() {
        return uuid_;
      }
      /**
       * <code>optional bytes uuid = 1;</code>
       * @param value The uuid to set.
       * @return This builder for chaining.
       */
      public Builder setUuid(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        uuid_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes uuid = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearUuid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        uuid_ = getDefaultInstance().getUuid();
        onChanged();
        return this;
      }
      @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:spotify.metadata.proto.Licensor)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.Licensor)
    private static final com.spotify.metadata.Metadata.Licensor DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.Licensor();
    }

    public static com.spotify.metadata.Metadata.Licensor getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Licensor>
        PARSER = new com.google.protobuf.AbstractParser<Licensor>() {
      @java.lang.Override
      public Licensor 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.Licensor getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface TopTracksOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.TopTracks)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string country = 1;</code>
     * @return Whether the country field is set.
     */
    boolean hasCountry();
    /**
     * <code>optional string country = 1;</code>
     * @return The country.
     */
    java.lang.String getCountry();
    /**
     * <code>optional string country = 1;</code>
     * @return The bytes for country.
     */
    com.google.protobuf.ByteString
        getCountryBytes();

    /**
     * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Track> 
        getTrackList();
    /**
     * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
     */
    com.spotify.metadata.Metadata.Track getTrack(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
     */
    int getTrackCount();
    /**
     * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.TrackOrBuilder> 
        getTrackOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
     */
    com.spotify.metadata.Metadata.TrackOrBuilder getTrackOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.TopTracks}
   */
  public  static final class TopTracks extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.TopTracks)
      TopTracksOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use TopTracks.newBuilder() to construct.
    private TopTracks(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private TopTracks() {
      country_ = "";
      track_ = java.util.Collections.emptyList();
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_TopTracks_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_TopTracks_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.TopTracks.class, com.spotify.metadata.Metadata.TopTracks.Builder.class);
    }

    private int bitField0_;
    public static final int COUNTRY_FIELD_NUMBER = 1;
    private volatile java.lang.Object country_;
    /**
     * <code>optional string country = 1;</code>
     * @return Whether the country field is set.
     */
    public boolean hasCountry() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional string country = 1;</code>
     * @return The country.
     */
    public java.lang.String getCountry() {
      java.lang.Object ref = country_;
      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();
        if (bs.isValidUtf8()) {
          country_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string country = 1;</code>
     * @return The bytes for country.
     */
    public com.google.protobuf.ByteString
        getCountryBytes() {
      java.lang.Object ref = country_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        country_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TRACK_FIELD_NUMBER = 2;
    private java.util.List<com.spotify.metadata.Metadata.Track> track_;
    /**
     * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Track> getTrackList() {
      return track_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.TrackOrBuilder> 
        getTrackOrBuilderList() {
      return track_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
     */
    public int getTrackCount() {
      return track_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
     */
    public com.spotify.metadata.Metadata.Track getTrack(int index) {
      return track_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
     */
    public com.spotify.metadata.Metadata.TrackOrBuilder getTrackOrBuilder(
        int index) {
      return track_.get(index);
    }

    public static com.spotify.metadata.Metadata.TopTracks parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.TopTracks parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.TopTracks parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.TopTracks parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.TopTracks parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.TopTracks parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.TopTracks parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.TopTracks 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.spotify.metadata.Metadata.TopTracks parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.TopTracks 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.spotify.metadata.Metadata.TopTracks parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.TopTracks 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.spotify.metadata.Metadata.TopTracks 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.TopTracks}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.TopTracks)
        com.spotify.metadata.Metadata.TopTracksOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_TopTracks_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_TopTracks_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.TopTracks.class, com.spotify.metadata.Metadata.TopTracks.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.TopTracks.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getTrackFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        country_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        if (trackBuilder_ == null) {
          track_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          trackBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_TopTracks_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.TopTracks getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.TopTracks.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.TopTracks build() {
        com.spotify.metadata.Metadata.TopTracks result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.TopTracks buildPartial() {
        com.spotify.metadata.Metadata.TopTracks result = new com.spotify.metadata.Metadata.TopTracks(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.country_ = country_;
        if (trackBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0)) {
            track_ = java.util.Collections.unmodifiableList(track_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.track_ = track_;
        } else {
          result.track_ = trackBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private java.lang.Object country_ = "";
      /**
       * <code>optional string country = 1;</code>
       * @return Whether the country field is set.
       */
      public boolean hasCountry() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional string country = 1;</code>
       * @return The country.
       */
      public java.lang.String getCountry() {
        java.lang.Object ref = country_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            country_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string country = 1;</code>
       * @return The bytes for country.
       */
      public com.google.protobuf.ByteString
          getCountryBytes() {
        java.lang.Object ref = country_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          country_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string country = 1;</code>
       * @param value The country to set.
       * @return This builder for chaining.
       */
      public Builder setCountry(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        country_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string country = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearCountry() {
        bitField0_ = (bitField0_ & ~0x00000001);
        country_ = getDefaultInstance().getCountry();
        onChanged();
        return this;
      }
      /**
       * <code>optional string country = 1;</code>
       * @param value The bytes for country to set.
       * @return This builder for chaining.
       */
      public Builder setCountryBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        country_ = value;
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.metadata.Metadata.Track> track_ =
        java.util.Collections.emptyList();
      private void ensureTrackIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          track_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Track>(track_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Track, com.spotify.metadata.Metadata.Track.Builder, com.spotify.metadata.Metadata.TrackOrBuilder> trackBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Track> getTrackList() {
        if (trackBuilder_ == null) {
          return java.util.Collections.unmodifiableList(track_);
        } else {
          return trackBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
       */
      public int getTrackCount() {
        if (trackBuilder_ == null) {
          return track_.size();
        } else {
          return trackBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
       */
      public com.spotify.metadata.Metadata.Track getTrack(int index) {
        if (trackBuilder_ == null) {
          return track_.get(index);
        } else {
          return trackBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
       */
      public Builder setTrack(
          int index, com.spotify.metadata.Metadata.Track value) {
        if (trackBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTrackIsMutable();
          track_.set(index, value);
          onChanged();
        } else {
          trackBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
       */
      public Builder setTrack(
          int index, com.spotify.metadata.Metadata.Track.Builder builderForValue) {
        if (trackBuilder_ == null) {
          ensureTrackIsMutable();
          track_.set(index, builderForValue.build());
          onChanged();
        } else {
          trackBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
       */
      public Builder addTrack(com.spotify.metadata.Metadata.Track value) {
        if (trackBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTrackIsMutable();
          track_.add(value);
          onChanged();
        } else {
          trackBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
       */
      public Builder addTrack(
          int index, com.spotify.metadata.Metadata.Track value) {
        if (trackBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTrackIsMutable();
          track_.add(index, value);
          onChanged();
        } else {
          trackBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
       */
      public Builder addTrack(
          com.spotify.metadata.Metadata.Track.Builder builderForValue) {
        if (trackBuilder_ == null) {
          ensureTrackIsMutable();
          track_.add(builderForValue.build());
          onChanged();
        } else {
          trackBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
       */
      public Builder addTrack(
          int index, com.spotify.metadata.Metadata.Track.Builder builderForValue) {
        if (trackBuilder_ == null) {
          ensureTrackIsMutable();
          track_.add(index, builderForValue.build());
          onChanged();
        } else {
          trackBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
       */
      public Builder addAllTrack(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Track> values) {
        if (trackBuilder_ == null) {
          ensureTrackIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, track_);
          onChanged();
        } else {
          trackBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
       */
      public Builder clearTrack() {
        if (trackBuilder_ == null) {
          track_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          trackBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
       */
      public Builder removeTrack(int index) {
        if (trackBuilder_ == null) {
          ensureTrackIsMutable();
          track_.remove(index);
          onChanged();
        } else {
          trackBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
       */
      public com.spotify.metadata.Metadata.Track.Builder getTrackBuilder(
          int index) {
        return getTrackFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
       */
      public com.spotify.metadata.Metadata.TrackOrBuilder getTrackOrBuilder(
          int index) {
        if (trackBuilder_ == null) {
          return track_.get(index);  } else {
          return trackBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.TrackOrBuilder> 
           getTrackOrBuilderList() {
        if (trackBuilder_ != null) {
          return trackBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(track_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
       */
      public com.spotify.metadata.Metadata.Track.Builder addTrackBuilder() {
        return getTrackFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Track.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
       */
      public com.spotify.metadata.Metadata.Track.Builder addTrackBuilder(
          int index) {
        return getTrackFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Track.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 2;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Track.Builder> 
           getTrackBuilderList() {
        return getTrackFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Track, com.spotify.metadata.Metadata.Track.Builder, com.spotify.metadata.Metadata.TrackOrBuilder> 
          getTrackFieldBuilder() {
        if (trackBuilder_ == null) {
          trackBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Track, com.spotify.metadata.Metadata.Track.Builder, com.spotify.metadata.Metadata.TrackOrBuilder>(
                  track_,
                  ((bitField0_ & 0x00000002) != 0),
                  getParentForChildren(),
                  isClean());
          track_ = null;
        }
        return trackBuilder_;
      }
      @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:spotify.metadata.proto.TopTracks)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.TopTracks)
    private static final com.spotify.metadata.Metadata.TopTracks DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.TopTracks();
    }

    public static com.spotify.metadata.Metadata.TopTracks getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<TopTracks>
        PARSER = new com.google.protobuf.AbstractParser<TopTracks>() {
      @java.lang.Override
      public TopTracks 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.TopTracks getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ActivityPeriodOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.ActivityPeriod)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional sint32 start_year = 1;</code>
     * @return Whether the startYear field is set.
     */
    boolean hasStartYear();
    /**
     * <code>optional sint32 start_year = 1;</code>
     * @return The startYear.
     */
    int getStartYear();

    /**
     * <code>optional sint32 end_year = 2;</code>
     * @return Whether the endYear field is set.
     */
    boolean hasEndYear();
    /**
     * <code>optional sint32 end_year = 2;</code>
     * @return The endYear.
     */
    int getEndYear();

    /**
     * <code>optional sint32 decade = 3;</code>
     * @return Whether the decade field is set.
     */
    boolean hasDecade();
    /**
     * <code>optional sint32 decade = 3;</code>
     * @return The decade.
     */
    int getDecade();
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.ActivityPeriod}
   */
  public  static final class ActivityPeriod extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.ActivityPeriod)
      ActivityPeriodOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ActivityPeriod.newBuilder() to construct.
    private ActivityPeriod(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ActivityPeriod() {
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_ActivityPeriod_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_ActivityPeriod_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.ActivityPeriod.class, com.spotify.metadata.Metadata.ActivityPeriod.Builder.class);
    }

    private int bitField0_;
    public static final int START_YEAR_FIELD_NUMBER = 1;
    private int startYear_;
    /**
     * <code>optional sint32 start_year = 1;</code>
     * @return Whether the startYear field is set.
     */
    public boolean hasStartYear() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional sint32 start_year = 1;</code>
     * @return The startYear.
     */
    public int getStartYear() {
      return startYear_;
    }

    public static final int END_YEAR_FIELD_NUMBER = 2;
    private int endYear_;
    /**
     * <code>optional sint32 end_year = 2;</code>
     * @return Whether the endYear field is set.
     */
    public boolean hasEndYear() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional sint32 end_year = 2;</code>
     * @return The endYear.
     */
    public int getEndYear() {
      return endYear_;
    }

    public static final int DECADE_FIELD_NUMBER = 3;
    private int decade_;
    /**
     * <code>optional sint32 decade = 3;</code>
     * @return Whether the decade field is set.
     */
    public boolean hasDecade() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional sint32 decade = 3;</code>
     * @return The decade.
     */
    public int getDecade() {
      return decade_;
    }

    public static com.spotify.metadata.Metadata.ActivityPeriod parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.ActivityPeriod parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.ActivityPeriod parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.ActivityPeriod parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.ActivityPeriod parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.ActivityPeriod parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.ActivityPeriod parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.ActivityPeriod 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.spotify.metadata.Metadata.ActivityPeriod parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.ActivityPeriod 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.spotify.metadata.Metadata.ActivityPeriod parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.ActivityPeriod 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.spotify.metadata.Metadata.ActivityPeriod 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.ActivityPeriod}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.ActivityPeriod)
        com.spotify.metadata.Metadata.ActivityPeriodOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_ActivityPeriod_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_ActivityPeriod_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.ActivityPeriod.class, com.spotify.metadata.Metadata.ActivityPeriod.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.ActivityPeriod.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        startYear_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        endYear_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        decade_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_ActivityPeriod_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.ActivityPeriod getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.ActivityPeriod.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.ActivityPeriod build() {
        com.spotify.metadata.Metadata.ActivityPeriod result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.ActivityPeriod buildPartial() {
        com.spotify.metadata.Metadata.ActivityPeriod result = new com.spotify.metadata.Metadata.ActivityPeriod(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.startYear_ = startYear_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.endYear_ = endYear_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.decade_ = decade_;
          to_bitField0_ |= 0x00000004;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private int startYear_ ;
      /**
       * <code>optional sint32 start_year = 1;</code>
       * @return Whether the startYear field is set.
       */
      public boolean hasStartYear() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional sint32 start_year = 1;</code>
       * @return The startYear.
       */
      public int getStartYear() {
        return startYear_;
      }
      /**
       * <code>optional sint32 start_year = 1;</code>
       * @param value The startYear to set.
       * @return This builder for chaining.
       */
      public Builder setStartYear(int value) {
        bitField0_ |= 0x00000001;
        startYear_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 start_year = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearStartYear() {
        bitField0_ = (bitField0_ & ~0x00000001);
        startYear_ = 0;
        onChanged();
        return this;
      }

      private int endYear_ ;
      /**
       * <code>optional sint32 end_year = 2;</code>
       * @return Whether the endYear field is set.
       */
      public boolean hasEndYear() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional sint32 end_year = 2;</code>
       * @return The endYear.
       */
      public int getEndYear() {
        return endYear_;
      }
      /**
       * <code>optional sint32 end_year = 2;</code>
       * @param value The endYear to set.
       * @return This builder for chaining.
       */
      public Builder setEndYear(int value) {
        bitField0_ |= 0x00000002;
        endYear_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 end_year = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearEndYear() {
        bitField0_ = (bitField0_ & ~0x00000002);
        endYear_ = 0;
        onChanged();
        return this;
      }

      private int decade_ ;
      /**
       * <code>optional sint32 decade = 3;</code>
       * @return Whether the decade field is set.
       */
      public boolean hasDecade() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional sint32 decade = 3;</code>
       * @return The decade.
       */
      public int getDecade() {
        return decade_;
      }
      /**
       * <code>optional sint32 decade = 3;</code>
       * @param value The decade to set.
       * @return This builder for chaining.
       */
      public Builder setDecade(int value) {
        bitField0_ |= 0x00000004;
        decade_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 decade = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearDecade() {
        bitField0_ = (bitField0_ & ~0x00000004);
        decade_ = 0;
        onChanged();
        return this;
      }
      @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:spotify.metadata.proto.ActivityPeriod)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.ActivityPeriod)
    private static final com.spotify.metadata.Metadata.ActivityPeriod DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.ActivityPeriod();
    }

    public static com.spotify.metadata.Metadata.ActivityPeriod getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<ActivityPeriod>
        PARSER = new com.google.protobuf.AbstractParser<ActivityPeriod>() {
      @java.lang.Override
      public ActivityPeriod 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.ActivityPeriod getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AlbumGroupOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.AlbumGroup)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Album> 
        getAlbumList();
    /**
     * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
     */
    com.spotify.metadata.Metadata.Album getAlbum(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
     */
    int getAlbumCount();
    /**
     * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.AlbumOrBuilder> 
        getAlbumOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
     */
    com.spotify.metadata.Metadata.AlbumOrBuilder getAlbumOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.AlbumGroup}
   */
  public  static final class AlbumGroup extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.AlbumGroup)
      AlbumGroupOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AlbumGroup.newBuilder() to construct.
    private AlbumGroup(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AlbumGroup() {
      album_ = java.util.Collections.emptyList();
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_AlbumGroup_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_AlbumGroup_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.AlbumGroup.class, com.spotify.metadata.Metadata.AlbumGroup.Builder.class);
    }

    public static final int ALBUM_FIELD_NUMBER = 1;
    private java.util.List<com.spotify.metadata.Metadata.Album> album_;
    /**
     * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Album> getAlbumList() {
      return album_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.AlbumOrBuilder> 
        getAlbumOrBuilderList() {
      return album_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
     */
    public int getAlbumCount() {
      return album_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
     */
    public com.spotify.metadata.Metadata.Album getAlbum(int index) {
      return album_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
     */
    public com.spotify.metadata.Metadata.AlbumOrBuilder getAlbumOrBuilder(
        int index) {
      return album_.get(index);
    }

    public static com.spotify.metadata.Metadata.AlbumGroup parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.AlbumGroup parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.AlbumGroup parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.AlbumGroup parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.AlbumGroup parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.AlbumGroup parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.AlbumGroup parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.AlbumGroup 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.spotify.metadata.Metadata.AlbumGroup parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.AlbumGroup 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.spotify.metadata.Metadata.AlbumGroup parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.AlbumGroup 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.spotify.metadata.Metadata.AlbumGroup 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.AlbumGroup}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.AlbumGroup)
        com.spotify.metadata.Metadata.AlbumGroupOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_AlbumGroup_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_AlbumGroup_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.AlbumGroup.class, com.spotify.metadata.Metadata.AlbumGroup.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.AlbumGroup.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getAlbumFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (albumBuilder_ == null) {
          album_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          albumBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_AlbumGroup_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.AlbumGroup getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.AlbumGroup.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.AlbumGroup build() {
        com.spotify.metadata.Metadata.AlbumGroup result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.AlbumGroup buildPartial() {
        com.spotify.metadata.Metadata.AlbumGroup result = new com.spotify.metadata.Metadata.AlbumGroup(this);
        int from_bitField0_ = bitField0_;
        if (albumBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            album_ = java.util.Collections.unmodifiableList(album_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.album_ = album_;
        } else {
          result.album_ = albumBuilder_.build();
        }
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private java.util.List<com.spotify.metadata.Metadata.Album> album_ =
        java.util.Collections.emptyList();
      private void ensureAlbumIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          album_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Album>(album_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Album, com.spotify.metadata.Metadata.Album.Builder, com.spotify.metadata.Metadata.AlbumOrBuilder> albumBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Album> getAlbumList() {
        if (albumBuilder_ == null) {
          return java.util.Collections.unmodifiableList(album_);
        } else {
          return albumBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
       */
      public int getAlbumCount() {
        if (albumBuilder_ == null) {
          return album_.size();
        } else {
          return albumBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
       */
      public com.spotify.metadata.Metadata.Album getAlbum(int index) {
        if (albumBuilder_ == null) {
          return album_.get(index);
        } else {
          return albumBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
       */
      public Builder setAlbum(
          int index, com.spotify.metadata.Metadata.Album value) {
        if (albumBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAlbumIsMutable();
          album_.set(index, value);
          onChanged();
        } else {
          albumBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
       */
      public Builder setAlbum(
          int index, com.spotify.metadata.Metadata.Album.Builder builderForValue) {
        if (albumBuilder_ == null) {
          ensureAlbumIsMutable();
          album_.set(index, builderForValue.build());
          onChanged();
        } else {
          albumBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
       */
      public Builder addAlbum(com.spotify.metadata.Metadata.Album value) {
        if (albumBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAlbumIsMutable();
          album_.add(value);
          onChanged();
        } else {
          albumBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
       */
      public Builder addAlbum(
          int index, com.spotify.metadata.Metadata.Album value) {
        if (albumBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAlbumIsMutable();
          album_.add(index, value);
          onChanged();
        } else {
          albumBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
       */
      public Builder addAlbum(
          com.spotify.metadata.Metadata.Album.Builder builderForValue) {
        if (albumBuilder_ == null) {
          ensureAlbumIsMutable();
          album_.add(builderForValue.build());
          onChanged();
        } else {
          albumBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
       */
      public Builder addAlbum(
          int index, com.spotify.metadata.Metadata.Album.Builder builderForValue) {
        if (albumBuilder_ == null) {
          ensureAlbumIsMutable();
          album_.add(index, builderForValue.build());
          onChanged();
        } else {
          albumBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
       */
      public Builder addAllAlbum(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Album> values) {
        if (albumBuilder_ == null) {
          ensureAlbumIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, album_);
          onChanged();
        } else {
          albumBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
       */
      public Builder clearAlbum() {
        if (albumBuilder_ == null) {
          album_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          albumBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
       */
      public Builder removeAlbum(int index) {
        if (albumBuilder_ == null) {
          ensureAlbumIsMutable();
          album_.remove(index);
          onChanged();
        } else {
          albumBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
       */
      public com.spotify.metadata.Metadata.Album.Builder getAlbumBuilder(
          int index) {
        return getAlbumFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
       */
      public com.spotify.metadata.Metadata.AlbumOrBuilder getAlbumOrBuilder(
          int index) {
        if (albumBuilder_ == null) {
          return album_.get(index);  } else {
          return albumBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.AlbumOrBuilder> 
           getAlbumOrBuilderList() {
        if (albumBuilder_ != null) {
          return albumBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(album_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
       */
      public com.spotify.metadata.Metadata.Album.Builder addAlbumBuilder() {
        return getAlbumFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Album.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
       */
      public com.spotify.metadata.Metadata.Album.Builder addAlbumBuilder(
          int index) {
        return getAlbumFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Album.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Album album = 1;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Album.Builder> 
           getAlbumBuilderList() {
        return getAlbumFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Album, com.spotify.metadata.Metadata.Album.Builder, com.spotify.metadata.Metadata.AlbumOrBuilder> 
          getAlbumFieldBuilder() {
        if (albumBuilder_ == null) {
          albumBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Album, com.spotify.metadata.Metadata.Album.Builder, com.spotify.metadata.Metadata.AlbumOrBuilder>(
                  album_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          album_ = null;
        }
        return albumBuilder_;
      }
      @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:spotify.metadata.proto.AlbumGroup)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.AlbumGroup)
    private static final com.spotify.metadata.Metadata.AlbumGroup DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.AlbumGroup();
    }

    public static com.spotify.metadata.Metadata.AlbumGroup getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<AlbumGroup>
        PARSER = new com.google.protobuf.AbstractParser<AlbumGroup>() {
      @java.lang.Override
      public AlbumGroup 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.AlbumGroup getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DateOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.Date)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional sint32 year = 1;</code>
     * @return Whether the year field is set.
     */
    boolean hasYear();
    /**
     * <code>optional sint32 year = 1;</code>
     * @return The year.
     */
    int getYear();

    /**
     * <code>optional sint32 month = 2;</code>
     * @return Whether the month field is set.
     */
    boolean hasMonth();
    /**
     * <code>optional sint32 month = 2;</code>
     * @return The month.
     */
    int getMonth();

    /**
     * <code>optional sint32 day = 3;</code>
     * @return Whether the day field is set.
     */
    boolean hasDay();
    /**
     * <code>optional sint32 day = 3;</code>
     * @return The day.
     */
    int getDay();

    /**
     * <code>optional sint32 hour = 4;</code>
     * @return Whether the hour field is set.
     */
    boolean hasHour();
    /**
     * <code>optional sint32 hour = 4;</code>
     * @return The hour.
     */
    int getHour();

    /**
     * <code>optional sint32 minute = 5;</code>
     * @return Whether the minute field is set.
     */
    boolean hasMinute();
    /**
     * <code>optional sint32 minute = 5;</code>
     * @return The minute.
     */
    int getMinute();
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.Date}
   */
  public  static final class Date extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.Date)
      DateOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Date.newBuilder() to construct.
    private Date(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Date() {
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Date_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Date_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.Date.class, com.spotify.metadata.Metadata.Date.Builder.class);
    }

    private int bitField0_;
    public static final int YEAR_FIELD_NUMBER = 1;
    private int year_;
    /**
     * <code>optional sint32 year = 1;</code>
     * @return Whether the year field is set.
     */
    public boolean hasYear() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional sint32 year = 1;</code>
     * @return The year.
     */
    public int getYear() {
      return year_;
    }

    public static final int MONTH_FIELD_NUMBER = 2;
    private int month_;
    /**
     * <code>optional sint32 month = 2;</code>
     * @return Whether the month field is set.
     */
    public boolean hasMonth() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional sint32 month = 2;</code>
     * @return The month.
     */
    public int getMonth() {
      return month_;
    }

    public static final int DAY_FIELD_NUMBER = 3;
    private int day_;
    /**
     * <code>optional sint32 day = 3;</code>
     * @return Whether the day field is set.
     */
    public boolean hasDay() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional sint32 day = 3;</code>
     * @return The day.
     */
    public int getDay() {
      return day_;
    }

    public static final int HOUR_FIELD_NUMBER = 4;
    private int hour_;
    /**
     * <code>optional sint32 hour = 4;</code>
     * @return Whether the hour field is set.
     */
    public boolean hasHour() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional sint32 hour = 4;</code>
     * @return The hour.
     */
    public int getHour() {
      return hour_;
    }

    public static final int MINUTE_FIELD_NUMBER = 5;
    private int minute_;
    /**
     * <code>optional sint32 minute = 5;</code>
     * @return Whether the minute field is set.
     */
    public boolean hasMinute() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional sint32 minute = 5;</code>
     * @return The minute.
     */
    public int getMinute() {
      return minute_;
    }

    public static com.spotify.metadata.Metadata.Date parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Date parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Date parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Date parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Date parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Date parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Date parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Date 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.spotify.metadata.Metadata.Date parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Date 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.spotify.metadata.Metadata.Date parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Date 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.spotify.metadata.Metadata.Date 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.Date}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.Date)
        com.spotify.metadata.Metadata.DateOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Date_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Date_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.Date.class, com.spotify.metadata.Metadata.Date.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.Date.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        year_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        month_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        day_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        hour_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        minute_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Date_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Date getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.Date.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Date build() {
        com.spotify.metadata.Metadata.Date result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Date buildPartial() {
        com.spotify.metadata.Metadata.Date result = new com.spotify.metadata.Metadata.Date(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.year_ = year_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.month_ = month_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.day_ = day_;
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.hour_ = hour_;
          to_bitField0_ |= 0x00000008;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          result.minute_ = minute_;
          to_bitField0_ |= 0x00000010;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private int year_ ;
      /**
       * <code>optional sint32 year = 1;</code>
       * @return Whether the year field is set.
       */
      public boolean hasYear() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional sint32 year = 1;</code>
       * @return The year.
       */
      public int getYear() {
        return year_;
      }
      /**
       * <code>optional sint32 year = 1;</code>
       * @param value The year to set.
       * @return This builder for chaining.
       */
      public Builder setYear(int value) {
        bitField0_ |= 0x00000001;
        year_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 year = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearYear() {
        bitField0_ = (bitField0_ & ~0x00000001);
        year_ = 0;
        onChanged();
        return this;
      }

      private int month_ ;
      /**
       * <code>optional sint32 month = 2;</code>
       * @return Whether the month field is set.
       */
      public boolean hasMonth() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional sint32 month = 2;</code>
       * @return The month.
       */
      public int getMonth() {
        return month_;
      }
      /**
       * <code>optional sint32 month = 2;</code>
       * @param value The month to set.
       * @return This builder for chaining.
       */
      public Builder setMonth(int value) {
        bitField0_ |= 0x00000002;
        month_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 month = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearMonth() {
        bitField0_ = (bitField0_ & ~0x00000002);
        month_ = 0;
        onChanged();
        return this;
      }

      private int day_ ;
      /**
       * <code>optional sint32 day = 3;</code>
       * @return Whether the day field is set.
       */
      public boolean hasDay() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional sint32 day = 3;</code>
       * @return The day.
       */
      public int getDay() {
        return day_;
      }
      /**
       * <code>optional sint32 day = 3;</code>
       * @param value The day to set.
       * @return This builder for chaining.
       */
      public Builder setDay(int value) {
        bitField0_ |= 0x00000004;
        day_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 day = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearDay() {
        bitField0_ = (bitField0_ & ~0x00000004);
        day_ = 0;
        onChanged();
        return this;
      }

      private int hour_ ;
      /**
       * <code>optional sint32 hour = 4;</code>
       * @return Whether the hour field is set.
       */
      public boolean hasHour() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional sint32 hour = 4;</code>
       * @return The hour.
       */
      public int getHour() {
        return hour_;
      }
      /**
       * <code>optional sint32 hour = 4;</code>
       * @param value The hour to set.
       * @return This builder for chaining.
       */
      public Builder setHour(int value) {
        bitField0_ |= 0x00000008;
        hour_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 hour = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearHour() {
        bitField0_ = (bitField0_ & ~0x00000008);
        hour_ = 0;
        onChanged();
        return this;
      }

      private int minute_ ;
      /**
       * <code>optional sint32 minute = 5;</code>
       * @return Whether the minute field is set.
       */
      public boolean hasMinute() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>optional sint32 minute = 5;</code>
       * @return The minute.
       */
      public int getMinute() {
        return minute_;
      }
      /**
       * <code>optional sint32 minute = 5;</code>
       * @param value The minute to set.
       * @return This builder for chaining.
       */
      public Builder setMinute(int value) {
        bitField0_ |= 0x00000010;
        minute_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 minute = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearMinute() {
        bitField0_ = (bitField0_ & ~0x00000010);
        minute_ = 0;
        onChanged();
        return this;
      }
      @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:spotify.metadata.proto.Date)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.Date)
    private static final com.spotify.metadata.Metadata.Date DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.Date();
    }

    public static com.spotify.metadata.Metadata.Date getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Date>
        PARSER = new com.google.protobuf.AbstractParser<Date>() {
      @java.lang.Override
      public Date 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.Date getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ImageOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.Image)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional bytes file_id = 1;</code>
     * @return Whether the fileId field is set.
     */
    boolean hasFileId();
    /**
     * <code>optional bytes file_id = 1;</code>
     * @return The fileId.
     */
    com.google.protobuf.ByteString getFileId();

    /**
     * <code>optional .spotify.metadata.proto.Image.Size size = 2;</code>
     * @return Whether the size field is set.
     */
    boolean hasSize();
    /**
     * <code>optional .spotify.metadata.proto.Image.Size size = 2;</code>
     * @return The size.
     */
    com.spotify.metadata.Metadata.Image.Size getSize();

    /**
     * <code>optional sint32 width = 3;</code>
     * @return Whether the width field is set.
     */
    boolean hasWidth();
    /**
     * <code>optional sint32 width = 3;</code>
     * @return The width.
     */
    int getWidth();

    /**
     * <code>optional sint32 height = 4;</code>
     * @return Whether the height field is set.
     */
    boolean hasHeight();
    /**
     * <code>optional sint32 height = 4;</code>
     * @return The height.
     */
    int getHeight();
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.Image}
   */
  public  static final class Image extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.Image)
      ImageOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Image.newBuilder() to construct.
    private Image(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Image() {
      fileId_ = com.google.protobuf.ByteString.EMPTY;
      size_ = 0;
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Image_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Image_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.Image.class, com.spotify.metadata.Metadata.Image.Builder.class);
    }

    /**
     * Protobuf enum {@code spotify.metadata.proto.Image.Size}
     */
    public enum Size
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>DEFAULT = 0;</code>
       */
      DEFAULT(0),
      /**
       * <code>SMALL = 1;</code>
       */
      SMALL(1),
      /**
       * <code>LARGE = 2;</code>
       */
      LARGE(2),
      /**
       * <code>XLARGE = 3;</code>
       */
      XLARGE(3),
      ;

      /**
       * <code>DEFAULT = 0;</code>
       */
      public static final int DEFAULT_VALUE = 0;
      /**
       * <code>SMALL = 1;</code>
       */
      public static final int SMALL_VALUE = 1;
      /**
       * <code>LARGE = 2;</code>
       */
      public static final int LARGE_VALUE = 2;
      /**
       * <code>XLARGE = 3;</code>
       */
      public static final int XLARGE_VALUE = 3;


      public final int getNumber() {
        return value;
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static Size valueOf(int value) {
        return forNumber(value);
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static Size forNumber(int value) {
        switch (value) {
          case 0: return DEFAULT;
          case 1: return SMALL;
          case 2: return LARGE;
          case 3: return XLARGE;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<Size>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static final com.google.protobuf.Internal.EnumLiteMap<
          Size> internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Size>() {
              public Size findValueByNumber(int number) {
                return Size.forNumber(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.Image.getDescriptor().getEnumTypes().get(0);
      }

      private static final Size[] VALUES = values();

      public static Size valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

      private Size(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:spotify.metadata.proto.Image.Size)
    }

    private int bitField0_;
    public static final int FILE_ID_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString fileId_;
    /**
     * <code>optional bytes file_id = 1;</code>
     * @return Whether the fileId field is set.
     */
    public boolean hasFileId() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional bytes file_id = 1;</code>
     * @return The fileId.
     */
    public com.google.protobuf.ByteString getFileId() {
      return fileId_;
    }

    public static final int SIZE_FIELD_NUMBER = 2;
    private int size_;
    /**
     * <code>optional .spotify.metadata.proto.Image.Size size = 2;</code>
     * @return Whether the size field is set.
     */
    public boolean hasSize() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.Image.Size size = 2;</code>
     * @return The size.
     */
    public com.spotify.metadata.Metadata.Image.Size getSize() {
      @SuppressWarnings("deprecation")
      com.spotify.metadata.Metadata.Image.Size result = com.spotify.metadata.Metadata.Image.Size.valueOf(size_);
      return result == null ? com.spotify.metadata.Metadata.Image.Size.DEFAULT : result;
    }

    public static final int WIDTH_FIELD_NUMBER = 3;
    private int width_;
    /**
     * <code>optional sint32 width = 3;</code>
     * @return Whether the width field is set.
     */
    public boolean hasWidth() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional sint32 width = 3;</code>
     * @return The width.
     */
    public int getWidth() {
      return width_;
    }

    public static final int HEIGHT_FIELD_NUMBER = 4;
    private int height_;
    /**
     * <code>optional sint32 height = 4;</code>
     * @return Whether the height field is set.
     */
    public boolean hasHeight() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional sint32 height = 4;</code>
     * @return The height.
     */
    public int getHeight() {
      return height_;
    }

    public static com.spotify.metadata.Metadata.Image parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Image parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Image parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Image parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Image parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Image parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Image parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Image 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.spotify.metadata.Metadata.Image parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Image 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.spotify.metadata.Metadata.Image parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Image 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.spotify.metadata.Metadata.Image 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.Image}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.Image)
        com.spotify.metadata.Metadata.ImageOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Image_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Image_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.Image.class, com.spotify.metadata.Metadata.Image.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.Image.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        fileId_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        size_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        width_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        height_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Image_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Image getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.Image.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Image build() {
        com.spotify.metadata.Metadata.Image result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Image buildPartial() {
        com.spotify.metadata.Metadata.Image result = new com.spotify.metadata.Metadata.Image(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.fileId_ = fileId_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.size_ = size_;
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.width_ = width_;
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.height_ = height_;
          to_bitField0_ |= 0x00000008;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private com.google.protobuf.ByteString fileId_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes file_id = 1;</code>
       * @return Whether the fileId field is set.
       */
      public boolean hasFileId() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional bytes file_id = 1;</code>
       * @return The fileId.
       */
      public com.google.protobuf.ByteString getFileId() {
        return fileId_;
      }
      /**
       * <code>optional bytes file_id = 1;</code>
       * @param value The fileId to set.
       * @return This builder for chaining.
       */
      public Builder setFileId(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        fileId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes file_id = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearFileId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        fileId_ = getDefaultInstance().getFileId();
        onChanged();
        return this;
      }

      private int size_ = 0;
      /**
       * <code>optional .spotify.metadata.proto.Image.Size size = 2;</code>
       * @return Whether the size field is set.
       */
      public boolean hasSize() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.Image.Size size = 2;</code>
       * @return The size.
       */
      public com.spotify.metadata.Metadata.Image.Size getSize() {
        @SuppressWarnings("deprecation")
        com.spotify.metadata.Metadata.Image.Size result = com.spotify.metadata.Metadata.Image.Size.valueOf(size_);
        return result == null ? com.spotify.metadata.Metadata.Image.Size.DEFAULT : result;
      }
      /**
       * <code>optional .spotify.metadata.proto.Image.Size size = 2;</code>
       * @param value The size to set.
       * @return This builder for chaining.
       */
      public Builder setSize(com.spotify.metadata.Metadata.Image.Size value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        size_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Image.Size size = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearSize() {
        bitField0_ = (bitField0_ & ~0x00000002);
        size_ = 0;
        onChanged();
        return this;
      }

      private int width_ ;
      /**
       * <code>optional sint32 width = 3;</code>
       * @return Whether the width field is set.
       */
      public boolean hasWidth() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional sint32 width = 3;</code>
       * @return The width.
       */
      public int getWidth() {
        return width_;
      }
      /**
       * <code>optional sint32 width = 3;</code>
       * @param value The width to set.
       * @return This builder for chaining.
       */
      public Builder setWidth(int value) {
        bitField0_ |= 0x00000004;
        width_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 width = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearWidth() {
        bitField0_ = (bitField0_ & ~0x00000004);
        width_ = 0;
        onChanged();
        return this;
      }

      private int height_ ;
      /**
       * <code>optional sint32 height = 4;</code>
       * @return Whether the height field is set.
       */
      public boolean hasHeight() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional sint32 height = 4;</code>
       * @return The height.
       */
      public int getHeight() {
        return height_;
      }
      /**
       * <code>optional sint32 height = 4;</code>
       * @param value The height to set.
       * @return This builder for chaining.
       */
      public Builder setHeight(int value) {
        bitField0_ |= 0x00000008;
        height_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 height = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearHeight() {
        bitField0_ = (bitField0_ & ~0x00000008);
        height_ = 0;
        onChanged();
        return this;
      }
      @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:spotify.metadata.proto.Image)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.Image)
    private static final com.spotify.metadata.Metadata.Image DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.Image();
    }

    public static com.spotify.metadata.Metadata.Image getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Image>
        PARSER = new com.google.protobuf.AbstractParser<Image>() {
      @java.lang.Override
      public Image 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.Image getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ImageGroupOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.ImageGroup)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Image> 
        getImageList();
    /**
     * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
     */
    com.spotify.metadata.Metadata.Image getImage(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
     */
    int getImageCount();
    /**
     * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.ImageOrBuilder> 
        getImageOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
     */
    com.spotify.metadata.Metadata.ImageOrBuilder getImageOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.ImageGroup}
   */
  public  static final class ImageGroup extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.ImageGroup)
      ImageGroupOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ImageGroup.newBuilder() to construct.
    private ImageGroup(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ImageGroup() {
      image_ = java.util.Collections.emptyList();
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_ImageGroup_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_ImageGroup_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.ImageGroup.class, com.spotify.metadata.Metadata.ImageGroup.Builder.class);
    }

    public static final int IMAGE_FIELD_NUMBER = 1;
    private java.util.List<com.spotify.metadata.Metadata.Image> image_;
    /**
     * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Image> getImageList() {
      return image_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.ImageOrBuilder> 
        getImageOrBuilderList() {
      return image_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
     */
    public int getImageCount() {
      return image_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
     */
    public com.spotify.metadata.Metadata.Image getImage(int index) {
      return image_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
     */
    public com.spotify.metadata.Metadata.ImageOrBuilder getImageOrBuilder(
        int index) {
      return image_.get(index);
    }

    public static com.spotify.metadata.Metadata.ImageGroup parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.ImageGroup parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.ImageGroup parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.ImageGroup parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.ImageGroup parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.ImageGroup parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.ImageGroup parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.ImageGroup 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.spotify.metadata.Metadata.ImageGroup parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.ImageGroup 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.spotify.metadata.Metadata.ImageGroup parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.ImageGroup 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.spotify.metadata.Metadata.ImageGroup 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.ImageGroup}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.ImageGroup)
        com.spotify.metadata.Metadata.ImageGroupOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_ImageGroup_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_ImageGroup_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.ImageGroup.class, com.spotify.metadata.Metadata.ImageGroup.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.ImageGroup.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getImageFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (imageBuilder_ == null) {
          image_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          imageBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_ImageGroup_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.ImageGroup getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.ImageGroup build() {
        com.spotify.metadata.Metadata.ImageGroup result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.ImageGroup buildPartial() {
        com.spotify.metadata.Metadata.ImageGroup result = new com.spotify.metadata.Metadata.ImageGroup(this);
        int from_bitField0_ = bitField0_;
        if (imageBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            image_ = java.util.Collections.unmodifiableList(image_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.image_ = image_;
        } else {
          result.image_ = imageBuilder_.build();
        }
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private java.util.List<com.spotify.metadata.Metadata.Image> image_ =
        java.util.Collections.emptyList();
      private void ensureImageIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          image_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Image>(image_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Image, com.spotify.metadata.Metadata.Image.Builder, com.spotify.metadata.Metadata.ImageOrBuilder> imageBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Image> getImageList() {
        if (imageBuilder_ == null) {
          return java.util.Collections.unmodifiableList(image_);
        } else {
          return imageBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
       */
      public int getImageCount() {
        if (imageBuilder_ == null) {
          return image_.size();
        } else {
          return imageBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
       */
      public com.spotify.metadata.Metadata.Image getImage(int index) {
        if (imageBuilder_ == null) {
          return image_.get(index);
        } else {
          return imageBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
       */
      public Builder setImage(
          int index, com.spotify.metadata.Metadata.Image value) {
        if (imageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureImageIsMutable();
          image_.set(index, value);
          onChanged();
        } else {
          imageBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
       */
      public Builder setImage(
          int index, com.spotify.metadata.Metadata.Image.Builder builderForValue) {
        if (imageBuilder_ == null) {
          ensureImageIsMutable();
          image_.set(index, builderForValue.build());
          onChanged();
        } else {
          imageBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
       */
      public Builder addImage(com.spotify.metadata.Metadata.Image value) {
        if (imageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureImageIsMutable();
          image_.add(value);
          onChanged();
        } else {
          imageBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
       */
      public Builder addImage(
          int index, com.spotify.metadata.Metadata.Image value) {
        if (imageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureImageIsMutable();
          image_.add(index, value);
          onChanged();
        } else {
          imageBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
       */
      public Builder addImage(
          com.spotify.metadata.Metadata.Image.Builder builderForValue) {
        if (imageBuilder_ == null) {
          ensureImageIsMutable();
          image_.add(builderForValue.build());
          onChanged();
        } else {
          imageBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
       */
      public Builder addImage(
          int index, com.spotify.metadata.Metadata.Image.Builder builderForValue) {
        if (imageBuilder_ == null) {
          ensureImageIsMutable();
          image_.add(index, builderForValue.build());
          onChanged();
        } else {
          imageBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
       */
      public Builder addAllImage(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Image> values) {
        if (imageBuilder_ == null) {
          ensureImageIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, image_);
          onChanged();
        } else {
          imageBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
       */
      public Builder clearImage() {
        if (imageBuilder_ == null) {
          image_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          imageBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
       */
      public Builder removeImage(int index) {
        if (imageBuilder_ == null) {
          ensureImageIsMutable();
          image_.remove(index);
          onChanged();
        } else {
          imageBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
       */
      public com.spotify.metadata.Metadata.Image.Builder getImageBuilder(
          int index) {
        return getImageFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
       */
      public com.spotify.metadata.Metadata.ImageOrBuilder getImageOrBuilder(
          int index) {
        if (imageBuilder_ == null) {
          return image_.get(index);  } else {
          return imageBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.ImageOrBuilder> 
           getImageOrBuilderList() {
        if (imageBuilder_ != null) {
          return imageBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(image_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
       */
      public com.spotify.metadata.Metadata.Image.Builder addImageBuilder() {
        return getImageFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Image.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
       */
      public com.spotify.metadata.Metadata.Image.Builder addImageBuilder(
          int index) {
        return getImageFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Image.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image image = 1;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Image.Builder> 
           getImageBuilderList() {
        return getImageFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Image, com.spotify.metadata.Metadata.Image.Builder, com.spotify.metadata.Metadata.ImageOrBuilder> 
          getImageFieldBuilder() {
        if (imageBuilder_ == null) {
          imageBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Image, com.spotify.metadata.Metadata.Image.Builder, com.spotify.metadata.Metadata.ImageOrBuilder>(
                  image_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          image_ = null;
        }
        return imageBuilder_;
      }
      @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:spotify.metadata.proto.ImageGroup)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.ImageGroup)
    private static final com.spotify.metadata.Metadata.ImageGroup DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.ImageGroup();
    }

    public static com.spotify.metadata.Metadata.ImageGroup getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<ImageGroup>
        PARSER = new com.google.protobuf.AbstractParser<ImageGroup>() {
      @java.lang.Override
      public ImageGroup 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.ImageGroup getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface BiographyOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.Biography)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string text = 1;</code>
     * @return Whether the text field is set.
     */
    boolean hasText();
    /**
     * <code>optional string text = 1;</code>
     * @return The text.
     */
    java.lang.String getText();
    /**
     * <code>optional string text = 1;</code>
     * @return The bytes for text.
     */
    com.google.protobuf.ByteString
        getTextBytes();

    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Image> 
        getPortraitList();
    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
     */
    com.spotify.metadata.Metadata.Image getPortrait(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
     */
    int getPortraitCount();
    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.ImageOrBuilder> 
        getPortraitOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
     */
    com.spotify.metadata.Metadata.ImageOrBuilder getPortraitOrBuilder(
        int index);

    /**
     * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.ImageGroup> 
        getPortraitGroupList();
    /**
     * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
     */
    com.spotify.metadata.Metadata.ImageGroup getPortraitGroup(int index);
    /**
     * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
     */
    int getPortraitGroupCount();
    /**
     * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.ImageGroupOrBuilder> 
        getPortraitGroupOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
     */
    com.spotify.metadata.Metadata.ImageGroupOrBuilder getPortraitGroupOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.Biography}
   */
  public  static final class Biography extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.Biography)
      BiographyOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Biography.newBuilder() to construct.
    private Biography(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Biography() {
      text_ = "";
      portrait_ = java.util.Collections.emptyList();
      portraitGroup_ = java.util.Collections.emptyList();
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Biography_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Biography_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.Biography.class, com.spotify.metadata.Metadata.Biography.Builder.class);
    }

    private int bitField0_;
    public static final int TEXT_FIELD_NUMBER = 1;
    private volatile java.lang.Object text_;
    /**
     * <code>optional string text = 1;</code>
     * @return Whether the text field is set.
     */
    public boolean hasText() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional string text = 1;</code>
     * @return The text.
     */
    public java.lang.String getText() {
      java.lang.Object ref = text_;
      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();
        if (bs.isValidUtf8()) {
          text_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string text = 1;</code>
     * @return The bytes for text.
     */
    public com.google.protobuf.ByteString
        getTextBytes() {
      java.lang.Object ref = text_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        text_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PORTRAIT_FIELD_NUMBER = 2;
    private java.util.List<com.spotify.metadata.Metadata.Image> portrait_;
    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Image> getPortraitList() {
      return portrait_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.ImageOrBuilder> 
        getPortraitOrBuilderList() {
      return portrait_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
     */
    public int getPortraitCount() {
      return portrait_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
     */
    public com.spotify.metadata.Metadata.Image getPortrait(int index) {
      return portrait_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
     */
    public com.spotify.metadata.Metadata.ImageOrBuilder getPortraitOrBuilder(
        int index) {
      return portrait_.get(index);
    }

    public static final int PORTRAIT_GROUP_FIELD_NUMBER = 3;
    private java.util.List<com.spotify.metadata.Metadata.ImageGroup> portraitGroup_;
    /**
     * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.ImageGroup> getPortraitGroupList() {
      return portraitGroup_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.ImageGroupOrBuilder> 
        getPortraitGroupOrBuilderList() {
      return portraitGroup_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
     */
    public int getPortraitGroupCount() {
      return portraitGroup_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
     */
    public com.spotify.metadata.Metadata.ImageGroup getPortraitGroup(int index) {
      return portraitGroup_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
     */
    public com.spotify.metadata.Metadata.ImageGroupOrBuilder getPortraitGroupOrBuilder(
        int index) {
      return portraitGroup_.get(index);
    }

    public static com.spotify.metadata.Metadata.Biography parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Biography parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Biography parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Biography parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Biography parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Biography parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Biography parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Biography 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.spotify.metadata.Metadata.Biography parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Biography 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.spotify.metadata.Metadata.Biography parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Biography 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.spotify.metadata.Metadata.Biography 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.Biography}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.Biography)
        com.spotify.metadata.Metadata.BiographyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Biography_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Biography_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.Biography.class, com.spotify.metadata.Metadata.Biography.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.Biography.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getPortraitFieldBuilder();
          getPortraitGroupFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        text_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        if (portraitBuilder_ == null) {
          portrait_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          portraitBuilder_.clear();
        }
        if (portraitGroupBuilder_ == null) {
          portraitGroup_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          portraitGroupBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Biography_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Biography getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.Biography.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Biography build() {
        com.spotify.metadata.Metadata.Biography result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Biography buildPartial() {
        com.spotify.metadata.Metadata.Biography result = new com.spotify.metadata.Metadata.Biography(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.text_ = text_;
        if (portraitBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0)) {
            portrait_ = java.util.Collections.unmodifiableList(portrait_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.portrait_ = portrait_;
        } else {
          result.portrait_ = portraitBuilder_.build();
        }
        if (portraitGroupBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0)) {
            portraitGroup_ = java.util.Collections.unmodifiableList(portraitGroup_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.portraitGroup_ = portraitGroup_;
        } else {
          result.portraitGroup_ = portraitGroupBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private java.lang.Object text_ = "";
      /**
       * <code>optional string text = 1;</code>
       * @return Whether the text field is set.
       */
      public boolean hasText() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional string text = 1;</code>
       * @return The text.
       */
      public java.lang.String getText() {
        java.lang.Object ref = text_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            text_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string text = 1;</code>
       * @return The bytes for text.
       */
      public com.google.protobuf.ByteString
          getTextBytes() {
        java.lang.Object ref = text_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          text_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string text = 1;</code>
       * @param value The text to set.
       * @return This builder for chaining.
       */
      public Builder setText(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        text_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string text = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearText() {
        bitField0_ = (bitField0_ & ~0x00000001);
        text_ = getDefaultInstance().getText();
        onChanged();
        return this;
      }
      /**
       * <code>optional string text = 1;</code>
       * @param value The bytes for text to set.
       * @return This builder for chaining.
       */
      public Builder setTextBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        text_ = value;
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.metadata.Metadata.Image> portrait_ =
        java.util.Collections.emptyList();
      private void ensurePortraitIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          portrait_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Image>(portrait_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Image, com.spotify.metadata.Metadata.Image.Builder, com.spotify.metadata.Metadata.ImageOrBuilder> portraitBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Image> getPortraitList() {
        if (portraitBuilder_ == null) {
          return java.util.Collections.unmodifiableList(portrait_);
        } else {
          return portraitBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
       */
      public int getPortraitCount() {
        if (portraitBuilder_ == null) {
          return portrait_.size();
        } else {
          return portraitBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
       */
      public com.spotify.metadata.Metadata.Image getPortrait(int index) {
        if (portraitBuilder_ == null) {
          return portrait_.get(index);
        } else {
          return portraitBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
       */
      public Builder setPortrait(
          int index, com.spotify.metadata.Metadata.Image value) {
        if (portraitBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePortraitIsMutable();
          portrait_.set(index, value);
          onChanged();
        } else {
          portraitBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
       */
      public Builder setPortrait(
          int index, com.spotify.metadata.Metadata.Image.Builder builderForValue) {
        if (portraitBuilder_ == null) {
          ensurePortraitIsMutable();
          portrait_.set(index, builderForValue.build());
          onChanged();
        } else {
          portraitBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
       */
      public Builder addPortrait(com.spotify.metadata.Metadata.Image value) {
        if (portraitBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePortraitIsMutable();
          portrait_.add(value);
          onChanged();
        } else {
          portraitBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
       */
      public Builder addPortrait(
          int index, com.spotify.metadata.Metadata.Image value) {
        if (portraitBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePortraitIsMutable();
          portrait_.add(index, value);
          onChanged();
        } else {
          portraitBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
       */
      public Builder addPortrait(
          com.spotify.metadata.Metadata.Image.Builder builderForValue) {
        if (portraitBuilder_ == null) {
          ensurePortraitIsMutable();
          portrait_.add(builderForValue.build());
          onChanged();
        } else {
          portraitBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
       */
      public Builder addPortrait(
          int index, com.spotify.metadata.Metadata.Image.Builder builderForValue) {
        if (portraitBuilder_ == null) {
          ensurePortraitIsMutable();
          portrait_.add(index, builderForValue.build());
          onChanged();
        } else {
          portraitBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
       */
      public Builder addAllPortrait(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Image> values) {
        if (portraitBuilder_ == null) {
          ensurePortraitIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, portrait_);
          onChanged();
        } else {
          portraitBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
       */
      public Builder clearPortrait() {
        if (portraitBuilder_ == null) {
          portrait_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          portraitBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
       */
      public Builder removePortrait(int index) {
        if (portraitBuilder_ == null) {
          ensurePortraitIsMutable();
          portrait_.remove(index);
          onChanged();
        } else {
          portraitBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
       */
      public com.spotify.metadata.Metadata.Image.Builder getPortraitBuilder(
          int index) {
        return getPortraitFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
       */
      public com.spotify.metadata.Metadata.ImageOrBuilder getPortraitOrBuilder(
          int index) {
        if (portraitBuilder_ == null) {
          return portrait_.get(index);  } else {
          return portraitBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.ImageOrBuilder> 
           getPortraitOrBuilderList() {
        if (portraitBuilder_ != null) {
          return portraitBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(portrait_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
       */
      public com.spotify.metadata.Metadata.Image.Builder addPortraitBuilder() {
        return getPortraitFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Image.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
       */
      public com.spotify.metadata.Metadata.Image.Builder addPortraitBuilder(
          int index) {
        return getPortraitFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Image.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Image portrait = 2;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Image.Builder> 
           getPortraitBuilderList() {
        return getPortraitFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Image, com.spotify.metadata.Metadata.Image.Builder, com.spotify.metadata.Metadata.ImageOrBuilder> 
          getPortraitFieldBuilder() {
        if (portraitBuilder_ == null) {
          portraitBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Image, com.spotify.metadata.Metadata.Image.Builder, com.spotify.metadata.Metadata.ImageOrBuilder>(
                  portrait_,
                  ((bitField0_ & 0x00000002) != 0),
                  getParentForChildren(),
                  isClean());
          portrait_ = null;
        }
        return portraitBuilder_;
      }

      private java.util.List<com.spotify.metadata.Metadata.ImageGroup> portraitGroup_ =
        java.util.Collections.emptyList();
      private void ensurePortraitGroupIsMutable() {
        if (!((bitField0_ & 0x00000004) != 0)) {
          portraitGroup_ = new java.util.ArrayList<com.spotify.metadata.Metadata.ImageGroup>(portraitGroup_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.ImageGroup, com.spotify.metadata.Metadata.ImageGroup.Builder, com.spotify.metadata.Metadata.ImageGroupOrBuilder> portraitGroupBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.ImageGroup> getPortraitGroupList() {
        if (portraitGroupBuilder_ == null) {
          return java.util.Collections.unmodifiableList(portraitGroup_);
        } else {
          return portraitGroupBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
       */
      public int getPortraitGroupCount() {
        if (portraitGroupBuilder_ == null) {
          return portraitGroup_.size();
        } else {
          return portraitGroupBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
       */
      public com.spotify.metadata.Metadata.ImageGroup getPortraitGroup(int index) {
        if (portraitGroupBuilder_ == null) {
          return portraitGroup_.get(index);
        } else {
          return portraitGroupBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
       */
      public Builder setPortraitGroup(
          int index, com.spotify.metadata.Metadata.ImageGroup value) {
        if (portraitGroupBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePortraitGroupIsMutable();
          portraitGroup_.set(index, value);
          onChanged();
        } else {
          portraitGroupBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
       */
      public Builder setPortraitGroup(
          int index, com.spotify.metadata.Metadata.ImageGroup.Builder builderForValue) {
        if (portraitGroupBuilder_ == null) {
          ensurePortraitGroupIsMutable();
          portraitGroup_.set(index, builderForValue.build());
          onChanged();
        } else {
          portraitGroupBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
       */
      public Builder addPortraitGroup(com.spotify.metadata.Metadata.ImageGroup value) {
        if (portraitGroupBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePortraitGroupIsMutable();
          portraitGroup_.add(value);
          onChanged();
        } else {
          portraitGroupBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
       */
      public Builder addPortraitGroup(
          int index, com.spotify.metadata.Metadata.ImageGroup value) {
        if (portraitGroupBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePortraitGroupIsMutable();
          portraitGroup_.add(index, value);
          onChanged();
        } else {
          portraitGroupBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
       */
      public Builder addPortraitGroup(
          com.spotify.metadata.Metadata.ImageGroup.Builder builderForValue) {
        if (portraitGroupBuilder_ == null) {
          ensurePortraitGroupIsMutable();
          portraitGroup_.add(builderForValue.build());
          onChanged();
        } else {
          portraitGroupBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
       */
      public Builder addPortraitGroup(
          int index, com.spotify.metadata.Metadata.ImageGroup.Builder builderForValue) {
        if (portraitGroupBuilder_ == null) {
          ensurePortraitGroupIsMutable();
          portraitGroup_.add(index, builderForValue.build());
          onChanged();
        } else {
          portraitGroupBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
       */
      public Builder addAllPortraitGroup(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.ImageGroup> values) {
        if (portraitGroupBuilder_ == null) {
          ensurePortraitGroupIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, portraitGroup_);
          onChanged();
        } else {
          portraitGroupBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
       */
      public Builder clearPortraitGroup() {
        if (portraitGroupBuilder_ == null) {
          portraitGroup_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          portraitGroupBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
       */
      public Builder removePortraitGroup(int index) {
        if (portraitGroupBuilder_ == null) {
          ensurePortraitGroupIsMutable();
          portraitGroup_.remove(index);
          onChanged();
        } else {
          portraitGroupBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
       */
      public com.spotify.metadata.Metadata.ImageGroup.Builder getPortraitGroupBuilder(
          int index) {
        return getPortraitGroupFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
       */
      public com.spotify.metadata.Metadata.ImageGroupOrBuilder getPortraitGroupOrBuilder(
          int index) {
        if (portraitGroupBuilder_ == null) {
          return portraitGroup_.get(index);  } else {
          return portraitGroupBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.ImageGroupOrBuilder> 
           getPortraitGroupOrBuilderList() {
        if (portraitGroupBuilder_ != null) {
          return portraitGroupBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(portraitGroup_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
       */
      public com.spotify.metadata.Metadata.ImageGroup.Builder addPortraitGroupBuilder() {
        return getPortraitGroupFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
       */
      public com.spotify.metadata.Metadata.ImageGroup.Builder addPortraitGroupBuilder(
          int index) {
        return getPortraitGroupFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.ImageGroup.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.ImageGroup portrait_group = 3;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.ImageGroup.Builder> 
           getPortraitGroupBuilderList() {
        return getPortraitGroupFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.ImageGroup, com.spotify.metadata.Metadata.ImageGroup.Builder, com.spotify.metadata.Metadata.ImageGroupOrBuilder> 
          getPortraitGroupFieldBuilder() {
        if (portraitGroupBuilder_ == null) {
          portraitGroupBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.ImageGroup, com.spotify.metadata.Metadata.ImageGroup.Builder, com.spotify.metadata.Metadata.ImageGroupOrBuilder>(
                  portraitGroup_,
                  ((bitField0_ & 0x00000004) != 0),
                  getParentForChildren(),
                  isClean());
          portraitGroup_ = null;
        }
        return portraitGroupBuilder_;
      }
      @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:spotify.metadata.proto.Biography)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.Biography)
    private static final com.spotify.metadata.Metadata.Biography DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.Biography();
    }

    public static com.spotify.metadata.Metadata.Biography getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Biography>
        PARSER = new com.google.protobuf.AbstractParser<Biography>() {
      @java.lang.Override
      public Biography 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.Biography getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DiscOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.Disc)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional sint32 number = 1;</code>
     * @return Whether the number field is set.
     */
    boolean hasNumber();
    /**
     * <code>optional sint32 number = 1;</code>
     * @return The number.
     */
    int getNumber();

    /**
     * <code>optional string name = 2;</code>
     * @return Whether the name field is set.
     */
    boolean hasName();
    /**
     * <code>optional string name = 2;</code>
     * @return The name.
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 2;</code>
     * @return The bytes for name.
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Track> 
        getTrackList();
    /**
     * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
     */
    com.spotify.metadata.Metadata.Track getTrack(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
     */
    int getTrackCount();
    /**
     * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.TrackOrBuilder> 
        getTrackOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
     */
    com.spotify.metadata.Metadata.TrackOrBuilder getTrackOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.Disc}
   */
  public  static final class Disc extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.Disc)
      DiscOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Disc.newBuilder() to construct.
    private Disc(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Disc() {
      name_ = "";
      track_ = java.util.Collections.emptyList();
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Disc_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Disc_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.Disc.class, com.spotify.metadata.Metadata.Disc.Builder.class);
    }

    private int bitField0_;
    public static final int NUMBER_FIELD_NUMBER = 1;
    private int number_;
    /**
     * <code>optional sint32 number = 1;</code>
     * @return Whether the number field is set.
     */
    public boolean hasNumber() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional sint32 number = 1;</code>
     * @return The number.
     */
    public int getNumber() {
      return number_;
    }

    public static final int NAME_FIELD_NUMBER = 2;
    private volatile java.lang.Object name_;
    /**
     * <code>optional string name = 2;</code>
     * @return Whether the name field is set.
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional string name = 2;</code>
     * @return The name.
     */
    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();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 2;</code>
     * @return The bytes for name.
     */
    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 TRACK_FIELD_NUMBER = 3;
    private java.util.List<com.spotify.metadata.Metadata.Track> track_;
    /**
     * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Track> getTrackList() {
      return track_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.TrackOrBuilder> 
        getTrackOrBuilderList() {
      return track_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
     */
    public int getTrackCount() {
      return track_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
     */
    public com.spotify.metadata.Metadata.Track getTrack(int index) {
      return track_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
     */
    public com.spotify.metadata.Metadata.TrackOrBuilder getTrackOrBuilder(
        int index) {
      return track_.get(index);
    }

    public static com.spotify.metadata.Metadata.Disc parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Disc parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Disc parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Disc parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Disc parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Disc parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Disc parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Disc 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.spotify.metadata.Metadata.Disc parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Disc 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.spotify.metadata.Metadata.Disc parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Disc 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.spotify.metadata.Metadata.Disc 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.Disc}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.Disc)
        com.spotify.metadata.Metadata.DiscOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Disc_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Disc_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.Disc.class, com.spotify.metadata.Metadata.Disc.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.Disc.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getTrackFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        number_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        if (trackBuilder_ == null) {
          track_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          trackBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Disc_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Disc getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.Disc.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Disc build() {
        com.spotify.metadata.Metadata.Disc result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Disc buildPartial() {
        com.spotify.metadata.Metadata.Disc result = new com.spotify.metadata.Metadata.Disc(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.number_ = number_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.name_ = name_;
        if (trackBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0)) {
            track_ = java.util.Collections.unmodifiableList(track_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.track_ = track_;
        } else {
          result.track_ = trackBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private int number_ ;
      /**
       * <code>optional sint32 number = 1;</code>
       * @return Whether the number field is set.
       */
      public boolean hasNumber() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional sint32 number = 1;</code>
       * @return The number.
       */
      public int getNumber() {
        return number_;
      }
      /**
       * <code>optional sint32 number = 1;</code>
       * @param value The number to set.
       * @return This builder for chaining.
       */
      public Builder setNumber(int value) {
        bitField0_ |= 0x00000001;
        number_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional sint32 number = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearNumber() {
        bitField0_ = (bitField0_ & ~0x00000001);
        number_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 2;</code>
       * @return Whether the name field is set.
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional string name = 2;</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();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 2;</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;
        }
      }
      /**
       * <code>optional string name = 2;</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();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000002);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 2;</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();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }

      private java.util.List<com.spotify.metadata.Metadata.Track> track_ =
        java.util.Collections.emptyList();
      private void ensureTrackIsMutable() {
        if (!((bitField0_ & 0x00000004) != 0)) {
          track_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Track>(track_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Track, com.spotify.metadata.Metadata.Track.Builder, com.spotify.metadata.Metadata.TrackOrBuilder> trackBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Track> getTrackList() {
        if (trackBuilder_ == null) {
          return java.util.Collections.unmodifiableList(track_);
        } else {
          return trackBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
       */
      public int getTrackCount() {
        if (trackBuilder_ == null) {
          return track_.size();
        } else {
          return trackBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
       */
      public com.spotify.metadata.Metadata.Track getTrack(int index) {
        if (trackBuilder_ == null) {
          return track_.get(index);
        } else {
          return trackBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
       */
      public Builder setTrack(
          int index, com.spotify.metadata.Metadata.Track value) {
        if (trackBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTrackIsMutable();
          track_.set(index, value);
          onChanged();
        } else {
          trackBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
       */
      public Builder setTrack(
          int index, com.spotify.metadata.Metadata.Track.Builder builderForValue) {
        if (trackBuilder_ == null) {
          ensureTrackIsMutable();
          track_.set(index, builderForValue.build());
          onChanged();
        } else {
          trackBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
       */
      public Builder addTrack(com.spotify.metadata.Metadata.Track value) {
        if (trackBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTrackIsMutable();
          track_.add(value);
          onChanged();
        } else {
          trackBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
       */
      public Builder addTrack(
          int index, com.spotify.metadata.Metadata.Track value) {
        if (trackBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTrackIsMutable();
          track_.add(index, value);
          onChanged();
        } else {
          trackBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
       */
      public Builder addTrack(
          com.spotify.metadata.Metadata.Track.Builder builderForValue) {
        if (trackBuilder_ == null) {
          ensureTrackIsMutable();
          track_.add(builderForValue.build());
          onChanged();
        } else {
          trackBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
       */
      public Builder addTrack(
          int index, com.spotify.metadata.Metadata.Track.Builder builderForValue) {
        if (trackBuilder_ == null) {
          ensureTrackIsMutable();
          track_.add(index, builderForValue.build());
          onChanged();
        } else {
          trackBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
       */
      public Builder addAllTrack(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Track> values) {
        if (trackBuilder_ == null) {
          ensureTrackIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, track_);
          onChanged();
        } else {
          trackBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
       */
      public Builder clearTrack() {
        if (trackBuilder_ == null) {
          track_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          trackBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
       */
      public Builder removeTrack(int index) {
        if (trackBuilder_ == null) {
          ensureTrackIsMutable();
          track_.remove(index);
          onChanged();
        } else {
          trackBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
       */
      public com.spotify.metadata.Metadata.Track.Builder getTrackBuilder(
          int index) {
        return getTrackFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
       */
      public com.spotify.metadata.Metadata.TrackOrBuilder getTrackOrBuilder(
          int index) {
        if (trackBuilder_ == null) {
          return track_.get(index);  } else {
          return trackBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.TrackOrBuilder> 
           getTrackOrBuilderList() {
        if (trackBuilder_ != null) {
          return trackBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(track_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
       */
      public com.spotify.metadata.Metadata.Track.Builder addTrackBuilder() {
        return getTrackFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Track.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
       */
      public com.spotify.metadata.Metadata.Track.Builder addTrackBuilder(
          int index) {
        return getTrackFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Track.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Track track = 3;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Track.Builder> 
           getTrackBuilderList() {
        return getTrackFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Track, com.spotify.metadata.Metadata.Track.Builder, com.spotify.metadata.Metadata.TrackOrBuilder> 
          getTrackFieldBuilder() {
        if (trackBuilder_ == null) {
          trackBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Track, com.spotify.metadata.Metadata.Track.Builder, com.spotify.metadata.Metadata.TrackOrBuilder>(
                  track_,
                  ((bitField0_ & 0x00000004) != 0),
                  getParentForChildren(),
                  isClean());
          track_ = null;
        }
        return trackBuilder_;
      }
      @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:spotify.metadata.proto.Disc)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.Disc)
    private static final com.spotify.metadata.Metadata.Disc DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.Disc();
    }

    public static com.spotify.metadata.Metadata.Disc getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Disc>
        PARSER = new com.google.protobuf.AbstractParser<Disc>() {
      @java.lang.Override
      public Disc 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.Disc getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CopyrightOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.Copyright)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .spotify.metadata.proto.Copyright.Type type = 1;</code>
     * @return Whether the type field is set.
     */
    boolean hasType();
    /**
     * <code>optional .spotify.metadata.proto.Copyright.Type type = 1;</code>
     * @return The type.
     */
    com.spotify.metadata.Metadata.Copyright.Type getType();

    /**
     * <code>optional string text = 2;</code>
     * @return Whether the text field is set.
     */
    boolean hasText();
    /**
     * <code>optional string text = 2;</code>
     * @return The text.
     */
    java.lang.String getText();
    /**
     * <code>optional string text = 2;</code>
     * @return The bytes for text.
     */
    com.google.protobuf.ByteString
        getTextBytes();
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.Copyright}
   */
  public  static final class Copyright extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.Copyright)
      CopyrightOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Copyright.newBuilder() to construct.
    private Copyright(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Copyright() {
      type_ = 0;
      text_ = "";
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Copyright_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Copyright_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.Copyright.class, com.spotify.metadata.Metadata.Copyright.Builder.class);
    }

    /**
     * Protobuf enum {@code spotify.metadata.proto.Copyright.Type}
     */
    public enum Type
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>P = 0;</code>
       */
      P(0),
      /**
       * <code>C = 1;</code>
       */
      C(1),
      ;

      /**
       * <code>P = 0;</code>
       */
      public static final int P_VALUE = 0;
      /**
       * <code>C = 1;</code>
       */
      public static final int C_VALUE = 1;


      public final int getNumber() {
        return value;
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static Type valueOf(int value) {
        return forNumber(value);
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static Type forNumber(int value) {
        switch (value) {
          case 0: return P;
          case 1: return C;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static final com.google.protobuf.Internal.EnumLiteMap<
          Type> internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Type>() {
              public Type findValueByNumber(int number) {
                return Type.forNumber(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.Copyright.getDescriptor().getEnumTypes().get(0);
      }

      private static final Type[] VALUES = values();

      public static Type valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

      private Type(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:spotify.metadata.proto.Copyright.Type)
    }

    private int bitField0_;
    public static final int TYPE_FIELD_NUMBER = 1;
    private int type_;
    /**
     * <code>optional .spotify.metadata.proto.Copyright.Type type = 1;</code>
     * @return Whether the type field is set.
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.Copyright.Type type = 1;</code>
     * @return The type.
     */
    public com.spotify.metadata.Metadata.Copyright.Type getType() {
      @SuppressWarnings("deprecation")
      com.spotify.metadata.Metadata.Copyright.Type result = com.spotify.metadata.Metadata.Copyright.Type.valueOf(type_);
      return result == null ? com.spotify.metadata.Metadata.Copyright.Type.P : result;
    }

    public static final int TEXT_FIELD_NUMBER = 2;
    private volatile java.lang.Object text_;
    /**
     * <code>optional string text = 2;</code>
     * @return Whether the text field is set.
     */
    public boolean hasText() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional string text = 2;</code>
     * @return The text.
     */
    public java.lang.String getText() {
      java.lang.Object ref = text_;
      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();
        if (bs.isValidUtf8()) {
          text_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string text = 2;</code>
     * @return The bytes for text.
     */
    public com.google.protobuf.ByteString
        getTextBytes() {
      java.lang.Object ref = text_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        text_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static com.spotify.metadata.Metadata.Copyright parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Copyright parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Copyright parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Copyright parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Copyright parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Copyright parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Copyright parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Copyright 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.spotify.metadata.Metadata.Copyright parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Copyright 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.spotify.metadata.Metadata.Copyright parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Copyright 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.spotify.metadata.Metadata.Copyright 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.Copyright}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.Copyright)
        com.spotify.metadata.Metadata.CopyrightOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Copyright_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Copyright_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.Copyright.class, com.spotify.metadata.Metadata.Copyright.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.Copyright.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        type_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        text_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Copyright_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Copyright getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.Copyright.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Copyright build() {
        com.spotify.metadata.Metadata.Copyright result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Copyright buildPartial() {
        com.spotify.metadata.Metadata.Copyright result = new com.spotify.metadata.Metadata.Copyright(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.text_ = text_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private int type_ = 0;
      /**
       * <code>optional .spotify.metadata.proto.Copyright.Type type = 1;</code>
       * @return Whether the type field is set.
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.Copyright.Type type = 1;</code>
       * @return The type.
       */
      public com.spotify.metadata.Metadata.Copyright.Type getType() {
        @SuppressWarnings("deprecation")
        com.spotify.metadata.Metadata.Copyright.Type result = com.spotify.metadata.Metadata.Copyright.Type.valueOf(type_);
        return result == null ? com.spotify.metadata.Metadata.Copyright.Type.P : result;
      }
      /**
       * <code>optional .spotify.metadata.proto.Copyright.Type type = 1;</code>
       * @param value The type to set.
       * @return This builder for chaining.
       */
      public Builder setType(com.spotify.metadata.Metadata.Copyright.Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        type_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Copyright.Type type = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object text_ = "";
      /**
       * <code>optional string text = 2;</code>
       * @return Whether the text field is set.
       */
      public boolean hasText() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional string text = 2;</code>
       * @return The text.
       */
      public java.lang.String getText() {
        java.lang.Object ref = text_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            text_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string text = 2;</code>
       * @return The bytes for text.
       */
      public com.google.protobuf.ByteString
          getTextBytes() {
        java.lang.Object ref = text_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          text_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string text = 2;</code>
       * @param value The text to set.
       * @return This builder for chaining.
       */
      public Builder setText(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        text_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string text = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearText() {
        bitField0_ = (bitField0_ & ~0x00000002);
        text_ = getDefaultInstance().getText();
        onChanged();
        return this;
      }
      /**
       * <code>optional string text = 2;</code>
       * @param value The bytes for text to set.
       * @return This builder for chaining.
       */
      public Builder setTextBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        text_ = value;
        onChanged();
        return this;
      }
      @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:spotify.metadata.proto.Copyright)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.Copyright)
    private static final com.spotify.metadata.Metadata.Copyright DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.Copyright();
    }

    public static com.spotify.metadata.Metadata.Copyright getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Copyright>
        PARSER = new com.google.protobuf.AbstractParser<Copyright>() {
      @java.lang.Override
      public Copyright 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.Copyright getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RestrictionOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.Restriction)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .spotify.metadata.proto.Restriction.Catalogue catalogue = 1;</code>
     * @return A list containing the catalogue.
     */
    java.util.List<com.spotify.metadata.Metadata.Restriction.Catalogue> getCatalogueList();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction.Catalogue catalogue = 1;</code>
     * @return The count of catalogue.
     */
    int getCatalogueCount();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction.Catalogue catalogue = 1;</code>
     * @param index The index of the element to return.
     * @return The catalogue at the given index.
     */
    com.spotify.metadata.Metadata.Restriction.Catalogue getCatalogue(int index);

    /**
     * <code>optional .spotify.metadata.proto.Restriction.Type type = 4;</code>
     * @return Whether the type field is set.
     */
    boolean hasType();
    /**
     * <code>optional .spotify.metadata.proto.Restriction.Type type = 4;</code>
     * @return The type.
     */
    com.spotify.metadata.Metadata.Restriction.Type getType();

    /**
     * <code>repeated string catalogue_str = 5;</code>
     * @return A list containing the catalogueStr.
     */
    java.util.List<java.lang.String>
        getCatalogueStrList();
    /**
     * <code>repeated string catalogue_str = 5;</code>
     * @return The count of catalogueStr.
     */
    int getCatalogueStrCount();
    /**
     * <code>repeated string catalogue_str = 5;</code>
     * @param index The index of the element to return.
     * @return The catalogueStr at the given index.
     */
    java.lang.String getCatalogueStr(int index);
    /**
     * <code>repeated string catalogue_str = 5;</code>
     * @param index The index of the value to return.
     * @return The bytes of the catalogueStr at the given index.
     */
    com.google.protobuf.ByteString
        getCatalogueStrBytes(int index);

    /**
     * <code>optional string countries_allowed = 2;</code>
     * @return Whether the countriesAllowed field is set.
     */
    boolean hasCountriesAllowed();
    /**
     * <code>optional string countries_allowed = 2;</code>
     * @return The countriesAllowed.
     */
    java.lang.String getCountriesAllowed();
    /**
     * <code>optional string countries_allowed = 2;</code>
     * @return The bytes for countriesAllowed.
     */
    com.google.protobuf.ByteString
        getCountriesAllowedBytes();

    /**
     * <code>optional string countries_forbidden = 3;</code>
     * @return Whether the countriesForbidden field is set.
     */
    boolean hasCountriesForbidden();
    /**
     * <code>optional string countries_forbidden = 3;</code>
     * @return The countriesForbidden.
     */
    java.lang.String getCountriesForbidden();
    /**
     * <code>optional string countries_forbidden = 3;</code>
     * @return The bytes for countriesForbidden.
     */
    com.google.protobuf.ByteString
        getCountriesForbiddenBytes();

    public com.spotify.metadata.Metadata.Restriction.CountryRestrictionCase getCountryRestrictionCase();
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.Restriction}
   */
  public  static final class Restriction extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.Restriction)
      RestrictionOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Restriction.newBuilder() to construct.
    private Restriction(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Restriction() {
      catalogue_ = java.util.Collections.emptyList();
      type_ = 0;
      catalogueStr_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Restriction_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Restriction_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.Restriction.class, com.spotify.metadata.Metadata.Restriction.Builder.class);
    }

    /**
     * Protobuf enum {@code spotify.metadata.proto.Restriction.Catalogue}
     */
    public enum Catalogue
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>AD = 0;</code>
       */
      AD(0),
      /**
       * <code>SUBSCRIPTION = 1;</code>
       */
      SUBSCRIPTION(1),
      /**
       * <code>CATALOGUE_ALL = 2;</code>
       */
      CATALOGUE_ALL(2),
      /**
       * <code>SHUFFLE = 3;</code>
       */
      SHUFFLE(3),
      /**
       * <code>COMMERCIAL = 4;</code>
       */
      COMMERCIAL(4),
      ;

      /**
       * <code>AD = 0;</code>
       */
      public static final int AD_VALUE = 0;
      /**
       * <code>SUBSCRIPTION = 1;</code>
       */
      public static final int SUBSCRIPTION_VALUE = 1;
      /**
       * <code>CATALOGUE_ALL = 2;</code>
       */
      public static final int CATALOGUE_ALL_VALUE = 2;
      /**
       * <code>SHUFFLE = 3;</code>
       */
      public static final int SHUFFLE_VALUE = 3;
      /**
       * <code>COMMERCIAL = 4;</code>
       */
      public static final int COMMERCIAL_VALUE = 4;


      public final int getNumber() {
        return value;
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static Catalogue valueOf(int value) {
        return forNumber(value);
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static Catalogue forNumber(int value) {
        switch (value) {
          case 0: return AD;
          case 1: return SUBSCRIPTION;
          case 2: return CATALOGUE_ALL;
          case 3: return SHUFFLE;
          case 4: return COMMERCIAL;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<Catalogue>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static final com.google.protobuf.Internal.EnumLiteMap<
          Catalogue> internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Catalogue>() {
              public Catalogue findValueByNumber(int number) {
                return Catalogue.forNumber(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.Restriction.getDescriptor().getEnumTypes().get(0);
      }

      private static final Catalogue[] VALUES = values();

      public static Catalogue valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

      private Catalogue(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:spotify.metadata.proto.Restriction.Catalogue)
    }

    /**
     * Protobuf enum {@code spotify.metadata.proto.Restriction.Type}
     */
    public enum Type
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>STREAMING = 0;</code>
       */
      STREAMING(0),
      ;

      /**
       * <code>STREAMING = 0;</code>
       */
      public static final int STREAMING_VALUE = 0;


      public final int getNumber() {
        return value;
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static Type valueOf(int value) {
        return forNumber(value);
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static Type forNumber(int value) {
        switch (value) {
          case 0: return STREAMING;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static final com.google.protobuf.Internal.EnumLiteMap<
          Type> internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Type>() {
              public Type findValueByNumber(int number) {
                return Type.forNumber(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.Restriction.getDescriptor().getEnumTypes().get(1);
      }

      private static final Type[] VALUES = values();

      public static Type valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

      private Type(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:spotify.metadata.proto.Restriction.Type)
    }

    private int bitField0_;
    private int countryRestrictionCase_ = 0;
    private java.lang.Object countryRestriction_;
    public enum CountryRestrictionCase
        implements com.google.protobuf.Internal.EnumLite,
            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
      COUNTRIES_ALLOWED(2),
      COUNTRIES_FORBIDDEN(3),
      COUNTRYRESTRICTION_NOT_SET(0);
      private final int value;
      private CountryRestrictionCase(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 CountryRestrictionCase valueOf(int value) {
        return forNumber(value);
      }

      public static CountryRestrictionCase forNumber(int value) {
        switch (value) {
          case 2: return COUNTRIES_ALLOWED;
          case 3: return COUNTRIES_FORBIDDEN;
          case 0: return COUNTRYRESTRICTION_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public CountryRestrictionCase
    getCountryRestrictionCase() {
      return CountryRestrictionCase.forNumber(
          countryRestrictionCase_);
    }

    public static final int CATALOGUE_FIELD_NUMBER = 1;
    private java.util.List<java.lang.Integer> catalogue_;
    private static final com.google.protobuf.Internal.ListAdapter.Converter<
        java.lang.Integer, com.spotify.metadata.Metadata.Restriction.Catalogue> catalogue_converter_ =
            new com.google.protobuf.Internal.ListAdapter.Converter<
                java.lang.Integer, com.spotify.metadata.Metadata.Restriction.Catalogue>() {
              public com.spotify.metadata.Metadata.Restriction.Catalogue convert(java.lang.Integer from) {
                @SuppressWarnings("deprecation")
                com.spotify.metadata.Metadata.Restriction.Catalogue result = com.spotify.metadata.Metadata.Restriction.Catalogue.valueOf(from);
                return result == null ? com.spotify.metadata.Metadata.Restriction.Catalogue.AD : result;
              }
            };
    /**
     * <code>repeated .spotify.metadata.proto.Restriction.Catalogue catalogue = 1;</code>
     * @return A list containing the catalogue.
     */
    public java.util.List<com.spotify.metadata.Metadata.Restriction.Catalogue> getCatalogueList() {
      return new com.google.protobuf.Internal.ListAdapter<
          java.lang.Integer, com.spotify.metadata.Metadata.Restriction.Catalogue>(catalogue_, catalogue_converter_);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction.Catalogue catalogue = 1;</code>
     * @return The count of catalogue.
     */
    public int getCatalogueCount() {
      return catalogue_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction.Catalogue catalogue = 1;</code>
     * @param index The index of the element to return.
     * @return The catalogue at the given index.
     */
    public com.spotify.metadata.Metadata.Restriction.Catalogue getCatalogue(int index) {
      return catalogue_converter_.convert(catalogue_.get(index));
    }

    public static final int TYPE_FIELD_NUMBER = 4;
    private int type_;
    /**
     * <code>optional .spotify.metadata.proto.Restriction.Type type = 4;</code>
     * @return Whether the type field is set.
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.Restriction.Type type = 4;</code>
     * @return The type.
     */
    public com.spotify.metadata.Metadata.Restriction.Type getType() {
      @SuppressWarnings("deprecation")
      com.spotify.metadata.Metadata.Restriction.Type result = com.spotify.metadata.Metadata.Restriction.Type.valueOf(type_);
      return result == null ? com.spotify.metadata.Metadata.Restriction.Type.STREAMING : result;
    }

    public static final int CATALOGUE_STR_FIELD_NUMBER = 5;
    private com.google.protobuf.LazyStringList catalogueStr_;
    /**
     * <code>repeated string catalogue_str = 5;</code>
     * @return A list containing the catalogueStr.
     */
    public com.google.protobuf.ProtocolStringList
        getCatalogueStrList() {
      return catalogueStr_;
    }
    /**
     * <code>repeated string catalogue_str = 5;</code>
     * @return The count of catalogueStr.
     */
    public int getCatalogueStrCount() {
      return catalogueStr_.size();
    }
    /**
     * <code>repeated string catalogue_str = 5;</code>
     * @param index The index of the element to return.
     * @return The catalogueStr at the given index.
     */
    public java.lang.String getCatalogueStr(int index) {
      return catalogueStr_.get(index);
    }
    /**
     * <code>repeated string catalogue_str = 5;</code>
     * @param index The index of the value to return.
     * @return The bytes of the catalogueStr at the given index.
     */
    public com.google.protobuf.ByteString
        getCatalogueStrBytes(int index) {
      return catalogueStr_.getByteString(index);
    }

    public static final int COUNTRIES_ALLOWED_FIELD_NUMBER = 2;
    /**
     * <code>optional string countries_allowed = 2;</code>
     * @return Whether the countriesAllowed field is set.
     */
    public boolean hasCountriesAllowed() {
      return countryRestrictionCase_ == 2;
    }
    /**
     * <code>optional string countries_allowed = 2;</code>
     * @return The countriesAllowed.
     */
    public java.lang.String getCountriesAllowed() {
      java.lang.Object ref = "";
      if (countryRestrictionCase_ == 2) {
        ref = countryRestriction_;
      }
      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();
        if (bs.isValidUtf8() && (countryRestrictionCase_ == 2)) {
          countryRestriction_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string countries_allowed = 2;</code>
     * @return The bytes for countriesAllowed.
     */
    public com.google.protobuf.ByteString
        getCountriesAllowedBytes() {
      java.lang.Object ref = "";
      if (countryRestrictionCase_ == 2) {
        ref = countryRestriction_;
      }
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        if (countryRestrictionCase_ == 2) {
          countryRestriction_ = b;
        }
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int COUNTRIES_FORBIDDEN_FIELD_NUMBER = 3;
    /**
     * <code>optional string countries_forbidden = 3;</code>
     * @return Whether the countriesForbidden field is set.
     */
    public boolean hasCountriesForbidden() {
      return countryRestrictionCase_ == 3;
    }
    /**
     * <code>optional string countries_forbidden = 3;</code>
     * @return The countriesForbidden.
     */
    public java.lang.String getCountriesForbidden() {
      java.lang.Object ref = "";
      if (countryRestrictionCase_ == 3) {
        ref = countryRestriction_;
      }
      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();
        if (bs.isValidUtf8() && (countryRestrictionCase_ == 3)) {
          countryRestriction_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string countries_forbidden = 3;</code>
     * @return The bytes for countriesForbidden.
     */
    public com.google.protobuf.ByteString
        getCountriesForbiddenBytes() {
      java.lang.Object ref = "";
      if (countryRestrictionCase_ == 3) {
        ref = countryRestriction_;
      }
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        if (countryRestrictionCase_ == 3) {
          countryRestriction_ = b;
        }
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static com.spotify.metadata.Metadata.Restriction parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Restriction parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Restriction parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Restriction parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Restriction parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Restriction parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Restriction parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Restriction 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.spotify.metadata.Metadata.Restriction parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Restriction 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.spotify.metadata.Metadata.Restriction parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Restriction 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.spotify.metadata.Metadata.Restriction 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.Restriction}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.Restriction)
        com.spotify.metadata.Metadata.RestrictionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Restriction_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Restriction_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.Restriction.class, com.spotify.metadata.Metadata.Restriction.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.Restriction.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        catalogue_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        catalogueStr_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        countryRestrictionCase_ = 0;
        countryRestriction_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Restriction_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Restriction getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.Restriction.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Restriction build() {
        com.spotify.metadata.Metadata.Restriction result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Restriction buildPartial() {
        com.spotify.metadata.Metadata.Restriction result = new com.spotify.metadata.Metadata.Restriction(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((bitField0_ & 0x00000001) != 0)) {
          catalogue_ = java.util.Collections.unmodifiableList(catalogue_);
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.catalogue_ = catalogue_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.type_ = type_;
        if (((bitField0_ & 0x00000004) != 0)) {
          catalogueStr_ = catalogueStr_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.catalogueStr_ = catalogueStr_;
        if (countryRestrictionCase_ == 2) {
          result.countryRestriction_ = countryRestriction_;
        }
        if (countryRestrictionCase_ == 3) {
          result.countryRestriction_ = countryRestriction_;
        }
        result.bitField0_ = to_bitField0_;
        result.countryRestrictionCase_ = countryRestrictionCase_;
        onBuilt();
        return result;
      }

      @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);
      }
      private int countryRestrictionCase_ = 0;
      private java.lang.Object countryRestriction_;
      public CountryRestrictionCase
          getCountryRestrictionCase() {
        return CountryRestrictionCase.forNumber(
            countryRestrictionCase_);
      }

      public Builder clearCountryRestriction() {
        countryRestrictionCase_ = 0;
        countryRestriction_ = null;
        onChanged();
        return this;
      }

      private int bitField0_;

      private java.util.List<java.lang.Integer> catalogue_ =
        java.util.Collections.emptyList();
      private void ensureCatalogueIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          catalogue_ = new java.util.ArrayList<java.lang.Integer>(catalogue_);
          bitField0_ |= 0x00000001;
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction.Catalogue catalogue = 1;</code>
       * @return A list containing the catalogue.
       */
      public java.util.List<com.spotify.metadata.Metadata.Restriction.Catalogue> getCatalogueList() {
        return new com.google.protobuf.Internal.ListAdapter<
            java.lang.Integer, com.spotify.metadata.Metadata.Restriction.Catalogue>(catalogue_, catalogue_converter_);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction.Catalogue catalogue = 1;</code>
       * @return The count of catalogue.
       */
      public int getCatalogueCount() {
        return catalogue_.size();
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction.Catalogue catalogue = 1;</code>
       * @param index The index of the element to return.
       * @return The catalogue at the given index.
       */
      public com.spotify.metadata.Metadata.Restriction.Catalogue getCatalogue(int index) {
        return catalogue_converter_.convert(catalogue_.get(index));
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction.Catalogue catalogue = 1;</code>
       * @param index The index to set the value at.
       * @param value The catalogue to set.
       * @return This builder for chaining.
       */
      public Builder setCatalogue(
          int index, com.spotify.metadata.Metadata.Restriction.Catalogue value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureCatalogueIsMutable();
        catalogue_.set(index, value.getNumber());
        onChanged();
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction.Catalogue catalogue = 1;</code>
       * @param value The catalogue to add.
       * @return This builder for chaining.
       */
      public Builder addCatalogue(com.spotify.metadata.Metadata.Restriction.Catalogue value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureCatalogueIsMutable();
        catalogue_.add(value.getNumber());
        onChanged();
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction.Catalogue catalogue = 1;</code>
       * @param values The catalogue to add.
       * @return This builder for chaining.
       */
      public Builder addAllCatalogue(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Restriction.Catalogue> values) {
        ensureCatalogueIsMutable();
        for (com.spotify.metadata.Metadata.Restriction.Catalogue value : values) {
          catalogue_.add(value.getNumber());
        }
        onChanged();
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction.Catalogue catalogue = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearCatalogue() {
        catalogue_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }

      private int type_ = 0;
      /**
       * <code>optional .spotify.metadata.proto.Restriction.Type type = 4;</code>
       * @return Whether the type field is set.
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.Restriction.Type type = 4;</code>
       * @return The type.
       */
      public com.spotify.metadata.Metadata.Restriction.Type getType() {
        @SuppressWarnings("deprecation")
        com.spotify.metadata.Metadata.Restriction.Type result = com.spotify.metadata.Metadata.Restriction.Type.valueOf(type_);
        return result == null ? com.spotify.metadata.Metadata.Restriction.Type.STREAMING : result;
      }
      /**
       * <code>optional .spotify.metadata.proto.Restriction.Type type = 4;</code>
       * @param value The type to set.
       * @return This builder for chaining.
       */
      public Builder setType(com.spotify.metadata.Metadata.Restriction.Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        type_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Restriction.Type type = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        type_ = 0;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList catalogueStr_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureCatalogueStrIsMutable() {
        if (!((bitField0_ & 0x00000004) != 0)) {
          catalogueStr_ = new com.google.protobuf.LazyStringArrayList(catalogueStr_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <code>repeated string catalogue_str = 5;</code>
       * @return A list containing the catalogueStr.
       */
      public com.google.protobuf.ProtocolStringList
          getCatalogueStrList() {
        return catalogueStr_.getUnmodifiableView();
      }
      /**
       * <code>repeated string catalogue_str = 5;</code>
       * @return The count of catalogueStr.
       */
      public int getCatalogueStrCount() {
        return catalogueStr_.size();
      }
      /**
       * <code>repeated string catalogue_str = 5;</code>
       * @param index The index of the element to return.
       * @return The catalogueStr at the given index.
       */
      public java.lang.String getCatalogueStr(int index) {
        return catalogueStr_.get(index);
      }
      /**
       * <code>repeated string catalogue_str = 5;</code>
       * @param index The index of the value to return.
       * @return The bytes of the catalogueStr at the given index.
       */
      public com.google.protobuf.ByteString
          getCatalogueStrBytes(int index) {
        return catalogueStr_.getByteString(index);
      }
      /**
       * <code>repeated string catalogue_str = 5;</code>
       * @param index The index to set the value at.
       * @param value The catalogueStr to set.
       * @return This builder for chaining.
       */
      public Builder setCatalogueStr(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCatalogueStrIsMutable();
        catalogueStr_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string catalogue_str = 5;</code>
       * @param value The catalogueStr to add.
       * @return This builder for chaining.
       */
      public Builder addCatalogueStr(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCatalogueStrIsMutable();
        catalogueStr_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string catalogue_str = 5;</code>
       * @param values The catalogueStr to add.
       * @return This builder for chaining.
       */
      public Builder addAllCatalogueStr(
          java.lang.Iterable<java.lang.String> values) {
        ensureCatalogueStrIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, catalogueStr_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string catalogue_str = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearCatalogueStr() {
        catalogueStr_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string catalogue_str = 5;</code>
       * @param value The bytes of the catalogueStr to add.
       * @return This builder for chaining.
       */
      public Builder addCatalogueStrBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCatalogueStrIsMutable();
        catalogueStr_.add(value);
        onChanged();
        return this;
      }

      /**
       * <code>optional string countries_allowed = 2;</code>
       * @return Whether the countriesAllowed field is set.
       */
      public boolean hasCountriesAllowed() {
        return countryRestrictionCase_ == 2;
      }
      /**
       * <code>optional string countries_allowed = 2;</code>
       * @return The countriesAllowed.
       */
      public java.lang.String getCountriesAllowed() {
        java.lang.Object ref = "";
        if (countryRestrictionCase_ == 2) {
          ref = countryRestriction_;
        }
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (countryRestrictionCase_ == 2) {
            if (bs.isValidUtf8()) {
              countryRestriction_ = s;
            }
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string countries_allowed = 2;</code>
       * @return The bytes for countriesAllowed.
       */
      public com.google.protobuf.ByteString
          getCountriesAllowedBytes() {
        java.lang.Object ref = "";
        if (countryRestrictionCase_ == 2) {
          ref = countryRestriction_;
        }
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          if (countryRestrictionCase_ == 2) {
            countryRestriction_ = b;
          }
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string countries_allowed = 2;</code>
       * @param value The countriesAllowed to set.
       * @return This builder for chaining.
       */
      public Builder setCountriesAllowed(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  countryRestrictionCase_ = 2;
        countryRestriction_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string countries_allowed = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearCountriesAllowed() {
        if (countryRestrictionCase_ == 2) {
          countryRestrictionCase_ = 0;
          countryRestriction_ = null;
          onChanged();
        }
        return this;
      }
      /**
       * <code>optional string countries_allowed = 2;</code>
       * @param value The bytes for countriesAllowed to set.
       * @return This builder for chaining.
       */
      public Builder setCountriesAllowedBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  countryRestrictionCase_ = 2;
        countryRestriction_ = value;
        onChanged();
        return this;
      }

      /**
       * <code>optional string countries_forbidden = 3;</code>
       * @return Whether the countriesForbidden field is set.
       */
      public boolean hasCountriesForbidden() {
        return countryRestrictionCase_ == 3;
      }
      /**
       * <code>optional string countries_forbidden = 3;</code>
       * @return The countriesForbidden.
       */
      public java.lang.String getCountriesForbidden() {
        java.lang.Object ref = "";
        if (countryRestrictionCase_ == 3) {
          ref = countryRestriction_;
        }
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (countryRestrictionCase_ == 3) {
            if (bs.isValidUtf8()) {
              countryRestriction_ = s;
            }
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string countries_forbidden = 3;</code>
       * @return The bytes for countriesForbidden.
       */
      public com.google.protobuf.ByteString
          getCountriesForbiddenBytes() {
        java.lang.Object ref = "";
        if (countryRestrictionCase_ == 3) {
          ref = countryRestriction_;
        }
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          if (countryRestrictionCase_ == 3) {
            countryRestriction_ = b;
          }
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string countries_forbidden = 3;</code>
       * @param value The countriesForbidden to set.
       * @return This builder for chaining.
       */
      public Builder setCountriesForbidden(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  countryRestrictionCase_ = 3;
        countryRestriction_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string countries_forbidden = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearCountriesForbidden() {
        if (countryRestrictionCase_ == 3) {
          countryRestrictionCase_ = 0;
          countryRestriction_ = null;
          onChanged();
        }
        return this;
      }
      /**
       * <code>optional string countries_forbidden = 3;</code>
       * @param value The bytes for countriesForbidden to set.
       * @return This builder for chaining.
       */
      public Builder setCountriesForbiddenBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  countryRestrictionCase_ = 3;
        countryRestriction_ = value;
        onChanged();
        return this;
      }
      @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:spotify.metadata.proto.Restriction)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.Restriction)
    private static final com.spotify.metadata.Metadata.Restriction DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.Restriction();
    }

    public static com.spotify.metadata.Metadata.Restriction getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Restriction>
        PARSER = new com.google.protobuf.AbstractParser<Restriction>() {
      @java.lang.Override
      public Restriction 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.Restriction getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AvailabilityOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.Availability)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated string catalogue_str = 1;</code>
     * @return A list containing the catalogueStr.
     */
    java.util.List<java.lang.String>
        getCatalogueStrList();
    /**
     * <code>repeated string catalogue_str = 1;</code>
     * @return The count of catalogueStr.
     */
    int getCatalogueStrCount();
    /**
     * <code>repeated string catalogue_str = 1;</code>
     * @param index The index of the element to return.
     * @return The catalogueStr at the given index.
     */
    java.lang.String getCatalogueStr(int index);
    /**
     * <code>repeated string catalogue_str = 1;</code>
     * @param index The index of the value to return.
     * @return The bytes of the catalogueStr at the given index.
     */
    com.google.protobuf.ByteString
        getCatalogueStrBytes(int index);

    /**
     * <code>optional .spotify.metadata.proto.Date start = 2;</code>
     * @return Whether the start field is set.
     */
    boolean hasStart();
    /**
     * <code>optional .spotify.metadata.proto.Date start = 2;</code>
     * @return The start.
     */
    com.spotify.metadata.Metadata.Date getStart();
    /**
     * <code>optional .spotify.metadata.proto.Date start = 2;</code>
     */
    com.spotify.metadata.Metadata.DateOrBuilder getStartOrBuilder();
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.Availability}
   */
  public  static final class Availability extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.Availability)
      AvailabilityOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Availability.newBuilder() to construct.
    private Availability(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Availability() {
      catalogueStr_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Availability_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Availability_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.Availability.class, com.spotify.metadata.Metadata.Availability.Builder.class);
    }

    private int bitField0_;
    public static final int CATALOGUE_STR_FIELD_NUMBER = 1;
    private com.google.protobuf.LazyStringList catalogueStr_;
    /**
     * <code>repeated string catalogue_str = 1;</code>
     * @return A list containing the catalogueStr.
     */
    public com.google.protobuf.ProtocolStringList
        getCatalogueStrList() {
      return catalogueStr_;
    }
    /**
     * <code>repeated string catalogue_str = 1;</code>
     * @return The count of catalogueStr.
     */
    public int getCatalogueStrCount() {
      return catalogueStr_.size();
    }
    /**
     * <code>repeated string catalogue_str = 1;</code>
     * @param index The index of the element to return.
     * @return The catalogueStr at the given index.
     */
    public java.lang.String getCatalogueStr(int index) {
      return catalogueStr_.get(index);
    }
    /**
     * <code>repeated string catalogue_str = 1;</code>
     * @param index The index of the value to return.
     * @return The bytes of the catalogueStr at the given index.
     */
    public com.google.protobuf.ByteString
        getCatalogueStrBytes(int index) {
      return catalogueStr_.getByteString(index);
    }

    public static final int START_FIELD_NUMBER = 2;
    private com.spotify.metadata.Metadata.Date start_;
    /**
     * <code>optional .spotify.metadata.proto.Date start = 2;</code>
     * @return Whether the start field is set.
     */
    public boolean hasStart() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.Date start = 2;</code>
     * @return The start.
     */
    public com.spotify.metadata.Metadata.Date getStart() {
      return start_ == null ? com.spotify.metadata.Metadata.Date.getDefaultInstance() : start_;
    }
    /**
     * <code>optional .spotify.metadata.proto.Date start = 2;</code>
     */
    public com.spotify.metadata.Metadata.DateOrBuilder getStartOrBuilder() {
      return start_ == null ? com.spotify.metadata.Metadata.Date.getDefaultInstance() : start_;
    }

    public static com.spotify.metadata.Metadata.Availability parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Availability parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Availability parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Availability parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Availability parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.Availability parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.Availability parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Availability 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.spotify.metadata.Metadata.Availability parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Availability 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.spotify.metadata.Metadata.Availability parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.Availability 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.spotify.metadata.Metadata.Availability 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.Availability}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.Availability)
        com.spotify.metadata.Metadata.AvailabilityOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Availability_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Availability_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.Availability.class, com.spotify.metadata.Metadata.Availability.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.Availability.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getStartFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        catalogueStr_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (startBuilder_ == null) {
          start_ = null;
        } else {
          startBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_Availability_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Availability getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.Availability.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Availability build() {
        com.spotify.metadata.Metadata.Availability result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.Availability buildPartial() {
        com.spotify.metadata.Metadata.Availability result = new com.spotify.metadata.Metadata.Availability(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((bitField0_ & 0x00000001) != 0)) {
          catalogueStr_ = catalogueStr_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.catalogueStr_ = catalogueStr_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          if (startBuilder_ == null) {
            result.start_ = start_;
          } else {
            result.start_ = startBuilder_.build();
          }
          to_bitField0_ |= 0x00000001;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private com.google.protobuf.LazyStringList catalogueStr_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureCatalogueStrIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          catalogueStr_ = new com.google.protobuf.LazyStringArrayList(catalogueStr_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <code>repeated string catalogue_str = 1;</code>
       * @return A list containing the catalogueStr.
       */
      public com.google.protobuf.ProtocolStringList
          getCatalogueStrList() {
        return catalogueStr_.getUnmodifiableView();
      }
      /**
       * <code>repeated string catalogue_str = 1;</code>
       * @return The count of catalogueStr.
       */
      public int getCatalogueStrCount() {
        return catalogueStr_.size();
      }
      /**
       * <code>repeated string catalogue_str = 1;</code>
       * @param index The index of the element to return.
       * @return The catalogueStr at the given index.
       */
      public java.lang.String getCatalogueStr(int index) {
        return catalogueStr_.get(index);
      }
      /**
       * <code>repeated string catalogue_str = 1;</code>
       * @param index The index of the value to return.
       * @return The bytes of the catalogueStr at the given index.
       */
      public com.google.protobuf.ByteString
          getCatalogueStrBytes(int index) {
        return catalogueStr_.getByteString(index);
      }
      /**
       * <code>repeated string catalogue_str = 1;</code>
       * @param index The index to set the value at.
       * @param value The catalogueStr to set.
       * @return This builder for chaining.
       */
      public Builder setCatalogueStr(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCatalogueStrIsMutable();
        catalogueStr_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string catalogue_str = 1;</code>
       * @param value The catalogueStr to add.
       * @return This builder for chaining.
       */
      public Builder addCatalogueStr(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCatalogueStrIsMutable();
        catalogueStr_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string catalogue_str = 1;</code>
       * @param values The catalogueStr to add.
       * @return This builder for chaining.
       */
      public Builder addAllCatalogueStr(
          java.lang.Iterable<java.lang.String> values) {
        ensureCatalogueStrIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, catalogueStr_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string catalogue_str = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearCatalogueStr() {
        catalogueStr_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string catalogue_str = 1;</code>
       * @param value The bytes of the catalogueStr to add.
       * @return This builder for chaining.
       */
      public Builder addCatalogueStrBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCatalogueStrIsMutable();
        catalogueStr_.add(value);
        onChanged();
        return this;
      }

      private com.spotify.metadata.Metadata.Date start_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.Date, com.spotify.metadata.Metadata.Date.Builder, com.spotify.metadata.Metadata.DateOrBuilder> startBuilder_;
      /**
       * <code>optional .spotify.metadata.proto.Date start = 2;</code>
       * @return Whether the start field is set.
       */
      public boolean hasStart() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.Date start = 2;</code>
       * @return The start.
       */
      public com.spotify.metadata.Metadata.Date getStart() {
        if (startBuilder_ == null) {
          return start_ == null ? com.spotify.metadata.Metadata.Date.getDefaultInstance() : start_;
        } else {
          return startBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.Date start = 2;</code>
       */
      public Builder setStart(com.spotify.metadata.Metadata.Date value) {
        if (startBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          start_ = value;
          onChanged();
        } else {
          startBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date start = 2;</code>
       */
      public Builder setStart(
          com.spotify.metadata.Metadata.Date.Builder builderForValue) {
        if (startBuilder_ == null) {
          start_ = builderForValue.build();
          onChanged();
        } else {
          startBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date start = 2;</code>
       */
      public Builder mergeStart(com.spotify.metadata.Metadata.Date value) {
        if (startBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0) &&
              start_ != null &&
              start_ != com.spotify.metadata.Metadata.Date.getDefaultInstance()) {
            start_ =
              com.spotify.metadata.Metadata.Date.newBuilder(start_).mergeFrom(value).buildPartial();
          } else {
            start_ = value;
          }
          onChanged();
        } else {
          startBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date start = 2;</code>
       */
      public Builder clearStart() {
        if (startBuilder_ == null) {
          start_ = null;
          onChanged();
        } else {
          startBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date start = 2;</code>
       */
      public com.spotify.metadata.Metadata.Date.Builder getStartBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getStartFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.metadata.proto.Date start = 2;</code>
       */
      public com.spotify.metadata.Metadata.DateOrBuilder getStartOrBuilder() {
        if (startBuilder_ != null) {
          return startBuilder_.getMessageOrBuilder();
        } else {
          return start_ == null ?
              com.spotify.metadata.Metadata.Date.getDefaultInstance() : start_;
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.Date start = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.Date, com.spotify.metadata.Metadata.Date.Builder, com.spotify.metadata.Metadata.DateOrBuilder> 
          getStartFieldBuilder() {
        if (startBuilder_ == null) {
          startBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.metadata.Metadata.Date, com.spotify.metadata.Metadata.Date.Builder, com.spotify.metadata.Metadata.DateOrBuilder>(
                  getStart(),
                  getParentForChildren(),
                  isClean());
          start_ = null;
        }
        return startBuilder_;
      }
      @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:spotify.metadata.proto.Availability)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.Availability)
    private static final com.spotify.metadata.Metadata.Availability DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.Availability();
    }

    public static com.spotify.metadata.Metadata.Availability getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Availability>
        PARSER = new com.google.protobuf.AbstractParser<Availability>() {
      @java.lang.Override
      public Availability 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.Availability getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SalePeriodOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.SalePeriod)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
     */
    java.util.List<com.spotify.metadata.Metadata.Restriction> 
        getRestrictionList();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
     */
    com.spotify.metadata.Metadata.Restriction getRestriction(int index);
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
     */
    int getRestrictionCount();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
     */
    java.util.List<? extends com.spotify.metadata.Metadata.RestrictionOrBuilder> 
        getRestrictionOrBuilderList();
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
     */
    com.spotify.metadata.Metadata.RestrictionOrBuilder getRestrictionOrBuilder(
        int index);

    /**
     * <code>optional .spotify.metadata.proto.Date start = 2;</code>
     * @return Whether the start field is set.
     */
    boolean hasStart();
    /**
     * <code>optional .spotify.metadata.proto.Date start = 2;</code>
     * @return The start.
     */
    com.spotify.metadata.Metadata.Date getStart();
    /**
     * <code>optional .spotify.metadata.proto.Date start = 2;</code>
     */
    com.spotify.metadata.Metadata.DateOrBuilder getStartOrBuilder();

    /**
     * <code>optional .spotify.metadata.proto.Date end = 3;</code>
     * @return Whether the end field is set.
     */
    boolean hasEnd();
    /**
     * <code>optional .spotify.metadata.proto.Date end = 3;</code>
     * @return The end.
     */
    com.spotify.metadata.Metadata.Date getEnd();
    /**
     * <code>optional .spotify.metadata.proto.Date end = 3;</code>
     */
    com.spotify.metadata.Metadata.DateOrBuilder getEndOrBuilder();
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.SalePeriod}
   */
  public  static final class SalePeriod extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.SalePeriod)
      SalePeriodOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SalePeriod.newBuilder() to construct.
    private SalePeriod(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SalePeriod() {
      restriction_ = java.util.Collections.emptyList();
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_SalePeriod_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_SalePeriod_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.SalePeriod.class, com.spotify.metadata.Metadata.SalePeriod.Builder.class);
    }

    private int bitField0_;
    public static final int RESTRICTION_FIELD_NUMBER = 1;
    private java.util.List<com.spotify.metadata.Metadata.Restriction> restriction_;
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
     */
    public java.util.List<com.spotify.metadata.Metadata.Restriction> getRestrictionList() {
      return restriction_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
     */
    public java.util.List<? extends com.spotify.metadata.Metadata.RestrictionOrBuilder> 
        getRestrictionOrBuilderList() {
      return restriction_;
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
     */
    public int getRestrictionCount() {
      return restriction_.size();
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
     */
    public com.spotify.metadata.Metadata.Restriction getRestriction(int index) {
      return restriction_.get(index);
    }
    /**
     * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
     */
    public com.spotify.metadata.Metadata.RestrictionOrBuilder getRestrictionOrBuilder(
        int index) {
      return restriction_.get(index);
    }

    public static final int START_FIELD_NUMBER = 2;
    private com.spotify.metadata.Metadata.Date start_;
    /**
     * <code>optional .spotify.metadata.proto.Date start = 2;</code>
     * @return Whether the start field is set.
     */
    public boolean hasStart() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.Date start = 2;</code>
     * @return The start.
     */
    public com.spotify.metadata.Metadata.Date getStart() {
      return start_ == null ? com.spotify.metadata.Metadata.Date.getDefaultInstance() : start_;
    }
    /**
     * <code>optional .spotify.metadata.proto.Date start = 2;</code>
     */
    public com.spotify.metadata.Metadata.DateOrBuilder getStartOrBuilder() {
      return start_ == null ? com.spotify.metadata.Metadata.Date.getDefaultInstance() : start_;
    }

    public static final int END_FIELD_NUMBER = 3;
    private com.spotify.metadata.Metadata.Date end_;
    /**
     * <code>optional .spotify.metadata.proto.Date end = 3;</code>
     * @return Whether the end field is set.
     */
    public boolean hasEnd() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.Date end = 3;</code>
     * @return The end.
     */
    public com.spotify.metadata.Metadata.Date getEnd() {
      return end_ == null ? com.spotify.metadata.Metadata.Date.getDefaultInstance() : end_;
    }
    /**
     * <code>optional .spotify.metadata.proto.Date end = 3;</code>
     */
    public com.spotify.metadata.Metadata.DateOrBuilder getEndOrBuilder() {
      return end_ == null ? com.spotify.metadata.Metadata.Date.getDefaultInstance() : end_;
    }

    public static com.spotify.metadata.Metadata.SalePeriod parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.SalePeriod parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.SalePeriod parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.SalePeriod parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.SalePeriod parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.SalePeriod parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.SalePeriod parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.SalePeriod 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.spotify.metadata.Metadata.SalePeriod parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.SalePeriod 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.spotify.metadata.Metadata.SalePeriod parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.SalePeriod 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.spotify.metadata.Metadata.SalePeriod 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.SalePeriod}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.SalePeriod)
        com.spotify.metadata.Metadata.SalePeriodOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_SalePeriod_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_SalePeriod_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.SalePeriod.class, com.spotify.metadata.Metadata.SalePeriod.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.SalePeriod.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getRestrictionFieldBuilder();
          getStartFieldBuilder();
          getEndFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (restrictionBuilder_ == null) {
          restriction_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          restrictionBuilder_.clear();
        }
        if (startBuilder_ == null) {
          start_ = null;
        } else {
          startBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (endBuilder_ == null) {
          end_ = null;
        } else {
          endBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_SalePeriod_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.SalePeriod getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.SalePeriod.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.SalePeriod build() {
        com.spotify.metadata.Metadata.SalePeriod result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.SalePeriod buildPartial() {
        com.spotify.metadata.Metadata.SalePeriod result = new com.spotify.metadata.Metadata.SalePeriod(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (restrictionBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            restriction_ = java.util.Collections.unmodifiableList(restriction_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.restriction_ = restriction_;
        } else {
          result.restriction_ = restrictionBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          if (startBuilder_ == null) {
            result.start_ = start_;
          } else {
            result.start_ = startBuilder_.build();
          }
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          if (endBuilder_ == null) {
            result.end_ = end_;
          } else {
            result.end_ = endBuilder_.build();
          }
          to_bitField0_ |= 0x00000002;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private java.util.List<com.spotify.metadata.Metadata.Restriction> restriction_ =
        java.util.Collections.emptyList();
      private void ensureRestrictionIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          restriction_ = new java.util.ArrayList<com.spotify.metadata.Metadata.Restriction>(restriction_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Restriction, com.spotify.metadata.Metadata.Restriction.Builder, com.spotify.metadata.Metadata.RestrictionOrBuilder> restrictionBuilder_;

      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Restriction> getRestrictionList() {
        if (restrictionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(restriction_);
        } else {
          return restrictionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
       */
      public int getRestrictionCount() {
        if (restrictionBuilder_ == null) {
          return restriction_.size();
        } else {
          return restrictionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
       */
      public com.spotify.metadata.Metadata.Restriction getRestriction(int index) {
        if (restrictionBuilder_ == null) {
          return restriction_.get(index);
        } else {
          return restrictionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
       */
      public Builder setRestriction(
          int index, com.spotify.metadata.Metadata.Restriction value) {
        if (restrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRestrictionIsMutable();
          restriction_.set(index, value);
          onChanged();
        } else {
          restrictionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
       */
      public Builder setRestriction(
          int index, com.spotify.metadata.Metadata.Restriction.Builder builderForValue) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.set(index, builderForValue.build());
          onChanged();
        } else {
          restrictionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
       */
      public Builder addRestriction(com.spotify.metadata.Metadata.Restriction value) {
        if (restrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRestrictionIsMutable();
          restriction_.add(value);
          onChanged();
        } else {
          restrictionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
       */
      public Builder addRestriction(
          int index, com.spotify.metadata.Metadata.Restriction value) {
        if (restrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRestrictionIsMutable();
          restriction_.add(index, value);
          onChanged();
        } else {
          restrictionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
       */
      public Builder addRestriction(
          com.spotify.metadata.Metadata.Restriction.Builder builderForValue) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.add(builderForValue.build());
          onChanged();
        } else {
          restrictionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
       */
      public Builder addRestriction(
          int index, com.spotify.metadata.Metadata.Restriction.Builder builderForValue) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.add(index, builderForValue.build());
          onChanged();
        } else {
          restrictionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
       */
      public Builder addAllRestriction(
          java.lang.Iterable<? extends com.spotify.metadata.Metadata.Restriction> values) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, restriction_);
          onChanged();
        } else {
          restrictionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
       */
      public Builder clearRestriction() {
        if (restrictionBuilder_ == null) {
          restriction_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          restrictionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
       */
      public Builder removeRestriction(int index) {
        if (restrictionBuilder_ == null) {
          ensureRestrictionIsMutable();
          restriction_.remove(index);
          onChanged();
        } else {
          restrictionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
       */
      public com.spotify.metadata.Metadata.Restriction.Builder getRestrictionBuilder(
          int index) {
        return getRestrictionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
       */
      public com.spotify.metadata.Metadata.RestrictionOrBuilder getRestrictionOrBuilder(
          int index) {
        if (restrictionBuilder_ == null) {
          return restriction_.get(index);  } else {
          return restrictionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
       */
      public java.util.List<? extends com.spotify.metadata.Metadata.RestrictionOrBuilder> 
           getRestrictionOrBuilderList() {
        if (restrictionBuilder_ != null) {
          return restrictionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(restriction_);
        }
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
       */
      public com.spotify.metadata.Metadata.Restriction.Builder addRestrictionBuilder() {
        return getRestrictionFieldBuilder().addBuilder(
            com.spotify.metadata.Metadata.Restriction.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
       */
      public com.spotify.metadata.Metadata.Restriction.Builder addRestrictionBuilder(
          int index) {
        return getRestrictionFieldBuilder().addBuilder(
            index, com.spotify.metadata.Metadata.Restriction.getDefaultInstance());
      }
      /**
       * <code>repeated .spotify.metadata.proto.Restriction restriction = 1;</code>
       */
      public java.util.List<com.spotify.metadata.Metadata.Restriction.Builder> 
           getRestrictionBuilderList() {
        return getRestrictionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.spotify.metadata.Metadata.Restriction, com.spotify.metadata.Metadata.Restriction.Builder, com.spotify.metadata.Metadata.RestrictionOrBuilder> 
          getRestrictionFieldBuilder() {
        if (restrictionBuilder_ == null) {
          restrictionBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.spotify.metadata.Metadata.Restriction, com.spotify.metadata.Metadata.Restriction.Builder, com.spotify.metadata.Metadata.RestrictionOrBuilder>(
                  restriction_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          restriction_ = null;
        }
        return restrictionBuilder_;
      }

      private com.spotify.metadata.Metadata.Date start_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.Date, com.spotify.metadata.Metadata.Date.Builder, com.spotify.metadata.Metadata.DateOrBuilder> startBuilder_;
      /**
       * <code>optional .spotify.metadata.proto.Date start = 2;</code>
       * @return Whether the start field is set.
       */
      public boolean hasStart() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.Date start = 2;</code>
       * @return The start.
       */
      public com.spotify.metadata.Metadata.Date getStart() {
        if (startBuilder_ == null) {
          return start_ == null ? com.spotify.metadata.Metadata.Date.getDefaultInstance() : start_;
        } else {
          return startBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.Date start = 2;</code>
       */
      public Builder setStart(com.spotify.metadata.Metadata.Date value) {
        if (startBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          start_ = value;
          onChanged();
        } else {
          startBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date start = 2;</code>
       */
      public Builder setStart(
          com.spotify.metadata.Metadata.Date.Builder builderForValue) {
        if (startBuilder_ == null) {
          start_ = builderForValue.build();
          onChanged();
        } else {
          startBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date start = 2;</code>
       */
      public Builder mergeStart(com.spotify.metadata.Metadata.Date value) {
        if (startBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0) &&
              start_ != null &&
              start_ != com.spotify.metadata.Metadata.Date.getDefaultInstance()) {
            start_ =
              com.spotify.metadata.Metadata.Date.newBuilder(start_).mergeFrom(value).buildPartial();
          } else {
            start_ = value;
          }
          onChanged();
        } else {
          startBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date start = 2;</code>
       */
      public Builder clearStart() {
        if (startBuilder_ == null) {
          start_ = null;
          onChanged();
        } else {
          startBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date start = 2;</code>
       */
      public com.spotify.metadata.Metadata.Date.Builder getStartBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getStartFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.metadata.proto.Date start = 2;</code>
       */
      public com.spotify.metadata.Metadata.DateOrBuilder getStartOrBuilder() {
        if (startBuilder_ != null) {
          return startBuilder_.getMessageOrBuilder();
        } else {
          return start_ == null ?
              com.spotify.metadata.Metadata.Date.getDefaultInstance() : start_;
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.Date start = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.Date, com.spotify.metadata.Metadata.Date.Builder, com.spotify.metadata.Metadata.DateOrBuilder> 
          getStartFieldBuilder() {
        if (startBuilder_ == null) {
          startBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.metadata.Metadata.Date, com.spotify.metadata.Metadata.Date.Builder, com.spotify.metadata.Metadata.DateOrBuilder>(
                  getStart(),
                  getParentForChildren(),
                  isClean());
          start_ = null;
        }
        return startBuilder_;
      }

      private com.spotify.metadata.Metadata.Date end_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.Date, com.spotify.metadata.Metadata.Date.Builder, com.spotify.metadata.Metadata.DateOrBuilder> endBuilder_;
      /**
       * <code>optional .spotify.metadata.proto.Date end = 3;</code>
       * @return Whether the end field is set.
       */
      public boolean hasEnd() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.Date end = 3;</code>
       * @return The end.
       */
      public com.spotify.metadata.Metadata.Date getEnd() {
        if (endBuilder_ == null) {
          return end_ == null ? com.spotify.metadata.Metadata.Date.getDefaultInstance() : end_;
        } else {
          return endBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.Date end = 3;</code>
       */
      public Builder setEnd(com.spotify.metadata.Metadata.Date value) {
        if (endBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          end_ = value;
          onChanged();
        } else {
          endBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date end = 3;</code>
       */
      public Builder setEnd(
          com.spotify.metadata.Metadata.Date.Builder builderForValue) {
        if (endBuilder_ == null) {
          end_ = builderForValue.build();
          onChanged();
        } else {
          endBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date end = 3;</code>
       */
      public Builder mergeEnd(com.spotify.metadata.Metadata.Date value) {
        if (endBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0) &&
              end_ != null &&
              end_ != com.spotify.metadata.Metadata.Date.getDefaultInstance()) {
            end_ =
              com.spotify.metadata.Metadata.Date.newBuilder(end_).mergeFrom(value).buildPartial();
          } else {
            end_ = value;
          }
          onChanged();
        } else {
          endBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date end = 3;</code>
       */
      public Builder clearEnd() {
        if (endBuilder_ == null) {
          end_ = null;
          onChanged();
        } else {
          endBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.Date end = 3;</code>
       */
      public com.spotify.metadata.Metadata.Date.Builder getEndBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getEndFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.metadata.proto.Date end = 3;</code>
       */
      public com.spotify.metadata.Metadata.DateOrBuilder getEndOrBuilder() {
        if (endBuilder_ != null) {
          return endBuilder_.getMessageOrBuilder();
        } else {
          return end_ == null ?
              com.spotify.metadata.Metadata.Date.getDefaultInstance() : end_;
        }
      }
      /**
       * <code>optional .spotify.metadata.proto.Date end = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.metadata.Metadata.Date, com.spotify.metadata.Metadata.Date.Builder, com.spotify.metadata.Metadata.DateOrBuilder> 
          getEndFieldBuilder() {
        if (endBuilder_ == null) {
          endBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.metadata.Metadata.Date, com.spotify.metadata.Metadata.Date.Builder, com.spotify.metadata.Metadata.DateOrBuilder>(
                  getEnd(),
                  getParentForChildren(),
                  isClean());
          end_ = null;
        }
        return endBuilder_;
      }
      @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:spotify.metadata.proto.SalePeriod)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.SalePeriod)
    private static final com.spotify.metadata.Metadata.SalePeriod DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.SalePeriod();
    }

    public static com.spotify.metadata.Metadata.SalePeriod getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<SalePeriod>
        PARSER = new com.google.protobuf.AbstractParser<SalePeriod>() {
      @java.lang.Override
      public SalePeriod 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.SalePeriod getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ExternalIdOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.ExternalId)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string type = 1;</code>
     * @return Whether the type field is set.
     */
    boolean hasType();
    /**
     * <code>optional string type = 1;</code>
     * @return The type.
     */
    java.lang.String getType();
    /**
     * <code>optional string type = 1;</code>
     * @return The bytes for type.
     */
    com.google.protobuf.ByteString
        getTypeBytes();

    /**
     * <code>optional string id = 2;</code>
     * @return Whether the id field is set.
     */
    boolean hasId();
    /**
     * <code>optional string id = 2;</code>
     * @return The id.
     */
    java.lang.String getId();
    /**
     * <code>optional string id = 2;</code>
     * @return The bytes for id.
     */
    com.google.protobuf.ByteString
        getIdBytes();
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.ExternalId}
   */
  public  static final class ExternalId extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.ExternalId)
      ExternalIdOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ExternalId.newBuilder() to construct.
    private ExternalId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ExternalId() {
      type_ = "";
      id_ = "";
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_ExternalId_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_ExternalId_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.ExternalId.class, com.spotify.metadata.Metadata.ExternalId.Builder.class);
    }

    private int bitField0_;
    public static final int TYPE_FIELD_NUMBER = 1;
    private volatile java.lang.Object type_;
    /**
     * <code>optional string type = 1;</code>
     * @return Whether the type field is set.
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional string type = 1;</code>
     * @return The type.
     */
    public java.lang.String getType() {
      java.lang.Object ref = type_;
      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();
        if (bs.isValidUtf8()) {
          type_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string type = 1;</code>
     * @return The bytes for type.
     */
    public com.google.protobuf.ByteString
        getTypeBytes() {
      java.lang.Object ref = type_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        type_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ID_FIELD_NUMBER = 2;
    private volatile java.lang.Object id_;
    /**
     * <code>optional string id = 2;</code>
     * @return Whether the id field is set.
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional string id = 2;</code>
     * @return The id.
     */
    public java.lang.String getId() {
      java.lang.Object ref = id_;
      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();
        if (bs.isValidUtf8()) {
          id_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string id = 2;</code>
     * @return The bytes for id.
     */
    public com.google.protobuf.ByteString
        getIdBytes() {
      java.lang.Object ref = id_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        id_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static com.spotify.metadata.Metadata.ExternalId parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.ExternalId parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.ExternalId parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.ExternalId parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.ExternalId parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.ExternalId parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.ExternalId parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.ExternalId 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.spotify.metadata.Metadata.ExternalId parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.ExternalId 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.spotify.metadata.Metadata.ExternalId parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.ExternalId 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.spotify.metadata.Metadata.ExternalId 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.ExternalId}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.ExternalId)
        com.spotify.metadata.Metadata.ExternalIdOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_ExternalId_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_ExternalId_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.ExternalId.class, com.spotify.metadata.Metadata.ExternalId.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.ExternalId.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        type_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_ExternalId_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.ExternalId getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.ExternalId.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.ExternalId build() {
        com.spotify.metadata.Metadata.ExternalId result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.ExternalId buildPartial() {
        com.spotify.metadata.Metadata.ExternalId result = new com.spotify.metadata.Metadata.ExternalId(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.id_ = id_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private java.lang.Object type_ = "";
      /**
       * <code>optional string type = 1;</code>
       * @return Whether the type field is set.
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional string type = 1;</code>
       * @return The type.
       */
      public java.lang.String getType() {
        java.lang.Object ref = type_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            type_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string type = 1;</code>
       * @return The bytes for type.
       */
      public com.google.protobuf.ByteString
          getTypeBytes() {
        java.lang.Object ref = type_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          type_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string type = 1;</code>
       * @param value The type to set.
       * @return This builder for chaining.
       */
      public Builder setType(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string type = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = getDefaultInstance().getType();
        onChanged();
        return this;
      }
      /**
       * <code>optional string type = 1;</code>
       * @param value The bytes for type to set.
       * @return This builder for chaining.
       */
      public Builder setTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        type_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object id_ = "";
      /**
       * <code>optional string id = 2;</code>
       * @return Whether the id field is set.
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional string id = 2;</code>
       * @return The id.
       */
      public java.lang.String getId() {
        java.lang.Object ref = id_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            id_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string id = 2;</code>
       * @return The bytes for id.
       */
      public com.google.protobuf.ByteString
          getIdBytes() {
        java.lang.Object ref = id_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          id_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string id = 2;</code>
       * @param value The id to set.
       * @return This builder for chaining.
       */
      public Builder setId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string id = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000002);
        id_ = getDefaultInstance().getId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string id = 2;</code>
       * @param value The bytes for id to set.
       * @return This builder for chaining.
       */
      public Builder setIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        id_ = value;
        onChanged();
        return this;
      }
      @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:spotify.metadata.proto.ExternalId)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.ExternalId)
    private static final com.spotify.metadata.Metadata.ExternalId DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.ExternalId();
    }

    public static com.spotify.metadata.Metadata.ExternalId getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<ExternalId>
        PARSER = new com.google.protobuf.AbstractParser<ExternalId>() {
      @java.lang.Override
      public ExternalId 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.ExternalId getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AudioFileOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.AudioFile)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional bytes file_id = 1;</code>
     * @return Whether the fileId field is set.
     */
    boolean hasFileId();
    /**
     * <code>optional bytes file_id = 1;</code>
     * @return The fileId.
     */
    com.google.protobuf.ByteString getFileId();

    /**
     * <code>optional .spotify.metadata.proto.AudioFile.Format format = 2;</code>
     * @return Whether the format field is set.
     */
    boolean hasFormat();
    /**
     * <code>optional .spotify.metadata.proto.AudioFile.Format format = 2;</code>
     * @return The format.
     */
    com.spotify.metadata.Metadata.AudioFile.Format getFormat();
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.AudioFile}
   */
  public  static final class AudioFile extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.AudioFile)
      AudioFileOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AudioFile.newBuilder() to construct.
    private AudioFile(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AudioFile() {
      fileId_ = com.google.protobuf.ByteString.EMPTY;
      format_ = 0;
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_AudioFile_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_AudioFile_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.AudioFile.class, com.spotify.metadata.Metadata.AudioFile.Builder.class);
    }

    /**
     * Protobuf enum {@code spotify.metadata.proto.AudioFile.Format}
     */
    public enum Format
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>OGG_VORBIS_96 = 0;</code>
       */
      OGG_VORBIS_96(0),
      /**
       * <code>OGG_VORBIS_160 = 1;</code>
       */
      OGG_VORBIS_160(1),
      /**
       * <code>OGG_VORBIS_320 = 2;</code>
       */
      OGG_VORBIS_320(2),
      /**
       * <code>MP3_256 = 3;</code>
       */
      MP3_256(3),
      /**
       * <code>MP3_320 = 4;</code>
       */
      MP3_320(4),
      /**
       * <code>MP3_160 = 5;</code>
       */
      MP3_160(5),
      /**
       * <code>MP3_96 = 6;</code>
       */
      MP3_96(6),
      /**
       * <code>MP3_160_ENC = 7;</code>
       */
      MP3_160_ENC(7),
      /**
       * <code>AAC_24 = 8;</code>
       */
      AAC_24(8),
      /**
       * <code>AAC_48 = 9;</code>
       */
      AAC_48(9),
      /**
       * <code>AAC_24_NORM = 16;</code>
       */
      AAC_24_NORM(16),
      ;

      /**
       * <code>OGG_VORBIS_96 = 0;</code>
       */
      public static final int OGG_VORBIS_96_VALUE = 0;
      /**
       * <code>OGG_VORBIS_160 = 1;</code>
       */
      public static final int OGG_VORBIS_160_VALUE = 1;
      /**
       * <code>OGG_VORBIS_320 = 2;</code>
       */
      public static final int OGG_VORBIS_320_VALUE = 2;
      /**
       * <code>MP3_256 = 3;</code>
       */
      public static final int MP3_256_VALUE = 3;
      /**
       * <code>MP3_320 = 4;</code>
       */
      public static final int MP3_320_VALUE = 4;
      /**
       * <code>MP3_160 = 5;</code>
       */
      public static final int MP3_160_VALUE = 5;
      /**
       * <code>MP3_96 = 6;</code>
       */
      public static final int MP3_96_VALUE = 6;
      /**
       * <code>MP3_160_ENC = 7;</code>
       */
      public static final int MP3_160_ENC_VALUE = 7;
      /**
       * <code>AAC_24 = 8;</code>
       */
      public static final int AAC_24_VALUE = 8;
      /**
       * <code>AAC_48 = 9;</code>
       */
      public static final int AAC_48_VALUE = 9;
      /**
       * <code>AAC_24_NORM = 16;</code>
       */
      public static final int AAC_24_NORM_VALUE = 16;


      public final int getNumber() {
        return value;
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static Format valueOf(int value) {
        return forNumber(value);
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static Format forNumber(int value) {
        switch (value) {
          case 0: return OGG_VORBIS_96;
          case 1: return OGG_VORBIS_160;
          case 2: return OGG_VORBIS_320;
          case 3: return MP3_256;
          case 4: return MP3_320;
          case 5: return MP3_160;
          case 6: return MP3_96;
          case 7: return MP3_160_ENC;
          case 8: return AAC_24;
          case 9: return AAC_48;
          case 16: return AAC_24_NORM;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<Format>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static final com.google.protobuf.Internal.EnumLiteMap<
          Format> internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Format>() {
              public Format findValueByNumber(int number) {
                return Format.forNumber(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.AudioFile.getDescriptor().getEnumTypes().get(0);
      }

      private static final Format[] VALUES = values();

      public static Format valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

      private Format(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:spotify.metadata.proto.AudioFile.Format)
    }

    private int bitField0_;
    public static final int FILE_ID_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString fileId_;
    /**
     * <code>optional bytes file_id = 1;</code>
     * @return Whether the fileId field is set.
     */
    public boolean hasFileId() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional bytes file_id = 1;</code>
     * @return The fileId.
     */
    public com.google.protobuf.ByteString getFileId() {
      return fileId_;
    }

    public static final int FORMAT_FIELD_NUMBER = 2;
    private int format_;
    /**
     * <code>optional .spotify.metadata.proto.AudioFile.Format format = 2;</code>
     * @return Whether the format field is set.
     */
    public boolean hasFormat() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .spotify.metadata.proto.AudioFile.Format format = 2;</code>
     * @return The format.
     */
    public com.spotify.metadata.Metadata.AudioFile.Format getFormat() {
      @SuppressWarnings("deprecation")
      com.spotify.metadata.Metadata.AudioFile.Format result = com.spotify.metadata.Metadata.AudioFile.Format.valueOf(format_);
      return result == null ? com.spotify.metadata.Metadata.AudioFile.Format.OGG_VORBIS_96 : result;
    }

    public static com.spotify.metadata.Metadata.AudioFile parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.AudioFile parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.AudioFile parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.AudioFile parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.AudioFile parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.AudioFile parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.AudioFile parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.AudioFile 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.spotify.metadata.Metadata.AudioFile parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.AudioFile 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.spotify.metadata.Metadata.AudioFile parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.AudioFile 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.spotify.metadata.Metadata.AudioFile 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.AudioFile}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.AudioFile)
        com.spotify.metadata.Metadata.AudioFileOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_AudioFile_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_AudioFile_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.AudioFile.class, com.spotify.metadata.Metadata.AudioFile.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.AudioFile.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        fileId_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        format_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_AudioFile_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.AudioFile getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.AudioFile.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.AudioFile build() {
        com.spotify.metadata.Metadata.AudioFile result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.AudioFile buildPartial() {
        com.spotify.metadata.Metadata.AudioFile result = new com.spotify.metadata.Metadata.AudioFile(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.fileId_ = fileId_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.format_ = format_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private com.google.protobuf.ByteString fileId_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes file_id = 1;</code>
       * @return Whether the fileId field is set.
       */
      public boolean hasFileId() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional bytes file_id = 1;</code>
       * @return The fileId.
       */
      public com.google.protobuf.ByteString getFileId() {
        return fileId_;
      }
      /**
       * <code>optional bytes file_id = 1;</code>
       * @param value The fileId to set.
       * @return This builder for chaining.
       */
      public Builder setFileId(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        fileId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes file_id = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearFileId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        fileId_ = getDefaultInstance().getFileId();
        onChanged();
        return this;
      }

      private int format_ = 0;
      /**
       * <code>optional .spotify.metadata.proto.AudioFile.Format format = 2;</code>
       * @return Whether the format field is set.
       */
      public boolean hasFormat() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .spotify.metadata.proto.AudioFile.Format format = 2;</code>
       * @return The format.
       */
      public com.spotify.metadata.Metadata.AudioFile.Format getFormat() {
        @SuppressWarnings("deprecation")
        com.spotify.metadata.Metadata.AudioFile.Format result = com.spotify.metadata.Metadata.AudioFile.Format.valueOf(format_);
        return result == null ? com.spotify.metadata.Metadata.AudioFile.Format.OGG_VORBIS_96 : result;
      }
      /**
       * <code>optional .spotify.metadata.proto.AudioFile.Format format = 2;</code>
       * @param value The format to set.
       * @return This builder for chaining.
       */
      public Builder setFormat(com.spotify.metadata.Metadata.AudioFile.Format value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        format_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .spotify.metadata.proto.AudioFile.Format format = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearFormat() {
        bitField0_ = (bitField0_ & ~0x00000002);
        format_ = 0;
        onChanged();
        return this;
      }
      @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:spotify.metadata.proto.AudioFile)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.AudioFile)
    private static final com.spotify.metadata.Metadata.AudioFile DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.AudioFile();
    }

    public static com.spotify.metadata.Metadata.AudioFile getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<AudioFile>
        PARSER = new com.google.protobuf.AbstractParser<AudioFile>() {
      @java.lang.Override
      public AudioFile 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.AudioFile getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface VideoFileOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.metadata.proto.VideoFile)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional bytes file_id = 1;</code>
     * @return Whether the fileId field is set.
     */
    boolean hasFileId();
    /**
     * <code>optional bytes file_id = 1;</code>
     * @return The fileId.
     */
    com.google.protobuf.ByteString getFileId();
  }
  /**
   * Protobuf type {@code spotify.metadata.proto.VideoFile}
   */
  public  static final class VideoFile extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.metadata.proto.VideoFile)
      VideoFileOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use VideoFile.newBuilder() to construct.
    private VideoFile(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private VideoFile() {
      fileId_ = com.google.protobuf.ByteString.EMPTY;
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_VideoFile_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_VideoFile_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.metadata.Metadata.VideoFile.class, com.spotify.metadata.Metadata.VideoFile.Builder.class);
    }

    private int bitField0_;
    public static final int FILE_ID_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString fileId_;
    /**
     * <code>optional bytes file_id = 1;</code>
     * @return Whether the fileId field is set.
     */
    public boolean hasFileId() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional bytes file_id = 1;</code>
     * @return The fileId.
     */
    public com.google.protobuf.ByteString getFileId() {
      return fileId_;
    }

    public static com.spotify.metadata.Metadata.VideoFile parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.VideoFile parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.VideoFile parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.VideoFile parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.VideoFile parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.metadata.Metadata.VideoFile parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.metadata.Metadata.VideoFile parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.VideoFile 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.spotify.metadata.Metadata.VideoFile parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.VideoFile 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.spotify.metadata.Metadata.VideoFile parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.metadata.Metadata.VideoFile 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.spotify.metadata.Metadata.VideoFile 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;
    }
    /**
     * Protobuf type {@code spotify.metadata.proto.VideoFile}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.metadata.proto.VideoFile)
        com.spotify.metadata.Metadata.VideoFileOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_VideoFile_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_VideoFile_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.metadata.Metadata.VideoFile.class, com.spotify.metadata.Metadata.VideoFile.Builder.class);
      }

      // Construct using com.spotify.metadata.Metadata.VideoFile.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        fileId_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.metadata.Metadata.internal_static_spotify_metadata_proto_VideoFile_descriptor;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.VideoFile getDefaultInstanceForType() {
        return com.spotify.metadata.Metadata.VideoFile.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.VideoFile build() {
        com.spotify.metadata.Metadata.VideoFile result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.metadata.Metadata.VideoFile buildPartial() {
        com.spotify.metadata.Metadata.VideoFile result = new com.spotify.metadata.Metadata.VideoFile(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.fileId_ = fileId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @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);
      }
      private int bitField0_;

      private com.google.protobuf.ByteString fileId_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes file_id = 1;</code>
       * @return Whether the fileId field is set.
       */
      public boolean hasFileId() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional bytes file_id = 1;</code>
       * @return The fileId.
       */
      public com.google.protobuf.ByteString getFileId() {
        return fileId_;
      }
      /**
       * <code>optional bytes file_id = 1;</code>
       * @param value The fileId to set.
       * @return This builder for chaining.
       */
      public Builder setFileId(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        fileId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes file_id = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearFileId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        fileId_ = getDefaultInstance().getFileId();
        onChanged();
        return this;
      }
      @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:spotify.metadata.proto.VideoFile)
    }

    // @@protoc_insertion_point(class_scope:spotify.metadata.proto.VideoFile)
    private static final com.spotify.metadata.Metadata.VideoFile DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.metadata.Metadata.VideoFile();
    }

    public static com.spotify.metadata.Metadata.VideoFile getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<VideoFile>
        PARSER = new com.google.protobuf.AbstractParser<VideoFile>() {
      @java.lang.Override
      public VideoFile 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 (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.metadata.Metadata.VideoFile getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_Artist_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_Artist_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_Album_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_Album_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_Track_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_Track_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_Show_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_Show_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_Episode_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_Episode_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_Licensor_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_Licensor_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_TopTracks_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_TopTracks_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_ActivityPeriod_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_ActivityPeriod_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_AlbumGroup_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_AlbumGroup_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_Date_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_Date_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_Image_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_Image_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_ImageGroup_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_ImageGroup_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_Biography_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_Biography_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_Disc_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_Disc_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_Copyright_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_Copyright_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_Restriction_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_Restriction_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_Availability_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_Availability_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_SalePeriod_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_SalePeriod_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_ExternalId_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_ExternalId_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_AudioFile_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_AudioFile_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_metadata_proto_VideoFile_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_metadata_proto_VideoFile_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n\016metadata.proto\022\026spotify.metadata.proto" +
      "\"\212\007\n\006Artist\022\013\n\003gid\030\001 \001(\014\022\014\n\004name\030\002 \001(\t\022\022" +
      "\n\npopularity\030\003 \001(\021\0224\n\ttop_track\030\004 \003(\0132!." +
      "spotify.metadata.proto.TopTracks\0227\n\013albu" +
      "m_group\030\005 \003(\0132\".spotify.metadata.proto.A" +
      "lbumGroup\0228\n\014single_group\030\006 \003(\0132\".spotif" +
      "y.metadata.proto.AlbumGroup\022=\n\021compilati" +
      "on_group\030\007 \003(\0132\".spotify.metadata.proto." +
      "AlbumGroup\022<\n\020appears_on_group\030\010 \003(\0132\".s" +
      "potify.metadata.proto.AlbumGroup\022\r\n\005genr" +
      "e\030\t \003(\t\0227\n\013external_id\030\n \003(\0132\".spotify.m" +
      "etadata.proto.ExternalId\022/\n\010portrait\030\013 \003" +
      "(\0132\035.spotify.metadata.proto.Image\0224\n\tbio" +
      "graphy\030\014 \003(\0132!.spotify.metadata.proto.Bi" +
      "ography\022?\n\017activity_period\030\r \003(\0132&.spoti" +
      "fy.metadata.proto.ActivityPeriod\0228\n\013rest" +
      "riction\030\016 \003(\0132#.spotify.metadata.proto.R" +
      "estriction\022/\n\007related\030\017 \003(\0132\036.spotify.me" +
      "tadata.proto.Artist\022\037\n\027is_portrait_album" +
      "_cover\030\020 \001(\010\022:\n\016portrait_group\030\021 \001(\0132\".s" +
      "potify.metadata.proto.ImageGroup\0227\n\013sale" +
      "_period\030\022 \003(\0132\".spotify.metadata.proto.S" +
      "alePeriod\022:\n\014availability\030\024 \003(\0132$.spotif" +
      "y.metadata.proto.Availability\"\350\006\n\005Album\022" +
      "\013\n\003gid\030\001 \001(\014\022\014\n\004name\030\002 \001(\t\022.\n\006artist\030\003 \003" +
      "(\0132\036.spotify.metadata.proto.Artist\0220\n\004ty" +
      "pe\030\004 \001(\0162\".spotify.metadata.proto.Album." +
      "Type\022\r\n\005label\030\005 \001(\t\022*\n\004date\030\006 \001(\0132\034.spot" +
      "ify.metadata.proto.Date\022\022\n\npopularity\030\007 " +
      "\001(\021\022\r\n\005genre\030\010 \003(\t\022,\n\005cover\030\t \003(\0132\035.spot" +
      "ify.metadata.proto.Image\0227\n\013external_id\030" +
      "\n \003(\0132\".spotify.metadata.proto.ExternalI" +
      "d\022*\n\004disc\030\013 \003(\0132\034.spotify.metadata.proto" +
      ".Disc\022\016\n\006review\030\014 \003(\t\0224\n\tcopyright\030\r \003(\013" +
      "2!.spotify.metadata.proto.Copyright\0228\n\013r" +
      "estriction\030\016 \003(\0132#.spotify.metadata.prot" +
      "o.Restriction\022.\n\007related\030\017 \003(\0132\035.spotify" +
      ".metadata.proto.Album\0227\n\013sale_period\030\020 \003" +
      "(\0132\".spotify.metadata.proto.SalePeriod\0227" +
      "\n\013cover_group\030\021 \001(\0132\".spotify.metadata.p" +
      "roto.ImageGroup\022\026\n\016original_title\030\022 \001(\t\022" +
      "\025\n\rversion_title\030\023 \001(\t\022\020\n\010type_str\030\024 \001(\t" +
      "\022:\n\014availability\030\027 \003(\0132$.spotify.metadat" +
      "a.proto.Availability\"R\n\004Type\022\t\n\005ALBUM\020\001\022" +
      "\n\n\006SINGLE\020\002\022\017\n\013COMPILATION\020\003\022\006\n\002EP\020\004\022\r\n\t" +
      "AUDIOBOOK\020\005\022\013\n\007PODCAST\020\006\"\325\005\n\005Track\022\013\n\003gi" +
      "d\030\001 \001(\014\022\014\n\004name\030\002 \001(\t\022,\n\005album\030\003 \001(\0132\035.s" +
      "potify.metadata.proto.Album\022.\n\006artist\030\004 " +
      "\003(\0132\036.spotify.metadata.proto.Artist\022\016\n\006n" +
      "umber\030\005 \001(\021\022\023\n\013disc_number\030\006 \001(\021\022\020\n\010dura" +
      "tion\030\007 \001(\021\022\022\n\npopularity\030\010 \001(\021\022\020\n\010explic" +
      "it\030\t \001(\010\0227\n\013external_id\030\n \003(\0132\".spotify." +
      "metadata.proto.ExternalId\0228\n\013restriction" +
      "\030\013 \003(\0132#.spotify.metadata.proto.Restrict" +
      "ion\022/\n\004file\030\014 \003(\0132!.spotify.metadata.pro" +
      "to.AudioFile\0222\n\013alternative\030\r \003(\0132\035.spot" +
      "ify.metadata.proto.Track\0227\n\013sale_period\030" +
      "\016 \003(\0132\".spotify.metadata.proto.SalePerio" +
      "d\0222\n\007preview\030\017 \003(\0132!.spotify.metadata.pr" +
      "oto.AudioFile\022\014\n\004tags\030\020 \003(\t\022\037\n\027earliest_" +
      "live_timestamp\030\021 \001(\003\022\022\n\nhas_lyrics\030\022 \001(\010" +
      "\022:\n\014availability\030\023 \003(\0132$.spotify.metadat" +
      "a.proto.Availability\0222\n\010licensor\030\025 \001(\0132 " +
      ".spotify.metadata.proto.Licensor\"\277\005\n\004Sho" +
      "w\022\013\n\003gid\030\001 \001(\014\022\014\n\004name\030\002 \001(\t\022\023\n\013descript" +
      "ion\030@ \001(\t\022!\n\025deprecated_popularity\030A \001(\021" +
      "B\002\030\001\022\021\n\tpublisher\030B \001(\t\022\020\n\010language\030C \001(" +
      "\t\022\020\n\010explicit\030D \001(\010\0227\n\013cover_image\030E \001(\013" +
      "2\".spotify.metadata.proto.ImageGroup\0220\n\007" +
      "episode\030F \003(\0132\037.spotify.metadata.proto.E" +
      "pisode\0224\n\tcopyright\030G \003(\0132!.spotify.meta" +
      "data.proto.Copyright\0228\n\013restriction\030H \003(" +
      "\0132#.spotify.metadata.proto.Restriction\022\017" +
      "\n\007keyword\030I \003(\t\022:\n\nmedia_type\030J \001(\0162&.sp" +
      "otify.metadata.proto.Show.MediaType\022H\n\021c" +
      "onsumption_order\030K \001(\0162-.spotify.metadat" +
      "a.proto.Show.ConsumptionOrder\022:\n\014availab" +
      "ility\030N \003(\0132$.spotify.metadata.proto.Ava" +
      "ilability\022\023\n\013trailer_uri\030S \001(\t\",\n\tMediaT" +
      "ype\022\t\n\005MIXED\020\000\022\t\n\005AUDIO\020\001\022\t\n\005VIDEO\020\002\"<\n\020" +
      "ConsumptionOrder\022\016\n\nSEQUENTIAL\020\001\022\014\n\010EPIS" +
      "ODIC\020\002\022\n\n\006RECENT\020\003\"\371\006\n\007Episode\022\013\n\003gid\030\001 " +
      "\001(\014\022\014\n\004name\030\002 \001(\t\022\020\n\010duration\030\007 \001(\021\0220\n\005a" +
      "udio\030\014 \003(\0132!.spotify.metadata.proto.Audi" +
      "oFile\022\023\n\013description\030@ \001(\t\022\016\n\006number\030A \001" +
      "(\021\0222\n\014publish_time\030B \001(\0132\034.spotify.metad" +
      "ata.proto.Date\022!\n\025deprecated_popularity\030" +
      "C \001(\021B\002\030\001\0227\n\013cover_image\030D \001(\0132\".spotify" +
      ".metadata.proto.ImageGroup\022\020\n\010language\030E" +
      " \001(\t\022\020\n\010explicit\030F \001(\010\022*\n\004show\030G \001(\0132\034.s" +
      "potify.metadata.proto.Show\0220\n\005video\030H \003(" +
      "\0132!.spotify.metadata.proto.VideoFile\0228\n\r" +
      "video_preview\030I \003(\0132!.spotify.metadata.p" +
      "roto.VideoFile\0228\n\raudio_preview\030J \003(\0132!." +
      "spotify.metadata.proto.AudioFile\0228\n\013rest" +
      "riction\030K \003(\0132#.spotify.metadata.proto.R" +
      "estriction\0228\n\014freeze_frame\030L \001(\0132\".spoti" +
      "fy.metadata.proto.ImageGroup\022\017\n\007keyword\030" +
      "M \003(\t\022!\n\031allow_background_playback\030Q \001(\010" +
      "\022:\n\014availability\030R \003(\0132$.spotify.metadat" +
      "a.proto.Availability\022\024\n\014external_url\030S \001" +
      "(\t\0229\n\004type\030W \001(\0162+.spotify.metadata.prot" +
      "o.Episode.EpisodeType\"/\n\013EpisodeType\022\010\n\004" +
      "FULL\020\000\022\013\n\007TRAILER\020\001\022\t\n\005BONUS\020\002\"\030\n\010Licens" +
      "or\022\014\n\004uuid\030\001 \001(\014\"J\n\tTopTracks\022\017\n\007country" +
      "\030\001 \001(\t\022,\n\005track\030\002 \003(\0132\035.spotify.metadata" +
      ".proto.Track\"F\n\016ActivityPeriod\022\022\n\nstart_" +
      "year\030\001 \001(\021\022\020\n\010end_year\030\002 \001(\021\022\016\n\006decade\030\003" +
      " \001(\021\":\n\nAlbumGroup\022,\n\005album\030\001 \003(\0132\035.spot" +
      "ify.metadata.proto.Album\"N\n\004Date\022\014\n\004year" +
      "\030\001 \001(\021\022\r\n\005month\030\002 \001(\021\022\013\n\003day\030\003 \001(\021\022\014\n\004ho" +
      "ur\030\004 \001(\021\022\016\n\006minute\030\005 \001(\021\"\240\001\n\005Image\022\017\n\007fi" +
      "le_id\030\001 \001(\014\0220\n\004size\030\002 \001(\0162\".spotify.meta" +
      "data.proto.Image.Size\022\r\n\005width\030\003 \001(\021\022\016\n\006" +
      "height\030\004 \001(\021\"5\n\004Size\022\013\n\007DEFAULT\020\000\022\t\n\005SMA" +
      "LL\020\001\022\t\n\005LARGE\020\002\022\n\n\006XLARGE\020\003\":\n\nImageGrou" +
      "p\022,\n\005image\030\001 \003(\0132\035.spotify.metadata.prot" +
      "o.Image\"\206\001\n\tBiography\022\014\n\004text\030\001 \001(\t\022/\n\010p" +
      "ortrait\030\002 \003(\0132\035.spotify.metadata.proto.I" +
      "mage\022:\n\016portrait_group\030\003 \003(\0132\".spotify.m" +
      "etadata.proto.ImageGroup\"R\n\004Disc\022\016\n\006numb" +
      "er\030\001 \001(\021\022\014\n\004name\030\002 \001(\t\022,\n\005track\030\003 \003(\0132\035." +
      "spotify.metadata.proto.Track\"e\n\tCopyrigh" +
      "t\0224\n\004type\030\001 \001(\0162&.spotify.metadata.proto" +
      ".Copyright.Type\022\014\n\004text\030\002 \001(\t\"\024\n\004Type\022\005\n" +
      "\001P\020\000\022\005\n\001C\020\001\"\337\002\n\013Restriction\022@\n\tcatalogue" +
      "\030\001 \003(\0162-.spotify.metadata.proto.Restrict" +
      "ion.Catalogue\0226\n\004type\030\004 \001(\0162(.spotify.me" +
      "tadata.proto.Restriction.Type\022\025\n\rcatalog" +
      "ue_str\030\005 \003(\t\022\033\n\021countries_allowed\030\002 \001(\tH" +
      "\000\022\035\n\023countries_forbidden\030\003 \001(\tH\000\"U\n\tCata" +
      "logue\022\006\n\002AD\020\000\022\020\n\014SUBSCRIPTION\020\001\022\021\n\rCATAL" +
      "OGUE_ALL\020\002\022\013\n\007SHUFFLE\020\003\022\016\n\nCOMMERCIAL\020\004\"" +
      "\025\n\004Type\022\r\n\tSTREAMING\020\000B\025\n\023country_restri" +
      "ction\"R\n\014Availability\022\025\n\rcatalogue_str\030\001" +
      " \003(\t\022+\n\005start\030\002 \001(\0132\034.spotify.metadata.p" +
      "roto.Date\"\236\001\n\nSalePeriod\0228\n\013restriction\030" +
      "\001 \003(\0132#.spotify.metadata.proto.Restricti" +
      "on\022+\n\005start\030\002 \001(\0132\034.spotify.metadata.pro" +
      "to.Date\022)\n\003end\030\003 \001(\0132\034.spotify.metadata." +
      "proto.Date\"&\n\nExternalId\022\014\n\004type\030\001 \001(\t\022\n" +
      "\n\002id\030\002 \001(\t\"\211\002\n\tAudioFile\022\017\n\007file_id\030\001 \001(" +
      "\014\0228\n\006format\030\002 \001(\0162(.spotify.metadata.pro" +
      "to.AudioFile.Format\"\260\001\n\006Format\022\021\n\rOGG_VO" +
      "RBIS_96\020\000\022\022\n\016OGG_VORBIS_160\020\001\022\022\n\016OGG_VOR" +
      "BIS_320\020\002\022\013\n\007MP3_256\020\003\022\013\n\007MP3_320\020\004\022\013\n\007M" +
      "P3_160\020\005\022\n\n\006MP3_96\020\006\022\017\n\013MP3_160_ENC\020\007\022\n\n" +
      "\006AAC_24\020\010\022\n\n\006AAC_48\020\t\022\017\n\013AAC_24_NORM\020\020\"\034" +
      "\n\tVideoFile\022\017\n\007file_id\030\001 \001(\014B\"\n\024com.spot" +
      "ify.metadataB\010MetadataH\002"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        });
    internal_static_spotify_metadata_proto_Artist_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_spotify_metadata_proto_Artist_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_Artist_descriptor,
        new java.lang.String[] { "Gid", "Name", "Popularity", "TopTrack", "AlbumGroup", "SingleGroup", "CompilationGroup", "AppearsOnGroup", "Genre", "ExternalId", "Portrait", "Biography", "ActivityPeriod", "Restriction", "Related", "IsPortraitAlbumCover", "PortraitGroup", "SalePeriod", "Availability", });
    internal_static_spotify_metadata_proto_Album_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_spotify_metadata_proto_Album_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_Album_descriptor,
        new java.lang.String[] { "Gid", "Name", "Artist", "Type", "Label", "Date", "Popularity", "Genre", "Cover", "ExternalId", "Disc", "Review", "Copyright", "Restriction", "Related", "SalePeriod", "CoverGroup", "OriginalTitle", "VersionTitle", "TypeStr", "Availability", });
    internal_static_spotify_metadata_proto_Track_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_spotify_metadata_proto_Track_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_Track_descriptor,
        new java.lang.String[] { "Gid", "Name", "Album", "Artist", "Number", "DiscNumber", "Duration", "Popularity", "Explicit", "ExternalId", "Restriction", "File", "Alternative", "SalePeriod", "Preview", "Tags", "EarliestLiveTimestamp", "HasLyrics", "Availability", "Licensor", });
    internal_static_spotify_metadata_proto_Show_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_spotify_metadata_proto_Show_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_Show_descriptor,
        new java.lang.String[] { "Gid", "Name", "Description", "DeprecatedPopularity", "Publisher", "Language", "Explicit", "CoverImage", "Episode", "Copyright", "Restriction", "Keyword", "MediaType", "ConsumptionOrder", "Availability", "TrailerUri", });
    internal_static_spotify_metadata_proto_Episode_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_spotify_metadata_proto_Episode_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_Episode_descriptor,
        new java.lang.String[] { "Gid", "Name", "Duration", "Audio", "Description", "Number", "PublishTime", "DeprecatedPopularity", "CoverImage", "Language", "Explicit", "Show", "Video", "VideoPreview", "AudioPreview", "Restriction", "FreezeFrame", "Keyword", "AllowBackgroundPlayback", "Availability", "ExternalUrl", "Type", });
    internal_static_spotify_metadata_proto_Licensor_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_spotify_metadata_proto_Licensor_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_Licensor_descriptor,
        new java.lang.String[] { "Uuid", });
    internal_static_spotify_metadata_proto_TopTracks_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_spotify_metadata_proto_TopTracks_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_TopTracks_descriptor,
        new java.lang.String[] { "Country", "Track", });
    internal_static_spotify_metadata_proto_ActivityPeriod_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_spotify_metadata_proto_ActivityPeriod_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_ActivityPeriod_descriptor,
        new java.lang.String[] { "StartYear", "EndYear", "Decade", });
    internal_static_spotify_metadata_proto_AlbumGroup_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_spotify_metadata_proto_AlbumGroup_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_AlbumGroup_descriptor,
        new java.lang.String[] { "Album", });
    internal_static_spotify_metadata_proto_Date_descriptor =
      getDescriptor().getMessageTypes().get(9);
    internal_static_spotify_metadata_proto_Date_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_Date_descriptor,
        new java.lang.String[] { "Year", "Month", "Day", "Hour", "Minute", });
    internal_static_spotify_metadata_proto_Image_descriptor =
      getDescriptor().getMessageTypes().get(10);
    internal_static_spotify_metadata_proto_Image_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_Image_descriptor,
        new java.lang.String[] { "FileId", "Size", "Width", "Height", });
    internal_static_spotify_metadata_proto_ImageGroup_descriptor =
      getDescriptor().getMessageTypes().get(11);
    internal_static_spotify_metadata_proto_ImageGroup_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_ImageGroup_descriptor,
        new java.lang.String[] { "Image", });
    internal_static_spotify_metadata_proto_Biography_descriptor =
      getDescriptor().getMessageTypes().get(12);
    internal_static_spotify_metadata_proto_Biography_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_Biography_descriptor,
        new java.lang.String[] { "Text", "Portrait", "PortraitGroup", });
    internal_static_spotify_metadata_proto_Disc_descriptor =
      getDescriptor().getMessageTypes().get(13);
    internal_static_spotify_metadata_proto_Disc_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_Disc_descriptor,
        new java.lang.String[] { "Number", "Name", "Track", });
    internal_static_spotify_metadata_proto_Copyright_descriptor =
      getDescriptor().getMessageTypes().get(14);
    internal_static_spotify_metadata_proto_Copyright_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_Copyright_descriptor,
        new java.lang.String[] { "Type", "Text", });
    internal_static_spotify_metadata_proto_Restriction_descriptor =
      getDescriptor().getMessageTypes().get(15);
    internal_static_spotify_metadata_proto_Restriction_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_Restriction_descriptor,
        new java.lang.String[] { "Catalogue", "Type", "CatalogueStr", "CountriesAllowed", "CountriesForbidden", "CountryRestriction", });
    internal_static_spotify_metadata_proto_Availability_descriptor =
      getDescriptor().getMessageTypes().get(16);
    internal_static_spotify_metadata_proto_Availability_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_Availability_descriptor,
        new java.lang.String[] { "CatalogueStr", "Start", });
    internal_static_spotify_metadata_proto_SalePeriod_descriptor =
      getDescriptor().getMessageTypes().get(17);
    internal_static_spotify_metadata_proto_SalePeriod_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_SalePeriod_descriptor,
        new java.lang.String[] { "Restriction", "Start", "End", });
    internal_static_spotify_metadata_proto_ExternalId_descriptor =
      getDescriptor().getMessageTypes().get(18);
    internal_static_spotify_metadata_proto_ExternalId_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_ExternalId_descriptor,
        new java.lang.String[] { "Type", "Id", });
    internal_static_spotify_metadata_proto_AudioFile_descriptor =
      getDescriptor().getMessageTypes().get(19);
    internal_static_spotify_metadata_proto_AudioFile_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_AudioFile_descriptor,
        new java.lang.String[] { "FileId", "Format", });
    internal_static_spotify_metadata_proto_VideoFile_descriptor =
      getDescriptor().getMessageTypes().get(20);
    internal_static_spotify_metadata_proto_VideoFile_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_metadata_proto_VideoFile_descriptor,
        new java.lang.String[] { "FileId", });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
