/FileExtraction/Java_unseen/Kegbot_kegbot-android/kegtab/src/main/java/org/kegbot/proto/Api.java
// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: api.proto

package org.kegbot.proto;

public final class Api {
  private Api() {}
  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 MetaOrBuilder extends
      // @@protoc_insertion_point(interface_extends:Meta)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * The total number of records available for this request.
     * </pre>
     *
     * <code>optional uint32 total = 1;</code>
     * @return Whether the total field is set.
     */
    boolean hasTotal();
    /**
     * <pre>
     * The total number of records available for this request.
     * </pre>
     *
     * <code>optional uint32 total = 1;</code>
     * @return The total.
     */
    int getTotal();

    /**
     * <pre>
     * The maximum number of records returned in this request.
     * </pre>
     *
     * <code>optional uint32 limit = 2;</code>
     * @return Whether the limit field is set.
     */
    boolean hasLimit();
    /**
     * <pre>
     * The maximum number of records returned in this request.
     * </pre>
     *
     * <code>optional uint32 limit = 2;</code>
     * @return The limit.
     */
    int getLimit();

    /**
     * <pre>
     * The position of the first record returned, among "total".
     * </pre>
     *
     * <code>optional uint32 pos = 3;</code>
     * @return Whether the pos field is set.
     */
    boolean hasPos();
    /**
     * <pre>
     * The position of the first record returned, among "total".
     * </pre>
     *
     * <code>optional uint32 pos = 3;</code>
     * @return The pos.
     */
    int getPos();
  }
  /**
   * Protobuf type {@code Meta}
   */
  public static final class Meta extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:Meta)
      MetaOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Meta.newBuilder() to construct.
    private Meta(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Meta() {
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.kegbot.proto.Api.internal_static_Meta_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.kegbot.proto.Api.internal_static_Meta_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.kegbot.proto.Api.Meta.class, org.kegbot.proto.Api.Meta.Builder.class);
    }

    private int bitField0_;
    public static final int TOTAL_FIELD_NUMBER = 1;
    private int total_;
    /**
     * <pre>
     * The total number of records available for this request.
     * </pre>
     *
     * <code>optional uint32 total = 1;</code>
     * @return Whether the total field is set.
     */
    @java.lang.Override
    public boolean hasTotal() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     * The total number of records available for this request.
     * </pre>
     *
     * <code>optional uint32 total = 1;</code>
     * @return The total.
     */
    @java.lang.Override
    public int getTotal() {
      return total_;
    }

    public static final int LIMIT_FIELD_NUMBER = 2;
    private int limit_;
    /**
     * <pre>
     * The maximum number of records returned in this request.
     * </pre>
     *
     * <code>optional uint32 limit = 2;</code>
     * @return Whether the limit field is set.
     */
    @java.lang.Override
    public boolean hasLimit() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * The maximum number of records returned in this request.
     * </pre>
     *
     * <code>optional uint32 limit = 2;</code>
     * @return The limit.
     */
    @java.lang.Override
    public int getLimit() {
      return limit_;
    }

    public static final int POS_FIELD_NUMBER = 3;
    private int pos_;
    /**
     * <pre>
     * The position of the first record returned, among "total".
     * </pre>
     *
     * <code>optional uint32 pos = 3;</code>
     * @return Whether the pos field is set.
     */
    @java.lang.Override
    public boolean hasPos() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <pre>
     * The position of the first record returned, among "total".
     * </pre>
     *
     * <code>optional uint32 pos = 3;</code>
     * @return The pos.
     */
    @java.lang.Override
    public int getPos() {
      return pos_;
    }

    public static org.kegbot.proto.Api.Meta parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.kegbot.proto.Api.Meta parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.kegbot.proto.Api.Meta parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.kegbot.proto.Api.Meta parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.kegbot.proto.Api.Meta parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.kegbot.proto.Api.Meta parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.kegbot.proto.Api.Meta parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.kegbot.proto.Api.Meta 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 org.kegbot.proto.Api.Meta parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.kegbot.proto.Api.Meta 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 org.kegbot.proto.Api.Meta parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.kegbot.proto.Api.Meta 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(org.kegbot.proto.Api.Meta 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 Meta}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:Meta)
        org.kegbot.proto.Api.MetaOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.kegbot.proto.Api.internal_static_Meta_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.kegbot.proto.Api.internal_static_Meta_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.kegbot.proto.Api.Meta.class, org.kegbot.proto.Api.Meta.Builder.class);
      }

      // Construct using org.kegbot.proto.Api.Meta.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();
        total_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        limit_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        pos_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.kegbot.proto.Api.internal_static_Meta_descriptor;
      }

      @java.lang.Override
      public org.kegbot.proto.Api.Meta getDefaultInstanceForType() {
        return org.kegbot.proto.Api.Meta.getDefaultInstance();
      }

      @java.lang.Override
      public org.kegbot.proto.Api.Meta build() {
        org.kegbot.proto.Api.Meta result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.kegbot.proto.Api.Meta buildPartial() {
        org.kegbot.proto.Api.Meta result = new org.kegbot.proto.Api.Meta(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.total_ = total_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.limit_ = limit_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.pos_ = pos_;
          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 total_ ;
      /**
       * <pre>
       * The total number of records available for this request.
       * </pre>
       *
       * <code>optional uint32 total = 1;</code>
       * @return Whether the total field is set.
       */
      @java.lang.Override
      public boolean hasTotal() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <pre>
       * The total number of records available for this request.
       * </pre>
       *
       * <code>optional uint32 total = 1;</code>
       * @return The total.
       */
      @java.lang.Override
      public int getTotal() {
        return total_;
      }
      /**
       * <pre>
       * The total number of records available for this request.
       * </pre>
       *
       * <code>optional uint32 total = 1;</code>
       * @param value The total to set.
       * @return This builder for chaining.
       */
      public Builder setTotal(int value) {
        bitField0_ |= 0x00000001;
        total_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The total number of records available for this request.
       * </pre>
       *
       * <code>optional uint32 total = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearTotal() {
        bitField0_ = (bitField0_ & ~0x00000001);
        total_ = 0;
        onChanged();
        return this;
      }

      private int limit_ ;
      /**
       * <pre>
       * The maximum number of records returned in this request.
       * </pre>
       *
       * <code>optional uint32 limit = 2;</code>
       * @return Whether the limit field is set.
       */
      @java.lang.Override
      public boolean hasLimit() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <pre>
       * The maximum number of records returned in this request.
       * </pre>
       *
       * <code>optional uint32 limit = 2;</code>
       * @return The limit.
       */
      @java.lang.Override
      public int getLimit() {
        return limit_;
      }
      /**
       * <pre>
       * The maximum number of records returned in this request.
       * </pre>
       *
       * <code>optional uint32 limit = 2;</code>
       * @param value The limit to set.
       * @return This builder for chaining.
       */
      public Builder setLimit(int value) {
        bitField0_ |= 0x00000002;
        limit_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The maximum number of records returned in this request.
       * </pre>
       *
       * <code>optional uint32 limit = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearLimit() {
        bitField0_ = (bitField0_ & ~0x00000002);
        limit_ = 0;
        onChanged();
        return this;
      }

      private int pos_ ;
      /**
       * <pre>
       * The position of the first record returned, among "total".
       * </pre>
       *
       * <code>optional uint32 pos = 3;</code>
       * @return Whether the pos field is set.
       */
      @java.lang.Override
      public boolean hasPos() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <pre>
       * The position of the first record returned, among "total".
       * </pre>
       *
       * <code>optional uint32 pos = 3;</code>
       * @return The pos.
       */
      @java.lang.Override
      public int getPos() {
        return pos_;
      }
      /**
       * <pre>
       * The position of the first record returned, among "total".
       * </pre>
       *
       * <code>optional uint32 pos = 3;</code>
       * @param value The pos to set.
       * @return This builder for chaining.
       */
      public Builder setPos(int value) {
        bitField0_ |= 0x00000004;
        pos_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The position of the first record returned, among "total".
       * </pre>
       *
       * <code>optional uint32 pos = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearPos() {
        bitField0_ = (bitField0_ & ~0x00000004);
        pos_ = 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:Meta)
    }

    // @@protoc_insertion_point(class_scope:Meta)
    private static final org.kegbot.proto.Api.Meta DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.kegbot.proto.Api.Meta();
    }

    public static org.kegbot.proto.Api.Meta getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Meta>
        PARSER = new com.google.protobuf.AbstractParser<Meta>() {
      @java.lang.Override
      public Meta 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<Meta> parser() {
      return PARSER;
    }

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

    @java.lang.Override
    public org.kegbot.proto.Api.Meta getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface UserRegistrationRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:UserRegistrationRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Desired username.
     * </pre>
     *
     * <code>required string username = 1;</code>
     * @return Whether the username field is set.
     */
    boolean hasUsername();
    /**
     * <pre>
     * Desired username.
     * </pre>
     *
     * <code>required string username = 1;</code>
     * @return The username.
     */
    java.lang.String getUsername();
    /**
     * <pre>
     * Desired username.
     * </pre>
     *
     * <code>required string username = 1;</code>
     * @return The bytes for username.
     */
    com.google.protobuf.ByteString
        getUsernameBytes();

    /**
     * <pre>
     * User's e-mail address.
     * </pre>
     *
     * <code>required string email = 2;</code>
     * @return Whether the email field is set.
     */
    boolean hasEmail();
    /**
     * <pre>
     * User's e-mail address.
     * </pre>
     *
     * <code>required string email = 2;</code>
     * @return The email.
     */
    java.lang.String getEmail();
    /**
     * <pre>
     * User's e-mail address.
     * </pre>
     *
     * <code>required string email = 2;</code>
     * @return The bytes for email.
     */
    com.google.protobuf.ByteString
        getEmailBytes();

    /**
     * <pre>
     * Initial password for logging in.  If unspecified, the account will be
     * registered with a random password, which can be e-mailed to the user.
     * </pre>
     *
     * <code>optional string password = 3;</code>
     * @return Whether the password field is set.
     */
    boolean hasPassword();
    /**
     * <pre>
     * Initial password for logging in.  If unspecified, the account will be
     * registered with a random password, which can be e-mailed to the user.
     * </pre>
     *
     * <code>optional string password = 3;</code>
     * @return The password.
     */
    java.lang.String getPassword();
    /**
     * <pre>
     * Initial password for logging in.  If unspecified, the account will be
     * registered with a random password, which can be e-mailed to the user.
     * </pre>
     *
     * <code>optional string password = 3;</code>
     * @return The bytes for password.
     */
    com.google.protobuf.ByteString
        getPasswordBytes();

    /**
     * <pre>
     * One of "male", "female".
     * </pre>
     *
     * <code>optional string gender = 4;</code>
     * @return Whether the gender field is set.
     */
    boolean hasGender();
    /**
     * <pre>
     * One of "male", "female".
     * </pre>
     *
     * <code>optional string gender = 4;</code>
     * @return The gender.
     */
    java.lang.String getGender();
    /**
     * <pre>
     * One of "male", "female".
     * </pre>
     *
     * <code>optional string gender = 4;</code>
     * @return The bytes for gender.
     */
    com.google.protobuf.ByteString
        getGenderBytes();

    /**
     * <pre>
     * Twitter username.
     * </pre>
     *
     * <code>optional string twitter_name = 5;</code>
     * @return Whether the twitterName field is set.
     */
    boolean hasTwitterName();
    /**
     * <pre>
     * Twitter username.
     * </pre>
     *
     * <code>optional string twitter_name = 5;</code>
     * @return The twitterName.
     */
    java.lang.String getTwitterName();
    /**
     * <pre>
     * Twitter username.
     * </pre>
     *
     * <code>optional string twitter_name = 5;</code>
     * @return The bytes for twitterName.
     */
    com.google.protobuf.ByteString
        getTwitterNameBytes();
  }
  /**
   * Protobuf type {@code UserRegistrationRequest}
   */
  public static final class UserRegistrationRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:UserRegistrationRequest)
      UserRegistrationRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use UserRegistrationRequest.newBuilder() to construct.
    private UserRegistrationRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private UserRegistrationRequest() {
      username_ = "";
      email_ = "";
      password_ = "";
      gender_ = "";
      twitterName_ = "";
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.kegbot.proto.Api.internal_static_UserRegistrationRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.kegbot.proto.Api.internal_static_UserRegistrationRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.kegbot.proto.Api.UserRegistrationRequest.class, org.kegbot.proto.Api.UserRegistrationRequest.Builder.class);
    }

    private int bitField0_;
    public static final int USERNAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object username_;
    /**
     * <pre>
     * Desired username.
     * </pre>
     *
     * <code>required string username = 1;</code>
     * @return Whether the username field is set.
     */
    @java.lang.Override
    public boolean hasUsername() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     * Desired username.
     * </pre>
     *
     * <code>required string username = 1;</code>
     * @return The username.
     */
    @java.lang.Override
    public java.lang.String getUsername() {
      java.lang.Object ref = username_;
      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()) {
          username_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Desired username.
     * </pre>
     *
     * <code>required string username = 1;</code>
     * @return The bytes for username.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getUsernameBytes() {
      java.lang.Object ref = username_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        username_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int EMAIL_FIELD_NUMBER = 2;
    private volatile java.lang.Object email_;
    /**
     * <pre>
     * User's e-mail address.
     * </pre>
     *
     * <code>required string email = 2;</code>
     * @return Whether the email field is set.
     */
    @java.lang.Override
    public boolean hasEmail() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * User's e-mail address.
     * </pre>
     *
     * <code>required string email = 2;</code>
     * @return The email.
     */
    @java.lang.Override
    public java.lang.String getEmail() {
      java.lang.Object ref = email_;
      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()) {
          email_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * User's e-mail address.
     * </pre>
     *
     * <code>required string email = 2;</code>
     * @return The bytes for email.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getEmailBytes() {
      java.lang.Object ref = email_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        email_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PASSWORD_FIELD_NUMBER = 3;
    private volatile java.lang.Object password_;
    /**
     * <pre>
     * Initial password for logging in.  If unspecified, the account will be
     * registered with a random password, which can be e-mailed to the user.
     * </pre>
     *
     * <code>optional string password = 3;</code>
     * @return Whether the password field is set.
     */
    @java.lang.Override
    public boolean hasPassword() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <pre>
     * Initial password for logging in.  If unspecified, the account will be
     * registered with a random password, which can be e-mailed to the user.
     * </pre>
     *
     * <code>optional string password = 3;</code>
     * @return The password.
     */
    @java.lang.Override
    public java.lang.String getPassword() {
      java.lang.Object ref = password_;
      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()) {
          password_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Initial password for logging in.  If unspecified, the account will be
     * registered with a random password, which can be e-mailed to the user.
     * </pre>
     *
     * <code>optional string password = 3;</code>
     * @return The bytes for password.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getPasswordBytes() {
      java.lang.Object ref = password_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        password_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int GENDER_FIELD_NUMBER = 4;
    private volatile java.lang.Object gender_;
    /**
     * <pre>
     * One of "male", "female".
     * </pre>
     *
     * <code>optional string gender = 4;</code>
     * @return Whether the gender field is set.
     */
    @java.lang.Override
    public boolean hasGender() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <pre>
     * One of "male", "female".
     * </pre>
     *
     * <code>optional string gender = 4;</code>
     * @return The gender.
     */
    @java.lang.Override
    public java.lang.String getGender() {
      java.lang.Object ref = gender_;
      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()) {
          gender_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * One of "male", "female".
     * </pre>
     *
     * <code>optional string gender = 4;</code>
     * @return The bytes for gender.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getGenderBytes() {
      java.lang.Object ref = gender_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gender_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TWITTER_NAME_FIELD_NUMBER = 5;
    private volatile java.lang.Object twitterName_;
    /**
     * <pre>
     * Twitter username.
     * </pre>
     *
     * <code>optional string twitter_name = 5;</code>
     * @return Whether the twitterName field is set.
     */
    @java.lang.Override
    public boolean hasTwitterName() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <pre>
     * Twitter username.
     * </pre>
     *
     * <code>optional string twitter_name = 5;</code>
     * @return The twitterName.
     */
    @java.lang.Override
    public java.lang.String getTwitterName() {
      java.lang.Object ref = twitterName_;
      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()) {
          twitterName_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Twitter username.
     * </pre>
     *
     * <code>optional string twitter_name = 5;</code>
     * @return The bytes for twitterName.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getTwitterNameBytes() {
      java.lang.Object ref = twitterName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        twitterName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static org.kegbot.proto.Api.UserRegistrationRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.kegbot.proto.Api.UserRegistrationRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.kegbot.proto.Api.UserRegistrationRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.kegbot.proto.Api.UserRegistrationRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.kegbot.proto.Api.UserRegistrationRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.kegbot.proto.Api.UserRegistrationRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.kegbot.proto.Api.UserRegistrationRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.kegbot.proto.Api.UserRegistrationRequest 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 org.kegbot.proto.Api.UserRegistrationRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.kegbot.proto.Api.UserRegistrationRequest 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 org.kegbot.proto.Api.UserRegistrationRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.kegbot.proto.Api.UserRegistrationRequest 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(org.kegbot.proto.Api.UserRegistrationRequest 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 UserRegistrationRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:UserRegistrationRequest)
        org.kegbot.proto.Api.UserRegistrationRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.kegbot.proto.Api.internal_static_UserRegistrationRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.kegbot.proto.Api.internal_static_UserRegistrationRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.kegbot.proto.Api.UserRegistrationRequest.class, org.kegbot.proto.Api.UserRegistrationRequest.Builder.class);
      }

      // Construct using org.kegbot.proto.Api.UserRegistrationRequest.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();
        username_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        email_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        password_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        gender_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        twitterName_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.kegbot.proto.Api.internal_static_UserRegistrationRequest_descriptor;
      }

      @java.lang.Override
      public org.kegbot.proto.Api.UserRegistrationRequest getDefaultInstanceForType() {
        return org.kegbot.proto.Api.UserRegistrationRequest.getDefaultInstance();
      }

      @java.lang.Override
      public org.kegbot.proto.Api.UserRegistrationRequest build() {
        org.kegbot.proto.Api.UserRegistrationRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.kegbot.proto.Api.UserRegistrationRequest buildPartial() {
        org.kegbot.proto.Api.UserRegistrationRequest result = new org.kegbot.proto.Api.UserRegistrationRequest(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.username_ = username_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.email_ = email_;
        if (((from_bitField0_ & 0x00000004) != 0)) {
          to_bitField0_ |= 0x00000004;
        }
        result.password_ = password_;
        if (((from_bitField0_ & 0x00000008) != 0)) {
          to_bitField0_ |= 0x00000008;
        }
        result.gender_ = gender_;
        if (((from_bitField0_ & 0x00000010) != 0)) {
          to_bitField0_ |= 0x00000010;
        }
        result.twitterName_ = twitterName_;
        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 username_ = "";
      /**
       * <pre>
       * Desired username.
       * </pre>
       *
       * <code>required string username = 1;</code>
       * @return Whether the username field is set.
       */
      public boolean hasUsername() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <pre>
       * Desired username.
       * </pre>
       *
       * <code>required string username = 1;</code>
       * @return The username.
       */
      public java.lang.String getUsername() {
        java.lang.Object ref = username_;
        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()) {
            username_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Desired username.
       * </pre>
       *
       * <code>required string username = 1;</code>
       * @return The bytes for username.
       */
      public com.google.protobuf.ByteString
          getUsernameBytes() {
        java.lang.Object ref = username_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          username_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Desired username.
       * </pre>
       *
       * <code>required string username = 1;</code>
       * @param value The username to set.
       * @return This builder for chaining.
       */
      public Builder setUsername(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        username_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Desired username.
       * </pre>
       *
       * <code>required string username = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearUsername() {
        bitField0_ = (bitField0_ & ~0x00000001);
        username_ = getDefaultInstance().getUsername();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Desired username.
       * </pre>
       *
       * <code>required string username = 1;</code>
       * @param value The bytes for username to set.
       * @return This builder for chaining.
       */
      public Builder setUsernameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        username_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object email_ = "";
      /**
       * <pre>
       * User's e-mail address.
       * </pre>
       *
       * <code>required string email = 2;</code>
       * @return Whether the email field is set.
       */
      public boolean hasEmail() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <pre>
       * User's e-mail address.
       * </pre>
       *
       * <code>required string email = 2;</code>
       * @return The email.
       */
      public java.lang.String getEmail() {
        java.lang.Object ref = email_;
        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()) {
            email_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * User's e-mail address.
       * </pre>
       *
       * <code>required string email = 2;</code>
       * @return The bytes for email.
       */
      public com.google.protobuf.ByteString
          getEmailBytes() {
        java.lang.Object ref = email_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          email_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * User's e-mail address.
       * </pre>
       *
       * <code>required string email = 2;</code>
       * @param value The email to set.
       * @return This builder for chaining.
       */
      public Builder setEmail(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        email_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * User's e-mail address.
       * </pre>
       *
       * <code>required string email = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearEmail() {
        bitField0_ = (bitField0_ & ~0x00000002);
        email_ = getDefaultInstance().getEmail();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * User's e-mail address.
       * </pre>
       *
       * <code>required string email = 2;</code>
       * @param value The bytes for email to set.
       * @return This builder for chaining.
       */
      public Builder setEmailBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        email_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object password_ = "";
      /**
       * <pre>
       * Initial password for logging in.  If unspecified, the account will be
       * registered with a random password, which can be e-mailed to the user.
       * </pre>
       *
       * <code>optional string password = 3;</code>
       * @return Whether the password field is set.
       */
      public boolean hasPassword() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <pre>
       * Initial password for logging in.  If unspecified, the account will be
       * registered with a random password, which can be e-mailed to the user.
       * </pre>
       *
       * <code>optional string password = 3;</code>
       * @return The password.
       */
      public java.lang.String getPassword() {
        java.lang.Object ref = password_;
        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()) {
            password_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Initial password for logging in.  If unspecified, the account will be
       * registered with a random password, which can be e-mailed to the user.
       * </pre>
       *
       * <code>optional string password = 3;</code>
       * @return The bytes for password.
       */
      public com.google.protobuf.ByteString
          getPasswordBytes() {
        java.lang.Object ref = password_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          password_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Initial password for logging in.  If unspecified, the account will be
       * registered with a random password, which can be e-mailed to the user.
       * </pre>
       *
       * <code>optional string password = 3;</code>
       * @param value The password to set.
       * @return This builder for chaining.
       */
      public Builder setPassword(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        password_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Initial password for logging in.  If unspecified, the account will be
       * registered with a random password, which can be e-mailed to the user.
       * </pre>
       *
       * <code>optional string password = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearPassword() {
        bitField0_ = (bitField0_ & ~0x00000004);
        password_ = getDefaultInstance().getPassword();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Initial password for logging in.  If unspecified, the account will be
       * registered with a random password, which can be e-mailed to the user.
       * </pre>
       *
       * <code>optional string password = 3;</code>
       * @param value The bytes for password to set.
       * @return This builder for chaining.
       */
      public Builder setPasswordBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        password_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object gender_ = "";
      /**
       * <pre>
       * One of "male", "female".
       * </pre>
       *
       * <code>optional string gender = 4;</code>
       * @return Whether the gender field is set.
       */
      public boolean hasGender() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <pre>
       * One of "male", "female".
       * </pre>
       *
       * <code>optional string gender = 4;</code>
       * @return The gender.
       */
      public java.lang.String getGender() {
        java.lang.Object ref = gender_;
        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()) {
            gender_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * One of "male", "female".
       * </pre>
       *
       * <code>optional string gender = 4;</code>
       * @return The bytes for gender.
       */
      public com.google.protobuf.ByteString
          getGenderBytes() {
        java.lang.Object ref = gender_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gender_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * One of "male", "female".
       * </pre>
       *
       * <code>optional string gender = 4;</code>
       * @param value The gender to set.
       * @return This builder for chaining.
       */
      public Builder setGender(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        gender_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * One of "male", "female".
       * </pre>
       *
       * <code>optional string gender = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearGender() {
        bitField0_ = (bitField0_ & ~0x00000008);
        gender_ = getDefaultInstance().getGender();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * One of "male", "female".
       * </pre>
       *
       * <code>optional string gender = 4;</code>
       * @param value The bytes for gender to set.
       * @return This builder for chaining.
       */
      public Builder setGenderBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        gender_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object twitterName_ = "";
      /**
       * <pre>
       * Twitter username.
       * </pre>
       *
       * <code>optional string twitter_name = 5;</code>
       * @return Whether the twitterName field is set.
       */
      public boolean hasTwitterName() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <pre>
       * Twitter username.
       * </pre>
       *
       * <code>optional string twitter_name = 5;</code>
       * @return The twitterName.
       */
      public java.lang.String getTwitterName() {
        java.lang.Object ref = twitterName_;
        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()) {
            twitterName_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Twitter username.
       * </pre>
       *
       * <code>optional string twitter_name = 5;</code>
       * @return The bytes for twitterName.
       */
      public com.google.protobuf.ByteString
          getTwitterNameBytes() {
        java.lang.Object ref = twitterName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          twitterName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Twitter username.
       * </pre>
       *
       * <code>optional string twitter_name = 5;</code>
       * @param value The twitterName to set.
       * @return This builder for chaining.
       */
      public Builder setTwitterName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        twitterName_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Twitter username.
       * </pre>
       *
       * <code>optional string twitter_name = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearTwitterName() {
        bitField0_ = (bitField0_ & ~0x00000010);
        twitterName_ = getDefaultInstance().getTwitterName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Twitter username.
       * </pre>
       *
       * <code>optional string twitter_name = 5;</code>
       * @param value The bytes for twitterName to set.
       * @return This builder for chaining.
       */
      public Builder setTwitterNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        twitterName_ = 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:UserRegistrationRequest)
    }

    // @@protoc_insertion_point(class_scope:UserRegistrationRequest)
    private static final org.kegbot.proto.Api.UserRegistrationRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.kegbot.proto.Api.UserRegistrationRequest();
    }

    public static org.kegbot.proto.Api.UserRegistrationRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<UserRegistrationRequest>
        PARSER = new com.google.protobuf.AbstractParser<UserRegistrationRequest>() {
      @java.lang.Override
      public UserRegistrationRequest 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<UserRegistrationRequest> parser() {
      return PARSER;
    }

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

    @java.lang.Override
    public org.kegbot.proto.Api.UserRegistrationRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RecordDrinkRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:RecordDrinkRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Name of the tap on which this drink was poured.  This information is
     * required, but this field may be omitted when the tap name is given
     * elsewhere.  (In the Kegweb API, the tap_name is part of the URL receiving
     * the POST.)
     * </pre>
     *
     * <code>optional string tap_name = 1;</code>
     * @return Whether the tapName field is set.
     */
    boolean hasTapName();
    /**
     * <pre>
     * Name of the tap on which this drink was poured.  This information is
     * required, but this field may be omitted when the tap name is given
     * elsewhere.  (In the Kegweb API, the tap_name is part of the URL receiving
     * the POST.)
     * </pre>
     *
     * <code>optional string tap_name = 1;</code>
     * @return The tapName.
     */
    java.lang.String getTapName();
    /**
     * <pre>
     * Name of the tap on which this drink was poured.  This information is
     * required, but this field may be omitted when the tap name is given
     * elsewhere.  (In the Kegweb API, the tap_name is part of the URL receiving
     * the POST.)
     * </pre>
     *
     * <code>optional string tap_name = 1;</code>
     * @return The bytes for tapName.
     */
    com.google.protobuf.ByteString
        getTapNameBytes();

    /**
     * <pre>
     * The number of ticks, as reported by the flowmeter.  Required.
     * </pre>
     *
     * <code>required uint32 ticks = 2;</code>
     * @return Whether the ticks field is set.
     */
    boolean hasTicks();
    /**
     * <pre>
     * The number of ticks, as reported by the flowmeter.  Required.
     * </pre>
     *
     * <code>required uint32 ticks = 2;</code>
     * @return The ticks.
     */
    int getTicks();

    /**
     * <pre>
     * The volume of the pour.  If unspecified, the backend will use the current
     * tap configuration to compute the pour's volume based on the value of
     * "ticks".
     * </pre>
     *
     * <code>optional float volume_ml = 3;</code>
     * @return Whether the volumeMl field is set.
     */
    boolean hasVolumeMl();
    /**
     * <pre>
     * The volume of the pour.  If unspecified, the backend will use the current
     * tap configuration to compute the pour's volume based on the value of
     * "ticks".
     * </pre>
     *
     * <code>optional float volume_ml = 3;</code>
     * @return The volumeMl.
     */
    float getVolumeMl();

    /**
     * <pre>
     * The username responsible for the pour.  If unspecified, this pour is
     * treated as an anonymous pour.
     * </pre>
     *
     * <code>optional string username = 4;</code>
     * @return Whether the username field is set.
     */
    boolean hasUsername();
    /**
     * <pre>
     * The username responsible for the pour.  If unspecified, this pour is
     * treated as an anonymous pour.
     * </pre>
     *
     * <code>optional string username = 4;</code>
     * @return The username.
     */
    java.lang.String getUsername();
    /**
     * <pre>
     * The username responsible for the pour.  If unspecified, this pour is
     * treated as an anonymous pour.
     * </pre>
     *
     * <code>optional string username = 4;</code>
     * @return The bytes for username.
     */
    com.google.protobuf.ByteString
        getUsernameBytes();

    /**
     * <pre>
     * The date and time of the pour, in seconds before "now", where "now" is the
     * current time on the backend at the time the request is processed.  If this
     * field is unspecified, a default value of "0" (meaning "now") is assumed.
     * This value is ignored if "record_date" is specified.
     * </pre>
     *
     * <code>optional uint32 seconds_ago = 5 [default = 0];</code>
     * @return Whether the secondsAgo field is set.
     */
    boolean hasSecondsAgo();
    /**
     * <pre>
     * The date and time of the pour, in seconds before "now", where "now" is the
     * current time on the backend at the time the request is processed.  If this
     * field is unspecified, a default value of "0" (meaning "now") is assumed.
     * This value is ignored if "record_date" is specified.
     * </pre>
     *
     * <code>optional uint32 seconds_ago = 5 [default = 0];</code>
     * @return The secondsAgo.
     */
    int getSecondsAgo();

    /**
     * <pre>
     * The absolute date and time of the pour, as an ISO8061 UTC timestamp.  If
     * specified and valid, this value supercedes any value given for
     * "seconds_ago", which will be ignored.
     * </pre>
     *
     * <code>optional string record_date = 6;</code>
     * @return Whether the recordDate field is set.
     */
    boolean hasRecordDate();
    /**
     * <pre>
     * The absolute date and time of the pour, as an ISO8061 UTC timestamp.  If
     * specified and valid, this value supercedes any value given for
     * "seconds_ago", which will be ignored.
     * </pre>
     *
     * <code>optional string record_date = 6;</code>
     * @return The recordDate.
     */
    java.lang.String getRecordDate();
    /**
     * <pre>
     * The absolute date and time of the pour, as an ISO8061 UTC timestamp.  If
     * specified and valid, this value supercedes any value given for
     * "seconds_ago", which will be ignored.
     * </pre>
     *
     * <code>optional string record_date = 6;</code>
     * @return The bytes for recordDate.
     */
    com.google.protobuf.ByteString
        getRecordDateBytes();

    /**
     * <pre>
     * The time taken, in seconds, to complete the pour.
     * </pre>
     *
     * <code>optional uint32 duration_seconds = 7;</code>
     * @return Whether the durationSeconds field is set.
     */
    boolean hasDurationSeconds();
    /**
     * <pre>
     * The time taken, in seconds, to complete the pour.
     * </pre>
     *
     * <code>optional uint32 duration_seconds = 7;</code>
     * @return The durationSeconds.
     */
    int getDurationSeconds();

    /**
     * <pre>
     * The authentication token used to pour the drink.
     * </pre>
     *
     * <code>optional string auth_token = 8;</code>
     * @return Whether the authToken field is set.
     */
    boolean hasAuthToken();
    /**
     * <pre>
     * The authentication token used to pour the drink.
     * </pre>
     *
     * <code>optional string auth_token = 8;</code>
     * @return The authToken.
     */
    java.lang.String getAuthToken();
    /**
     * <pre>
     * The authentication token used to pour the drink.
     * </pre>
     *
     * <code>optional string auth_token = 8;</code>
     * @return The bytes for authToken.
     */
    com.google.protobuf.ByteString
        getAuthTokenBytes();

    /**
     * <pre>
     * If true, the pour is recorded as "spilled": no drink record will be
     * generated, and all fields other than "tap_name" and the volume ("ticks", or
     * "volume_ml" if given) are ignored.  The volume will be added to the
     * spilled total for the tap’s current keg.
     * </pre>
     *
     * <code>optional bool spilled = 9;</code>
     * @return Whether the spilled field is set.
     */
    boolean hasSpilled();
    /**
     * <pre>
     * If true, the pour is recorded as "spilled": no drink record will be
     * generated, and all fields other than "tap_name" and the volume ("ticks", or
     * "volume_ml" if given) are ignored.  The volume will be added to the
     * spilled total for the tap’s current keg.
     * </pre>
     *
     * <code>optional bool spilled = 9;</code>
     * @return The spilled.
     */
    boolean getSpilled();

    /**
     * <pre>
     * Optional message from the user about the pour.
     * </pre>
     *
     * <code>optional string shout = 10;</code>
     * @return Whether the shout field is set.
     */
    boolean hasShout();
    /**
     * <pre>
     * Optional message from the user about the pour.
     * </pre>
     *
     * <code>optional string shout = 10;</code>
     * @return The shout.
     */
    java.lang.String getShout();
    /**
     * <pre>
     * Optional message from the user about the pour.
     * </pre>
     *
     * <code>optional string shout = 10;</code>
     * @return The bytes for shout.
     */
    com.google.protobuf.ByteString
        getShoutBytes();

    /**
     * <pre>
     * See Drink model.
     * </pre>
     *
     * <code>optional string tick_time_series = 11;</code>
     * @return Whether the tickTimeSeries field is set.
     */
    boolean hasTickTimeSeries();
    /**
     * <pre>
     * See Drink model.
     * </pre>
     *
     * <code>optional string tick_time_series = 11;</code>
     * @return The tickTimeSeries.
     */
    java.lang.String getTickTimeSeries();
    /**
     * <pre>
     * See Drink model.
     * </pre>
     *
     * <code>optional string tick_time_series = 11;</code>
     * @return The bytes for tickTimeSeries.
     */
    com.google.protobuf.ByteString
        getTickTimeSeriesBytes();
  }
  /**
   * <pre>
   * Message used for recording a new drink on the backend.
   * </pre>
   *
   * Protobuf type {@code RecordDrinkRequest}
   */
  public static final class RecordDrinkRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:RecordDrinkRequest)
      RecordDrinkRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RecordDrinkRequest.newBuilder() to construct.
    private RecordDrinkRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RecordDrinkRequest() {
      tapName_ = "";
      username_ = "";
      recordDate_ = "";
      authToken_ = "";
      shout_ = "";
      tickTimeSeries_ = "";
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.kegbot.proto.Api.internal_static_RecordDrinkRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.kegbot.proto.Api.internal_static_RecordDrinkRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.kegbot.proto.Api.RecordDrinkRequest.class, org.kegbot.proto.Api.RecordDrinkRequest.Builder.class);
    }

    private int bitField0_;
    public static final int TAP_NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object tapName_;
    /**
     * <pre>
     * Name of the tap on which this drink was poured.  This information is
     * required, but this field may be omitted when the tap name is given
     * elsewhere.  (In the Kegweb API, the tap_name is part of the URL receiving
     * the POST.)
     * </pre>
     *
     * <code>optional string tap_name = 1;</code>
     * @return Whether the tapName field is set.
     */
    @java.lang.Override
    public boolean hasTapName() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     * Name of the tap on which this drink was poured.  This information is
     * required, but this field may be omitted when the tap name is given
     * elsewhere.  (In the Kegweb API, the tap_name is part of the URL receiving
     * the POST.)
     * </pre>
     *
     * <code>optional string tap_name = 1;</code>
     * @return The tapName.
     */
    @java.lang.Override
    public java.lang.String getTapName() {
      java.lang.Object ref = tapName_;
      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()) {
          tapName_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Name of the tap on which this drink was poured.  This information is
     * required, but this field may be omitted when the tap name is given
     * elsewhere.  (In the Kegweb API, the tap_name is part of the URL receiving
     * the POST.)
     * </pre>
     *
     * <code>optional string tap_name = 1;</code>
     * @return The bytes for tapName.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getTapNameBytes() {
      java.lang.Object ref = tapName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        tapName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TICKS_FIELD_NUMBER = 2;
    private int ticks_;
    /**
     * <pre>
     * The number of ticks, as reported by the flowmeter.  Required.
     * </pre>
     *
     * <code>required uint32 ticks = 2;</code>
     * @return Whether the ticks field is set.
     */
    @java.lang.Override
    public boolean hasTicks() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * The number of ticks, as reported by the flowmeter.  Required.
     * </pre>
     *
     * <code>required uint32 ticks = 2;</code>
     * @return The ticks.
     */
    @java.lang.Override
    public int getTicks() {
      return ticks_;
    }

    public static final int VOLUME_ML_FIELD_NUMBER = 3;
    private float volumeMl_;
    /**
     * <pre>
     * The volume of the pour.  If unspecified, the backend will use the current
     * tap configuration to compute the pour's volume based on the value of
     * "ticks".
     * </pre>
     *
     * <code>optional float volume_ml = 3;</code>
     * @return Whether the volumeMl field is set.
     */
    @java.lang.Override
    public boolean hasVolumeMl() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <pre>
     * The volume of the pour.  If unspecified, the backend will use the current
     * tap configuration to compute the pour's volume based on the value of
     * "ticks".
     * </pre>
     *
     * <code>optional float volume_ml = 3;</code>
     * @return The volumeMl.
     */
    @java.lang.Override
    public float getVolumeMl() {
      return volumeMl_;
    }

    public static final int USERNAME_FIELD_NUMBER = 4;
    private volatile java.lang.Object username_;
    /**
     * <pre>
     * The username responsible for the pour.  If unspecified, this pour is
     * treated as an anonymous pour.
     * </pre>
     *
     * <code>optional string username = 4;</code>
     * @return Whether the username field is set.
     */
    @java.lang.Override
    public boolean hasUsername() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <pre>
     * The username responsible for the pour.  If unspecified, this pour is
     * treated as an anonymous pour.
     * </pre>
     *
     * <code>optional string username = 4;</code>
     * @return The username.
     */
    @java.lang.Override
    public java.lang.String getUsername() {
      java.lang.Object ref = username_;
      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()) {
          username_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * The username responsible for the pour.  If unspecified, this pour is
     * treated as an anonymous pour.
     * </pre>
     *
     * <code>optional string username = 4;</code>
     * @return The bytes for username.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getUsernameBytes() {
      java.lang.Object ref = username_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        username_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SECONDS_AGO_FIELD_NUMBER = 5;
    private int secondsAgo_;
    /**
     * <pre>
     * The date and time of the pour, in seconds before "now", where "now" is the
     * current time on the backend at the time the request is processed.  If this
     * field is unspecified, a default value of "0" (meaning "now") is assumed.
     * This value is ignored if "record_date" is specified.
     * </pre>
     *
     * <code>optional uint32 seconds_ago = 5 [default = 0];</code>
     * @return Whether the secondsAgo field is set.
     */
    @java.lang.Override
    public boolean hasSecondsAgo() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <pre>
     * The date and time of the pour, in seconds before "now", where "now" is the
     * current time on the backend at the time the request is processed.  If this
     * field is unspecified, a default value of "0" (meaning "now") is assumed.
     * This value is ignored if "record_date" is specified.
     * </pre>
     *
     * <code>optional uint32 seconds_ago = 5 [default = 0];</code>
     * @return The secondsAgo.
     */
    @java.lang.Override
    public int getSecondsAgo() {
      return secondsAgo_;
    }

    public static final int RECORD_DATE_FIELD_NUMBER = 6;
    private volatile java.lang.Object recordDate_;
    /**
     * <pre>
     * The absolute date and time of the pour, as an ISO8061 UTC timestamp.  If
     * specified and valid, this value supercedes any value given for
     * "seconds_ago", which will be ignored.
     * </pre>
     *
     * <code>optional string record_date = 6;</code>
     * @return Whether the recordDate field is set.
     */
    @java.lang.Override
    public boolean hasRecordDate() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <pre>
     * The absolute date and time of the pour, as an ISO8061 UTC timestamp.  If
     * specified and valid, this value supercedes any value given for
     * "seconds_ago", which will be ignored.
     * </pre>
     *
     * <code>optional string record_date = 6;</code>
     * @return The recordDate.
     */
    @java.lang.Override
    public java.lang.String getRecordDate() {
      java.lang.Object ref = recordDate_;
      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()) {
          recordDate_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * The absolute date and time of the pour, as an ISO8061 UTC timestamp.  If
     * specified and valid, this value supercedes any value given for
     * "seconds_ago", which will be ignored.
     * </pre>
     *
     * <code>optional string record_date = 6;</code>
     * @return The bytes for recordDate.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getRecordDateBytes() {
      java.lang.Object ref = recordDate_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        recordDate_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DURATION_SECONDS_FIELD_NUMBER = 7;
    private int durationSeconds_;
    /**
     * <pre>
     * The time taken, in seconds, to complete the pour.
     * </pre>
     *
     * <code>optional uint32 duration_seconds = 7;</code>
     * @return Whether the durationSeconds field is set.
     */
    @java.lang.Override
    public boolean hasDurationSeconds() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <pre>
     * The time taken, in seconds, to complete the pour.
     * </pre>
     *
     * <code>optional uint32 duration_seconds = 7;</code>
     * @return The durationSeconds.
     */
    @java.lang.Override
    public int getDurationSeconds() {
      return durationSeconds_;
    }

    public static final int AUTH_TOKEN_FIELD_NUMBER = 8;
    private volatile java.lang.Object authToken_;
    /**
     * <pre>
     * The authentication token used to pour the drink.
     * </pre>
     *
     * <code>optional string auth_token = 8;</code>
     * @return Whether the authToken field is set.
     */
    @java.lang.Override
    public boolean hasAuthToken() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <pre>
     * The authentication token used to pour the drink.
     * </pre>
     *
     * <code>optional string auth_token = 8;</code>
     * @return The authToken.
     */
    @java.lang.Override
    public java.lang.String getAuthToken() {
      java.lang.Object ref = authToken_;
      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()) {
          authToken_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * The authentication token used to pour the drink.
     * </pre>
     *
     * <code>optional string auth_token = 8;</code>
     * @return The bytes for authToken.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getAuthTokenBytes() {
      java.lang.Object ref = authToken_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        authToken_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SPILLED_FIELD_NUMBER = 9;
    private boolean spilled_;
    /**
     * <pre>
     * If true, the pour is recorded as "spilled": no drink record will be
     * generated, and all fields other than "tap_name" and the volume ("ticks", or
     * "volume_ml" if given) are ignored.  The volume will be added to the
     * spilled total for the tap’s current keg.
     * </pre>
     *
     * <code>optional bool spilled = 9;</code>
     * @return Whether the spilled field is set.
     */
    @java.lang.Override
    public boolean hasSpilled() {
      return ((bitField0_ & 0x00000100) != 0);
    }
    /**
     * <pre>
     * If true, the pour is recorded as "spilled": no drink record will be
     * generated, and all fields other than "tap_name" and the volume ("ticks", or
     * "volume_ml" if given) are ignored.  The volume will be added to the
     * spilled total for the tap’s current keg.
     * </pre>
     *
     * <code>optional bool spilled = 9;</code>
     * @return The spilled.
     */
    @java.lang.Override
    public boolean getSpilled() {
      return spilled_;
    }

    public static final int SHOUT_FIELD_NUMBER = 10;
    private volatile java.lang.Object shout_;
    /**
     * <pre>
     * Optional message from the user about the pour.
     * </pre>
     *
     * <code>optional string shout = 10;</code>
     * @return Whether the shout field is set.
     */
    @java.lang.Override
    public boolean hasShout() {
      return ((bitField0_ & 0x00000200) != 0);
    }
    /**
     * <pre>
     * Optional message from the user about the pour.
     * </pre>
     *
     * <code>optional string shout = 10;</code>
     * @return The shout.
     */
    @java.lang.Override
    public java.lang.String getShout() {
      java.lang.Object ref = shout_;
      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()) {
          shout_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Optional message from the user about the pour.
     * </pre>
     *
     * <code>optional string shout = 10;</code>
     * @return The bytes for shout.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getShoutBytes() {
      java.lang.Object ref = shout_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        shout_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TICK_TIME_SERIES_FIELD_NUMBER = 11;
    private volatile java.lang.Object tickTimeSeries_;
    /**
     * <pre>
     * See Drink model.
     * </pre>
     *
     * <code>optional string tick_time_series = 11;</code>
     * @return Whether the tickTimeSeries field is set.
     */
    @java.lang.Override
    public boolean hasTickTimeSeries() {
      return ((bitField0_ & 0x00000400) != 0);
    }
    /**
     * <pre>
     * See Drink model.
     * </pre>
     *
     * <code>optional string tick_time_series = 11;</code>
     * @return The tickTimeSeries.
     */
    @java.lang.Override
    public java.lang.String getTickTimeSeries() {
      java.lang.Object ref = tickTimeSeries_;
      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()) {
          tickTimeSeries_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * See Drink model.
     * </pre>
     *
     * <code>optional string tick_time_series = 11;</code>
     * @return The bytes for tickTimeSeries.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getTickTimeSeriesBytes() {
      java.lang.Object ref = tickTimeSeries_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        tickTimeSeries_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static org.kegbot.proto.Api.RecordDrinkRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.kegbot.proto.Api.RecordDrinkRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.kegbot.proto.Api.RecordDrinkRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.kegbot.proto.Api.RecordDrinkRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.kegbot.proto.Api.RecordDrinkRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.kegbot.proto.Api.RecordDrinkRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.kegbot.proto.Api.RecordDrinkRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.kegbot.proto.Api.RecordDrinkRequest 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 org.kegbot.proto.Api.RecordDrinkRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.kegbot.proto.Api.RecordDrinkRequest 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 org.kegbot.proto.Api.RecordDrinkRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.kegbot.proto.Api.RecordDrinkRequest 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(org.kegbot.proto.Api.RecordDrinkRequest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Message used for recording a new drink on the backend.
     * </pre>
     *
     * Protobuf type {@code RecordDrinkRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:RecordDrinkRequest)
        org.kegbot.proto.Api.RecordDrinkRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.kegbot.proto.Api.internal_static_RecordDrinkRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.kegbot.proto.Api.internal_static_RecordDrinkRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.kegbot.proto.Api.RecordDrinkRequest.class, org.kegbot.proto.Api.RecordDrinkRequest.Builder.class);
      }

      // Construct using org.kegbot.proto.Api.RecordDrinkRequest.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();
        tapName_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        ticks_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        volumeMl_ = 0F;
        bitField0_ = (bitField0_ & ~0x00000004);
        username_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        secondsAgo_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        recordDate_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        durationSeconds_ = 0;
        bitField0_ = (bitField0_ & ~0x00000040);
        authToken_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        spilled_ = false;
        bitField0_ = (bitField0_ & ~0x00000100);
        shout_ = "";
        bitField0_ = (bitField0_ & ~0x00000200);
        tickTimeSeries_ = "";
        bitField0_ = (bitField0_ & ~0x00000400);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.kegbot.proto.Api.internal_static_RecordDrinkRequest_descriptor;
      }

      @java.lang.Override
      public org.kegbot.proto.Api.RecordDrinkRequest getDefaultInstanceForType() {
        return org.kegbot.proto.Api.RecordDrinkRequest.getDefaultInstance();
      }

      @java.lang.Override
      public org.kegbot.proto.Api.RecordDrinkRequest build() {
        org.kegbot.proto.Api.RecordDrinkRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.kegbot.proto.Api.RecordDrinkRequest buildPartial() {
        org.kegbot.proto.Api.RecordDrinkRequest result = new org.kegbot.proto.Api.RecordDrinkRequest(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.tapName_ = tapName_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.ticks_ = ticks_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.volumeMl_ = volumeMl_;
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          to_bitField0_ |= 0x00000008;
        }
        result.username_ = username_;
        if (((from_bitField0_ & 0x00000010) != 0)) {
          result.secondsAgo_ = secondsAgo_;
          to_bitField0_ |= 0x00000010;
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          to_bitField0_ |= 0x00000020;
        }
        result.recordDate_ = recordDate_;
        if (((from_bitField0_ & 0x00000040) != 0)) {
          result.durationSeconds_ = durationSeconds_;
          to_bitField0_ |= 0x00000040;
        }
        if (((from_bitField0_ & 0x00000080) != 0)) {
          to_bitField0_ |= 0x00000080;
        }
        result.authToken_ = authToken_;
        if (((from_bitField0_ & 0x00000100) != 0)) {
          result.spilled_ = spilled_;
          to_bitField0_ |= 0x00000100;
        }
        if (((from_bitField0_ & 0x00000200) != 0)) {
          to_bitField0_ |= 0x00000200;
        }
        result.shout_ = shout_;
        if (((from_bitField0_ & 0x00000400) != 0)) {
          to_bitField0_ |= 0x00000400;
        }
        result.tickTimeSeries_ = tickTimeSeries_;
        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 tapName_ = "";
      /**
       * <pre>
       * Name of the tap on which this drink was poured.  This information is
       * required, but this field may be omitted when the tap name is given
       * elsewhere.  (In the Kegweb API, the tap_name is part of the URL receiving
       * the POST.)
       * </pre>
       *
       * <code>optional string tap_name = 1;</code>
       * @return Whether the tapName field is set.
       */
      public boolean hasTapName() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <pre>
       * Name of the tap on which this drink was poured.  This information is
       * required, but this field may be omitted when the tap name is given
       * elsewhere.  (In the Kegweb API, the tap_name is part of the URL receiving
       * the POST.)
       * </pre>
       *
       * <code>optional string tap_name = 1;</code>
       * @return The tapName.
       */
      public java.lang.String getTapName() {
        java.lang.Object ref = tapName_;
        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()) {
            tapName_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Name of the tap on which this drink was poured.  This information is
       * required, but this field may be omitted when the tap name is given
       * elsewhere.  (In the Kegweb API, the tap_name is part of the URL receiving
       * the POST.)
       * </pre>
       *
       * <code>optional string tap_name = 1;</code>
       * @return The bytes for tapName.
       */
      public com.google.protobuf.ByteString
          getTapNameBytes() {
        java.lang.Object ref = tapName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          tapName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Name of the tap on which this drink was poured.  This information is
       * required, but this field may be omitted when the tap name is given
       * elsewhere.  (In the Kegweb API, the tap_name is part of the URL receiving
       * the POST.)
       * </pre>
       *
       * <code>optional string tap_name = 1;</code>
       * @param value The tapName to set.
       * @return This builder for chaining.
       */
      public Builder setTapName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        tapName_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of the tap on which this drink was poured.  This information is
       * required, but this field may be omitted when the tap name is given
       * elsewhere.  (In the Kegweb API, the tap_name is part of the URL receiving
       * the POST.)
       * </pre>
       *
       * <code>optional string tap_name = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearTapName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        tapName_ = getDefaultInstance().getTapName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of the tap on which this drink was poured.  This information is
       * required, but this field may be omitted when the tap name is given
       * elsewhere.  (In the Kegweb API, the tap_name is part of the URL receiving
       * the POST.)
       * </pre>
       *
       * <code>optional string tap_name = 1;</code>
       * @param value The bytes for tapName to set.
       * @return This builder for chaining.
       */
      public Builder setTapNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        tapName_ = value;
        onChanged();
        return this;
      }

      private int ticks_ ;
      /**
       * <pre>
       * The number of ticks, as reported by the flowmeter.  Required.
       * </pre>
       *
       * <code>required uint32 ticks = 2;</code>
       * @return Whether the ticks field is set.
       */
      @java.lang.Override
      public boolean hasTicks() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <pre>
       * The number of ticks, as reported by the flowmeter.  Required.
       * </pre>
       *
       * <code>required uint32 ticks = 2;</code>
       * @return The ticks.
       */
      @java.lang.Override
      public int getTicks() {
        return ticks_;
      }
      /**
       * <pre>
       * The number of ticks, as reported by the flowmeter.  Required.
       * </pre>
       *
       * <code>required uint32 ticks = 2;</code>
       * @param value The ticks to set.
       * @return This builder for chaining.
       */
      public Builder setTicks(int value) {
        bitField0_ |= 0x00000002;
        ticks_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The number of ticks, as reported by the flowmeter.  Required.
       * </pre>
       *
       * <code>required uint32 ticks = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearTicks() {
        bitField0_ = (bitField0_ & ~0x00000002);
        ticks_ = 0;
        onChanged();
        return this;
      }

      private float volumeMl_ ;
      /**
       * <pre>
       * The volume of the pour.  If unspecified, the backend will use the current
       * tap configuration to compute the pour's volume based on the value of
       * "ticks".
       * </pre>
       *
       * <code>optional float volume_ml = 3;</code>
       * @return Whether the volumeMl field is set.
       */
      @java.lang.Override
      public boolean hasVolumeMl() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <pre>
       * The volume of the pour.  If unspecified, the backend will use the current
       * tap configuration to compute the pour's volume based on the value of
       * "ticks".
       * </pre>
       *
       * <code>optional float volume_ml = 3;</code>
       * @return The volumeMl.
       */
      @java.lang.Override
      public float getVolumeMl() {
        return volumeMl_;
      }
      /**
       * <pre>
       * The volume of the pour.  If unspecified, the backend will use the current
       * tap configuration to compute the pour's volume based on the value of
       * "ticks".
       * </pre>
       *
       * <code>optional float volume_ml = 3;</code>
       * @param value The volumeMl to set.
       * @return This builder for chaining.
       */
      public Builder setVolumeMl(float value) {
        bitField0_ |= 0x00000004;
        volumeMl_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The volume of the pour.  If unspecified, the backend will use the current
       * tap configuration to compute the pour's volume based on the value of
       * "ticks".
       * </pre>
       *
       * <code>optional float volume_ml = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearVolumeMl() {
        bitField0_ = (bitField0_ & ~0x00000004);
        volumeMl_ = 0F;
        onChanged();
        return this;
      }

      private java.lang.Object username_ = "";
      /**
       * <pre>
       * The username responsible for the pour.  If unspecified, this pour is
       * treated as an anonymous pour.
       * </pre>
       *
       * <code>optional string username = 4;</code>
       * @return Whether the username field is set.
       */
      public boolean hasUsername() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <pre>
       * The username responsible for the pour.  If unspecified, this pour is
       * treated as an anonymous pour.
       * </pre>
       *
       * <code>optional string username = 4;</code>
       * @return The username.
       */
      public java.lang.String getUsername() {
        java.lang.Object ref = username_;
        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()) {
            username_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The username responsible for the pour.  If unspecified, this pour is
       * treated as an anonymous pour.
       * </pre>
       *
       * <code>optional string username = 4;</code>
       * @return The bytes for username.
       */
      public com.google.protobuf.ByteString
          getUsernameBytes() {
        java.lang.Object ref = username_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          username_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The username responsible for the pour.  If unspecified, this pour is
       * treated as an anonymous pour.
       * </pre>
       *
       * <code>optional string username = 4;</code>
       * @param value The username to set.
       * @return This builder for chaining.
       */
      public Builder setUsername(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        username_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The username responsible for the pour.  If unspecified, this pour is
       * treated as an anonymous pour.
       * </pre>
       *
       * <code>optional string username = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearUsername() {
        bitField0_ = (bitField0_ & ~0x00000008);
        username_ = getDefaultInstance().getUsername();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The username responsible for the pour.  If unspecified, this pour is
       * treated as an anonymous pour.
       * </pre>
       *
       * <code>optional string username = 4;</code>
       * @param value The bytes for username to set.
       * @return This builder for chaining.
       */
      public Builder setUsernameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        username_ = value;
        onChanged();
        return this;
      }

      private int secondsAgo_ ;
      /**
       * <pre>
       * The date and time of the pour, in seconds before "now", where "now" is the
       * current time on the backend at the time the request is processed.  If this
       * field is unspecified, a default value of "0" (meaning "now") is assumed.
       * This value is ignored if "record_date" is specified.
       * </pre>
       *
       * <code>optional uint32 seconds_ago = 5 [default = 0];</code>
       * @return Whether the secondsAgo field is set.
       */
      @java.lang.Override
      public boolean hasSecondsAgo() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <pre>
       * The date and time of the pour, in seconds before "now", where "now" is the
       * current time on the backend at the time the request is processed.  If this
       * field is unspecified, a default value of "0" (meaning "now") is assumed.
       * This value is ignored if "record_date" is specified.
       * </pre>
       *
       * <code>optional uint32 seconds_ago = 5 [default = 0];</code>
       * @return The secondsAgo.
       */
      @java.lang.Override
      public int getSecondsAgo() {
        return secondsAgo_;
      }
      /**
       * <pre>
       * The date and time of the pour, in seconds before "now", where "now" is the
       * current time on the backend at the time the request is processed.  If this
       * field is unspecified, a default value of "0" (meaning "now") is assumed.
       * This value is ignored if "record_date" is specified.
       * </pre>
       *
       * <code>optional uint32 seconds_ago = 5 [default = 0];</code>
       * @param value The secondsAgo to set.
       * @return This builder for chaining.
       */
      public Builder setSecondsAgo(int value) {
        bitField0_ |= 0x00000010;
        secondsAgo_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The date and time of the pour, in seconds before "now", where "now" is the
       * current time on the backend at the time the request is processed.  If this
       * field is unspecified, a default value of "0" (meaning "now") is assumed.
       * This value is ignored if "record_date" is specified.
       * </pre>
       *
       * <code>optional uint32 seconds_ago = 5 [default = 0];</code>
       * @return This builder for chaining.
       */
      public Builder clearSecondsAgo() {
        bitField0_ = (bitField0_ & ~0x00000010);
        secondsAgo_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object recordDate_ = "";
      /**
       * <pre>
       * The absolute date and time of the pour, as an ISO8061 UTC timestamp.  If
       * specified and valid, this value supercedes any value given for
       * "seconds_ago", which will be ignored.
       * </pre>
       *
       * <code>optional string record_date = 6;</code>
       * @return Whether the recordDate field is set.
       */
      public boolean hasRecordDate() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <pre>
       * The absolute date and time of the pour, as an ISO8061 UTC timestamp.  If
       * specified and valid, this value supercedes any value given for
       * "seconds_ago", which will be ignored.
       * </pre>
       *
       * <code>optional string record_date = 6;</code>
       * @return The recordDate.
       */
      public java.lang.String getRecordDate() {
        java.lang.Object ref = recordDate_;
        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()) {
            recordDate_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The absolute date and time of the pour, as an ISO8061 UTC timestamp.  If
       * specified and valid, this value supercedes any value given for
       * "seconds_ago", which will be ignored.
       * </pre>
       *
       * <code>optional string record_date = 6;</code>
       * @return The bytes for recordDate.
       */
      public com.google.protobuf.ByteString
          getRecordDateBytes() {
        java.lang.Object ref = recordDate_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          recordDate_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The absolute date and time of the pour, as an ISO8061 UTC timestamp.  If
       * specified and valid, this value supercedes any value given for
       * "seconds_ago", which will be ignored.
       * </pre>
       *
       * <code>optional string record_date = 6;</code>
       * @param value The recordDate to set.
       * @return This builder for chaining.
       */
      public Builder setRecordDate(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        recordDate_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The absolute date and time of the pour, as an ISO8061 UTC timestamp.  If
       * specified and valid, this value supercedes any value given for
       * "seconds_ago", which will be ignored.
       * </pre>
       *
       * <code>optional string record_date = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearRecordDate() {
        bitField0_ = (bitField0_ & ~0x00000020);
        recordDate_ = getDefaultInstance().getRecordDate();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The absolute date and time of the pour, as an ISO8061 UTC timestamp.  If
       * specified and valid, this value supercedes any value given for
       * "seconds_ago", which will be ignored.
       * </pre>
       *
       * <code>optional string record_date = 6;</code>
       * @param value The bytes for recordDate to set.
       * @return This builder for chaining.
       */
      public Builder setRecordDateBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        recordDate_ = value;
        onChanged();
        return this;
      }

      private int durationSeconds_ ;
      /**
       * <pre>
       * The time taken, in seconds, to complete the pour.
       * </pre>
       *
       * <code>optional uint32 duration_seconds = 7;</code>
       * @return Whether the durationSeconds field is set.
       */
      @java.lang.Override
      public boolean hasDurationSeconds() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <pre>
       * The time taken, in seconds, to complete the pour.
       * </pre>
       *
       * <code>optional uint32 duration_seconds = 7;</code>
       * @return The durationSeconds.
       */
      @java.lang.Override
      public int getDurationSeconds() {
        return durationSeconds_;
      }
      /**
       * <pre>
       * The time taken, in seconds, to complete the pour.
       * </pre>
       *
       * <code>optional uint32 duration_seconds = 7;</code>
       * @param value The durationSeconds to set.
       * @return This builder for chaining.
       */
      public Builder setDurationSeconds(int value) {
        bitField0_ |= 0x00000040;
        durationSeconds_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The time taken, in seconds, to complete the pour.
       * </pre>
       *
       * <code>optional uint32 duration_seconds = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearDurationSeconds() {
        bitField0_ = (bitField0_ & ~0x00000040);
        durationSeconds_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object authToken_ = "";
      /**
       * <pre>
       * The authentication token used to pour the drink.
       * </pre>
       *
       * <code>optional string auth_token = 8;</code>
       * @return Whether the authToken field is set.
       */
      public boolean hasAuthToken() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <pre>
       * The authentication token used to pour the drink.
       * </pre>
       *
       * <code>optional string auth_token = 8;</code>
       * @return The authToken.
       */
      public java.lang.String getAuthToken() {
        java.lang.Object ref = authToken_;
        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()) {
            authToken_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The authentication token used to pour the drink.
       * </pre>
       *
       * <code>optional string auth_token = 8;</code>
       * @return The bytes for authToken.
       */
      public com.google.protobuf.ByteString
          getAuthTokenBytes() {
        java.lang.Object ref = authToken_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          authToken_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The authentication token used to pour the drink.
       * </pre>
       *
       * <code>optional string auth_token = 8;</code>
       * @param value The authToken to set.
       * @return This builder for chaining.
       */
      public Builder setAuthToken(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        authToken_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The authentication token used to pour the drink.
       * </pre>
       *
       * <code>optional string auth_token = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearAuthToken() {
        bitField0_ = (bitField0_ & ~0x00000080);
        authToken_ = getDefaultInstance().getAuthToken();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The authentication token used to pour the drink.
       * </pre>
       *
       * <code>optional string auth_token = 8;</code>
       * @param value The bytes for authToken to set.
       * @return This builder for chaining.
       */
      public Builder setAuthTokenBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        authToken_ = value;
        onChanged();
        return this;
      }

      private boolean spilled_ ;
      /**
       * <pre>
       * If true, the pour is recorded as "spilled": no drink record will be
       * generated, and all fields other than "tap_name" and the volume ("ticks", or
       * "volume_ml" if given) are ignored.  The volume will be added to the
       * spilled total for the tap’s current keg.
       * </pre>
       *
       * <code>optional bool spilled = 9;</code>
       * @return Whether the spilled field is set.
       */
      @java.lang.Override
      public boolean hasSpilled() {
        return ((bitField0_ & 0x00000100) != 0);
      }
      /**
       * <pre>
       * If true, the pour is recorded as "spilled": no drink record will be
       * generated, and all fields other than "tap_name" and the volume ("ticks", or
       * "volume_ml" if given) are ignored.  The volume will be added to the
       * spilled total for the tap’s current keg.
       * </pre>
       *
       * <code>optional bool spilled = 9;</code>
       * @return The spilled.
       */
      @java.lang.Override
      public boolean getSpilled() {
        return spilled_;
      }
      /**
       * <pre>
       * If true, the pour is recorded as "spilled": no drink record will be
       * generated, and all fields other than "tap_name" and the volume ("ticks", or
       * "volume_ml" if given) are ignored.  The volume will be added to the
       * spilled total for the tap’s current keg.
       * </pre>
       *
       * <code>optional bool spilled = 9;</code>
       * @param value The spilled to set.
       * @return This builder for chaining.
       */
      public Builder setSpilled(boolean value) {
        bitField0_ |= 0x00000100;
        spilled_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * If true, the pour is recorded as "spilled": no drink record will be
       * generated, and all fields other than "tap_name" and the volume ("ticks", or
       * "volume_ml" if given) are ignored.  The volume will be added to the
       * spilled total for the tap’s current keg.
       * </pre>
       *
       * <code>optional bool spilled = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearSpilled() {
        bitField0_ = (bitField0_ & ~0x00000100);
        spilled_ = false;
        onChanged();
        return this;
      }

      private java.lang.Object shout_ = "";
      /**
       * <pre>
       * Optional message from the user about the pour.
       * </pre>
       *
       * <code>optional string shout = 10;</code>
       * @return Whether the shout field is set.
       */
      public boolean hasShout() {
        return ((bitField0_ & 0x00000200) != 0);
      }
      /**
       * <pre>
       * Optional message from the user about the pour.
       * </pre>
       *
       * <code>optional string shout = 10;</code>
       * @return The shout.
       */
      public java.lang.String getShout() {
        java.lang.Object ref = shout_;
        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()) {
            shout_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Optional message from the user about the pour.
       * </pre>
       *
       * <code>optional string shout = 10;</code>
       * @return The bytes for shout.
       */
      public com.google.protobuf.ByteString
          getShoutBytes() {
        java.lang.Object ref = shout_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          shout_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Optional message from the user about the pour.
       * </pre>
       *
       * <code>optional string shout = 10;</code>
       * @param value The shout to set.
       * @return This builder for chaining.
       */
      public Builder setShout(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        shout_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Optional message from the user about the pour.
       * </pre>
       *
       * <code>optional string shout = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearShout() {
        bitField0_ = (bitField0_ & ~0x00000200);
        shout_ = getDefaultInstance().getShout();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Optional message from the user about the pour.
       * </pre>
       *
       * <code>optional string shout = 10;</code>
       * @param value The bytes for shout to set.
       * @return This builder for chaining.
       */
      public Builder setShoutBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        shout_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object tickTimeSeries_ = "";
      /**
       * <pre>
       * See Drink model.
       * </pre>
       *
       * <code>optional string tick_time_series = 11;</code>
       * @return Whether the tickTimeSeries field is set.
       */
      public boolean hasTickTimeSeries() {
        return ((bitField0_ & 0x00000400) != 0);
      }
      /**
       * <pre>
       * See Drink model.
       * </pre>
       *
       * <code>optional string tick_time_series = 11;</code>
       * @return The tickTimeSeries.
       */
      public java.lang.String getTickTimeSeries() {
        java.lang.Object ref = tickTimeSeries_;
        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()) {
            tickTimeSeries_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * See Drink model.
       * </pre>
       *
       * <code>optional string tick_time_series = 11;</code>
       * @return The bytes for tickTimeSeries.
       */
      public com.google.protobuf.ByteString
          getTickTimeSeriesBytes() {
        java.lang.Object ref = tickTimeSeries_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          tickTimeSeries_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * See Drink model.
       * </pre>
       *
       * <code>optional string tick_time_series = 11;</code>
       * @param value The tickTimeSeries to set.
       * @return This builder for chaining.
       */
      public Builder setTickTimeSeries(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        tickTimeSeries_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * See Drink model.
       * </pre>
       *
       * <code>optional string tick_time_series = 11;</code>
       * @return This builder for chaining.
       */
      public Builder clearTickTimeSeries() {
        bitField0_ = (bitField0_ & ~0x00000400);
        tickTimeSeries_ = getDefaultInstance().getTickTimeSeries();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * See Drink model.
       * </pre>
       *
       * <code>optional string tick_time_series = 11;</code>
       * @param value The bytes for tickTimeSeries to set.
       * @return This builder for chaining.
       */
      public Builder setTickTimeSeriesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        tickTimeSeries_ = 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:RecordDrinkRequest)
    }

    // @@protoc_insertion_point(class_scope:RecordDrinkRequest)
    private static final org.kegbot.proto.Api.RecordDrinkRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.kegbot.proto.Api.RecordDrinkRequest();
    }

    public static org.kegbot.proto.Api.RecordDrinkRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<RecordDrinkRequest>
        PARSER = new com.google.protobuf.AbstractParser<RecordDrinkRequest>() {
      @java.lang.Override
      public RecordDrinkRequest 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<RecordDrinkRequest> parser() {
      return PARSER;
    }

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

    @java.lang.Override
    public org.kegbot.proto.Api.RecordDrinkRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RecordTemperatureRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:RecordTemperatureRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * The name of the sensor, as stored in the backend.
     * </pre>
     *
     * <code>required string sensor_name = 1;</code>
     * @return Whether the sensorName field is set.
     */
    boolean hasSensorName();
    /**
     * <pre>
     * The name of the sensor, as stored in the backend.
     * </pre>
     *
     * <code>required string sensor_name = 1;</code>
     * @return The sensorName.
     */
    java.lang.String getSensorName();
    /**
     * <pre>
     * The name of the sensor, as stored in the backend.
     * </pre>
     *
     * <code>required string sensor_name = 1;</code>
     * @return The bytes for sensorName.
     */
    com.google.protobuf.ByteString
        getSensorNameBytes();

    /**
     * <pre>
     * The observed temperature, in degress centigrade.
     * </pre>
     *
     * <code>required float temp_c = 2;</code>
     * @return Whether the tempC field is set.
     */
    boolean hasTempC();
    /**
     * <pre>
     * The observed temperature, in degress centigrade.
     * </pre>
     *
     * <code>required float temp_c = 2;</code>
     * @return The tempC.
     */
    float getTempC();

    /**
     * <pre>
     * The date of the reading, as an ISO8601 UTC timestamp.  If this field is
     * unspecified, the record_date will be the current time on the backend at the
     * time the request is processed.
     * </pre>
     *
     * <code>optional string record_date = 3;</code>
     * @return Whether the recordDate field is set.
     */
    boolean hasRecordDate();
    /**
     * <pre>
     * The date of the reading, as an ISO8601 UTC timestamp.  If this field is
     * unspecified, the record_date will be the current time on the backend at the
     * time the request is processed.
     * </pre>
     *
     * <code>optional string record_date = 3;</code>
     * @return The recordDate.
     */
    java.lang.String getRecordDate();
    /**
     * <pre>
     * The date of the reading, as an ISO8601 UTC timestamp.  If this field is
     * unspecified, the record_date will be the current time on the backend at the
     * time the request is processed.
     * </pre>
     *
     * <code>optional string record_date = 3;</code>
     * @return The bytes for recordDate.
     */
    com.google.protobuf.ByteString
        getRecordDateBytes();
  }
  /**
   * <pre>
   * Message used for recording a temperature sensor reading on the backend.
   * </pre>
   *
   * Protobuf type {@code RecordTemperatureRequest}
   */
  public static final class RecordTemperatureRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:RecordTemperatureRequest)
      RecordTemperatureRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RecordTemperatureRequest.newBuilder() to construct.
    private RecordTemperatureRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RecordTemperatureRequest() {
      sensorName_ = "";
      recordDate_ = "";
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.kegbot.proto.Api.internal_static_RecordTemperatureRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.kegbot.proto.Api.internal_static_RecordTemperatureRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.kegbot.proto.Api.RecordTemperatureRequest.class, org.kegbot.proto.Api.RecordTemperatureRequest.Builder.class);
    }

    private int bitField0_;
    public static final int SENSOR_NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object sensorName_;
    /**
     * <pre>
     * The name of the sensor, as stored in the backend.
     * </pre>
     *
     * <code>required string sensor_name = 1;</code>
     * @return Whether the sensorName field is set.
     */
    @java.lang.Override
    public boolean hasSensorName() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     * The name of the sensor, as stored in the backend.
     * </pre>
     *
     * <code>required string sensor_name = 1;</code>
     * @return The sensorName.
     */
    @java.lang.Override
    public java.lang.String getSensorName() {
      java.lang.Object ref = sensorName_;
      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()) {
          sensorName_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * The name of the sensor, as stored in the backend.
     * </pre>
     *
     * <code>required string sensor_name = 1;</code>
     * @return The bytes for sensorName.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getSensorNameBytes() {
      java.lang.Object ref = sensorName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        sensorName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TEMP_C_FIELD_NUMBER = 2;
    private float tempC_;
    /**
     * <pre>
     * The observed temperature, in degress centigrade.
     * </pre>
     *
     * <code>required float temp_c = 2;</code>
     * @return Whether the tempC field is set.
     */
    @java.lang.Override
    public boolean hasTempC() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * The observed temperature, in degress centigrade.
     * </pre>
     *
     * <code>required float temp_c = 2;</code>
     * @return The tempC.
     */
    @java.lang.Override
    public float getTempC() {
      return tempC_;
    }

    public static final int RECORD_DATE_FIELD_NUMBER = 3;
    private volatile java.lang.Object recordDate_;
    /**
     * <pre>
     * The date of the reading, as an ISO8601 UTC timestamp.  If this field is
     * unspecified, the record_date will be the current time on the backend at the
     * time the request is processed.
     * </pre>
     *
     * <code>optional string record_date = 3;</code>
     * @return Whether the recordDate field is set.
     */
    @java.lang.Override
    public boolean hasRecordDate() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <pre>
     * The date of the reading, as an ISO8601 UTC timestamp.  If this field is
     * unspecified, the record_date will be the current time on the backend at the
     * time the request is processed.
     * </pre>
     *
     * <code>optional string record_date = 3;</code>
     * @return The recordDate.
     */
    @java.lang.Override
    public java.lang.String getRecordDate() {
      java.lang.Object ref = recordDate_;
      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()) {
          recordDate_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * The date of the reading, as an ISO8601 UTC timestamp.  If this field is
     * unspecified, the record_date will be the current time on the backend at the
     * time the request is processed.
     * </pre>
     *
     * <code>optional string record_date = 3;</code>
     * @return The bytes for recordDate.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getRecordDateBytes() {
      java.lang.Object ref = recordDate_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        recordDate_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static org.kegbot.proto.Api.RecordTemperatureRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.kegbot.proto.Api.RecordTemperatureRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.kegbot.proto.Api.RecordTemperatureRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.kegbot.proto.Api.RecordTemperatureRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.kegbot.proto.Api.RecordTemperatureRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.kegbot.proto.Api.RecordTemperatureRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.kegbot.proto.Api.RecordTemperatureRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.kegbot.proto.Api.RecordTemperatureRequest 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 org.kegbot.proto.Api.RecordTemperatureRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.kegbot.proto.Api.RecordTemperatureRequest 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 org.kegbot.proto.Api.RecordTemperatureRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.kegbot.proto.Api.RecordTemperatureRequest 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(org.kegbot.proto.Api.RecordTemperatureRequest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Message used for recording a temperature sensor reading on the backend.
     * </pre>
     *
     * Protobuf type {@code RecordTemperatureRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:RecordTemperatureRequest)
        org.kegbot.proto.Api.RecordTemperatureRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.kegbot.proto.Api.internal_static_RecordTemperatureRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.kegbot.proto.Api.internal_static_RecordTemperatureRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.kegbot.proto.Api.RecordTemperatureRequest.class, org.kegbot.proto.Api.RecordTemperatureRequest.Builder.class);
      }

      // Construct using org.kegbot.proto.Api.RecordTemperatureRequest.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();
        sensorName_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        tempC_ = 0F;
        bitField0_ = (bitField0_ & ~0x00000002);
        recordDate_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.kegbot.proto.Api.internal_static_RecordTemperatureRequest_descriptor;
      }

      @java.lang.Override
      public org.kegbot.proto.Api.RecordTemperatureRequest getDefaultInstanceForType() {
        return org.kegbot.proto.Api.RecordTemperatureRequest.getDefaultInstance();
      }

      @java.lang.Override
      public org.kegbot.proto.Api.RecordTemperatureRequest build() {
        org.kegbot.proto.Api.RecordTemperatureRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.kegbot.proto.Api.RecordTemperatureRequest buildPartial() {
        org.kegbot.proto.Api.RecordTemperatureRequest result = new org.kegbot.proto.Api.RecordTemperatureRequest(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.sensorName_ = sensorName_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.tempC_ = tempC_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          to_bitField0_ |= 0x00000004;
        }
        result.recordDate_ = recordDate_;
        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 sensorName_ = "";
      /**
       * <pre>
       * The name of the sensor, as stored in the backend.
       * </pre>
       *
       * <code>required string sensor_name = 1;</code>
       * @return Whether the sensorName field is set.
       */
      public boolean hasSensorName() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <pre>
       * The name of the sensor, as stored in the backend.
       * </pre>
       *
       * <code>required string sensor_name = 1;</code>
       * @return The sensorName.
       */
      public java.lang.String getSensorName() {
        java.lang.Object ref = sensorName_;
        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()) {
            sensorName_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The name of the sensor, as stored in the backend.
       * </pre>
       *
       * <code>required string sensor_name = 1;</code>
       * @return The bytes for sensorName.
       */
      public com.google.protobuf.ByteString
          getSensorNameBytes() {
        java.lang.Object ref = sensorName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          sensorName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The name of the sensor, as stored in the backend.
       * </pre>
       *
       * <code>required string sensor_name = 1;</code>
       * @param value The sensorName to set.
       * @return This builder for chaining.
       */
      public Builder setSensorName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        sensorName_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The name of the sensor, as stored in the backend.
       * </pre>
       *
       * <code>required string sensor_name = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearSensorName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        sensorName_ = getDefaultInstance().getSensorName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The name of the sensor, as stored in the backend.
       * </pre>
       *
       * <code>required string sensor_name = 1;</code>
       * @param value The bytes for sensorName to set.
       * @return This builder for chaining.
       */
      public Builder setSensorNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        sensorName_ = value;
        onChanged();
        return this;
      }

      private float tempC_ ;
      /**
       * <pre>
       * The observed temperature, in degress centigrade.
       * </pre>
       *
       * <code>required float temp_c = 2;</code>
       * @return Whether the tempC field is set.
       */
      @java.lang.Override
      public boolean hasTempC() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <pre>
       * The observed temperature, in degress centigrade.
       * </pre>
       *
       * <code>required float temp_c = 2;</code>
       * @return The tempC.
       */
      @java.lang.Override
      public float getTempC() {
        return tempC_;
      }
      /**
       * <pre>
       * The observed temperature, in degress centigrade.
       * </pre>
       *
       * <code>required float temp_c = 2;</code>
       * @param value The tempC to set.
       * @return This builder for chaining.
       */
      public Builder setTempC(float value) {
        bitField0_ |= 0x00000002;
        tempC_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The observed temperature, in degress centigrade.
       * </pre>
       *
       * <code>required float temp_c = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearTempC() {
        bitField0_ = (bitField0_ & ~0x00000002);
        tempC_ = 0F;
        onChanged();
        return this;
      }

      private java.lang.Object recordDate_ = "";
      /**
       * <pre>
       * The date of the reading, as an ISO8601 UTC timestamp.  If this field is
       * unspecified, the record_date will be the current time on the backend at the
       * time the request is processed.
       * </pre>
       *
       * <code>optional string record_date = 3;</code>
       * @return Whether the recordDate field is set.
       */
      public boolean hasRecordDate() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <pre>
       * The date of the reading, as an ISO8601 UTC timestamp.  If this field is
       * unspecified, the record_date will be the current time on the backend at the
       * time the request is processed.
       * </pre>
       *
       * <code>optional string record_date = 3;</code>
       * @return The recordDate.
       */
      public java.lang.String getRecordDate() {
        java.lang.Object ref = recordDate_;
        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()) {
            recordDate_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The date of the reading, as an ISO8601 UTC timestamp.  If this field is
       * unspecified, the record_date will be the current time on the backend at the
       * time the request is processed.
       * </pre>
       *
       * <code>optional string record_date = 3;</code>
       * @return The bytes for recordDate.
       */
      public com.google.protobuf.ByteString
          getRecordDateBytes() {
        java.lang.Object ref = recordDate_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          recordDate_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The date of the reading, as an ISO8601 UTC timestamp.  If this field is
       * unspecified, the record_date will be the current time on the backend at the
       * time the request is processed.
       * </pre>
       *
       * <code>optional string record_date = 3;</code>
       * @param value The recordDate to set.
       * @return This builder for chaining.
       */
      public Builder setRecordDate(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        recordDate_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The date of the reading, as an ISO8601 UTC timestamp.  If this field is
       * unspecified, the record_date will be the current time on the backend at the
       * time the request is processed.
       * </pre>
       *
       * <code>optional string record_date = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearRecordDate() {
        bitField0_ = (bitField0_ & ~0x00000004);
        recordDate_ = getDefaultInstance().getRecordDate();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The date of the reading, as an ISO8601 UTC timestamp.  If this field is
       * unspecified, the record_date will be the current time on the backend at the
       * time the request is processed.
       * </pre>
       *
       * <code>optional string record_date = 3;</code>
       * @param value The bytes for recordDate to set.
       * @return This builder for chaining.
       */
      public Builder setRecordDateBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        recordDate_ = 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:RecordTemperatureRequest)
    }

    // @@protoc_insertion_point(class_scope:RecordTemperatureRequest)
    private static final org.kegbot.proto.Api.RecordTemperatureRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.kegbot.proto.Api.RecordTemperatureRequest();
    }

    public static org.kegbot.proto.Api.RecordTemperatureRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<RecordTemperatureRequest>
        PARSER = new com.google.protobuf.AbstractParser<RecordTemperatureRequest>() {
      @java.lang.Override
      public RecordTemperatureRequest 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<RecordTemperatureRequest> parser() {
      return PARSER;
    }

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

    @java.lang.Override
    public org.kegbot.proto.Api.RecordTemperatureRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SyncResponseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:SyncResponse)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * All configured controllers.
     * </pre>
     *
     * <code>repeated .Controller controllers = 1;</code>
     */
    java.util.List<org.kegbot.proto.Models.Controller> 
        getControllersList();
    /**
     * <pre>
     * All configured controllers.
     * </pre>
     *
     * <code>repeated .Controller controllers = 1;</code>
     */
    org.kegbot.proto.Models.Controller getControllers(int index);
    /**
     * <pre>
     * All configured controllers.
     * </pre>
     *
     * <code>repeated .Controller controllers = 1;</code>
     */
    int getControllersCount();
    /**
     * <pre>
     * All configured controllers.
     * </pre>
     *
     * <code>repeated .Controller controllers = 1;</code>
     */
    java.util.List<? extends org.kegbot.proto.Models.ControllerOrBuilder> 
        getControllersOrBuilderList();
    /**
     * <pre>
     * All configured controllers.
     * </pre>
     *
     * <code>repeated .Controller controllers = 1;</code>
     */
    org.kegbot.proto.Models.ControllerOrBuilder getControllersOrBuilder(
        int index);

    /**
     * <pre>
     * Recently-poured drinks.
     * </pre>
     *
     * <code>repeated .Drink drinks = 2;</code>
     */
    java.util.List<org.kegbot.proto.Models.Drink> 
        getDrinksList();
    /**
     * <pre>
     * Recently-poured drinks.
     * </pre>
     *
     * <code>repeated .Drink drinks = 2;</code>
     */
    org.kegbot.proto.Models.Drink getDrinks(int index);
    /**
     * <pre>
     * Recently-poured drinks.
     * </pre>
     *
     * <code>repeated .Drink drinks = 2;</code>
     */
    int getDrinksCount();
    /**
     * <pre>
     * Recently-poured drinks.
     * </pre>
     *
     * <code>repeated .Drink drinks = 2;</code>
     */
    java.util.List<? extends org.kegbot.proto.Models.DrinkOrBuilder> 
        getDrinksOrBuilderList();
    /**
     * <pre>
     * Recently-poured drinks.
     * </pre>
     *
     * <code>repeated .Drink drinks = 2;</code>
     */
    org.kegbot.proto.Models.DrinkOrBuilder getDrinksOrBuilder(
        int index);

    /**
     * <pre>
     * Recent system events.
     * </pre>
     *
     * <code>repeated .SystemEvent events = 3;</code>
     */
    java.util.List<org.kegbot.proto.Models.SystemEvent> 
        getEventsList();
    /**
     * <pre>
     * Recent system events.
     * </pre>
     *
     * <code>repeated .SystemEvent events = 3;</code>
     */
    org.kegbot.proto.Models.SystemEvent getEvents(int index);
    /**
     * <pre>
     * Recent system events.
     * </pre>
     *
     * <code>repeated .SystemEvent events = 3;</code>
     */
    int getEventsCount();
    /**
     * <pre>
     * Recent system events.
     * </pre>
     *
     * <code>repeated .SystemEvent events = 3;</code>
     */
    java.util.List<? extends org.kegbot.proto.Models.SystemEventOrBuilder> 
        getEventsOrBuilderList();
    /**
     * <pre>
     * Recent system events.
     * </pre>
     *
     * <code>repeated .SystemEvent events = 3;</code>
     */
    org.kegbot.proto.Models.SystemEventOrBuilder getEventsOrBuilder(
        int index);

    /**
     * <pre>
     * Kegs on tap.
     * </pre>
     *
     * <code>repeated .Keg active_kegs = 4;</code>
     */
    java.util.List<org.kegbot.proto.Models.Keg> 
        getActiveKegsList();
    /**
     * <pre>
     * Kegs on tap.
     * </pre>
     *
     * <code>repeated .Keg active_kegs = 4;</code>
     */
    org.kegbot.proto.Models.Keg getActiveKegs(int index);
    /**
     * <pre>
     * Kegs on tap.
     * </pre>
     *
     * <code>repeated .Keg active_kegs = 4;</code>
     */
    int getActiveKegsCount();
    /**
     * <pre>
     * Kegs on tap.
     * </pre>
     *
     * <code>repeated .Keg active_kegs = 4;</code>
     */
    java.util.List<? extends org.kegbot.proto.Models.KegOrBuilder> 
        getActiveKegsOrBuilderList();
    /**
     * <pre>
     * Kegs on tap.
     * </pre>
     *
     * <code>repeated .Keg active_kegs = 4;</code>
     */
    org.kegbot.proto.Models.KegOrBuilder getActiveKegsOrBuilder(
        int index);

    /**
     * <pre>
     * All configured meters.
     * </pre>
     *
     * <code>repeated .FlowMeter meters = 5;</code>
     */
    java.util.List<org.kegbot.proto.Models.FlowMeter> 
        getMetersList();
    /**
     * <pre>
     * All configured meters.
     * </pre>
     *
     * <code>repeated .FlowMeter meters = 5;</code>
     */
    org.kegbot.proto.Models.FlowMeter getMeters(int index);
    /**
     * <pre>
     * All configured meters.
     * </pre>
     *
     * <code>repeated .FlowMeter meters = 5;</code>
     */
    int getMetersCount();
    /**
     * <pre>
     * All configured meters.
     * </pre>
     *
     * <code>repeated .FlowMeter meters = 5;</code>
     */
    java.util.List<? extends org.kegbot.proto.Models.FlowMeterOrBuilder> 
        getMetersOrBuilderList();
    /**
     * <pre>
     * All configured meters.
     * </pre>
     *
     * <code>repeated .FlowMeter meters = 5;</code>
     */
    org.kegbot.proto.Models.FlowMeterOrBuilder getMetersOrBuilder(
        int index);

    /**
     * <pre>
     * Site info.
     * </pre>
     *
     * <code>optional .SiteInfo site_info = 6;</code>
     * @return Whether the siteInfo field is set.
     */
    boolean hasSiteInfo();
    /**
     * <pre>
     * Site info.
     * </pre>
     *
     * <code>optional .SiteInfo site_info = 6;</code>
     * @return The siteInfo.
     */
    org.kegbot.proto.Models.SiteInfo getSiteInfo();
    /**
     * <pre>
     * Site info.
     * </pre>
     *
     * <code>optional .SiteInfo site_info = 6;</code>
     */
    org.kegbot.proto.Models.SiteInfoOrBuilder getSiteInfoOrBuilder();

    /**
     * <pre>
     * Sound events.
     * </pre>
     *
     * <code>repeated .SoundEvent sound_events = 7;</code>
     */
    java.util.List<org.kegbot.proto.Models.SoundEvent> 
        getSoundEventsList();
    /**
     * <pre>
     * Sound events.
     * </pre>
     *
     * <code>repeated .SoundEvent sound_events = 7;</code>
     */
    org.kegbot.proto.Models.SoundEvent getSoundEvents(int index);
    /**
     * <pre>
     * Sound events.
     * </pre>
     *
     * <code>repeated .SoundEvent sound_events = 7;</code>
     */
    int getSoundEventsCount();
    /**
     * <pre>
     * Sound events.
     * </pre>
     *
     * <code>repeated .SoundEvent sound_events = 7;</code>
     */
    java.util.List<? extends org.kegbot.proto.Models.SoundEventOrBuilder> 
        getSoundEventsOrBuilderList();
    /**
     * <pre>
     * Sound events.
     * </pre>
     *
     * <code>repeated .SoundEvent sound_events = 7;</code>
     */
    org.kegbot.proto.Models.SoundEventOrBuilder getSoundEventsOrBuilder(
        int index);

    /**
     * <pre>
     * All taps.
     * </pre>
     *
     * <code>repeated .KegTap taps = 8;</code>
     */
    java.util.List<org.kegbot.proto.Models.KegTap> 
        getTapsList();
    /**
     * <pre>
     * All taps.
     * </pre>
     *
     * <code>repeated .KegTap taps = 8;</code>
     */
    org.kegbot.proto.Models.KegTap getTaps(int index);
    /**
     * <pre>
     * All taps.
     * </pre>
     *
     * <code>repeated .KegTap taps = 8;</code>
     */
    int getTapsCount();
    /**
     * <pre>
     * All taps.
     * </pre>
     *
     * <code>repeated .KegTap taps = 8;</code>
     */
    java.util.List<? extends org.kegbot.proto.Models.KegTapOrBuilder> 
        getTapsOrBuilderList();
    /**
     * <pre>
     * All taps.
     * </pre>
     *
     * <code>repeated .KegTap taps = 8;</code>
     */
    org.kegbot.proto.Models.KegTapOrBuilder getTapsOrBuilder(
        int index);

    /**
     * <pre>
     * All toggles.
     * </pre>
     *
     * <code>repeated .FlowToggle toggles = 9;</code>
     */
    java.util.List<org.kegbot.proto.Models.FlowToggle> 
        getTogglesList();
    /**
     * <pre>
     * All toggles.
     * </pre>
     *
     * <code>repeated .FlowToggle toggles = 9;</code>
     */
    org.kegbot.proto.Models.FlowToggle getToggles(int index);
    /**
     * <pre>
     * All toggles.
     * </pre>
     *
     * <code>repeated .FlowToggle toggles = 9;</code>
     */
    int getTogglesCount();
    /**
     * <pre>
     * All toggles.
     * </pre>
     *
     * <code>repeated .FlowToggle toggles = 9;</code>
     */
    java.util.List<? extends org.kegbot.proto.Models.FlowToggleOrBuilder> 
        getTogglesOrBuilderList();
    /**
     * <pre>
     * All toggles.
     * </pre>
     *
     * <code>repeated .FlowToggle toggles = 9;</code>
     */
    org.kegbot.proto.Models.FlowToggleOrBuilder getTogglesOrBuilder(
        int index);

    /**
     * <pre>
     * Current session (if there is one).
     * </pre>
     *
     * <code>optional .Session active_session = 10;</code>
     * @return Whether the activeSession field is set.
     */
    boolean hasActiveSession();
    /**
     * <pre>
     * Current session (if there is one).
     * </pre>
     *
     * <code>optional .Session active_session = 10;</code>
     * @return The activeSession.
     */
    org.kegbot.proto.Models.Session getActiveSession();
    /**
     * <pre>
     * Current session (if there is one).
     * </pre>
     *
     * <code>optional .Session active_session = 10;</code>
     */
    org.kegbot.proto.Models.SessionOrBuilder getActiveSessionOrBuilder();

    /**
     * <pre>
     * Currently-active users (if any).
     * </pre>
     *
     * <code>repeated .User active_users = 11;</code>
     */
    java.util.List<org.kegbot.proto.Models.User> 
        getActiveUsersList();
    /**
     * <pre>
     * Currently-active users (if any).
     * </pre>
     *
     * <code>repeated .User active_users = 11;</code>
     */
    org.kegbot.proto.Models.User getActiveUsers(int index);
    /**
     * <pre>
     * Currently-active users (if any).
     * </pre>
     *
     * <code>repeated .User active_users = 11;</code>
     */
    int getActiveUsersCount();
    /**
     * <pre>
     * Currently-active users (if any).
     * </pre>
     *
     * <code>repeated .User active_users = 11;</code>
     */
    java.util.List<? extends org.kegbot.proto.Models.UserOrBuilder> 
        getActiveUsersOrBuilderList();
    /**
     * <pre>
     * Currently-active users (if any).
     * </pre>
     *
     * <code>repeated .User active_users = 11;</code>
     */
    org.kegbot.proto.Models.UserOrBuilder getActiveUsersOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code SyncResponse}
   */
  public static final class SyncResponse extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:SyncResponse)
      SyncResponseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SyncResponse.newBuilder() to construct.
    private SyncResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SyncResponse() {
      controllers_ = java.util.Collections.emptyList();
      drinks_ = java.util.Collections.emptyList();
      events_ = java.util.Collections.emptyList();
      activeKegs_ = java.util.Collections.emptyList();
      meters_ = java.util.Collections.emptyList();
      soundEvents_ = java.util.Collections.emptyList();
      taps_ = java.util.Collections.emptyList();
      toggles_ = java.util.Collections.emptyList();
      activeUsers_ = java.util.Collections.emptyList();
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.kegbot.proto.Api.internal_static_SyncResponse_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.kegbot.proto.Api.internal_static_SyncResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.kegbot.proto.Api.SyncResponse.class, org.kegbot.proto.Api.SyncResponse.Builder.class);
    }

    private int bitField0_;
    public static final int CONTROLLERS_FIELD_NUMBER = 1;
    private java.util.List<org.kegbot.proto.Models.Controller> controllers_;
    /**
     * <pre>
     * All configured controllers.
     * </pre>
     *
     * <code>repeated .Controller controllers = 1;</code>
     */
    @java.lang.Override
    public java.util.List<org.kegbot.proto.Models.Controller> getControllersList() {
      return controllers_;
    }
    /**
     * <pre>
     * All configured controllers.
     * </pre>
     *
     * <code>repeated .Controller controllers = 1;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.kegbot.proto.Models.ControllerOrBuilder> 
        getControllersOrBuilderList() {
      return controllers_;
    }
    /**
     * <pre>
     * All configured controllers.
     * </pre>
     *
     * <code>repeated .Controller controllers = 1;</code>
     */
    @java.lang.Override
    public int getControllersCount() {
      return controllers_.size();
    }
    /**
     * <pre>
     * All configured controllers.
     * </pre>
     *
     * <code>repeated .Controller controllers = 1;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.Controller getControllers(int index) {
      return controllers_.get(index);
    }
    /**
     * <pre>
     * All configured controllers.
     * </pre>
     *
     * <code>repeated .Controller controllers = 1;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.ControllerOrBuilder getControllersOrBuilder(
        int index) {
      return controllers_.get(index);
    }

    public static final int DRINKS_FIELD_NUMBER = 2;
    private java.util.List<org.kegbot.proto.Models.Drink> drinks_;
    /**
     * <pre>
     * Recently-poured drinks.
     * </pre>
     *
     * <code>repeated .Drink drinks = 2;</code>
     */
    @java.lang.Override
    public java.util.List<org.kegbot.proto.Models.Drink> getDrinksList() {
      return drinks_;
    }
    /**
     * <pre>
     * Recently-poured drinks.
     * </pre>
     *
     * <code>repeated .Drink drinks = 2;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.kegbot.proto.Models.DrinkOrBuilder> 
        getDrinksOrBuilderList() {
      return drinks_;
    }
    /**
     * <pre>
     * Recently-poured drinks.
     * </pre>
     *
     * <code>repeated .Drink drinks = 2;</code>
     */
    @java.lang.Override
    public int getDrinksCount() {
      return drinks_.size();
    }
    /**
     * <pre>
     * Recently-poured drinks.
     * </pre>
     *
     * <code>repeated .Drink drinks = 2;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.Drink getDrinks(int index) {
      return drinks_.get(index);
    }
    /**
     * <pre>
     * Recently-poured drinks.
     * </pre>
     *
     * <code>repeated .Drink drinks = 2;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.DrinkOrBuilder getDrinksOrBuilder(
        int index) {
      return drinks_.get(index);
    }

    public static final int EVENTS_FIELD_NUMBER = 3;
    private java.util.List<org.kegbot.proto.Models.SystemEvent> events_;
    /**
     * <pre>
     * Recent system events.
     * </pre>
     *
     * <code>repeated .SystemEvent events = 3;</code>
     */
    @java.lang.Override
    public java.util.List<org.kegbot.proto.Models.SystemEvent> getEventsList() {
      return events_;
    }
    /**
     * <pre>
     * Recent system events.
     * </pre>
     *
     * <code>repeated .SystemEvent events = 3;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.kegbot.proto.Models.SystemEventOrBuilder> 
        getEventsOrBuilderList() {
      return events_;
    }
    /**
     * <pre>
     * Recent system events.
     * </pre>
     *
     * <code>repeated .SystemEvent events = 3;</code>
     */
    @java.lang.Override
    public int getEventsCount() {
      return events_.size();
    }
    /**
     * <pre>
     * Recent system events.
     * </pre>
     *
     * <code>repeated .SystemEvent events = 3;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.SystemEvent getEvents(int index) {
      return events_.get(index);
    }
    /**
     * <pre>
     * Recent system events.
     * </pre>
     *
     * <code>repeated .SystemEvent events = 3;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.SystemEventOrBuilder getEventsOrBuilder(
        int index) {
      return events_.get(index);
    }

    public static final int ACTIVE_KEGS_FIELD_NUMBER = 4;
    private java.util.List<org.kegbot.proto.Models.Keg> activeKegs_;
    /**
     * <pre>
     * Kegs on tap.
     * </pre>
     *
     * <code>repeated .Keg active_kegs = 4;</code>
     */
    @java.lang.Override
    public java.util.List<org.kegbot.proto.Models.Keg> getActiveKegsList() {
      return activeKegs_;
    }
    /**
     * <pre>
     * Kegs on tap.
     * </pre>
     *
     * <code>repeated .Keg active_kegs = 4;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.kegbot.proto.Models.KegOrBuilder> 
        getActiveKegsOrBuilderList() {
      return activeKegs_;
    }
    /**
     * <pre>
     * Kegs on tap.
     * </pre>
     *
     * <code>repeated .Keg active_kegs = 4;</code>
     */
    @java.lang.Override
    public int getActiveKegsCount() {
      return activeKegs_.size();
    }
    /**
     * <pre>
     * Kegs on tap.
     * </pre>
     *
     * <code>repeated .Keg active_kegs = 4;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.Keg getActiveKegs(int index) {
      return activeKegs_.get(index);
    }
    /**
     * <pre>
     * Kegs on tap.
     * </pre>
     *
     * <code>repeated .Keg active_kegs = 4;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.KegOrBuilder getActiveKegsOrBuilder(
        int index) {
      return activeKegs_.get(index);
    }

    public static final int METERS_FIELD_NUMBER = 5;
    private java.util.List<org.kegbot.proto.Models.FlowMeter> meters_;
    /**
     * <pre>
     * All configured meters.
     * </pre>
     *
     * <code>repeated .FlowMeter meters = 5;</code>
     */
    @java.lang.Override
    public java.util.List<org.kegbot.proto.Models.FlowMeter> getMetersList() {
      return meters_;
    }
    /**
     * <pre>
     * All configured meters.
     * </pre>
     *
     * <code>repeated .FlowMeter meters = 5;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.kegbot.proto.Models.FlowMeterOrBuilder> 
        getMetersOrBuilderList() {
      return meters_;
    }
    /**
     * <pre>
     * All configured meters.
     * </pre>
     *
     * <code>repeated .FlowMeter meters = 5;</code>
     */
    @java.lang.Override
    public int getMetersCount() {
      return meters_.size();
    }
    /**
     * <pre>
     * All configured meters.
     * </pre>
     *
     * <code>repeated .FlowMeter meters = 5;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.FlowMeter getMeters(int index) {
      return meters_.get(index);
    }
    /**
     * <pre>
     * All configured meters.
     * </pre>
     *
     * <code>repeated .FlowMeter meters = 5;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.FlowMeterOrBuilder getMetersOrBuilder(
        int index) {
      return meters_.get(index);
    }

    public static final int SITE_INFO_FIELD_NUMBER = 6;
    private org.kegbot.proto.Models.SiteInfo siteInfo_;
    /**
     * <pre>
     * Site info.
     * </pre>
     *
     * <code>optional .SiteInfo site_info = 6;</code>
     * @return Whether the siteInfo field is set.
     */
    @java.lang.Override
    public boolean hasSiteInfo() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     * Site info.
     * </pre>
     *
     * <code>optional .SiteInfo site_info = 6;</code>
     * @return The siteInfo.
     */
    @java.lang.Override
    public org.kegbot.proto.Models.SiteInfo getSiteInfo() {
      return siteInfo_ == null ? org.kegbot.proto.Models.SiteInfo.getDefaultInstance() : siteInfo_;
    }
    /**
     * <pre>
     * Site info.
     * </pre>
     *
     * <code>optional .SiteInfo site_info = 6;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.SiteInfoOrBuilder getSiteInfoOrBuilder() {
      return siteInfo_ == null ? org.kegbot.proto.Models.SiteInfo.getDefaultInstance() : siteInfo_;
    }

    public static final int SOUND_EVENTS_FIELD_NUMBER = 7;
    private java.util.List<org.kegbot.proto.Models.SoundEvent> soundEvents_;
    /**
     * <pre>
     * Sound events.
     * </pre>
     *
     * <code>repeated .SoundEvent sound_events = 7;</code>
     */
    @java.lang.Override
    public java.util.List<org.kegbot.proto.Models.SoundEvent> getSoundEventsList() {
      return soundEvents_;
    }
    /**
     * <pre>
     * Sound events.
     * </pre>
     *
     * <code>repeated .SoundEvent sound_events = 7;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.kegbot.proto.Models.SoundEventOrBuilder> 
        getSoundEventsOrBuilderList() {
      return soundEvents_;
    }
    /**
     * <pre>
     * Sound events.
     * </pre>
     *
     * <code>repeated .SoundEvent sound_events = 7;</code>
     */
    @java.lang.Override
    public int getSoundEventsCount() {
      return soundEvents_.size();
    }
    /**
     * <pre>
     * Sound events.
     * </pre>
     *
     * <code>repeated .SoundEvent sound_events = 7;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.SoundEvent getSoundEvents(int index) {
      return soundEvents_.get(index);
    }
    /**
     * <pre>
     * Sound events.
     * </pre>
     *
     * <code>repeated .SoundEvent sound_events = 7;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.SoundEventOrBuilder getSoundEventsOrBuilder(
        int index) {
      return soundEvents_.get(index);
    }

    public static final int TAPS_FIELD_NUMBER = 8;
    private java.util.List<org.kegbot.proto.Models.KegTap> taps_;
    /**
     * <pre>
     * All taps.
     * </pre>
     *
     * <code>repeated .KegTap taps = 8;</code>
     */
    @java.lang.Override
    public java.util.List<org.kegbot.proto.Models.KegTap> getTapsList() {
      return taps_;
    }
    /**
     * <pre>
     * All taps.
     * </pre>
     *
     * <code>repeated .KegTap taps = 8;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.kegbot.proto.Models.KegTapOrBuilder> 
        getTapsOrBuilderList() {
      return taps_;
    }
    /**
     * <pre>
     * All taps.
     * </pre>
     *
     * <code>repeated .KegTap taps = 8;</code>
     */
    @java.lang.Override
    public int getTapsCount() {
      return taps_.size();
    }
    /**
     * <pre>
     * All taps.
     * </pre>
     *
     * <code>repeated .KegTap taps = 8;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.KegTap getTaps(int index) {
      return taps_.get(index);
    }
    /**
     * <pre>
     * All taps.
     * </pre>
     *
     * <code>repeated .KegTap taps = 8;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.KegTapOrBuilder getTapsOrBuilder(
        int index) {
      return taps_.get(index);
    }

    public static final int TOGGLES_FIELD_NUMBER = 9;
    private java.util.List<org.kegbot.proto.Models.FlowToggle> toggles_;
    /**
     * <pre>
     * All toggles.
     * </pre>
     *
     * <code>repeated .FlowToggle toggles = 9;</code>
     */
    @java.lang.Override
    public java.util.List<org.kegbot.proto.Models.FlowToggle> getTogglesList() {
      return toggles_;
    }
    /**
     * <pre>
     * All toggles.
     * </pre>
     *
     * <code>repeated .FlowToggle toggles = 9;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.kegbot.proto.Models.FlowToggleOrBuilder> 
        getTogglesOrBuilderList() {
      return toggles_;
    }
    /**
     * <pre>
     * All toggles.
     * </pre>
     *
     * <code>repeated .FlowToggle toggles = 9;</code>
     */
    @java.lang.Override
    public int getTogglesCount() {
      return toggles_.size();
    }
    /**
     * <pre>
     * All toggles.
     * </pre>
     *
     * <code>repeated .FlowToggle toggles = 9;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.FlowToggle getToggles(int index) {
      return toggles_.get(index);
    }
    /**
     * <pre>
     * All toggles.
     * </pre>
     *
     * <code>repeated .FlowToggle toggles = 9;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.FlowToggleOrBuilder getTogglesOrBuilder(
        int index) {
      return toggles_.get(index);
    }

    public static final int ACTIVE_SESSION_FIELD_NUMBER = 10;
    private org.kegbot.proto.Models.Session activeSession_;
    /**
     * <pre>
     * Current session (if there is one).
     * </pre>
     *
     * <code>optional .Session active_session = 10;</code>
     * @return Whether the activeSession field is set.
     */
    @java.lang.Override
    public boolean hasActiveSession() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * Current session (if there is one).
     * </pre>
     *
     * <code>optional .Session active_session = 10;</code>
     * @return The activeSession.
     */
    @java.lang.Override
    public org.kegbot.proto.Models.Session getActiveSession() {
      return activeSession_ == null ? org.kegbot.proto.Models.Session.getDefaultInstance() : activeSession_;
    }
    /**
     * <pre>
     * Current session (if there is one).
     * </pre>
     *
     * <code>optional .Session active_session = 10;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.SessionOrBuilder getActiveSessionOrBuilder() {
      return activeSession_ == null ? org.kegbot.proto.Models.Session.getDefaultInstance() : activeSession_;
    }

    public static final int ACTIVE_USERS_FIELD_NUMBER = 11;
    private java.util.List<org.kegbot.proto.Models.User> activeUsers_;
    /**
     * <pre>
     * Currently-active users (if any).
     * </pre>
     *
     * <code>repeated .User active_users = 11;</code>
     */
    @java.lang.Override
    public java.util.List<org.kegbot.proto.Models.User> getActiveUsersList() {
      return activeUsers_;
    }
    /**
     * <pre>
     * Currently-active users (if any).
     * </pre>
     *
     * <code>repeated .User active_users = 11;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.kegbot.proto.Models.UserOrBuilder> 
        getActiveUsersOrBuilderList() {
      return activeUsers_;
    }
    /**
     * <pre>
     * Currently-active users (if any).
     * </pre>
     *
     * <code>repeated .User active_users = 11;</code>
     */
    @java.lang.Override
    public int getActiveUsersCount() {
      return activeUsers_.size();
    }
    /**
     * <pre>
     * Currently-active users (if any).
     * </pre>
     *
     * <code>repeated .User active_users = 11;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.User getActiveUsers(int index) {
      return activeUsers_.get(index);
    }
    /**
     * <pre>
     * Currently-active users (if any).
     * </pre>
     *
     * <code>repeated .User active_users = 11;</code>
     */
    @java.lang.Override
    public org.kegbot.proto.Models.UserOrBuilder getActiveUsersOrBuilder(
        int index) {
      return activeUsers_.get(index);
    }

    public static org.kegbot.proto.Api.SyncResponse parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.kegbot.proto.Api.SyncResponse parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.kegbot.proto.Api.SyncResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.kegbot.proto.Api.SyncResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.kegbot.proto.Api.SyncResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.kegbot.proto.Api.SyncResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.kegbot.proto.Api.SyncResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.kegbot.proto.Api.SyncResponse 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 org.kegbot.proto.Api.SyncResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.kegbot.proto.Api.SyncResponse 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 org.kegbot.proto.Api.SyncResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.kegbot.proto.Api.SyncResponse 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(org.kegbot.proto.Api.SyncResponse 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 SyncResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:SyncResponse)
        org.kegbot.proto.Api.SyncResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.kegbot.proto.Api.internal_static_SyncResponse_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.kegbot.proto.Api.internal_static_SyncResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.kegbot.proto.Api.SyncResponse.class, org.kegbot.proto.Api.SyncResponse.Builder.class);
      }

      // Construct using org.kegbot.proto.Api.SyncResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getControllersFieldBuilder();
          getDrinksFieldBuilder();
          getEventsFieldBuilder();
          getActiveKegsFieldBuilder();
          getMetersFieldBuilder();
          getSiteInfoFieldBuilder();
          getSoundEventsFieldBuilder();
          getTapsFieldBuilder();
          getTogglesFieldBuilder();
          getActiveSessionFieldBuilder();
          getActiveUsersFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (controllersBuilder_ == null) {
          controllers_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          controllersBuilder_.clear();
        }
        if (drinksBuilder_ == null) {
          drinks_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          drinksBuilder_.clear();
        }
        if (eventsBuilder_ == null) {
          events_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          eventsBuilder_.clear();
        }
        if (activeKegsBuilder_ == null) {
          activeKegs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          activeKegsBuilder_.clear();
        }
        if (metersBuilder_ == null) {
          meters_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          metersBuilder_.clear();
        }
        if (siteInfoBuilder_ == null) {
          siteInfo_ = null;
        } else {
          siteInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        if (soundEventsBuilder_ == null) {
          soundEvents_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          soundEventsBuilder_.clear();
        }
        if (tapsBuilder_ == null) {
          taps_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
        } else {
          tapsBuilder_.clear();
        }
        if (togglesBuilder_ == null) {
          toggles_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
        } else {
          togglesBuilder_.clear();
        }
        if (activeSessionBuilder_ == null) {
          activeSession_ = null;
        } else {
          activeSessionBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        if (activeUsersBuilder_ == null) {
          activeUsers_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000400);
        } else {
          activeUsersBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.kegbot.proto.Api.internal_static_SyncResponse_descriptor;
      }

      @java.lang.Override
      public org.kegbot.proto.Api.SyncResponse getDefaultInstanceForType() {
        return org.kegbot.proto.Api.SyncResponse.getDefaultInstance();
      }

      @java.lang.Override
      public org.kegbot.proto.Api.SyncResponse build() {
        org.kegbot.proto.Api.SyncResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.kegbot.proto.Api.SyncResponse buildPartial() {
        org.kegbot.proto.Api.SyncResponse result = new org.kegbot.proto.Api.SyncResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (controllersBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            controllers_ = java.util.Collections.unmodifiableList(controllers_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.controllers_ = controllers_;
        } else {
          result.controllers_ = controllersBuilder_.build();
        }
        if (drinksBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0)) {
            drinks_ = java.util.Collections.unmodifiableList(drinks_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.drinks_ = drinks_;
        } else {
          result.drinks_ = drinksBuilder_.build();
        }
        if (eventsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0)) {
            events_ = java.util.Collections.unmodifiableList(events_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.events_ = events_;
        } else {
          result.events_ = eventsBuilder_.build();
        }
        if (activeKegsBuilder_ == null) {
          if (((bitField0_ & 0x00000008) != 0)) {
            activeKegs_ = java.util.Collections.unmodifiableList(activeKegs_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.activeKegs_ = activeKegs_;
        } else {
          result.activeKegs_ = activeKegsBuilder_.build();
        }
        if (metersBuilder_ == null) {
          if (((bitField0_ & 0x00000010) != 0)) {
            meters_ = java.util.Collections.unmodifiableList(meters_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.meters_ = meters_;
        } else {
          result.meters_ = metersBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          if (siteInfoBuilder_ == null) {
            result.siteInfo_ = siteInfo_;
          } else {
            result.siteInfo_ = siteInfoBuilder_.build();
          }
          to_bitField0_ |= 0x00000001;
        }
        if (soundEventsBuilder_ == null) {
          if (((bitField0_ & 0x00000040) != 0)) {
            soundEvents_ = java.util.Collections.unmodifiableList(soundEvents_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.soundEvents_ = soundEvents_;
        } else {
          result.soundEvents_ = soundEventsBuilder_.build();
        }
        if (tapsBuilder_ == null) {
          if (((bitField0_ & 0x00000080) != 0)) {
            taps_ = java.util.Collections.unmodifiableList(taps_);
            bitField0_ = (bitField0_ & ~0x00000080);
          }
          result.taps_ = taps_;
        } else {
          result.taps_ = tapsBuilder_.build();
        }
        if (togglesBuilder_ == null) {
          if (((bitField0_ & 0x00000100) != 0)) {
            toggles_ = java.util.Collections.unmodifiableList(toggles_);
            bitField0_ = (bitField0_ & ~0x00000100);
          }
          result.toggles_ = toggles_;
        } else {
          result.toggles_ = togglesBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000200) != 0)) {
          if (activeSessionBuilder_ == null) {
            result.activeSession_ = activeSession_;
          } else {
            result.activeSession_ = activeSessionBuilder_.build();
          }
          to_bitField0_ |= 0x00000002;
        }
        if (activeUsersBuilder_ == null) {
          if (((bitField0_ & 0x00000400) != 0)) {
            activeUsers_ = java.util.Collections.unmodifiableList(activeUsers_);
            bitField0_ = (bitField0_ & ~0x00000400);
          }
          result.activeUsers_ = activeUsers_;
        } else {
          result.activeUsers_ = activeUsersBuilder_.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.util.List<org.kegbot.proto.Models.Controller> controllers_ =
        java.util.Collections.emptyList();
      private void ensureControllersIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          controllers_ = new java.util.ArrayList<org.kegbot.proto.Models.Controller>(controllers_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.kegbot.proto.Models.Controller, org.kegbot.proto.Models.Controller.Builder, org.kegbot.proto.Models.ControllerOrBuilder> controllersBuilder_;

      /**
       * <pre>
       * All configured controllers.
       * </pre>
       *
       * <code>repeated .Controller controllers = 1;</code>
       */
      public java.util.List<org.kegbot.proto.Models.Controller> getControllersList() {
        if (controllersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(controllers_);
        } else {
          return controllersBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * All configured controllers.
       * </pre>
       *
       * <code>repeated .Controller controllers = 1;</code>
       */
      public int getControllersCount() {
        if (controllersBuilder_ == null) {
          return controllers_.size();
        } else {
          return controllersBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * All configured controllers.
       * </pre>
       *
       * <code>repeated .Controller controllers = 1;</code>
       */
      public org.kegbot.proto.Models.Controller getControllers(int index) {
        if (controllersBuilder_ == null) {
          return controllers_.get(index);
        } else {
          return controllersBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * All configured controllers.
       * </pre>
       *
       * <code>repeated .Controller controllers = 1;</code>
       */
      public Builder setControllers(
          int index, org.kegbot.proto.Models.Controller value) {
        if (controllersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureControllersIsMutable();
          controllers_.set(index, value);
          onChanged();
        } else {
          controllersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * All configured controllers.
       * </pre>
       *
       * <code>repeated .Controller controllers = 1;</code>
       */
      public Builder setControllers(
          int index, org.kegbot.proto.Models.Controller.Builder builderForValue) {
        if (controllersBuilder_ == null) {
          ensureControllersIsMutable();
          controllers_.set(index, builderForValue.build());
          onChanged();
        } else {
          controllersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * All configured controllers.
       * </pre>
       *
       * <code>repeated .Controller controllers = 1;</code>
       */
      public Builder addControllers(org.kegbot.proto.Models.Controller value) {
        if (controllersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureControllersIsMutable();
          controllers_.add(value);
          onChanged();
        } else {
          controllersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * All configured controllers.
       * </pre>
       *
       * <code>repeated .Controller controllers = 1;</code>
       */
      public Builder addControllers(
          int index, org.kegbot.proto.Models.Controller value) {
        if (controllersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureControllersIsMutable();
          controllers_.add(index, value);
          onChanged();
        } else {
          controllersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * All configured controllers.
       * </pre>
       *
       * <code>repeated .Controller controllers = 1;</code>
       */
      public Builder addControllers(
          org.kegbot.proto.Models.Controller.Builder builderForValue) {
        if (controllersBuilder_ == null) {
          ensureControllersIsMutable();
          controllers_.add(builderForValue.build());
          onChanged();
        } else {
          controllersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * All configured controllers.
       * </pre>
       *
       * <code>repeated .Controller controllers = 1;</code>
       */
      public Builder addControllers(
          int index, org.kegbot.proto.Models.Controller.Builder builderForValue) {
        if (controllersBuilder_ == null) {
          ensureControllersIsMutable();
          controllers_.add(index, builderForValue.build());
          onChanged();
        } else {
          controllersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * All configured controllers.
       * </pre>
       *
       * <code>repeated .Controller controllers = 1;</code>
       */
      public Builder addAllControllers(
          java.lang.Iterable<? extends org.kegbot.proto.Models.Controller> values) {
        if (controllersBuilder_ == null) {
          ensureControllersIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, controllers_);
          onChanged();
        } else {
          controllersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * All configured controllers.
       * </pre>
       *
       * <code>repeated .Controller controllers = 1;</code>
       */
      public Builder clearControllers() {
        if (controllersBuilder_ == null) {
          controllers_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          controllersBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * All configured controllers.
       * </pre>
       *
       * <code>repeated .Controller controllers = 1;</code>
       */
      public Builder removeControllers(int index) {
        if (controllersBuilder_ == null) {
          ensureControllersIsMutable();
          controllers_.remove(index);
          onChanged();
        } else {
          controllersBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * All configured controllers.
       * </pre>
       *
       * <code>repeated .Controller controllers = 1;</code>
       */
      public org.kegbot.proto.Models.Controller.Builder getControllersBuilder(
          int index) {
        return getControllersFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * All configured controllers.
       * </pre>
       *
       * <code>repeated .Controller controllers = 1;</code>
       */
      public org.kegbot.proto.Models.ControllerOrBuilder getControllersOrBuilder(
          int index) {
        if (controllersBuilder_ == null) {
          return controllers_.get(index);  } else {
          return controllersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * All configured controllers.
       * </pre>
       *
       * <code>repeated .Controller controllers = 1;</code>
       */
      public java.util.List<? extends org.kegbot.proto.Models.ControllerOrBuilder> 
           getControllersOrBuilderList() {
        if (controllersBuilder_ != null) {
          return controllersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(controllers_);
        }
      }
      /**
       * <pre>
       * All configured controllers.
       * </pre>
       *
       * <code>repeated .Controller controllers = 1;</code>
       */
      public org.kegbot.proto.Models.Controller.Builder addControllersBuilder() {
        return getControllersFieldBuilder().addBuilder(
            org.kegbot.proto.Models.Controller.getDefaultInstance());
      }
      /**
       * <pre>
       * All configured controllers.
       * </pre>
       *
       * <code>repeated .Controller controllers = 1;</code>
       */
      public org.kegbot.proto.Models.Controller.Builder addControllersBuilder(
          int index) {
        return getControllersFieldBuilder().addBuilder(
            index, org.kegbot.proto.Models.Controller.getDefaultInstance());
      }
      /**
       * <pre>
       * All configured controllers.
       * </pre>
       *
       * <code>repeated .Controller controllers = 1;</code>
       */
      public java.util.List<org.kegbot.proto.Models.Controller.Builder> 
           getControllersBuilderList() {
        return getControllersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.kegbot.proto.Models.Controller, org.kegbot.proto.Models.Controller.Builder, org.kegbot.proto.Models.ControllerOrBuilder> 
          getControllersFieldBuilder() {
        if (controllersBuilder_ == null) {
          controllersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.kegbot.proto.Models.Controller, org.kegbot.proto.Models.Controller.Builder, org.kegbot.proto.Models.ControllerOrBuilder>(
                  controllers_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          controllers_ = null;
        }
        return controllersBuilder_;
      }

      private java.util.List<org.kegbot.proto.Models.Drink> drinks_ =
        java.util.Collections.emptyList();
      private void ensureDrinksIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          drinks_ = new java.util.ArrayList<org.kegbot.proto.Models.Drink>(drinks_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.kegbot.proto.Models.Drink, org.kegbot.proto.Models.Drink.Builder, org.kegbot.proto.Models.DrinkOrBuilder> drinksBuilder_;

      /**
       * <pre>
       * Recently-poured drinks.
       * </pre>
       *
       * <code>repeated .Drink drinks = 2;</code>
       */
      public java.util.List<org.kegbot.proto.Models.Drink> getDrinksList() {
        if (drinksBuilder_ == null) {
          return java.util.Collections.unmodifiableList(drinks_);
        } else {
          return drinksBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Recently-poured drinks.
       * </pre>
       *
       * <code>repeated .Drink drinks = 2;</code>
       */
      public int getDrinksCount() {
        if (drinksBuilder_ == null) {
          return drinks_.size();
        } else {
          return drinksBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Recently-poured drinks.
       * </pre>
       *
       * <code>repeated .Drink drinks = 2;</code>
       */
      public org.kegbot.proto.Models.Drink getDrinks(int index) {
        if (drinksBuilder_ == null) {
          return drinks_.get(index);
        } else {
          return drinksBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Recently-poured drinks.
       * </pre>
       *
       * <code>repeated .Drink drinks = 2;</code>
       */
      public Builder setDrinks(
          int index, org.kegbot.proto.Models.Drink value) {
        if (drinksBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDrinksIsMutable();
          drinks_.set(index, value);
          onChanged();
        } else {
          drinksBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Recently-poured drinks.
       * </pre>
       *
       * <code>repeated .Drink drinks = 2;</code>
       */
      public Builder setDrinks(
          int index, org.kegbot.proto.Models.Drink.Builder builderForValue) {
        if (drinksBuilder_ == null) {
          ensureDrinksIsMutable();
          drinks_.set(index, builderForValue.build());
          onChanged();
        } else {
          drinksBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Recently-poured drinks.
       * </pre>
       *
       * <code>repeated .Drink drinks = 2;</code>
       */
      public Builder addDrinks(org.kegbot.proto.Models.Drink value) {
        if (drinksBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDrinksIsMutable();
          drinks_.add(value);
          onChanged();
        } else {
          drinksBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Recently-poured drinks.
       * </pre>
       *
       * <code>repeated .Drink drinks = 2;</code>
       */
      public Builder addDrinks(
          int index, org.kegbot.proto.Models.Drink value) {
        if (drinksBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDrinksIsMutable();
          drinks_.add(index, value);
          onChanged();
        } else {
          drinksBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Recently-poured drinks.
       * </pre>
       *
       * <code>repeated .Drink drinks = 2;</code>
       */
      public Builder addDrinks(
          org.kegbot.proto.Models.Drink.Builder builderForValue) {
        if (drinksBuilder_ == null) {
          ensureDrinksIsMutable();
          drinks_.add(builderForValue.build());
          onChanged();
        } else {
          drinksBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Recently-poured drinks.
       * </pre>
       *
       * <code>repeated .Drink drinks = 2;</code>
       */
      public Builder addDrinks(
          int index, org.kegbot.proto.Models.Drink.Builder builderForValue) {
        if (drinksBuilder_ == null) {
          ensureDrinksIsMutable();
          drinks_.add(index, builderForValue.build());
          onChanged();
        } else {
          drinksBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Recently-poured drinks.
       * </pre>
       *
       * <code>repeated .Drink drinks = 2;</code>
       */
      public Builder addAllDrinks(
          java.lang.Iterable<? extends org.kegbot.proto.Models.Drink> values) {
        if (drinksBuilder_ == null) {
          ensureDrinksIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, drinks_);
          onChanged();
        } else {
          drinksBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Recently-poured drinks.
       * </pre>
       *
       * <code>repeated .Drink drinks = 2;</code>
       */
      public Builder clearDrinks() {
        if (drinksBuilder_ == null) {
          drinks_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          drinksBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Recently-poured drinks.
       * </pre>
       *
       * <code>repeated .Drink drinks = 2;</code>
       */
      public Builder removeDrinks(int index) {
        if (drinksBuilder_ == null) {
          ensureDrinksIsMutable();
          drinks_.remove(index);
          onChanged();
        } else {
          drinksBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Recently-poured drinks.
       * </pre>
       *
       * <code>repeated .Drink drinks = 2;</code>
       */
      public org.kegbot.proto.Models.Drink.Builder getDrinksBuilder(
          int index) {
        return getDrinksFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Recently-poured drinks.
       * </pre>
       *
       * <code>repeated .Drink drinks = 2;</code>
       */
      public org.kegbot.proto.Models.DrinkOrBuilder getDrinksOrBuilder(
          int index) {
        if (drinksBuilder_ == null) {
          return drinks_.get(index);  } else {
          return drinksBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Recently-poured drinks.
       * </pre>
       *
       * <code>repeated .Drink drinks = 2;</code>
       */
      public java.util.List<? extends org.kegbot.proto.Models.DrinkOrBuilder> 
           getDrinksOrBuilderList() {
        if (drinksBuilder_ != null) {
          return drinksBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(drinks_);
        }
      }
      /**
       * <pre>
       * Recently-poured drinks.
       * </pre>
       *
       * <code>repeated .Drink drinks = 2;</code>
       */
      public org.kegbot.proto.Models.Drink.Builder addDrinksBuilder() {
        return getDrinksFieldBuilder().addBuilder(
            org.kegbot.proto.Models.Drink.getDefaultInstance());
      }
      /**
       * <pre>
       * Recently-poured drinks.
       * </pre>
       *
       * <code>repeated .Drink drinks = 2;</code>
       */
      public org.kegbot.proto.Models.Drink.Builder addDrinksBuilder(
          int index) {
        return getDrinksFieldBuilder().addBuilder(
            index, org.kegbot.proto.Models.Drink.getDefaultInstance());
      }
      /**
       * <pre>
       * Recently-poured drinks.
       * </pre>
       *
       * <code>repeated .Drink drinks = 2;</code>
       */
      public java.util.List<org.kegbot.proto.Models.Drink.Builder> 
           getDrinksBuilderList() {
        return getDrinksFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.kegbot.proto.Models.Drink, org.kegbot.proto.Models.Drink.Builder, org.kegbot.proto.Models.DrinkOrBuilder> 
          getDrinksFieldBuilder() {
        if (drinksBuilder_ == null) {
          drinksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.kegbot.proto.Models.Drink, org.kegbot.proto.Models.Drink.Builder, org.kegbot.proto.Models.DrinkOrBuilder>(
                  drinks_,
                  ((bitField0_ & 0x00000002) != 0),
                  getParentForChildren(),
                  isClean());
          drinks_ = null;
        }
        return drinksBuilder_;
      }

      private java.util.List<org.kegbot.proto.Models.SystemEvent> events_ =
        java.util.Collections.emptyList();
      private void ensureEventsIsMutable() {
        if (!((bitField0_ & 0x00000004) != 0)) {
          events_ = new java.util.ArrayList<org.kegbot.proto.Models.SystemEvent>(events_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.kegbot.proto.Models.SystemEvent, org.kegbot.proto.Models.SystemEvent.Builder, org.kegbot.proto.Models.SystemEventOrBuilder> eventsBuilder_;

      /**
       * <pre>
       * Recent system events.
       * </pre>
       *
       * <code>repeated .SystemEvent events = 3;</code>
       */
      public java.util.List<org.kegbot.proto.Models.SystemEvent> getEventsList() {
        if (eventsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(events_);
        } else {
          return eventsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Recent system events.
       * </pre>
       *
       * <code>repeated .SystemEvent events = 3;</code>
       */
      public int getEventsCount() {
        if (eventsBuilder_ == null) {
          return events_.size();
        } else {
          return eventsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Recent system events.
       * </pre>
       *
       * <code>repeated .SystemEvent events = 3;</code>
       */
      public org.kegbot.proto.Models.SystemEvent getEvents(int index) {
        if (eventsBuilder_ == null) {
          return events_.get(index);
        } else {
          return eventsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Recent system events.
       * </pre>
       *
       * <code>repeated .SystemEvent events = 3;</code>
       */
      public Builder setEvents(
          int index, org.kegbot.proto.Models.SystemEvent value) {
        if (eventsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEventsIsMutable();
          events_.set(index, value);
          onChanged();
        } else {
          eventsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Recent system events.
       * </pre>
       *
       * <code>repeated .SystemEvent events = 3;</code>
       */
      public Builder setEvents(
          int index, org.kegbot.proto.Models.SystemEvent.Builder builderForValue) {
        if (eventsBuilder_ == null) {
          ensureEventsIsMutable();
          events_.set(index, builderForValue.build());
          onChanged();
        } else {
          eventsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Recent system events.
       * </pre>
       *
       * <code>repeated .SystemEvent events = 3;</code>
       */
      public Builder addEvents(org.kegbot.proto.Models.SystemEvent value) {
        if (eventsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEventsIsMutable();
          events_.add(value);
          onChanged();
        } else {
          eventsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Recent system events.
       * </pre>
       *
       * <code>repeated .SystemEvent events = 3;</code>
       */
      public Builder addEvents(
          int index, org.kegbot.proto.Models.SystemEvent value) {
        if (eventsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEventsIsMutable();
          events_.add(index, value);
          onChanged();
        } else {
          eventsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Recent system events.
       * </pre>
       *
       * <code>repeated .SystemEvent events = 3;</code>
       */
      public Builder addEvents(
          org.kegbot.proto.Models.SystemEvent.Builder builderForValue) {
        if (eventsBuilder_ == null) {
          ensureEventsIsMutable();
          events_.add(builderForValue.build());
          onChanged();
        } else {
          eventsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Recent system events.
       * </pre>
       *
       * <code>repeated .SystemEvent events = 3;</code>
       */
      public Builder addEvents(
          int index, org.kegbot.proto.Models.SystemEvent.Builder builderForValue) {
        if (eventsBuilder_ == null) {
          ensureEventsIsMutable();
          events_.add(index, builderForValue.build());
          onChanged();
        } else {
          eventsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Recent system events.
       * </pre>
       *
       * <code>repeated .SystemEvent events = 3;</code>
       */
      public Builder addAllEvents(
          java.lang.Iterable<? extends org.kegbot.proto.Models.SystemEvent> values) {
        if (eventsBuilder_ == null) {
          ensureEventsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, events_);
          onChanged();
        } else {
          eventsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Recent system events.
       * </pre>
       *
       * <code>repeated .SystemEvent events = 3;</code>
       */
      public Builder clearEvents() {
        if (eventsBuilder_ == null) {
          events_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          eventsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Recent system events.
       * </pre>
       *
       * <code>repeated .SystemEvent events = 3;</code>
       */
      public Builder removeEvents(int index) {
        if (eventsBuilder_ == null) {
          ensureEventsIsMutable();
          events_.remove(index);
          onChanged();
        } else {
          eventsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Recent system events.
       * </pre>
       *
       * <code>repeated .SystemEvent events = 3;</code>
       */
      public org.kegbot.proto.Models.SystemEvent.Builder getEventsBuilder(
          int index) {
        return getEventsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Recent system events.
       * </pre>
       *
       * <code>repeated .SystemEvent events = 3;</code>
       */
      public org.kegbot.proto.Models.SystemEventOrBuilder getEventsOrBuilder(
          int index) {
        if (eventsBuilder_ == null) {
          return events_.get(index);  } else {
          return eventsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Recent system events.
       * </pre>
       *
       * <code>repeated .SystemEvent events = 3;</code>
       */
      public java.util.List<? extends org.kegbot.proto.Models.SystemEventOrBuilder> 
           getEventsOrBuilderList() {
        if (eventsBuilder_ != null) {
          return eventsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(events_);
        }
      }
      /**
       * <pre>
       * Recent system events.
       * </pre>
       *
       * <code>repeated .SystemEvent events = 3;</code>
       */
      public org.kegbot.proto.Models.SystemEvent.Builder addEventsBuilder() {
        return getEventsFieldBuilder().addBuilder(
            org.kegbot.proto.Models.SystemEvent.getDefaultInstance());
      }
      /**
       * <pre>
       * Recent system events.
       * </pre>
       *
       * <code>repeated .SystemEvent events = 3;</code>
       */
      public org.kegbot.proto.Models.SystemEvent.Builder addEventsBuilder(
          int index) {
        return getEventsFieldBuilder().addBuilder(
            index, org.kegbot.proto.Models.SystemEvent.getDefaultInstance());
      }
      /**
       * <pre>
       * Recent system events.
       * </pre>
       *
       * <code>repeated .SystemEvent events = 3;</code>
       */
      public java.util.List<org.kegbot.proto.Models.SystemEvent.Builder> 
           getEventsBuilderList() {
        return getEventsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.kegbot.proto.Models.SystemEvent, org.kegbot.proto.Models.SystemEvent.Builder, org.kegbot.proto.Models.SystemEventOrBuilder> 
          getEventsFieldBuilder() {
        if (eventsBuilder_ == null) {
          eventsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.kegbot.proto.Models.SystemEvent, org.kegbot.proto.Models.SystemEvent.Builder, org.kegbot.proto.Models.SystemEventOrBuilder>(
                  events_,
                  ((bitField0_ & 0x00000004) != 0),
                  getParentForChildren(),
                  isClean());
          events_ = null;
        }
        return eventsBuilder_;
      }

      private java.util.List<org.kegbot.proto.Models.Keg> activeKegs_ =
        java.util.Collections.emptyList();
      private void ensureActiveKegsIsMutable() {
        if (!((bitField0_ & 0x00000008) != 0)) {
          activeKegs_ = new java.util.ArrayList<org.kegbot.proto.Models.Keg>(activeKegs_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.kegbot.proto.Models.Keg, org.kegbot.proto.Models.Keg.Builder, org.kegbot.proto.Models.KegOrBuilder> activeKegsBuilder_;

      /**
       * <pre>
       * Kegs on tap.
       * </pre>
       *
       * <code>repeated .Keg active_kegs = 4;</code>
       */
      public java.util.List<org.kegbot.proto.Models.Keg> getActiveKegsList() {
        if (activeKegsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(activeKegs_);
        } else {
          return activeKegsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Kegs on tap.
       * </pre>
       *
       * <code>repeated .Keg active_kegs = 4;</code>
       */
      public int getActiveKegsCount() {
        if (activeKegsBuilder_ == null) {
          return activeKegs_.size();
        } else {
          return activeKegsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Kegs on tap.
       * </pre>
       *
       * <code>repeated .Keg active_kegs = 4;</code>
       */
      public org.kegbot.proto.Models.Keg getActiveKegs(int index) {
        if (activeKegsBuilder_ == null) {
          return activeKegs_.get(index);
        } else {
          return activeKegsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Kegs on tap.
       * </pre>
       *
       * <code>repeated .Keg active_kegs = 4;</code>
       */
      public Builder setActiveKegs(
          int index, org.kegbot.proto.Models.Keg value) {
        if (activeKegsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureActiveKegsIsMutable();
          activeKegs_.set(index, value);
          onChanged();
        } else {
          activeKegsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Kegs on tap.
       * </pre>
       *
       * <code>repeated .Keg active_kegs = 4;</code>
       */
      public Builder setActiveKegs(
          int index, org.kegbot.proto.Models.Keg.Builder builderForValue) {
        if (activeKegsBuilder_ == null) {
          ensureActiveKegsIsMutable();
          activeKegs_.set(index, builderForValue.build());
          onChanged();
        } else {
          activeKegsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Kegs on tap.
       * </pre>
       *
       * <code>repeated .Keg active_kegs = 4;</code>
       */
      public Builder addActiveKegs(org.kegbot.proto.Models.Keg value) {
        if (activeKegsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureActiveKegsIsMutable();
          activeKegs_.add(value);
          onChanged();
        } else {
          activeKegsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Kegs on tap.
       * </pre>
       *
       * <code>repeated .Keg active_kegs = 4;</code>
       */
      public Builder addActiveKegs(
          int index, org.kegbot.proto.Models.Keg value) {
        if (activeKegsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureActiveKegsIsMutable();
          activeKegs_.add(index, value);
          onChanged();
        } else {
          activeKegsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Kegs on tap.
       * </pre>
       *
       * <code>repeated .Keg active_kegs = 4;</code>
       */
      public Builder addActiveKegs(
          org.kegbot.proto.Models.Keg.Builder builderForValue) {
        if (activeKegsBuilder_ == null) {
          ensureActiveKegsIsMutable();
          activeKegs_.add(builderForValue.build());
          onChanged();
        } else {
          activeKegsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Kegs on tap.
       * </pre>
       *
       * <code>repeated .Keg active_kegs = 4;</code>
       */
      public Builder addActiveKegs(
          int index, org.kegbot.proto.Models.Keg.Builder builderForValue) {
        if (activeKegsBuilder_ == null) {
          ensureActiveKegsIsMutable();
          activeKegs_.add(index, builderForValue.build());
          onChanged();
        } else {
          activeKegsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Kegs on tap.
       * </pre>
       *
       * <code>repeated .Keg active_kegs = 4;</code>
       */
      public Builder addAllActiveKegs(
          java.lang.Iterable<? extends org.kegbot.proto.Models.Keg> values) {
        if (activeKegsBuilder_ == null) {
          ensureActiveKegsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, activeKegs_);
          onChanged();
        } else {
          activeKegsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Kegs on tap.
       * </pre>
       *
       * <code>repeated .Keg active_kegs = 4;</code>
       */
      public Builder clearActiveKegs() {
        if (activeKegsBuilder_ == null) {
          activeKegs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          activeKegsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Kegs on tap.
       * </pre>
       *
       * <code>repeated .Keg active_kegs = 4;</code>
       */
      public Builder removeActiveKegs(int index) {
        if (activeKegsBuilder_ == null) {
          ensureActiveKegsIsMutable();
          activeKegs_.remove(index);
          onChanged();
        } else {
          activeKegsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Kegs on tap.
       * </pre>
       *
       * <code>repeated .Keg active_kegs = 4;</code>
       */
      public org.kegbot.proto.Models.Keg.Builder getActiveKegsBuilder(
          int index) {
        return getActiveKegsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Kegs on tap.
       * </pre>
       *
       * <code>repeated .Keg active_kegs = 4;</code>
       */
      public org.kegbot.proto.Models.KegOrBuilder getActiveKegsOrBuilder(
          int index) {
        if (activeKegsBuilder_ == null) {
          return activeKegs_.get(index);  } else {
          return activeKegsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Kegs on tap.
       * </pre>
       *
       * <code>repeated .Keg active_kegs = 4;</code>
       */
      public java.util.List<? extends org.kegbot.proto.Models.KegOrBuilder> 
           getActiveKegsOrBuilderList() {
        if (activeKegsBuilder_ != null) {
          return activeKegsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(activeKegs_);
        }
      }
      /**
       * <pre>
       * Kegs on tap.
       * </pre>
       *
       * <code>repeated .Keg active_kegs = 4;</code>
       */
      public org.kegbot.proto.Models.Keg.Builder addActiveKegsBuilder() {
        return getActiveKegsFieldBuilder().addBuilder(
            org.kegbot.proto.Models.Keg.getDefaultInstance());
      }
      /**
       * <pre>
       * Kegs on tap.
       * </pre>
       *
       * <code>repeated .Keg active_kegs = 4;</code>
       */
      public org.kegbot.proto.Models.Keg.Builder addActiveKegsBuilder(
          int index) {
        return getActiveKegsFieldBuilder().addBuilder(
            index, org.kegbot.proto.Models.Keg.getDefaultInstance());
      }
      /**
       * <pre>
       * Kegs on tap.
       * </pre>
       *
       * <code>repeated .Keg active_kegs = 4;</code>
       */
      public java.util.List<org.kegbot.proto.Models.Keg.Builder> 
           getActiveKegsBuilderList() {
        return getActiveKegsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.kegbot.proto.Models.Keg, org.kegbot.proto.Models.Keg.Builder, org.kegbot.proto.Models.KegOrBuilder> 
          getActiveKegsFieldBuilder() {
        if (activeKegsBuilder_ == null) {
          activeKegsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.kegbot.proto.Models.Keg, org.kegbot.proto.Models.Keg.Builder, org.kegbot.proto.Models.KegOrBuilder>(
                  activeKegs_,
                  ((bitField0_ & 0x00000008) != 0),
                  getParentForChildren(),
                  isClean());
          activeKegs_ = null;
        }
        return activeKegsBuilder_;
      }

      private java.util.List<org.kegbot.proto.Models.FlowMeter> meters_ =
        java.util.Collections.emptyList();
      private void ensureMetersIsMutable() {
        if (!((bitField0_ & 0x00000010) != 0)) {
          meters_ = new java.util.ArrayList<org.kegbot.proto.Models.FlowMeter>(meters_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.kegbot.proto.Models.FlowMeter, org.kegbot.proto.Models.FlowMeter.Builder, org.kegbot.proto.Models.FlowMeterOrBuilder> metersBuilder_;

      /**
       * <pre>
       * All configured meters.
       * </pre>
       *
       * <code>repeated .FlowMeter meters = 5;</code>
       */
      public java.util.List<org.kegbot.proto.Models.FlowMeter> getMetersList() {
        if (metersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(meters_);
        } else {
          return metersBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * All configured meters.
       * </pre>
       *
       * <code>repeated .FlowMeter meters = 5;</code>
       */
      public int getMetersCount() {
        if (metersBuilder_ == null) {
          return meters_.size();
        } else {
          return metersBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * All configured meters.
       * </pre>
       *
       * <code>repeated .FlowMeter meters = 5;</code>
       */
      public org.kegbot.proto.Models.FlowMeter getMeters(int index) {
        if (metersBuilder_ == null) {
          return meters_.get(index);
        } else {
          return metersBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * All configured meters.
       * </pre>
       *
       * <code>repeated .FlowMeter meters = 5;</code>
       */
      public Builder setMeters(
          int index, org.kegbot.proto.Models.FlowMeter value) {
        if (metersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMetersIsMutable();
          meters_.set(index, value);
          onChanged();
        } else {
          metersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * All configured meters.
       * </pre>
       *
       * <code>repeated .FlowMeter meters = 5;</code>
       */
      public Builder setMeters(
          int index, org.kegbot.proto.Models.FlowMeter.Builder builderForValue) {
        if (metersBuilder_ == null) {
          ensureMetersIsMutable();
          meters_.set(index, builderForValue.build());
          onChanged();
        } else {
          metersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * All configured meters.
       * </pre>
       *
       * <code>repeated .FlowMeter meters = 5;</code>
       */
      public Builder addMeters(org.kegbot.proto.Models.FlowMeter value) {
        if (metersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMetersIsMutable();
          meters_.add(value);
          onChanged();
        } else {
          metersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * All configured meters.
       * </pre>
       *
       * <code>repeated .FlowMeter meters = 5;</code>
       */
      public Builder addMeters(
          int index, org.kegbot.proto.Models.FlowMeter value) {
        if (metersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMetersIsMutable();
          meters_.add(index, value);
          onChanged();
        } else {
          metersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * All configured meters.
       * </pre>
       *
       * <code>repeated .FlowMeter meters = 5;</code>
       */
      public Builder addMeters(
          org.kegbot.proto.Models.FlowMeter.Builder builderForValue) {
        if (metersBuilder_ == null) {
          ensureMetersIsMutable();
          meters_.add(builderForValue.build());
          onChanged();
        } else {
          metersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * All configured meters.
       * </pre>
       *
       * <code>repeated .FlowMeter meters = 5;</code>
       */
      public Builder addMeters(
          int index, org.kegbot.proto.Models.FlowMeter.Builder builderForValue) {
        if (metersBuilder_ == null) {
          ensureMetersIsMutable();
          meters_.add(index, builderForValue.build());
          onChanged();
        } else {
          metersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * All configured meters.
       * </pre>
       *
       * <code>repeated .FlowMeter meters = 5;</code>
       */
      public Builder addAllMeters(
          java.lang.Iterable<? extends org.kegbot.proto.Models.FlowMeter> values) {
        if (metersBuilder_ == null) {
          ensureMetersIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, meters_);
          onChanged();
        } else {
          metersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * All configured meters.
       * </pre>
       *
       * <code>repeated .FlowMeter meters = 5;</code>
       */
      public Builder clearMeters() {
        if (metersBuilder_ == null) {
          meters_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          metersBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * All configured meters.
       * </pre>
       *
       * <code>repeated .FlowMeter meters = 5;</code>
       */
      public Builder removeMeters(int index) {
        if (metersBuilder_ == null) {
          ensureMetersIsMutable();
          meters_.remove(index);
          onChanged();
        } else {
          metersBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * All configured meters.
       * </pre>
       *
       * <code>repeated .FlowMeter meters = 5;</code>
       */
      public org.kegbot.proto.Models.FlowMeter.Builder getMetersBuilder(
          int index) {
        return getMetersFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * All configured meters.
       * </pre>
       *
       * <code>repeated .FlowMeter meters = 5;</code>
       */
      public org.kegbot.proto.Models.FlowMeterOrBuilder getMetersOrBuilder(
          int index) {
        if (metersBuilder_ == null) {
          return meters_.get(index);  } else {
          return metersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * All configured meters.
       * </pre>
       *
       * <code>repeated .FlowMeter meters = 5;</code>
       */
      public java.util.List<? extends org.kegbot.proto.Models.FlowMeterOrBuilder> 
           getMetersOrBuilderList() {
        if (metersBuilder_ != null) {
          return metersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(meters_);
        }
      }
      /**
       * <pre>
       * All configured meters.
       * </pre>
       *
       * <code>repeated .FlowMeter meters = 5;</code>
       */
      public org.kegbot.proto.Models.FlowMeter.Builder addMetersBuilder() {
        return getMetersFieldBuilder().addBuilder(
            org.kegbot.proto.Models.FlowMeter.getDefaultInstance());
      }
      /**
       * <pre>
       * All configured meters.
       * </pre>
       *
       * <code>repeated .FlowMeter meters = 5;</code>
       */
      public org.kegbot.proto.Models.FlowMeter.Builder addMetersBuilder(
          int index) {
        return getMetersFieldBuilder().addBuilder(
            index, org.kegbot.proto.Models.FlowMeter.getDefaultInstance());
      }
      /**
       * <pre>
       * All configured meters.
       * </pre>
       *
       * <code>repeated .FlowMeter meters = 5;</code>
       */
      public java.util.List<org.kegbot.proto.Models.FlowMeter.Builder> 
           getMetersBuilderList() {
        return getMetersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.kegbot.proto.Models.FlowMeter, org.kegbot.proto.Models.FlowMeter.Builder, org.kegbot.proto.Models.FlowMeterOrBuilder> 
          getMetersFieldBuilder() {
        if (metersBuilder_ == null) {
          metersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.kegbot.proto.Models.FlowMeter, org.kegbot.proto.Models.FlowMeter.Builder, org.kegbot.proto.Models.FlowMeterOrBuilder>(
                  meters_,
                  ((bitField0_ & 0x00000010) != 0),
                  getParentForChildren(),
                  isClean());
          meters_ = null;
        }
        return metersBuilder_;
      }

      private org.kegbot.proto.Models.SiteInfo siteInfo_;
      private com.google.protobuf.SingleFieldBuilderV3<
          org.kegbot.proto.Models.SiteInfo, org.kegbot.proto.Models.SiteInfo.Builder, org.kegbot.proto.Models.SiteInfoOrBuilder> siteInfoBuilder_;
      /**
       * <pre>
       * Site info.
       * </pre>
       *
       * <code>optional .SiteInfo site_info = 6;</code>
       * @return Whether the siteInfo field is set.
       */
      public boolean hasSiteInfo() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <pre>
       * Site info.
       * </pre>
       *
       * <code>optional .SiteInfo site_info = 6;</code>
       * @return The siteInfo.
       */
      public org.kegbot.proto.Models.SiteInfo getSiteInfo() {
        if (siteInfoBuilder_ == null) {
          return siteInfo_ == null ? org.kegbot.proto.Models.SiteInfo.getDefaultInstance() : siteInfo_;
        } else {
          return siteInfoBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Site info.
       * </pre>
       *
       * <code>optional .SiteInfo site_info = 6;</code>
       */
      public Builder setSiteInfo(org.kegbot.proto.Models.SiteInfo value) {
        if (siteInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          siteInfo_ = value;
          onChanged();
        } else {
          siteInfoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <pre>
       * Site info.
       * </pre>
       *
       * <code>optional .SiteInfo site_info = 6;</code>
       */
      public Builder setSiteInfo(
          org.kegbot.proto.Models.SiteInfo.Builder builderForValue) {
        if (siteInfoBuilder_ == null) {
          siteInfo_ = builderForValue.build();
          onChanged();
        } else {
          siteInfoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <pre>
       * Site info.
       * </pre>
       *
       * <code>optional .SiteInfo site_info = 6;</code>
       */
      public Builder mergeSiteInfo(org.kegbot.proto.Models.SiteInfo value) {
        if (siteInfoBuilder_ == null) {
          if (((bitField0_ & 0x00000020) != 0) &&
              siteInfo_ != null &&
              siteInfo_ != org.kegbot.proto.Models.SiteInfo.getDefaultInstance()) {
            siteInfo_ =
              org.kegbot.proto.Models.SiteInfo.newBuilder(siteInfo_).mergeFrom(value).buildPartial();
          } else {
            siteInfo_ = value;
          }
          onChanged();
        } else {
          siteInfoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <pre>
       * Site info.
       * </pre>
       *
       * <code>optional .SiteInfo site_info = 6;</code>
       */
      public Builder clearSiteInfo() {
        if (siteInfoBuilder_ == null) {
          siteInfo_ = null;
          onChanged();
        } else {
          siteInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       * <pre>
       * Site info.
       * </pre>
       *
       * <code>optional .SiteInfo site_info = 6;</code>
       */
      public org.kegbot.proto.Models.SiteInfo.Builder getSiteInfoBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getSiteInfoFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Site info.
       * </pre>
       *
       * <code>optional .SiteInfo site_info = 6;</code>
       */
      public org.kegbot.proto.Models.SiteInfoOrBuilder getSiteInfoOrBuilder() {
        if (siteInfoBuilder_ != null) {
          return siteInfoBuilder_.getMessageOrBuilder();
        } else {
          return siteInfo_ == null ?
              org.kegbot.proto.Models.SiteInfo.getDefaultInstance() : siteInfo_;
        }
      }
      /**
       * <pre>
       * Site info.
       * </pre>
       *
       * <code>optional .SiteInfo site_info = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          org.kegbot.proto.Models.SiteInfo, org.kegbot.proto.Models.SiteInfo.Builder, org.kegbot.proto.Models.SiteInfoOrBuilder> 
          getSiteInfoFieldBuilder() {
        if (siteInfoBuilder_ == null) {
          siteInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              org.kegbot.proto.Models.SiteInfo, org.kegbot.proto.Models.SiteInfo.Builder, org.kegbot.proto.Models.SiteInfoOrBuilder>(
                  getSiteInfo(),
                  getParentForChildren(),
                  isClean());
          siteInfo_ = null;
        }
        return siteInfoBuilder_;
      }

      private java.util.List<org.kegbot.proto.Models.SoundEvent> soundEvents_ =
        java.util.Collections.emptyList();
      private void ensureSoundEventsIsMutable() {
        if (!((bitField0_ & 0x00000040) != 0)) {
          soundEvents_ = new java.util.ArrayList<org.kegbot.proto.Models.SoundEvent>(soundEvents_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.kegbot.proto.Models.SoundEvent, org.kegbot.proto.Models.SoundEvent.Builder, org.kegbot.proto.Models.SoundEventOrBuilder> soundEventsBuilder_;

      /**
       * <pre>
       * Sound events.
       * </pre>
       *
       * <code>repeated .SoundEvent sound_events = 7;</code>
       */
      public java.util.List<org.kegbot.proto.Models.SoundEvent> getSoundEventsList() {
        if (soundEventsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(soundEvents_);
        } else {
          return soundEventsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Sound events.
       * </pre>
       *
       * <code>repeated .SoundEvent sound_events = 7;</code>
       */
      public int getSoundEventsCount() {
        if (soundEventsBuilder_ == null) {
          return soundEvents_.size();
        } else {
          return soundEventsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Sound events.
       * </pre>
       *
       * <code>repeated .SoundEvent sound_events = 7;</code>
       */
      public org.kegbot.proto.Models.SoundEvent getSoundEvents(int index) {
        if (soundEventsBuilder_ == null) {
          return soundEvents_.get(index);
        } else {
          return soundEventsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Sound events.
       * </pre>
       *
       * <code>repeated .SoundEvent sound_events = 7;</code>
       */
      public Builder setSoundEvents(
          int index, org.kegbot.proto.Models.SoundEvent value) {
        if (soundEventsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSoundEventsIsMutable();
          soundEvents_.set(index, value);
          onChanged();
        } else {
          soundEventsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Sound events.
       * </pre>
       *
       * <code>repeated .SoundEvent sound_events = 7;</code>
       */
      public Builder setSoundEvents(
          int index, org.kegbot.proto.Models.SoundEvent.Builder builderForValue) {
        if (soundEventsBuilder_ == null) {
          ensureSoundEventsIsMutable();
          soundEvents_.set(index, builderForValue.build());
          onChanged();
        } else {
          soundEventsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Sound events.
       * </pre>
       *
       * <code>repeated .SoundEvent sound_events = 7;</code>
       */
      public Builder addSoundEvents(org.kegbot.proto.Models.SoundEvent value) {
        if (soundEventsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSoundEventsIsMutable();
          soundEvents_.add(value);
          onChanged();
        } else {
          soundEventsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Sound events.
       * </pre>
       *
       * <code>repeated .SoundEvent sound_events = 7;</code>
       */
      public Builder addSoundEvents(
          int index, org.kegbot.proto.Models.SoundEvent value) {
        if (soundEventsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSoundEventsIsMutable();
          soundEvents_.add(index, value);
          onChanged();
        } else {
          soundEventsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Sound events.
       * </pre>
       *
       * <code>repeated .SoundEvent sound_events = 7;</code>
       */
      public Builder addSoundEvents(
          org.kegbot.proto.Models.SoundEvent.Builder builderForValue) {
        if (soundEventsBuilder_ == null) {
          ensureSoundEventsIsMutable();
          soundEvents_.add(builderForValue.build());
          onChanged();
        } else {
          soundEventsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Sound events.
       * </pre>
       *
       * <code>repeated .SoundEvent sound_events = 7;</code>
       */
      public Builder addSoundEvents(
          int index, org.kegbot.proto.Models.SoundEvent.Builder builderForValue) {
        if (soundEventsBuilder_ == null) {
          ensureSoundEventsIsMutable();
          soundEvents_.add(index, builderForValue.build());
          onChanged();
        } else {
          soundEventsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Sound events.
       * </pre>
       *
       * <code>repeated .SoundEvent sound_events = 7;</code>
       */
      public Builder addAllSoundEvents(
          java.lang.Iterable<? extends org.kegbot.proto.Models.SoundEvent> values) {
        if (soundEventsBuilder_ == null) {
          ensureSoundEventsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, soundEvents_);
          onChanged();
        } else {
          soundEventsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Sound events.
       * </pre>
       *
       * <code>repeated .SoundEvent sound_events = 7;</code>
       */
      public Builder clearSoundEvents() {
        if (soundEventsBuilder_ == null) {
          soundEvents_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          soundEventsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Sound events.
       * </pre>
       *
       * <code>repeated .SoundEvent sound_events = 7;</code>
       */
      public Builder removeSoundEvents(int index) {
        if (soundEventsBuilder_ == null) {
          ensureSoundEventsIsMutable();
          soundEvents_.remove(index);
          onChanged();
        } else {
          soundEventsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Sound events.
       * </pre>
       *
       * <code>repeated .SoundEvent sound_events = 7;</code>
       */
      public org.kegbot.proto.Models.SoundEvent.Builder getSoundEventsBuilder(
          int index) {
        return getSoundEventsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Sound events.
       * </pre>
       *
       * <code>repeated .SoundEvent sound_events = 7;</code>
       */
      public org.kegbot.proto.Models.SoundEventOrBuilder getSoundEventsOrBuilder(
          int index) {
        if (soundEventsBuilder_ == null) {
          return soundEvents_.get(index);  } else {
          return soundEventsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Sound events.
       * </pre>
       *
       * <code>repeated .SoundEvent sound_events = 7;</code>
       */
      public java.util.List<? extends org.kegbot.proto.Models.SoundEventOrBuilder> 
           getSoundEventsOrBuilderList() {
        if (soundEventsBuilder_ != null) {
          return soundEventsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(soundEvents_);
        }
      }
      /**
       * <pre>
       * Sound events.
       * </pre>
       *
       * <code>repeated .SoundEvent sound_events = 7;</code>
       */
      public org.kegbot.proto.Models.SoundEvent.Builder addSoundEventsBuilder() {
        return getSoundEventsFieldBuilder().addBuilder(
            org.kegbot.proto.Models.SoundEvent.getDefaultInstance());
      }
      /**
       * <pre>
       * Sound events.
       * </pre>
       *
       * <code>repeated .SoundEvent sound_events = 7;</code>
       */
      public org.kegbot.proto.Models.SoundEvent.Builder addSoundEventsBuilder(
          int index) {
        return getSoundEventsFieldBuilder().addBuilder(
            index, org.kegbot.proto.Models.SoundEvent.getDefaultInstance());
      }
      /**
       * <pre>
       * Sound events.
       * </pre>
       *
       * <code>repeated .SoundEvent sound_events = 7;</code>
       */
      public java.util.List<org.kegbot.proto.Models.SoundEvent.Builder> 
           getSoundEventsBuilderList() {
        return getSoundEventsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.kegbot.proto.Models.SoundEvent, org.kegbot.proto.Models.SoundEvent.Builder, org.kegbot.proto.Models.SoundEventOrBuilder> 
          getSoundEventsFieldBuilder() {
        if (soundEventsBuilder_ == null) {
          soundEventsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.kegbot.proto.Models.SoundEvent, org.kegbot.proto.Models.SoundEvent.Builder, org.kegbot.proto.Models.SoundEventOrBuilder>(
                  soundEvents_,
                  ((bitField0_ & 0x00000040) != 0),
                  getParentForChildren(),
                  isClean());
          soundEvents_ = null;
        }
        return soundEventsBuilder_;
      }

      private java.util.List<org.kegbot.proto.Models.KegTap> taps_ =
        java.util.Collections.emptyList();
      private void ensureTapsIsMutable() {
        if (!((bitField0_ & 0x00000080) != 0)) {
          taps_ = new java.util.ArrayList<org.kegbot.proto.Models.KegTap>(taps_);
          bitField0_ |= 0x00000080;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.kegbot.proto.Models.KegTap, org.kegbot.proto.Models.KegTap.Builder, org.kegbot.proto.Models.KegTapOrBuilder> tapsBuilder_;

      /**
       * <pre>
       * All taps.
       * </pre>
       *
       * <code>repeated .KegTap taps = 8;</code>
       */
      public java.util.List<org.kegbot.proto.Models.KegTap> getTapsList() {
        if (tapsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(taps_);
        } else {
          return tapsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * All taps.
       * </pre>
       *
       * <code>repeated .KegTap taps = 8;</code>
       */
      public int getTapsCount() {
        if (tapsBuilder_ == null) {
          return taps_.size();
        } else {
          return tapsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * All taps.
       * </pre>
       *
       * <code>repeated .KegTap taps = 8;</code>
       */
      public org.kegbot.proto.Models.KegTap getTaps(int index) {
        if (tapsBuilder_ == null) {
          return taps_.get(index);
        } else {
          return tapsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * All taps.
       * </pre>
       *
       * <code>repeated .KegTap taps = 8;</code>
       */
      public Builder setTaps(
          int index, org.kegbot.proto.Models.KegTap value) {
        if (tapsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTapsIsMutable();
          taps_.set(index, value);
          onChanged();
        } else {
          tapsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * All taps.
       * </pre>
       *
       * <code>repeated .KegTap taps = 8;</code>
       */
      public Builder setTaps(
          int index, org.kegbot.proto.Models.KegTap.Builder builderForValue) {
        if (tapsBuilder_ == null) {
          ensureTapsIsMutable();
          taps_.set(index, builderForValue.build());
          onChanged();
        } else {
          tapsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * All taps.
       * </pre>
       *
       * <code>repeated .KegTap taps = 8;</code>
       */
      public Builder addTaps(org.kegbot.proto.Models.KegTap value) {
        if (tapsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTapsIsMutable();
          taps_.add(value);
          onChanged();
        } else {
          tapsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * All taps.
       * </pre>
       *
       * <code>repeated .KegTap taps = 8;</code>
       */
      public Builder addTaps(
          int index, org.kegbot.proto.Models.KegTap value) {
        if (tapsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTapsIsMutable();
          taps_.add(index, value);
          onChanged();
        } else {
          tapsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * All taps.
       * </pre>
       *
       * <code>repeated .KegTap taps = 8;</code>
       */
      public Builder addTaps(
          org.kegbot.proto.Models.KegTap.Builder builderForValue) {
        if (tapsBuilder_ == null) {
          ensureTapsIsMutable();
          taps_.add(builderForValue.build());
          onChanged();
        } else {
          tapsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * All taps.
       * </pre>
       *
       * <code>repeated .KegTap taps = 8;</code>
       */
      public Builder addTaps(
          int index, org.kegbot.proto.Models.KegTap.Builder builderForValue) {
        if (tapsBuilder_ == null) {
          ensureTapsIsMutable();
          taps_.add(index, builderForValue.build());
          onChanged();
        } else {
          tapsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * All taps.
       * </pre>
       *
       * <code>repeated .KegTap taps = 8;</code>
       */
      public Builder addAllTaps(
          java.lang.Iterable<? extends org.kegbot.proto.Models.KegTap> values) {
        if (tapsBuilder_ == null) {
          ensureTapsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, taps_);
          onChanged();
        } else {
          tapsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * All taps.
       * </pre>
       *
       * <code>repeated .KegTap taps = 8;</code>
       */
      public Builder clearTaps() {
        if (tapsBuilder_ == null) {
          taps_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
          onChanged();
        } else {
          tapsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * All taps.
       * </pre>
       *
       * <code>repeated .KegTap taps = 8;</code>
       */
      public Builder removeTaps(int index) {
        if (tapsBuilder_ == null) {
          ensureTapsIsMutable();
          taps_.remove(index);
          onChanged();
        } else {
          tapsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * All taps.
       * </pre>
       *
       * <code>repeated .KegTap taps = 8;</code>
       */
      public org.kegbot.proto.Models.KegTap.Builder getTapsBuilder(
          int index) {
        return getTapsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * All taps.
       * </pre>
       *
       * <code>repeated .KegTap taps = 8;</code>
       */
      public org.kegbot.proto.Models.KegTapOrBuilder getTapsOrBuilder(
          int index) {
        if (tapsBuilder_ == null) {
          return taps_.get(index);  } else {
          return tapsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * All taps.
       * </pre>
       *
       * <code>repeated .KegTap taps = 8;</code>
       */
      public java.util.List<? extends org.kegbot.proto.Models.KegTapOrBuilder> 
           getTapsOrBuilderList() {
        if (tapsBuilder_ != null) {
          return tapsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(taps_);
        }
      }
      /**
       * <pre>
       * All taps.
       * </pre>
       *
       * <code>repeated .KegTap taps = 8;</code>
       */
      public org.kegbot.proto.Models.KegTap.Builder addTapsBuilder() {
        return getTapsFieldBuilder().addBuilder(
            org.kegbot.proto.Models.KegTap.getDefaultInstance());
      }
      /**
       * <pre>
       * All taps.
       * </pre>
       *
       * <code>repeated .KegTap taps = 8;</code>
       */
      public org.kegbot.proto.Models.KegTap.Builder addTapsBuilder(
          int index) {
        return getTapsFieldBuilder().addBuilder(
            index, org.kegbot.proto.Models.KegTap.getDefaultInstance());
      }
      /**
       * <pre>
       * All taps.
       * </pre>
       *
       * <code>repeated .KegTap taps = 8;</code>
       */
      public java.util.List<org.kegbot.proto.Models.KegTap.Builder> 
           getTapsBuilderList() {
        return getTapsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.kegbot.proto.Models.KegTap, org.kegbot.proto.Models.KegTap.Builder, org.kegbot.proto.Models.KegTapOrBuilder> 
          getTapsFieldBuilder() {
        if (tapsBuilder_ == null) {
          tapsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.kegbot.proto.Models.KegTap, org.kegbot.proto.Models.KegTap.Builder, org.kegbot.proto.Models.KegTapOrBuilder>(
                  taps_,
                  ((bitField0_ & 0x00000080) != 0),
                  getParentForChildren(),
                  isClean());
          taps_ = null;
        }
        return tapsBuilder_;
      }

      private java.util.List<org.kegbot.proto.Models.FlowToggle> toggles_ =
        java.util.Collections.emptyList();
      private void ensureTogglesIsMutable() {
        if (!((bitField0_ & 0x00000100) != 0)) {
          toggles_ = new java.util.ArrayList<org.kegbot.proto.Models.FlowToggle>(toggles_);
          bitField0_ |= 0x00000100;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.kegbot.proto.Models.FlowToggle, org.kegbot.proto.Models.FlowToggle.Builder, org.kegbot.proto.Models.FlowToggleOrBuilder> togglesBuilder_;

      /**
       * <pre>
       * All toggles.
       * </pre>
       *
       * <code>repeated .FlowToggle toggles = 9;</code>
       */
      public java.util.List<org.kegbot.proto.Models.FlowToggle> getTogglesList() {
        if (togglesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(toggles_);
        } else {
          return togglesBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * All toggles.
       * </pre>
       *
       * <code>repeated .FlowToggle toggles = 9;</code>
       */
      public int getTogglesCount() {
        if (togglesBuilder_ == null) {
          return toggles_.size();
        } else {
          return togglesBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * All toggles.
       * </pre>
       *
       * <code>repeated .FlowToggle toggles = 9;</code>
       */
      public org.kegbot.proto.Models.FlowToggle getToggles(int index) {
        if (togglesBuilder_ == null) {
          return toggles_.get(index);
        } else {
          return togglesBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * All toggles.
       * </pre>
       *
       * <code>repeated .FlowToggle toggles = 9;</code>
       */
      public Builder setToggles(
          int index, org.kegbot.proto.Models.FlowToggle value) {
        if (togglesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTogglesIsMutable();
          toggles_.set(index, value);
          onChanged();
        } else {
          togglesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * All toggles.
       * </pre>
       *
       * <code>repeated .FlowToggle toggles = 9;</code>
       */
      public Builder setToggles(
          int index, org.kegbot.proto.Models.FlowToggle.Builder builderForValue) {
        if (togglesBuilder_ == null) {
          ensureTogglesIsMutable();
          toggles_.set(index, builderForValue.build());
          onChanged();
        } else {
          togglesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * All toggles.
       * </pre>
       *
       * <code>repeated .FlowToggle toggles = 9;</code>
       */
      public Builder addToggles(org.kegbot.proto.Models.FlowToggle value) {
        if (togglesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTogglesIsMutable();
          toggles_.add(value);
          onChanged();
        } else {
          togglesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * All toggles.
       * </pre>
       *
       * <code>repeated .FlowToggle toggles = 9;</code>
       */
      public Builder addToggles(
          int index, org.kegbot.proto.Models.FlowToggle value) {
        if (togglesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTogglesIsMutable();
          toggles_.add(index, value);
          onChanged();
        } else {
          togglesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * All toggles.
       * </pre>
       *
       * <code>repeated .FlowToggle toggles = 9;</code>
       */
      public Builder addToggles(
          org.kegbot.proto.Models.FlowToggle.Builder builderForValue) {
        if (togglesBuilder_ == null) {
          ensureTogglesIsMutable();
          toggles_.add(builderForValue.build());
          onChanged();
        } else {
          togglesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * All toggles.
       * </pre>
       *
       * <code>repeated .FlowToggle toggles = 9;</code>
       */
      public Builder addToggles(
          int index, org.kegbot.proto.Models.FlowToggle.Builder builderForValue) {
        if (togglesBuilder_ == null) {
          ensureTogglesIsMutable();
          toggles_.add(index, builderForValue.build());
          onChanged();
        } else {
          togglesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * All toggles.
       * </pre>
       *
       * <code>repeated .FlowToggle toggles = 9;</code>
       */
      public Builder addAllToggles(
          java.lang.Iterable<? extends org.kegbot.proto.Models.FlowToggle> values) {
        if (togglesBuilder_ == null) {
          ensureTogglesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, toggles_);
          onChanged();
        } else {
          togglesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * All toggles.
       * </pre>
       *
       * <code>repeated .FlowToggle toggles = 9;</code>
       */
      public Builder clearToggles() {
        if (togglesBuilder_ == null) {
          toggles_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
          onChanged();
        } else {
          togglesBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * All toggles.
       * </pre>
       *
       * <code>repeated .FlowToggle toggles = 9;</code>
       */
      public Builder removeToggles(int index) {
        if (togglesBuilder_ == null) {
          ensureTogglesIsMutable();
          toggles_.remove(index);
          onChanged();
        } else {
          togglesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * All toggles.
       * </pre>
       *
       * <code>repeated .FlowToggle toggles = 9;</code>
       */
      public org.kegbot.proto.Models.FlowToggle.Builder getTogglesBuilder(
          int index) {
        return getTogglesFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * All toggles.
       * </pre>
       *
       * <code>repeated .FlowToggle toggles = 9;</code>
       */
      public org.kegbot.proto.Models.FlowToggleOrBuilder getTogglesOrBuilder(
          int index) {
        if (togglesBuilder_ == null) {
          return toggles_.get(index);  } else {
          return togglesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * All toggles.
       * </pre>
       *
       * <code>repeated .FlowToggle toggles = 9;</code>
       */
      public java.util.List<? extends org.kegbot.proto.Models.FlowToggleOrBuilder> 
           getTogglesOrBuilderList() {
        if (togglesBuilder_ != null) {
          return togglesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(toggles_);
        }
      }
      /**
       * <pre>
       * All toggles.
       * </pre>
       *
       * <code>repeated .FlowToggle toggles = 9;</code>
       */
      public org.kegbot.proto.Models.FlowToggle.Builder addTogglesBuilder() {
        return getTogglesFieldBuilder().addBuilder(
            org.kegbot.proto.Models.FlowToggle.getDefaultInstance());
      }
      /**
       * <pre>
       * All toggles.
       * </pre>
       *
       * <code>repeated .FlowToggle toggles = 9;</code>
       */
      public org.kegbot.proto.Models.FlowToggle.Builder addTogglesBuilder(
          int index) {
        return getTogglesFieldBuilder().addBuilder(
            index, org.kegbot.proto.Models.FlowToggle.getDefaultInstance());
      }
      /**
       * <pre>
       * All toggles.
       * </pre>
       *
       * <code>repeated .FlowToggle toggles = 9;</code>
       */
      public java.util.List<org.kegbot.proto.Models.FlowToggle.Builder> 
           getTogglesBuilderList() {
        return getTogglesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.kegbot.proto.Models.FlowToggle, org.kegbot.proto.Models.FlowToggle.Builder, org.kegbot.proto.Models.FlowToggleOrBuilder> 
          getTogglesFieldBuilder() {
        if (togglesBuilder_ == null) {
          togglesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.kegbot.proto.Models.FlowToggle, org.kegbot.proto.Models.FlowToggle.Builder, org.kegbot.proto.Models.FlowToggleOrBuilder>(
                  toggles_,
                  ((bitField0_ & 0x00000100) != 0),
                  getParentForChildren(),
                  isClean());
          toggles_ = null;
        }
        return togglesBuilder_;
      }

      private org.kegbot.proto.Models.Session activeSession_;
      private com.google.protobuf.SingleFieldBuilderV3<
          org.kegbot.proto.Models.Session, org.kegbot.proto.Models.Session.Builder, org.kegbot.proto.Models.SessionOrBuilder> activeSessionBuilder_;
      /**
       * <pre>
       * Current session (if there is one).
       * </pre>
       *
       * <code>optional .Session active_session = 10;</code>
       * @return Whether the activeSession field is set.
       */
      public boolean hasActiveSession() {
        return ((bitField0_ & 0x00000200) != 0);
      }
      /**
       * <pre>
       * Current session (if there is one).
       * </pre>
       *
       * <code>optional .Session active_session = 10;</code>
       * @return The activeSession.
       */
      public org.kegbot.proto.Models.Session getActiveSession() {
        if (activeSessionBuilder_ == null) {
          return activeSession_ == null ? org.kegbot.proto.Models.Session.getDefaultInstance() : activeSession_;
        } else {
          return activeSessionBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Current session (if there is one).
       * </pre>
       *
       * <code>optional .Session active_session = 10;</code>
       */
      public Builder setActiveSession(org.kegbot.proto.Models.Session value) {
        if (activeSessionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          activeSession_ = value;
          onChanged();
        } else {
          activeSessionBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <pre>
       * Current session (if there is one).
       * </pre>
       *
       * <code>optional .Session active_session = 10;</code>
       */
      public Builder setActiveSession(
          org.kegbot.proto.Models.Session.Builder builderForValue) {
        if (activeSessionBuilder_ == null) {
          activeSession_ = builderForValue.build();
          onChanged();
        } else {
          activeSessionBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <pre>
       * Current session (if there is one).
       * </pre>
       *
       * <code>optional .Session active_session = 10;</code>
       */
      public Builder mergeActiveSession(org.kegbot.proto.Models.Session value) {
        if (activeSessionBuilder_ == null) {
          if (((bitField0_ & 0x00000200) != 0) &&
              activeSession_ != null &&
              activeSession_ != org.kegbot.proto.Models.Session.getDefaultInstance()) {
            activeSession_ =
              org.kegbot.proto.Models.Session.newBuilder(activeSession_).mergeFrom(value).buildPartial();
          } else {
            activeSession_ = value;
          }
          onChanged();
        } else {
          activeSessionBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <pre>
       * Current session (if there is one).
       * </pre>
       *
       * <code>optional .Session active_session = 10;</code>
       */
      public Builder clearActiveSession() {
        if (activeSessionBuilder_ == null) {
          activeSession_ = null;
          onChanged();
        } else {
          activeSessionBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }
      /**
       * <pre>
       * Current session (if there is one).
       * </pre>
       *
       * <code>optional .Session active_session = 10;</code>
       */
      public org.kegbot.proto.Models.Session.Builder getActiveSessionBuilder() {
        bitField0_ |= 0x00000200;
        onChanged();
        return getActiveSessionFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Current session (if there is one).
       * </pre>
       *
       * <code>optional .Session active_session = 10;</code>
       */
      public org.kegbot.proto.Models.SessionOrBuilder getActiveSessionOrBuilder() {
        if (activeSessionBuilder_ != null) {
          return activeSessionBuilder_.getMessageOrBuilder();
        } else {
          return activeSession_ == null ?
              org.kegbot.proto.Models.Session.getDefaultInstance() : activeSession_;
        }
      }
      /**
       * <pre>
       * Current session (if there is one).
       * </pre>
       *
       * <code>optional .Session active_session = 10;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          org.kegbot.proto.Models.Session, org.kegbot.proto.Models.Session.Builder, org.kegbot.proto.Models.SessionOrBuilder> 
          getActiveSessionFieldBuilder() {
        if (activeSessionBuilder_ == null) {
          activeSessionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              org.kegbot.proto.Models.Session, org.kegbot.proto.Models.Session.Builder, org.kegbot.proto.Models.SessionOrBuilder>(
                  getActiveSession(),
                  getParentForChildren(),
                  isClean());
          activeSession_ = null;
        }
        return activeSessionBuilder_;
      }

      private java.util.List<org.kegbot.proto.Models.User> activeUsers_ =
        java.util.Collections.emptyList();
      private void ensureActiveUsersIsMutable() {
        if (!((bitField0_ & 0x00000400) != 0)) {
          activeUsers_ = new java.util.ArrayList<org.kegbot.proto.Models.User>(activeUsers_);
          bitField0_ |= 0x00000400;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.kegbot.proto.Models.User, org.kegbot.proto.Models.User.Builder, org.kegbot.proto.Models.UserOrBuilder> activeUsersBuilder_;

      /**
       * <pre>
       * Currently-active users (if any).
       * </pre>
       *
       * <code>repeated .User active_users = 11;</code>
       */
      public java.util.List<org.kegbot.proto.Models.User> getActiveUsersList() {
        if (activeUsersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(activeUsers_);
        } else {
          return activeUsersBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Currently-active users (if any).
       * </pre>
       *
       * <code>repeated .User active_users = 11;</code>
       */
      public int getActiveUsersCount() {
        if (activeUsersBuilder_ == null) {
          return activeUsers_.size();
        } else {
          return activeUsersBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Currently-active users (if any).
       * </pre>
       *
       * <code>repeated .User active_users = 11;</code>
       */
      public org.kegbot.proto.Models.User getActiveUsers(int index) {
        if (activeUsersBuilder_ == null) {
          return activeUsers_.get(index);
        } else {
          return activeUsersBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Currently-active users (if any).
       * </pre>
       *
       * <code>repeated .User active_users = 11;</code>
       */
      public Builder setActiveUsers(
          int index, org.kegbot.proto.Models.User value) {
        if (activeUsersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureActiveUsersIsMutable();
          activeUsers_.set(index, value);
          onChanged();
        } else {
          activeUsersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Currently-active users (if any).
       * </pre>
       *
       * <code>repeated .User active_users = 11;</code>
       */
      public Builder setActiveUsers(
          int index, org.kegbot.proto.Models.User.Builder builderForValue) {
        if (activeUsersBuilder_ == null) {
          ensureActiveUsersIsMutable();
          activeUsers_.set(index, builderForValue.build());
          onChanged();
        } else {
          activeUsersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Currently-active users (if any).
       * </pre>
       *
       * <code>repeated .User active_users = 11;</code>
       */
      public Builder addActiveUsers(org.kegbot.proto.Models.User value) {
        if (activeUsersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureActiveUsersIsMutable();
          activeUsers_.add(value);
          onChanged();
        } else {
          activeUsersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Currently-active users (if any).
       * </pre>
       *
       * <code>repeated .User active_users = 11;</code>
       */
      public Builder addActiveUsers(
          int index, org.kegbot.proto.Models.User value) {
        if (activeUsersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureActiveUsersIsMutable();
          activeUsers_.add(index, value);
          onChanged();
        } else {
          activeUsersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Currently-active users (if any).
       * </pre>
       *
       * <code>repeated .User active_users = 11;</code>
       */
      public Builder addActiveUsers(
          org.kegbot.proto.Models.User.Builder builderForValue) {
        if (activeUsersBuilder_ == null) {
          ensureActiveUsersIsMutable();
          activeUsers_.add(builderForValue.build());
          onChanged();
        } else {
          activeUsersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Currently-active users (if any).
       * </pre>
       *
       * <code>repeated .User active_users = 11;</code>
       */
      public Builder addActiveUsers(
          int index, org.kegbot.proto.Models.User.Builder builderForValue) {
        if (activeUsersBuilder_ == null) {
          ensureActiveUsersIsMutable();
          activeUsers_.add(index, builderForValue.build());
          onChanged();
        } else {
          activeUsersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Currently-active users (if any).
       * </pre>
       *
       * <code>repeated .User active_users = 11;</code>
       */
      public Builder addAllActiveUsers(
          java.lang.Iterable<? extends org.kegbot.proto.Models.User> values) {
        if (activeUsersBuilder_ == null) {
          ensureActiveUsersIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, activeUsers_);
          onChanged();
        } else {
          activeUsersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Currently-active users (if any).
       * </pre>
       *
       * <code>repeated .User active_users = 11;</code>
       */
      public Builder clearActiveUsers() {
        if (activeUsersBuilder_ == null) {
          activeUsers_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000400);
          onChanged();
        } else {
          activeUsersBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Currently-active users (if any).
       * </pre>
       *
       * <code>repeated .User active_users = 11;</code>
       */
      public Builder removeActiveUsers(int index) {
        if (activeUsersBuilder_ == null) {
          ensureActiveUsersIsMutable();
          activeUsers_.remove(index);
          onChanged();
        } else {
          activeUsersBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Currently-active users (if any).
       * </pre>
       *
       * <code>repeated .User active_users = 11;</code>
       */
      public org.kegbot.proto.Models.User.Builder getActiveUsersBuilder(
          int index) {
        return getActiveUsersFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Currently-active users (if any).
       * </pre>
       *
       * <code>repeated .User active_users = 11;</code>
       */
      public org.kegbot.proto.Models.UserOrBuilder getActiveUsersOrBuilder(
          int index) {
        if (activeUsersBuilder_ == null) {
          return activeUsers_.get(index);  } else {
          return activeUsersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Currently-active users (if any).
       * </pre>
       *
       * <code>repeated .User active_users = 11;</code>
       */
      public java.util.List<? extends org.kegbot.proto.Models.UserOrBuilder> 
           getActiveUsersOrBuilderList() {
        if (activeUsersBuilder_ != null) {
          return activeUsersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(activeUsers_);
        }
      }
      /**
       * <pre>
       * Currently-active users (if any).
       * </pre>
       *
       * <code>repeated .User active_users = 11;</code>
       */
      public org.kegbot.proto.Models.User.Builder addActiveUsersBuilder() {
        return getActiveUsersFieldBuilder().addBuilder(
            org.kegbot.proto.Models.User.getDefaultInstance());
      }
      /**
       * <pre>
       * Currently-active users (if any).
       * </pre>
       *
       * <code>repeated .User active_users = 11;</code>
       */
      public org.kegbot.proto.Models.User.Builder addActiveUsersBuilder(
          int index) {
        return getActiveUsersFieldBuilder().addBuilder(
            index, org.kegbot.proto.Models.User.getDefaultInstance());
      }
      /**
       * <pre>
       * Currently-active users (if any).
       * </pre>
       *
       * <code>repeated .User active_users = 11;</code>
       */
      public java.util.List<org.kegbot.proto.Models.User.Builder> 
           getActiveUsersBuilderList() {
        return getActiveUsersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.kegbot.proto.Models.User, org.kegbot.proto.Models.User.Builder, org.kegbot.proto.Models.UserOrBuilder> 
          getActiveUsersFieldBuilder() {
        if (activeUsersBuilder_ == null) {
          activeUsersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.kegbot.proto.Models.User, org.kegbot.proto.Models.User.Builder, org.kegbot.proto.Models.UserOrBuilder>(
                  activeUsers_,
                  ((bitField0_ & 0x00000400) != 0),
                  getParentForChildren(),
                  isClean());
          activeUsers_ = null;
        }
        return activeUsersBuilder_;
      }
      @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:SyncResponse)
    }

    // @@protoc_insertion_point(class_scope:SyncResponse)
    private static final org.kegbot.proto.Api.SyncResponse DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.kegbot.proto.Api.SyncResponse();
    }

    public static org.kegbot.proto.Api.SyncResponse getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<SyncResponse>
        PARSER = new com.google.protobuf.AbstractParser<SyncResponse>() {
      @java.lang.Override
      public SyncResponse 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<SyncResponse> parser() {
      return PARSER;
    }

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

    @java.lang.Override
    public org.kegbot.proto.Api.SyncResponse getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_Meta_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_Meta_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_UserRegistrationRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_UserRegistrationRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_RecordDrinkRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_RecordDrinkRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_RecordTemperatureRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_RecordTemperatureRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_SyncResponse_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_SyncResponse_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\tapi.proto\032\014models.proto\"1\n\004Meta\022\r\n\005tot" +
      "al\030\001 \001(\r\022\r\n\005limit\030\002 \001(\r\022\013\n\003pos\030\003 \001(\r\"r\n\027" +
      "UserRegistrationRequest\022\020\n\010username\030\001 \002(" +
      "\t\022\r\n\005email\030\002 \002(\t\022\020\n\010password\030\003 \001(\t\022\016\n\006ge" +
      "nder\030\004 \001(\t\022\024\n\014twitter_name\030\005 \001(\t\"\357\001\n\022Rec" +
      "ordDrinkRequest\022\020\n\010tap_name\030\001 \001(\t\022\r\n\005tic" +
      "ks\030\002 \002(\r\022\021\n\tvolume_ml\030\003 \001(\002\022\020\n\010username\030" +
      "\004 \001(\t\022\026\n\013seconds_ago\030\005 \001(\r:\0010\022\023\n\013record_" +
      "date\030\006 \001(\t\022\030\n\020duration_seconds\030\007 \001(\r\022\022\n\n" +
      "auth_token\030\010 \001(\t\022\017\n\007spilled\030\t \001(\010\022\r\n\005sho" +
      "ut\030\n \001(\t\022\030\n\020tick_time_series\030\013 \001(\t\"T\n\030Re" +
      "cordTemperatureRequest\022\023\n\013sensor_name\030\001 " +
      "\002(\t\022\016\n\006temp_c\030\002 \002(\002\022\023\n\013record_date\030\003 \001(\t" +
      "\"\322\002\n\014SyncResponse\022 \n\013controllers\030\001 \003(\0132\013" +
      ".Controller\022\026\n\006drinks\030\002 \003(\0132\006.Drink\022\034\n\006e" +
      "vents\030\003 \003(\0132\014.SystemEvent\022\031\n\013active_kegs" +
      "\030\004 \003(\0132\004.Keg\022\032\n\006meters\030\005 \003(\0132\n.FlowMeter" +
      "\022\034\n\tsite_info\030\006 \001(\0132\t.SiteInfo\022!\n\014sound_" +
      "events\030\007 \003(\0132\013.SoundEvent\022\025\n\004taps\030\010 \003(\0132" +
      "\007.KegTap\022\034\n\007toggles\030\t \003(\0132\013.FlowToggle\022 " +
      "\n\016active_session\030\n \001(\0132\010.Session\022\033\n\014acti" +
      "ve_users\030\013 \003(\0132\005.UserB\024\n\020org.kegbot.prot" +
      "oH\002"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
          org.kegbot.proto.Models.getDescriptor(),
        });
    internal_static_Meta_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_Meta_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_Meta_descriptor,
        new java.lang.String[] { "Total", "Limit", "Pos", });
    internal_static_UserRegistrationRequest_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_UserRegistrationRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_UserRegistrationRequest_descriptor,
        new java.lang.String[] { "Username", "Email", "Password", "Gender", "TwitterName", });
    internal_static_RecordDrinkRequest_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_RecordDrinkRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_RecordDrinkRequest_descriptor,
        new java.lang.String[] { "TapName", "Ticks", "VolumeMl", "Username", "SecondsAgo", "RecordDate", "DurationSeconds", "AuthToken", "Spilled", "Shout", "TickTimeSeries", });
    internal_static_RecordTemperatureRequest_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_RecordTemperatureRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_RecordTemperatureRequest_descriptor,
        new java.lang.String[] { "SensorName", "TempC", "RecordDate", });
    internal_static_SyncResponse_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_SyncResponse_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_SyncResponse_descriptor,
        new java.lang.String[] { "Controllers", "Drinks", "Events", "ActiveKegs", "Meters", "SiteInfo", "SoundEvents", "Taps", "Toggles", "ActiveSession", "ActiveUsers", });
    org.kegbot.proto.Models.getDescriptor();
  }

  // @@protoc_insertion_point(outer_class_scope)
}
