public Builder clearOwnerId() {
        bitField0_ = (bitField0_ & ~0x00000004);
        ownerId_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:messages.PlayerStatus)
    }

    static {
      defaultInstance = new PlayerStatus(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:messages.PlayerStatus)
  }

  public interface UnitTypeIntPairOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required .messages.UnitType type = 1;
    /**
     * <code>required .messages.UnitType type = 1;</code>
     */
    boolean hasType();
    /**
     * <code>required .messages.UnitType type = 1;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitType getType();
    /**
     * <code>required .messages.UnitType type = 1;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder getTypeOrBuilder();

    // required int32 count = 2;
    /**
     * <code>required int32 count = 2;</code>
     */
    boolean hasCount();
    /**
     * <code>required int32 count = 2;</code>
     */
    int getCount();
  }
  /**
   * Protobuf type {@code messages.UnitTypeIntPair}
   */
  public static final class UnitTypeIntPair extends
      com.google.protobuf.GeneratedMessage
      implements UnitTypeIntPairOrBuilder {
    // Use UnitTypeIntPair.newBuilder() to construct.
    private UnitTypeIntPair(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private UnitTypeIntPair(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final UnitTypeIntPair defaultInstance;
    public static UnitTypeIntPair getDefaultInstance() {
      return defaultInstance;
    }

    public UnitTypeIntPair getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private UnitTypeIntPair(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              org.bwapi.proxy.messages.GameMessages.UnitType.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = type_.toBuilder();
              }
              type_ = input.readMessage(org.bwapi.proxy.messages.GameMessages.UnitType.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(type_);
                type_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              count_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_UnitTypeIntPair_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_UnitTypeIntPair_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.class, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder.class);
    }

    public static com.google.protobuf.Parser<UnitTypeIntPair> PARSER =
        new com.google.protobuf.AbstractParser<UnitTypeIntPair>() {
      public UnitTypeIntPair parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new UnitTypeIntPair(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    // required .messages.UnitType type = 1;
    public static final int TYPE_FIELD_NUMBER = 1;
    private org.bwapi.proxy.messages.GameMessages.UnitType type_;
    /**
     * <code>required .messages.UnitType type = 1;</code>
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required .messages.UnitType type = 1;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitType getType() {
      return type_;
    }
    /**
     * <code>required .messages.UnitType type = 1;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder getTypeOrBuilder() {
      return type_;
    }

    // required int32 count = 2;
    public static final int COUNT_FIELD_NUMBER = 2;
    private int count_;
    /**
     * <code>required int32 count = 2;</code>
     */
    public boolean hasCount() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>required int32 count = 2;</code>
     */
    public int getCount() {
      return count_;
    }

    private void initFields() {
      type_ = org.bwapi.proxy.messages.GameMessages.UnitType.getDefaultInstance();
      count_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasType()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasCount()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!getType().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, type_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, count_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, type_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, count_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code messages.UnitTypeIntPair}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_UnitTypeIntPair_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_UnitTypeIntPair_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.class, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder.class);
      }

      // Construct using org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getTypeFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (typeBuilder_ == null) {
          type_ = org.bwapi.proxy.messages.GameMessages.UnitType.getDefaultInstance();
        } else {
          typeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        count_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_UnitTypeIntPair_descriptor;
      }

      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair getDefaultInstanceForType() {
        return org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.getDefaultInstance();
      }

      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair build() {
        org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair buildPartial() {
        org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair result = new org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (typeBuilder_ == null) {
          result.type_ = type_;
        } else {
          result.type_ = typeBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.count_ = count_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair) {
          return mergeFrom((org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair other) {
        if (other == org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.getDefaultInstance()) return this;
        if (other.hasType()) {
          mergeType(other.getType());
        }
        if (other.hasCount()) {
          setCount(other.getCount());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasType()) {
          
          return false;
        }
        if (!hasCount()) {
          
          return false;
        }
        if (!getType().isInitialized()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required .messages.UnitType type = 1;
      private org.bwapi.proxy.messages.GameMessages.UnitType type_ = org.bwapi.proxy.messages.GameMessages.UnitType.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitType, org.bwapi.proxy.messages.GameMessages.UnitType.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder> typeBuilder_;
      /**
       * <code>required .messages.UnitType type = 1;</code>
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required .messages.UnitType type = 1;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitType getType() {
        if (typeBuilder_ == null) {
          return type_;
        } else {
          return typeBuilder_.getMessage();
        }
      }
      /**
       * <code>required .messages.UnitType type = 1;</code>
       */
      public Builder setType(org.bwapi.proxy.messages.GameMessages.UnitType value) {
        if (typeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          type_ = value;
          onChanged();
        } else {
          typeBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .messages.UnitType type = 1;</code>
       */
      public Builder setType(
          org.bwapi.proxy.messages.GameMessages.UnitType.Builder builderForValue) {
        if (typeBuilder_ == null) {
          type_ = builderForValue.build();
          onChanged();
        } else {
          typeBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .messages.UnitType type = 1;</code>
       */
      public Builder mergeType(org.bwapi.proxy.messages.GameMessages.UnitType value) {
        if (typeBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              type_ != org.bwapi.proxy.messages.GameMessages.UnitType.getDefaultInstance()) {
            type_ =
              org.bwapi.proxy.messages.GameMessages.UnitType.newBuilder(type_).mergeFrom(value).buildPartial();
          } else {
            type_ = value;
          }
          onChanged();
        } else {
          typeBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .messages.UnitType type = 1;</code>
       */
      public Builder clearType() {
        if (typeBuilder_ == null) {
          type_ = org.bwapi.proxy.messages.GameMessages.UnitType.getDefaultInstance();
          onChanged();
        } else {
          typeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>required .messages.UnitType type = 1;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitType.Builder getTypeBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getTypeFieldBuilder().getBuilder();
      }
      /**
       * <code>required .messages.UnitType type = 1;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder getTypeOrBuilder() {
        if (typeBuilder_ != null) {
          return typeBuilder_.getMessageOrBuilder();
        } else {
          return type_;
        }
      }
      /**
       * <code>required .messages.UnitType type = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitType, org.bwapi.proxy.messages.GameMessages.UnitType.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder> 
          getTypeFieldBuilder() {
        if (typeBuilder_ == null) {
          typeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UnitType, org.bwapi.proxy.messages.GameMessages.UnitType.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder>(
                  type_,
                  getParentForChildren(),
                  isClean());
          type_ = null;
        }
        return typeBuilder_;
      }

      // required int32 count = 2;
      private int count_ ;
      /**
       * <code>required int32 count = 2;</code>
       */
      public boolean hasCount() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required int32 count = 2;</code>
       */
      public int getCount() {
        return count_;
      }
      /**
       * <code>required int32 count = 2;</code>
       */
      public Builder setCount(int value) {
        bitField0_ |= 0x00000002;
        count_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 count = 2;</code>
       */
      public Builder clearCount() {
        bitField0_ = (bitField0_ & ~0x00000002);
        count_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:messages.UnitTypeIntPair)
    }

    static {
      defaultInstance = new UnitTypeIntPair(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:messages.UnitTypeIntPair)
  }

  public interface PlayerOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required int32 id = 1;
    /**
     * <code>required int32 id = 1;</code>
     */
    boolean hasId();
    /**
     * <code>required int32 id = 1;</code>
     */
    int getId();

    // required string name = 2;
    /**
     * <code>required string name = 2;</code>
     */
    boolean hasName();
    /**
     * <code>required string name = 2;</code>
     */
    java.lang.String getName();
    /**
     * <code>required string name = 2;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    // repeated .messages.UnitId units = 3;
    /**
     * <code>repeated .messages.UnitId units = 3;</code>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> 
        getUnitsList();
    /**
     * <code>repeated .messages.UnitId units = 3;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitId getUnits(int index);
    /**
     * <code>repeated .messages.UnitId units = 3;</code>
     */
    int getUnitsCount();
    /**
     * <code>repeated .messages.UnitId units = 3;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> 
        getUnitsOrBuilderList();
    /**
     * <code>repeated .messages.UnitId units = 3;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder getUnitsOrBuilder(
        int index);

    // required .messages.Race race = 4;
    /**
     * <code>required .messages.Race race = 4;</code>
     */
    boolean hasRace();
    /**
     * <code>required .messages.Race race = 4;</code>
     */
    org.bwapi.proxy.messages.GameMessages.Race getRace();

    // repeated .messages.PlayerStatus stances = 5;
    /**
     * <code>repeated .messages.PlayerStatus stances = 5;</code>
     *
     * <pre>
     *required PlayerType playerType()  = 0;
     *required Force* force  = 0;
     * </pre>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.PlayerStatus> 
        getStancesList();
    /**
     * <code>repeated .messages.PlayerStatus stances = 5;</code>
     *
     * <pre>
     *required PlayerType playerType()  = 0;
     *required Force* force  = 0;
     * </pre>
     */
    org.bwapi.proxy.messages.GameMessages.PlayerStatus getStances(int index);
    /**
     * <code>repeated .messages.PlayerStatus stances = 5;</code>
     *
     * <pre>
     *required PlayerType playerType()  = 0;
     *required Force* force  = 0;
     * </pre>
     */
    int getStancesCount();
    /**
     * <code>repeated .messages.PlayerStatus stances = 5;</code>
     *
     * <pre>
     *required PlayerType playerType()  = 0;
     *required Force* force  = 0;
     * </pre>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.PlayerStatusOrBuilder> 
        getStancesOrBuilderList();
    /**
     * <code>repeated .messages.PlayerStatus stances = 5;</code>
     *
     * <pre>
     *required PlayerType playerType()  = 0;
     *required Force* force  = 0;
     * </pre>
     */
    org.bwapi.proxy.messages.GameMessages.PlayerStatusOrBuilder getStancesOrBuilder(
        int index);

    // required bool neutral = 6;
    /**
     * <code>required bool neutral = 6;</code>
     */
    boolean hasNeutral();
    /**
     * <code>required bool neutral = 6;</code>
     */
    boolean getNeutral();

    // required .messages.TilePosition startLocation = 7;
    /**
     * <code>required .messages.TilePosition startLocation = 7;</code>
     */
    boolean hasStartLocation();
    /**
     * <code>required .messages.TilePosition startLocation = 7;</code>
     */
    org.bwapi.proxy.messages.BasicTypes.TilePosition getStartLocation();
    /**
     * <code>required .messages.TilePosition startLocation = 7;</code>
     */
    org.bwapi.proxy.messages.BasicTypes.TilePositionOrBuilder getStartLocationOrBuilder();

    // required bool leftGame = 8;
    /**
     * <code>required bool leftGame = 8;</code>
     */
    boolean hasLeftGame();
    /**
     * <code>required bool leftGame = 8;</code>
     */
    boolean getLeftGame();

    // required int32 minerals = 9;
    /**
     * <code>required int32 minerals = 9;</code>
     */
    boolean hasMinerals();
    /**
     * <code>required int32 minerals = 9;</code>
     */
    int getMinerals();

    // required int32 gas = 10;
    /**
     * <code>required int32 gas = 10;</code>
     */
    boolean hasGas();
    /**
     * <code>required int32 gas = 10;</code>
     */
    int getGas();

    // required int32 cumulativeMinerals = 11;
    /**
     * <code>required int32 cumulativeMinerals = 11;</code>
     */
    boolean hasCumulativeMinerals();
    /**
     * <code>required int32 cumulativeMinerals = 11;</code>
     */
    int getCumulativeMinerals();

    // required int32 cumulativeGas = 12;
    /**
     * <code>required int32 cumulativeGas = 12;</code>
     */
    boolean hasCumulativeGas();
    /**
     * <code>required int32 cumulativeGas = 12;</code>
     */
    int getCumulativeGas();

    // required int32 supplyTotal = 13;
    /**
     * <code>required int32 supplyTotal = 13;</code>
     */
    boolean hasSupplyTotal();
    /**
     * <code>required int32 supplyTotal = 13;</code>
     */
    int getSupplyTotal();

    // required int32 supplyUsed = 14;
    /**
     * <code>required int32 supplyUsed = 14;</code>
     */
    boolean hasSupplyUsed();
    /**
     * <code>required int32 supplyUsed = 14;</code>
     */
    int getSupplyUsed();

    // repeated .messages.UnitTypeIntPair allUnitCount = 15;
    /**
     * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> 
        getAllUnitCountList();
    /**
     * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair getAllUnitCount(int index);
    /**
     * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
     */
    int getAllUnitCountCount();
    /**
     * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
        getAllUnitCountOrBuilderList();
    /**
     * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder getAllUnitCountOrBuilder(
        int index);

    // repeated .messages.UnitTypeIntPair completedUnitCount = 16;
    /**
     * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> 
        getCompletedUnitCountList();
    /**
     * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair getCompletedUnitCount(int index);
    /**
     * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
     */
    int getCompletedUnitCountCount();
    /**
     * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
        getCompletedUnitCountOrBuilderList();
    /**
     * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder getCompletedUnitCountOrBuilder(
        int index);

    // repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;
    /**
     * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> 
        getIncompleteUnitCountList();
    /**
     * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair getIncompleteUnitCount(int index);
    /**
     * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
     */
    int getIncompleteUnitCountCount();
    /**
     * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
        getIncompleteUnitCountOrBuilderList();
    /**
     * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder getIncompleteUnitCountOrBuilder(
        int index);

    // repeated .messages.UnitTypeIntPair deadUnitCount = 18;
    /**
     * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> 
        getDeadUnitCountList();
    /**
     * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair getDeadUnitCount(int index);
    /**
     * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
     */
    int getDeadUnitCountCount();
    /**
     * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
        getDeadUnitCountOrBuilderList();
    /**
     * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder getDeadUnitCountOrBuilder(
        int index);

    // repeated .messages.UnitTypeIntPair killedUnitCount = 19;
    /**
     * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> 
        getKilledUnitCountList();
    /**
     * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair getKilledUnitCount(int index);
    /**
     * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
     */
    int getKilledUnitCountCount();
    /**
     * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
        getKilledUnitCountOrBuilderList();
    /**
     * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder getKilledUnitCountOrBuilder(
        int index);

    // repeated .messages.UpgradeLevel upgradeLevels = 20;
    /**
     * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.UpgradeLevel> 
        getUpgradeLevelsList();
    /**
     * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UpgradeLevel getUpgradeLevels(int index);
    /**
     * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
     */
    int getUpgradeLevelsCount();
    /**
     * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UpgradeLevelOrBuilder> 
        getUpgradeLevelsOrBuilderList();
    /**
     * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UpgradeLevelOrBuilder getUpgradeLevelsOrBuilder(
        int index);

    // repeated .messages.TechType researchedTechs = 21;
    /**
     * <code>repeated .messages.TechType researchedTechs = 21;</code>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.TechType> 
        getResearchedTechsList();
    /**
     * <code>repeated .messages.TechType researchedTechs = 21;</code>
     */
    org.bwapi.proxy.messages.GameMessages.TechType getResearchedTechs(int index);
    /**
     * <code>repeated .messages.TechType researchedTechs = 21;</code>
     */
    int getResearchedTechsCount();
    /**
     * <code>repeated .messages.TechType researchedTechs = 21;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder> 
        getResearchedTechsOrBuilderList();
    /**
     * <code>repeated .messages.TechType researchedTechs = 21;</code>
     */
    org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder getResearchedTechsOrBuilder(
        int index);

    // repeated .messages.TechType researching = 22;
    /**
     * <code>repeated .messages.TechType researching = 22;</code>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.TechType> 
        getResearchingList();
    /**
     * <code>repeated .messages.TechType researching = 22;</code>
     */
    org.bwapi.proxy.messages.GameMessages.TechType getResearching(int index);
    /**
     * <code>repeated .messages.TechType researching = 22;</code>
     */
    int getResearchingCount();
    /**
     * <code>repeated .messages.TechType researching = 22;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder> 
        getResearchingOrBuilderList();
    /**
     * <code>repeated .messages.TechType researching = 22;</code>
     */
    org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder getResearchingOrBuilder(
        int index);

    // repeated .messages.UpgradeType upgrading = 23;
    /**
     * <code>repeated .messages.UpgradeType upgrading = 23;</code>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.UpgradeType> 
        getUpgradingList();
    /**
     * <code>repeated .messages.UpgradeType upgrading = 23;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UpgradeType getUpgrading(int index);
    /**
     * <code>repeated .messages.UpgradeType upgrading = 23;</code>
     */
    int getUpgradingCount();
    /**
     * <code>repeated .messages.UpgradeType upgrading = 23;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder> 
        getUpgradingOrBuilderList();
    /**
     * <code>repeated .messages.UpgradeType upgrading = 23;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder getUpgradingOrBuilder(
        int index);

    // optional bool self = 24 [default = false];
    /**
     * <code>optional bool self = 24 [default = false];</code>
     */
    boolean hasSelf();
    /**
     * <code>optional bool self = 24 [default = false];</code>
     */
    boolean getSelf();

    // required bool victorious = 25;
    /**
     * <code>required bool victorious = 25;</code>
     */
    boolean hasVictorious();
    /**
     * <code>required bool victorious = 25;</code>
     */
    boolean getVictorious();

    // required bool defeated = 26;
    /**
     * <code>required bool defeated = 26;</code>
     */
    boolean hasDefeated();
    /**
     * <code>required bool defeated = 26;</code>
     */
    boolean getDefeated();
  }
  /**
   * Protobuf type {@code messages.Player}
   */
  public static final class Player extends
      com.google.protobuf.GeneratedMessage
      implements PlayerOrBuilder {
    // Use Player.newBuilder() to construct.
    private Player(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Player(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Player defaultInstance;
    public static Player getDefaultInstance() {
      return defaultInstance;
    }

    public Player getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Player(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              id_ = input.readInt32();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              name_ = input.readBytes();
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                units_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitId>();
                mutable_bitField0_ |= 0x00000004;
              }
              units_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.UnitId.PARSER, extensionRegistry));
              break;
            }
            case 32: {
              int rawValue = input.readEnum();
              org.bwapi.proxy.messages.GameMessages.Race value = org.bwapi.proxy.messages.GameMessages.Race.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(4, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                race_ = value;
              }
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                stances_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.PlayerStatus>();
                mutable_bitField0_ |= 0x00000010;
              }
              stances_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.PlayerStatus.PARSER, extensionRegistry));
              break;
            }
            case 48: {
              bitField0_ |= 0x00000008;
              neutral_ = input.readBool();
              break;
            }
            case 58: {
              org.bwapi.proxy.messages.BasicTypes.TilePosition.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = startLocation_.toBuilder();
              }
              startLocation_ = input.readMessage(org.bwapi.proxy.messages.BasicTypes.TilePosition.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(startLocation_);
                startLocation_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 64: {
              bitField0_ |= 0x00000020;
              leftGame_ = input.readBool();
              break;
            }
            case 72: {
              bitField0_ |= 0x00000040;
              minerals_ = input.readInt32();
              break;
            }
            case 80: {
              bitField0_ |= 0x00000080;
              gas_ = input.readInt32();
              break;
            }
            case 88: {
              bitField0_ |= 0x00000100;
              cumulativeMinerals_ = input.readInt32();
              break;
            }
            case 96: {
              bitField0_ |= 0x00000200;
              cumulativeGas_ = input.readInt32();
              break;
            }
            case 104: {
              bitField0_ |= 0x00000400;
              supplyTotal_ = input.readInt32();
              break;
            }
            case 112: {
              bitField0_ |= 0x00000800;
              supplyUsed_ = input.readInt32();
              break;
            }
            case 122: {
              if (!((mutable_bitField0_ & 0x00004000) == 0x00004000)) {
                allUnitCount_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair>();
                mutable_bitField0_ |= 0x00004000;
              }
              allUnitCount_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.PARSER, extensionRegistry));
              break;
            }
            case 130: {
              if (!((mutable_bitField0_ & 0x00008000) == 0x00008000)) {
                completedUnitCount_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair>();
                mutable_bitField0_ |= 0x00008000;
              }
              completedUnitCount_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.PARSER, extensionRegistry));
              break;
            }
            case 138: {
              if (!((mutable_bitField0_ & 0x00010000) == 0x00010000)) {
                incompleteUnitCount_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair>();
                mutable_bitField0_ |= 0x00010000;
              }
              incompleteUnitCount_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.PARSER, extensionRegistry));
              break;
            }
            case 146: {
              if (!((mutable_bitField0_ & 0x00020000) == 0x00020000)) {
                deadUnitCount_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair>();
                mutable_bitField0_ |= 0x00020000;
              }
              deadUnitCount_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.PARSER, extensionRegistry));
              break;
            }
            case 154: {
              if (!((mutable_bitField0_ & 0x00040000) == 0x00040000)) {
                killedUnitCount_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair>();
                mutable_bitField0_ |= 0x00040000;
              }
              killedUnitCount_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.PARSER, extensionRegistry));
              break;
            }
            case 162: {
              if (!((mutable_bitField0_ & 0x00080000) == 0x00080000)) {
                upgradeLevels_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UpgradeLevel>();
                mutable_bitField0_ |= 0x00080000;
              }
              upgradeLevels_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.UpgradeLevel.PARSER, extensionRegistry));
              break;
            }
            case 170: {
              if (!((mutable_bitField0_ & 0x00100000) == 0x00100000)) {
                researchedTechs_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.TechType>();
                mutable_bitField0_ |= 0x00100000;
              }
              researchedTechs_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.TechType.PARSER, extensionRegistry));
              break;
            }
            case 178: {
              if (!((mutable_bitField0_ & 0x00200000) == 0x00200000)) {
                researching_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.TechType>();
                mutable_bitField0_ |= 0x00200000;
              }
              researching_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.TechType.PARSER, extensionRegistry));
              break;
            }
            case 186: {
              if (!((mutable_bitField0_ & 0x00400000) == 0x00400000)) {
                upgrading_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UpgradeType>();
                mutable_bitField0_ |= 0x00400000;
              }
              upgrading_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.UpgradeType.PARSER, extensionRegistry));
              break;
            }
            case 192: {
              bitField0_ |= 0x00001000;
              self_ = input.readBool();
              break;
            }
            case 200: {
              bitField0_ |= 0x00002000;
              victorious_ = input.readBool();
              break;
            }
            case 208: {
              bitField0_ |= 0x00004000;
              defeated_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          units_ = java.util.Collections.unmodifiableList(units_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          stances_ = java.util.Collections.unmodifiableList(stances_);
        }
        if (((mutable_bitField0_ & 0x00004000) == 0x00004000)) {
          allUnitCount_ = java.util.Collections.unmodifiableList(allUnitCount_);
        }
        if (((mutable_bitField0_ & 0x00008000) == 0x00008000)) {
          completedUnitCount_ = java.util.Collections.unmodifiableList(completedUnitCount_);
        }
        if (((mutable_bitField0_ & 0x00010000) == 0x00010000)) {
          incompleteUnitCount_ = java.util.Collections.unmodifiableList(incompleteUnitCount_);
        }
        if (((mutable_bitField0_ & 0x00020000) == 0x00020000)) {
          deadUnitCount_ = java.util.Collections.unmodifiableList(deadUnitCount_);
        }
        if (((mutable_bitField0_ & 0x00040000) == 0x00040000)) {
          killedUnitCount_ = java.util.Collections.unmodifiableList(killedUnitCount_);
        }
        if (((mutable_bitField0_ & 0x00080000) == 0x00080000)) {
          upgradeLevels_ = java.util.Collections.unmodifiableList(upgradeLevels_);
        }
        if (((mutable_bitField0_ & 0x00100000) == 0x00100000)) {
          researchedTechs_ = java.util.Collections.unmodifiableList(researchedTechs_);
        }
        if (((mutable_bitField0_ & 0x00200000) == 0x00200000)) {
          researching_ = java.util.Collections.unmodifiableList(researching_);
        }
        if (((mutable_bitField0_ & 0x00400000) == 0x00400000)) {
          upgrading_ = java.util.Collections.unmodifiableList(upgrading_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_Player_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_Player_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.bwapi.proxy.messages.GameMessages.Player.class, org.bwapi.proxy.messages.GameMessages.Player.Builder.class);
    }

    public static com.google.protobuf.Parser<Player> PARSER =
        new com.google.protobuf.AbstractParser<Player>() {
      public Player parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Player(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    // required int32 id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private int id_;
    /**
     * <code>required int32 id = 1;</code>
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required int32 id = 1;</code>
     */
    public int getId() {
      return id_;
    }

    // required string name = 2;
    public static final int NAME_FIELD_NUMBER = 2;
    private java.lang.Object name_;
    /**
     * <code>required string name = 2;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>required string name = 2;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string name = 2;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated .messages.UnitId units = 3;
    public static final int UNITS_FIELD_NUMBER = 3;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> units_;
    /**
     * <code>repeated .messages.UnitId units = 3;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> getUnitsList() {
      return units_;
    }
    /**
     * <code>repeated .messages.UnitId units = 3;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> 
        getUnitsOrBuilderList() {
      return units_;
    }
    /**
     * <code>repeated .messages.UnitId units = 3;</code>
     */
    public int getUnitsCount() {
      return units_.size();
    }
    /**
     * <code>repeated .messages.UnitId units = 3;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitId getUnits(int index) {
      return units_.get(index);
    }
    /**
     * <code>repeated .messages.UnitId units = 3;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder getUnitsOrBuilder(
        int index) {
      return units_.get(index);
    }

    // required .messages.Race race = 4;
    public static final int RACE_FIELD_NUMBER = 4;
    private org.bwapi.proxy.messages.GameMessages.Race race_;
    /**
     * <code>required .messages.Race race = 4;</code>
     */
    public boolean hasRace() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>required .messages.Race race = 4;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.Race getRace() {
      return race_;
    }

    // repeated .messages.PlayerStatus stances = 5;
    public static final int STANCES_FIELD_NUMBER = 5;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.PlayerStatus> stances_;
    /**
     * <code>repeated .messages.PlayerStatus stances = 5;</code>
     *
     * <pre>
     *required PlayerType playerType()  = 0;
     *required Force* force  = 0;
     * </pre>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.PlayerStatus> getStancesList() {
      return stances_;
    }
    /**
     * <code>repeated .messages.PlayerStatus stances = 5;</code>
     *
     * <pre>
     *required PlayerType playerType()  = 0;
     *required Force* force  = 0;
     * </pre>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.PlayerStatusOrBuilder> 
        getStancesOrBuilderList() {
      return stances_;
    }
    /**
     * <code>repeated .messages.PlayerStatus stances = 5;</code>
     *
     * <pre>
     *required PlayerType playerType()  = 0;
     *required Force* force  = 0;
     * </pre>
     */
    public int getStancesCount() {
      return stances_.size();
    }
    /**
     * <code>repeated .messages.PlayerStatus stances = 5;</code>
     *
     * <pre>
     *required PlayerType playerType()  = 0;
     *required Force* force  = 0;
     * </pre>
     */
    public org.bwapi.proxy.messages.GameMessages.PlayerStatus getStances(int index) {
      return stances_.get(index);
    }
    /**
     * <code>repeated .messages.PlayerStatus stances = 5;</code>
     *
     * <pre>
     *required PlayerType playerType()  = 0;
     *required Force* force  = 0;
     * </pre>
     */
    public org.bwapi.proxy.messages.GameMessages.PlayerStatusOrBuilder getStancesOrBuilder(
        int index) {
      return stances_.get(index);
    }

    // required bool neutral = 6;
    public static final int NEUTRAL_FIELD_NUMBER = 6;
    private boolean neutral_;
    /**
     * <code>required bool neutral = 6;</code>
     */
    public boolean hasNeutral() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>required bool neutral = 6;</code>
     */
    public boolean getNeutral() {
      return neutral_;
    }

    // required .messages.TilePosition startLocation = 7;
    public static final int STARTLOCATION_FIELD_NUMBER = 7;
    private org.bwapi.proxy.messages.BasicTypes.TilePosition startLocation_;
    /**
     * <code>required .messages.TilePosition startLocation = 7;</code>
     */
    public boolean hasStartLocation() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>required .messages.TilePosition startLocation = 7;</code>
     */
    public org.bwapi.proxy.messages.BasicTypes.TilePosition getStartLocation() {
      return startLocation_;
    }
    /**
     * <code>required .messages.TilePosition startLocation = 7;</code>
     */
    public org.bwapi.proxy.messages.BasicTypes.TilePositionOrBuilder getStartLocationOrBuilder() {
      return startLocation_;
    }

    // required bool leftGame = 8;
    public static final int LEFTGAME_FIELD_NUMBER = 8;
    private boolean leftGame_;
    /**
     * <code>required bool leftGame = 8;</code>
     */
    public boolean hasLeftGame() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>required bool leftGame = 8;</code>
     */
    public boolean getLeftGame() {
      return leftGame_;
    }

    // required int32 minerals = 9;
    public static final int MINERALS_FIELD_NUMBER = 9;
    private int minerals_;
    /**
     * <code>required int32 minerals = 9;</code>
     */
    public boolean hasMinerals() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>required int32 minerals = 9;</code>
     */
    public int getMinerals() {
      return minerals_;
    }

    // required int32 gas = 10;
    public static final int GAS_FIELD_NUMBER = 10;
    private int gas_;
    /**
     * <code>required int32 gas = 10;</code>
     */
    public boolean hasGas() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>required int32 gas = 10;</code>
     */
    public int getGas() {
      return gas_;
    }

    // required int32 cumulativeMinerals = 11;
    public static final int CUMULATIVEMINERALS_FIELD_NUMBER = 11;
    private int cumulativeMinerals_;
    /**
     * <code>required int32 cumulativeMinerals = 11;</code>
     */
    public boolean hasCumulativeMinerals() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>required int32 cumulativeMinerals = 11;</code>
     */
    public int getCumulativeMinerals() {
      return cumulativeMinerals_;
    }

    // required int32 cumulativeGas = 12;
    public static final int CUMULATIVEGAS_FIELD_NUMBER = 12;
    private int cumulativeGas_;
    /**
     * <code>required int32 cumulativeGas = 12;</code>
     */
    public boolean hasCumulativeGas() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>required int32 cumulativeGas = 12;</code>
     */
    public int getCumulativeGas() {
      return cumulativeGas_;
    }

    // required int32 supplyTotal = 13;
    public static final int SUPPLYTOTAL_FIELD_NUMBER = 13;
    private int supplyTotal_;
    /**
     * <code>required int32 supplyTotal = 13;</code>
     */
    public boolean hasSupplyTotal() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>required int32 supplyTotal = 13;</code>
     */
    public int getSupplyTotal() {
      return supplyTotal_;
    }

    // required int32 supplyUsed = 14;
    public static final int SUPPLYUSED_FIELD_NUMBER = 14;
    private int supplyUsed_;
    /**
     * <code>required int32 supplyUsed = 14;</code>
     */
    public boolean hasSupplyUsed() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>required int32 supplyUsed = 14;</code>
     */
    public int getSupplyUsed() {
      return supplyUsed_;
    }

    // repeated .messages.UnitTypeIntPair allUnitCount = 15;
    public static final int ALLUNITCOUNT_FIELD_NUMBER = 15;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> allUnitCount_;
    /**
     * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> getAllUnitCountList() {
      return allUnitCount_;
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
        getAllUnitCountOrBuilderList() {
      return allUnitCount_;
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
     */
    public int getAllUnitCountCount() {
      return allUnitCount_.size();
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair getAllUnitCount(int index) {
      return allUnitCount_.get(index);
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder getAllUnitCountOrBuilder(
        int index) {
      return allUnitCount_.get(index);
    }

    // repeated .messages.UnitTypeIntPair completedUnitCount = 16;
    public static final int COMPLETEDUNITCOUNT_FIELD_NUMBER = 16;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> completedUnitCount_;
    /**
     * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> getCompletedUnitCountList() {
      return completedUnitCount_;
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
        getCompletedUnitCountOrBuilderList() {
      return completedUnitCount_;
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
     */
    public int getCompletedUnitCountCount() {
      return completedUnitCount_.size();
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair getCompletedUnitCount(int index) {
      return completedUnitCount_.get(index);
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder getCompletedUnitCountOrBuilder(
        int index) {
      return completedUnitCount_.get(index);
    }

    // repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;
    public static final int INCOMPLETEUNITCOUNT_FIELD_NUMBER = 17;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> incompleteUnitCount_;
    /**
     * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> getIncompleteUnitCountList() {
      return incompleteUnitCount_;
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
        getIncompleteUnitCountOrBuilderList() {
      return incompleteUnitCount_;
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
     */
    public int getIncompleteUnitCountCount() {
      return incompleteUnitCount_.size();
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair getIncompleteUnitCount(int index) {
      return incompleteUnitCount_.get(index);
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder getIncompleteUnitCountOrBuilder(
        int index) {
      return incompleteUnitCount_.get(index);
    }

    // repeated .messages.UnitTypeIntPair deadUnitCount = 18;
    public static final int DEADUNITCOUNT_FIELD_NUMBER = 18;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> deadUnitCount_;
    /**
     * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> getDeadUnitCountList() {
      return deadUnitCount_;
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
        getDeadUnitCountOrBuilderList() {
      return deadUnitCount_;
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
     */
    public int getDeadUnitCountCount() {
      return deadUnitCount_.size();
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair getDeadUnitCount(int index) {
      return deadUnitCount_.get(index);
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder getDeadUnitCountOrBuilder(
        int index) {
      return deadUnitCount_.get(index);
    }

    // repeated .messages.UnitTypeIntPair killedUnitCount = 19;
    public static final int KILLEDUNITCOUNT_FIELD_NUMBER = 19;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> killedUnitCount_;
    /**
     * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> getKilledUnitCountList() {
      return killedUnitCount_;
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
        getKilledUnitCountOrBuilderList() {
      return killedUnitCount_;
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
     */
    public int getKilledUnitCountCount() {
      return killedUnitCount_.size();
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair getKilledUnitCount(int index) {
      return killedUnitCount_.get(index);
    }
    /**
     * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder getKilledUnitCountOrBuilder(
        int index) {
      return killedUnitCount_.get(index);
    }

    // repeated .messages.UpgradeLevel upgradeLevels = 20;
    public static final int UPGRADELEVELS_FIELD_NUMBER = 20;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.UpgradeLevel> upgradeLevels_;
    /**
     * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.UpgradeLevel> getUpgradeLevelsList() {
      return upgradeLevels_;
    }
    /**
     * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UpgradeLevelOrBuilder> 
        getUpgradeLevelsOrBuilderList() {
      return upgradeLevels_;
    }
    /**
     * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
     */
    public int getUpgradeLevelsCount() {
      return upgradeLevels_.size();
    }
    /**
     * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UpgradeLevel getUpgradeLevels(int index) {
      return upgradeLevels_.get(index);
    }
    /**
     * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UpgradeLevelOrBuilder getUpgradeLevelsOrBuilder(
        int index) {
      return upgradeLevels_.get(index);
    }

    // repeated .messages.TechType researchedTechs = 21;
    public static final int RESEARCHEDTECHS_FIELD_NUMBER = 21;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.TechType> researchedTechs_;
    /**
     * <code>repeated .messages.TechType researchedTechs = 21;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.TechType> getResearchedTechsList() {
      return researchedTechs_;
    }
    /**
     * <code>repeated .messages.TechType researchedTechs = 21;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder> 
        getResearchedTechsOrBuilderList() {
      return researchedTechs_;
    }
    /**
     * <code>repeated .messages.TechType researchedTechs = 21;</code>
     */
    public int getResearchedTechsCount() {
      return researchedTechs_.size();
    }
    /**
     * <code>repeated .messages.TechType researchedTechs = 21;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.TechType getResearchedTechs(int index) {
      return researchedTechs_.get(index);
    }
    /**
     * <code>repeated .messages.TechType researchedTechs = 21;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder getResearchedTechsOrBuilder(
        int index) {
      return researchedTechs_.get(index);
    }

    // repeated .messages.TechType researching = 22;
    public static final int RESEARCHING_FIELD_NUMBER = 22;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.TechType> researching_;
    /**
     * <code>repeated .messages.TechType researching = 22;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.TechType> getResearchingList() {
      return researching_;
    }
    /**
     * <code>repeated .messages.TechType researching = 22;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder> 
        getResearchingOrBuilderList() {
      return researching_;
    }
    /**
     * <code>repeated .messages.TechType researching = 22;</code>
     */
    public int getResearchingCount() {
      return researching_.size();
    }
    /**
     * <code>repeated .messages.TechType researching = 22;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.TechType getResearching(int index) {
      return researching_.get(index);
    }
    /**
     * <code>repeated .messages.TechType researching = 22;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder getResearchingOrBuilder(
        int index) {
      return researching_.get(index);
    }

    // repeated .messages.UpgradeType upgrading = 23;
    public static final int UPGRADING_FIELD_NUMBER = 23;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.UpgradeType> upgrading_;
    /**
     * <code>repeated .messages.UpgradeType upgrading = 23;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.UpgradeType> getUpgradingList() {
      return upgrading_;
    }
    /**
     * <code>repeated .messages.UpgradeType upgrading = 23;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder> 
        getUpgradingOrBuilderList() {
      return upgrading_;
    }
    /**
     * <code>repeated .messages.UpgradeType upgrading = 23;</code>
     */
    public int getUpgradingCount() {
      return upgrading_.size();
    }
    /**
     * <code>repeated .messages.UpgradeType upgrading = 23;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UpgradeType getUpgrading(int index) {
      return upgrading_.get(index);
    }
    /**
     * <code>repeated .messages.UpgradeType upgrading = 23;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder getUpgradingOrBuilder(
        int index) {
      return upgrading_.get(index);
    }

    // optional bool self = 24 [default = false];
    public static final int SELF_FIELD_NUMBER = 24;
    private boolean self_;
    /**
     * <code>optional bool self = 24 [default = false];</code>
     */
    public boolean hasSelf() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     * <code>optional bool self = 24 [default = false];</code>
     */
    public boolean getSelf() {
      return self_;
    }

    // required bool victorious = 25;
    public static final int VICTORIOUS_FIELD_NUMBER = 25;
    private boolean victorious_;
    /**
     * <code>required bool victorious = 25;</code>
     */
    public boolean hasVictorious() {
      return ((bitField0_ & 0x00002000) == 0x00002000);
    }
    /**
     * <code>required bool victorious = 25;</code>
     */
    public boolean getVictorious() {
      return victorious_;
    }

    // required bool defeated = 26;
    public static final int DEFEATED_FIELD_NUMBER = 26;
    private boolean defeated_;
    /**
     * <code>required bool defeated = 26;</code>
     */
    public boolean hasDefeated() {
      return ((bitField0_ & 0x00004000) == 0x00004000);
    }
    /**
     * <code>required bool defeated = 26;</code>
     */
    public boolean getDefeated() {
      return defeated_;
    }

    private void initFields() {
      id_ = 0;
      name_ = "";
      units_ = java.util.Collections.emptyList();
      race_ = org.bwapi.proxy.messages.GameMessages.Race.Zerg;
      stances_ = java.util.Collections.emptyList();
      neutral_ = false;
      startLocation_ = org.bwapi.proxy.messages.BasicTypes.TilePosition.getDefaultInstance();
      leftGame_ = false;
      minerals_ = 0;
      gas_ = 0;
      cumulativeMinerals_ = 0;
      cumulativeGas_ = 0;
      supplyTotal_ = 0;
      supplyUsed_ = 0;
      allUnitCount_ = java.util.Collections.emptyList();
      completedUnitCount_ = java.util.Collections.emptyList();
      incompleteUnitCount_ = java.util.Collections.emptyList();
      deadUnitCount_ = java.util.Collections.emptyList();
      killedUnitCount_ = java.util.Collections.emptyList();
      upgradeLevels_ = java.util.Collections.emptyList();
      researchedTechs_ = java.util.Collections.emptyList();
      researching_ = java.util.Collections.emptyList();
      upgrading_ = java.util.Collections.emptyList();
      self_ = false;
      victorious_ = false;
      defeated_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasId()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasName()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasRace()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasNeutral()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasStartLocation()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasLeftGame()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasMinerals()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasGas()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasCumulativeMinerals()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasCumulativeGas()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasSupplyTotal()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasSupplyUsed()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasVictorious()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasDefeated()) {
        memoizedIsInitialized = 0;
        return false;
      }
      for (int i = 0; i < getUnitsCount(); i++) {
        if (!getUnits(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getStancesCount(); i++) {
        if (!getStances(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (!getStartLocation().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      for (int i = 0; i < getAllUnitCountCount(); i++) {
        if (!getAllUnitCount(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getCompletedUnitCountCount(); i++) {
        if (!getCompletedUnitCount(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getIncompleteUnitCountCount(); i++) {
        if (!getIncompleteUnitCount(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getDeadUnitCountCount(); i++) {
        if (!getDeadUnitCount(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getKilledUnitCountCount(); i++) {
        if (!getKilledUnitCount(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getUpgradeLevelsCount(); i++) {
        if (!getUpgradeLevels(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getResearchedTechsCount(); i++) {
        if (!getResearchedTechs(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getResearchingCount(); i++) {
        if (!getResearching(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getUpgradingCount(); i++) {
        if (!getUpgrading(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getNameBytes());
      }
      for (int i = 0; i < units_.size(); i++) {
        output.writeMessage(3, units_.get(i));
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeEnum(4, race_.getNumber());
      }
      for (int i = 0; i < stances_.size(); i++) {
        output.writeMessage(5, stances_.get(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(6, neutral_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(7, startLocation_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBool(8, leftGame_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeInt32(9, minerals_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeInt32(10, gas_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeInt32(11, cumulativeMinerals_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeInt32(12, cumulativeGas_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeInt32(13, supplyTotal_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeInt32(14, supplyUsed_);
      }
      for (int i = 0; i < allUnitCount_.size(); i++) {
        output.writeMessage(15, allUnitCount_.get(i));
      }
      for (int i = 0; i < completedUnitCount_.size(); i++) {
        output.writeMessage(16, completedUnitCount_.get(i));
      }
      for (int i = 0; i < incompleteUnitCount_.size(); i++) {
        output.writeMessage(17, incompleteUnitCount_.get(i));
      }
      for (int i = 0; i < deadUnitCount_.size(); i++) {
        output.writeMessage(18, deadUnitCount_.get(i));
      }
      for (int i = 0; i < killedUnitCount_.size(); i++) {
        output.writeMessage(19, killedUnitCount_.get(i));
      }
      for (int i = 0; i < upgradeLevels_.size(); i++) {
        output.writeMessage(20, upgradeLevels_.get(i));
      }
      for (int i = 0; i < researchedTechs_.size(); i++) {
        output.writeMessage(21, researchedTechs_.get(i));
      }
      for (int i = 0; i < researching_.size(); i++) {
        output.writeMessage(22, researching_.get(i));
      }
      for (int i = 0; i < upgrading_.size(); i++) {
        output.writeMessage(23, upgrading_.get(i));
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeBool(24, self_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        output.writeBool(25, victorious_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        output.writeBool(26, defeated_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getNameBytes());
      }
      for (int i = 0; i < units_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, units_.get(i));
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(4, race_.getNumber());
      }
      for (int i = 0; i < stances_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, stances_.get(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, neutral_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, startLocation_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(8, leftGame_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(9, minerals_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(10, gas_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(11, cumulativeMinerals_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(12, cumulativeGas_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(13, supplyTotal_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(14, supplyUsed_);
      }
      for (int i = 0; i < allUnitCount_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(15, allUnitCount_.get(i));
      }
      for (int i = 0; i < completedUnitCount_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(16, completedUnitCount_.get(i));
      }
      for (int i = 0; i < incompleteUnitCount_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(17, incompleteUnitCount_.get(i));
      }
      for (int i = 0; i < deadUnitCount_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(18, deadUnitCount_.get(i));
      }
      for (int i = 0; i < killedUnitCount_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(19, killedUnitCount_.get(i));
      }
      for (int i = 0; i < upgradeLevels_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(20, upgradeLevels_.get(i));
      }
      for (int i = 0; i < researchedTechs_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(21, researchedTechs_.get(i));
      }
      for (int i = 0; i < researching_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(22, researching_.get(i));
      }
      for (int i = 0; i < upgrading_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(23, upgrading_.get(i));
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(24, self_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(25, victorious_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(26, defeated_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.bwapi.proxy.messages.GameMessages.Player parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.Player parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.Player parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.Player parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.Player parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.Player parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.Player parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.Player parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.Player parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.Player parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bwapi.proxy.messages.GameMessages.Player prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code messages.Player}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bwapi.proxy.messages.GameMessages.PlayerOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_Player_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_Player_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.bwapi.proxy.messages.GameMessages.Player.class, org.bwapi.proxy.messages.GameMessages.Player.Builder.class);
      }

      // Construct using org.bwapi.proxy.messages.GameMessages.Player.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getUnitsFieldBuilder();
          getStancesFieldBuilder();
          getStartLocationFieldBuilder();
          getAllUnitCountFieldBuilder();
          getCompletedUnitCountFieldBuilder();
          getIncompleteUnitCountFieldBuilder();
          getDeadUnitCountFieldBuilder();
          getKilledUnitCountFieldBuilder();
          getUpgradeLevelsFieldBuilder();
          getResearchedTechsFieldBuilder();
          getResearchingFieldBuilder();
          getUpgradingFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        id_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        if (unitsBuilder_ == null) {
          units_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          unitsBuilder_.clear();
        }
        race_ = org.bwapi.proxy.messages.GameMessages.Race.Zerg;
        bitField0_ = (bitField0_ & ~0x00000008);
        if (stancesBuilder_ == null) {
          stances_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          stancesBuilder_.clear();
        }
        neutral_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        if (startLocationBuilder_ == null) {
          startLocation_ = org.bwapi.proxy.messages.BasicTypes.TilePosition.getDefaultInstance();
        } else {
          startLocationBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        leftGame_ = false;
        bitField0_ = (bitField0_ & ~0x00000080);
        minerals_ = 0;
        bitField0_ = (bitField0_ & ~0x00000100);
        gas_ = 0;
        bitField0_ = (bitField0_ & ~0x00000200);
        cumulativeMinerals_ = 0;
        bitField0_ = (bitField0_ & ~0x00000400);
        cumulativeGas_ = 0;
        bitField0_ = (bitField0_ & ~0x00000800);
        supplyTotal_ = 0;
        bitField0_ = (bitField0_ & ~0x00001000);
        supplyUsed_ = 0;
        bitField0_ = (bitField0_ & ~0x00002000);
        if (allUnitCountBuilder_ == null) {
          allUnitCount_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00004000);
        } else {
          allUnitCountBuilder_.clear();
        }
        if (completedUnitCountBuilder_ == null) {
          completedUnitCount_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00008000);
        } else {
          completedUnitCountBuilder_.clear();
        }
        if (incompleteUnitCountBuilder_ == null) {
          incompleteUnitCount_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00010000);
        } else {
          incompleteUnitCountBuilder_.clear();
        }
        if (deadUnitCountBuilder_ == null) {
          deadUnitCount_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00020000);
        } else {
          deadUnitCountBuilder_.clear();
        }
        if (killedUnitCountBuilder_ == null) {
          killedUnitCount_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00040000);
        } else {
          killedUnitCountBuilder_.clear();
        }
        if (upgradeLevelsBuilder_ == null) {
          upgradeLevels_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00080000);
        } else {
          upgradeLevelsBuilder_.clear();
        }
        if (researchedTechsBuilder_ == null) {
          researchedTechs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00100000);
        } else {
          researchedTechsBuilder_.clear();
        }
        if (researchingBuilder_ == null) {
          researching_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00200000);
        } else {
          researchingBuilder_.clear();
        }
        if (upgradingBuilder_ == null) {
          upgrading_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00400000);
        } else {
          upgradingBuilder_.clear();
        }
        self_ = false;
        bitField0_ = (bitField0_ & ~0x00800000);
        victorious_ = false;
        bitField0_ = (bitField0_ & ~0x01000000);
        defeated_ = false;
        bitField0_ = (bitField0_ & ~0x02000000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_Player_descriptor;
      }

      public org.bwapi.proxy.messages.GameMessages.Player getDefaultInstanceForType() {
        return org.bwapi.proxy.messages.GameMessages.Player.getDefaultInstance();
      }

      public org.bwapi.proxy.messages.GameMessages.Player build() {
        org.bwapi.proxy.messages.GameMessages.Player result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.bwapi.proxy.messages.GameMessages.Player buildPartial() {
        org.bwapi.proxy.messages.GameMessages.Player result = new org.bwapi.proxy.messages.GameMessages.Player(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.name_ = name_;
        if (unitsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            units_ = java.util.Collections.unmodifiableList(units_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.units_ = units_;
        } else {
          result.units_ = unitsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000004;
        }
        result.race_ = race_;
        if (stancesBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            stances_ = java.util.Collections.unmodifiableList(stances_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.stances_ = stances_;
        } else {
          result.stances_ = stancesBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000008;
        }
        result.neutral_ = neutral_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000010;
        }
        if (startLocationBuilder_ == null) {
          result.startLocation_ = startLocation_;
        } else {
          result.startLocation_ = startLocationBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000020;
        }
        result.leftGame_ = leftGame_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000040;
        }
        result.minerals_ = minerals_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000080;
        }
        result.gas_ = gas_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000100;
        }
        result.cumulativeMinerals_ = cumulativeMinerals_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000200;
        }
        result.cumulativeGas_ = cumulativeGas_;
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00000400;
        }
        result.supplyTotal_ = supplyTotal_;
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00000800;
        }
        result.supplyUsed_ = supplyUsed_;
        if (allUnitCountBuilder_ == null) {
          if (((bitField0_ & 0x00004000) == 0x00004000)) {
            allUnitCount_ = java.util.Collections.unmodifiableList(allUnitCount_);
            bitField0_ = (bitField0_ & ~0x00004000);
          }
          result.allUnitCount_ = allUnitCount_;
        } else {
          result.allUnitCount_ = allUnitCountBuilder_.build();
        }
        if (completedUnitCountBuilder_ == null) {
          if (((bitField0_ & 0x00008000) == 0x00008000)) {
            completedUnitCount_ = java.util.Collections.unmodifiableList(completedUnitCount_);
            bitField0_ = (bitField0_ & ~0x00008000);
          }
          result.completedUnitCount_ = completedUnitCount_;
        } else {
          result.completedUnitCount_ = completedUnitCountBuilder_.build();
        }
        if (incompleteUnitCountBuilder_ == null) {
          if (((bitField0_ & 0x00010000) == 0x00010000)) {
            incompleteUnitCount_ = java.util.Collections.unmodifiableList(incompleteUnitCount_);
            bitField0_ = (bitField0_ & ~0x00010000);
          }
          result.incompleteUnitCount_ = incompleteUnitCount_;
        } else {
          result.incompleteUnitCount_ = incompleteUnitCountBuilder_.build();
        }
        if (deadUnitCountBuilder_ == null) {
          if (((bitField0_ & 0x00020000) == 0x00020000)) {
            deadUnitCount_ = java.util.Collections.unmodifiableList(deadUnitCount_);
            bitField0_ = (bitField0_ & ~0x00020000);
          }
          result.deadUnitCount_ = deadUnitCount_;
        } else {
          result.deadUnitCount_ = deadUnitCountBuilder_.build();
        }
        if (killedUnitCountBuilder_ == null) {
          if (((bitField0_ & 0x00040000) == 0x00040000)) {
            killedUnitCount_ = java.util.Collections.unmodifiableList(killedUnitCount_);
            bitField0_ = (bitField0_ & ~0x00040000);
          }
          result.killedUnitCount_ = killedUnitCount_;
        } else {
          result.killedUnitCount_ = killedUnitCountBuilder_.build();
        }
        if (upgradeLevelsBuilder_ == null) {
          if (((bitField0_ & 0x00080000) == 0x00080000)) {
            upgradeLevels_ = java.util.Collections.unmodifiableList(upgradeLevels_);
            bitField0_ = (bitField0_ & ~0x00080000);
          }
          result.upgradeLevels_ = upgradeLevels_;
        } else {
          result.upgradeLevels_ = upgradeLevelsBuilder_.build();
        }
        if (researchedTechsBuilder_ == null) {
          if (((bitField0_ & 0x00100000) == 0x00100000)) {
            researchedTechs_ = java.util.Collections.unmodifiableList(researchedTechs_);
            bitField0_ = (bitField0_ & ~0x00100000);
          }
          result.researchedTechs_ = researchedTechs_;
        } else {
          result.researchedTechs_ = researchedTechsBuilder_.build();
        }
        if (researchingBuilder_ == null) {
          if (((bitField0_ & 0x00200000) == 0x00200000)) {
            researching_ = java.util.Collections.unmodifiableList(researching_);
            bitField0_ = (bitField0_ & ~0x00200000);
          }
          result.researching_ = researching_;
        } else {
          result.researching_ = researchingBuilder_.build();
        }
        if (upgradingBuilder_ == null) {
          if (((bitField0_ & 0x00400000) == 0x00400000)) {
            upgrading_ = java.util.Collections.unmodifiableList(upgrading_);
            bitField0_ = (bitField0_ & ~0x00400000);
          }
          result.upgrading_ = upgrading_;
        } else {
          result.upgrading_ = upgradingBuilder_.build();
        }
        if (((from_bitField0_ & 0x00800000) == 0x00800000)) {
          to_bitField0_ |= 0x00001000;
        }
        result.self_ = self_;
        if (((from_bitField0_ & 0x01000000) == 0x01000000)) {
          to_bitField0_ |= 0x00002000;
        }
        result.victorious_ = victorious_;
        if (((from_bitField0_ & 0x02000000) == 0x02000000)) {
          to_bitField0_ |= 0x00004000;
        }
        result.defeated_ = defeated_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bwapi.proxy.messages.GameMessages.Player) {
          return mergeFrom((org.bwapi.proxy.messages.GameMessages.Player)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.bwapi.proxy.messages.GameMessages.Player other) {
        if (other == org.bwapi.proxy.messages.GameMessages.Player.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasName()) {
          bitField0_ |= 0x00000002;
          name_ = other.name_;
          onChanged();
        }
        if (unitsBuilder_ == null) {
          if (!other.units_.isEmpty()) {
            if (units_.isEmpty()) {
              units_ = other.units_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureUnitsIsMutable();
              units_.addAll(other.units_);
            }
            onChanged();
          }
        } else {
          if (!other.units_.isEmpty()) {
            if (unitsBuilder_.isEmpty()) {
              unitsBuilder_.dispose();
              unitsBuilder_ = null;
              units_ = other.units_;
              bitField0_ = (bitField0_ & ~0x00000004);
              unitsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUnitsFieldBuilder() : null;
            } else {
              unitsBuilder_.addAllMessages(other.units_);
            }
          }
        }
        if (other.hasRace()) {
          setRace(other.getRace());
        }
        if (stancesBuilder_ == null) {
          if (!other.stances_.isEmpty()) {
            if (stances_.isEmpty()) {
              stances_ = other.stances_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureStancesIsMutable();
              stances_.addAll(other.stances_);
            }
            onChanged();
          }
        } else {
          if (!other.stances_.isEmpty()) {
            if (stancesBuilder_.isEmpty()) {
              stancesBuilder_.dispose();
              stancesBuilder_ = null;
              stances_ = other.stances_;
              bitField0_ = (bitField0_ & ~0x00000010);
              stancesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getStancesFieldBuilder() : null;
            } else {
              stancesBuilder_.addAllMessages(other.stances_);
            }
          }
        }
        if (other.hasNeutral()) {
          setNeutral(other.getNeutral());
        }
        if (other.hasStartLocation()) {
          mergeStartLocation(other.getStartLocation());
        }
        if (other.hasLeftGame()) {
          setLeftGame(other.getLeftGame());
        }
        if (other.hasMinerals()) {
          setMinerals(other.getMinerals());
        }
        if (other.hasGas()) {
          setGas(other.getGas());
        }
        if (other.hasCumulativeMinerals()) {
          setCumulativeMinerals(other.getCumulativeMinerals());
        }
        if (other.hasCumulativeGas()) {
          setCumulativeGas(other.getCumulativeGas());
        }
        if (other.hasSupplyTotal()) {
          setSupplyTotal(other.getSupplyTotal());
        }
        if (other.hasSupplyUsed()) {
          setSupplyUsed(other.getSupplyUsed());
        }
        if (allUnitCountBuilder_ == null) {
          if (!other.allUnitCount_.isEmpty()) {
            if (allUnitCount_.isEmpty()) {
              allUnitCount_ = other.allUnitCount_;
              bitField0_ = (bitField0_ & ~0x00004000);
            } else {
              ensureAllUnitCountIsMutable();
              allUnitCount_.addAll(other.allUnitCount_);
            }
            onChanged();
          }
        } else {
          if (!other.allUnitCount_.isEmpty()) {
            if (allUnitCountBuilder_.isEmpty()) {
              allUnitCountBuilder_.dispose();
              allUnitCountBuilder_ = null;
              allUnitCount_ = other.allUnitCount_;
              bitField0_ = (bitField0_ & ~0x00004000);
              allUnitCountBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getAllUnitCountFieldBuilder() : null;
            } else {
              allUnitCountBuilder_.addAllMessages(other.allUnitCount_);
            }
          }
        }
        if (completedUnitCountBuilder_ == null) {
          if (!other.completedUnitCount_.isEmpty()) {
            if (completedUnitCount_.isEmpty()) {
              completedUnitCount_ = other.completedUnitCount_;
              bitField0_ = (bitField0_ & ~0x00008000);
            } else {
              ensureCompletedUnitCountIsMutable();
              completedUnitCount_.addAll(other.completedUnitCount_);
            }
            onChanged();
          }
        } else {
          if (!other.completedUnitCount_.isEmpty()) {
            if (completedUnitCountBuilder_.isEmpty()) {
              completedUnitCountBuilder_.dispose();
              completedUnitCountBuilder_ = null;
              completedUnitCount_ = other.completedUnitCount_;
              bitField0_ = (bitField0_ & ~0x00008000);
              completedUnitCountBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getCompletedUnitCountFieldBuilder() : null;
            } else {
              completedUnitCountBuilder_.addAllMessages(other.completedUnitCount_);
            }
          }
        }
        if (incompleteUnitCountBuilder_ == null) {
          if (!other.incompleteUnitCount_.isEmpty()) {
            if (incompleteUnitCount_.isEmpty()) {
              incompleteUnitCount_ = other.incompleteUnitCount_;
              bitField0_ = (bitField0_ & ~0x00010000);
            } else {
              ensureIncompleteUnitCountIsMutable();
              incompleteUnitCount_.addAll(other.incompleteUnitCount_);
            }
            onChanged();
          }
        } else {
          if (!other.incompleteUnitCount_.isEmpty()) {
            if (incompleteUnitCountBuilder_.isEmpty()) {
              incompleteUnitCountBuilder_.dispose();
              incompleteUnitCountBuilder_ = null;
              incompleteUnitCount_ = other.incompleteUnitCount_;
              bitField0_ = (bitField0_ & ~0x00010000);
              incompleteUnitCountBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getIncompleteUnitCountFieldBuilder() : null;
            } else {
              incompleteUnitCountBuilder_.addAllMessages(other.incompleteUnitCount_);
            }
          }
        }
        if (deadUnitCountBuilder_ == null) {
          if (!other.deadUnitCount_.isEmpty()) {
            if (deadUnitCount_.isEmpty()) {
              deadUnitCount_ = other.deadUnitCount_;
              bitField0_ = (bitField0_ & ~0x00020000);
            } else {
              ensureDeadUnitCountIsMutable();
              deadUnitCount_.addAll(other.deadUnitCount_);
            }
            onChanged();
          }
        } else {
          if (!other.deadUnitCount_.isEmpty()) {
            if (deadUnitCountBuilder_.isEmpty()) {
              deadUnitCountBuilder_.dispose();
              deadUnitCountBuilder_ = null;
              deadUnitCount_ = other.deadUnitCount_;
              bitField0_ = (bitField0_ & ~0x00020000);
              deadUnitCountBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getDeadUnitCountFieldBuilder() : null;
            } else {
              deadUnitCountBuilder_.addAllMessages(other.deadUnitCount_);
            }
          }
        }
        if (killedUnitCountBuilder_ == null) {
          if (!other.killedUnitCount_.isEmpty()) {
            if (killedUnitCount_.isEmpty()) {
              killedUnitCount_ = other.killedUnitCount_;
              bitField0_ = (bitField0_ & ~0x00040000);
            } else {
              ensureKilledUnitCountIsMutable();
              killedUnitCount_.addAll(other.killedUnitCount_);
            }
            onChanged();
          }
        } else {
          if (!other.killedUnitCount_.isEmpty()) {
            if (killedUnitCountBuilder_.isEmpty()) {
              killedUnitCountBuilder_.dispose();
              killedUnitCountBuilder_ = null;
              killedUnitCount_ = other.killedUnitCount_;
              bitField0_ = (bitField0_ & ~0x00040000);
              killedUnitCountBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getKilledUnitCountFieldBuilder() : null;
            } else {
              killedUnitCountBuilder_.addAllMessages(other.killedUnitCount_);
            }
          }
        }
        if (upgradeLevelsBuilder_ == null) {
          if (!other.upgradeLevels_.isEmpty()) {
            if (upgradeLevels_.isEmpty()) {
              upgradeLevels_ = other.upgradeLevels_;
              bitField0_ = (bitField0_ & ~0x00080000);
            } else {
              ensureUpgradeLevelsIsMutable();
              upgradeLevels_.addAll(other.upgradeLevels_);
            }
            onChanged();
          }
        } else {
          if (!other.upgradeLevels_.isEmpty()) {
            if (upgradeLevelsBuilder_.isEmpty()) {
              upgradeLevelsBuilder_.dispose();
              upgradeLevelsBuilder_ = null;
              upgradeLevels_ = other.upgradeLevels_;
              bitField0_ = (bitField0_ & ~0x00080000);
              upgradeLevelsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUpgradeLevelsFieldBuilder() : null;
            } else {
              upgradeLevelsBuilder_.addAllMessages(other.upgradeLevels_);
            }
          }
        }
        if (researchedTechsBuilder_ == null) {
          if (!other.researchedTechs_.isEmpty()) {
            if (researchedTechs_.isEmpty()) {
              researchedTechs_ = other.researchedTechs_;
              bitField0_ = (bitField0_ & ~0x00100000);
            } else {
              ensureResearchedTechsIsMutable();
              researchedTechs_.addAll(other.researchedTechs_);
            }
            onChanged();
          }
        } else {
          if (!other.researchedTechs_.isEmpty()) {
            if (researchedTechsBuilder_.isEmpty()) {
              researchedTechsBuilder_.dispose();
              researchedTechsBuilder_ = null;
              researchedTechs_ = other.researchedTechs_;
              bitField0_ = (bitField0_ & ~0x00100000);
              researchedTechsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getResearchedTechsFieldBuilder() : null;
            } else {
              researchedTechsBuilder_.addAllMessages(other.researchedTechs_);
            }
          }
        }
        if (researchingBuilder_ == null) {
          if (!other.researching_.isEmpty()) {
            if (researching_.isEmpty()) {
              researching_ = other.researching_;
              bitField0_ = (bitField0_ & ~0x00200000);
            } else {
              ensureResearchingIsMutable();
              researching_.addAll(other.researching_);
            }
            onChanged();
          }
        } else {
          if (!other.researching_.isEmpty()) {
            if (researchingBuilder_.isEmpty()) {
              researchingBuilder_.dispose();
              researchingBuilder_ = null;
              researching_ = other.researching_;
              bitField0_ = (bitField0_ & ~0x00200000);
              researchingBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getResearchingFieldBuilder() : null;
            } else {
              researchingBuilder_.addAllMessages(other.researching_);
            }
          }
        }
        if (upgradingBuilder_ == null) {
          if (!other.upgrading_.isEmpty()) {
            if (upgrading_.isEmpty()) {
              upgrading_ = other.upgrading_;
              bitField0_ = (bitField0_ & ~0x00400000);
            } else {
              ensureUpgradingIsMutable();
              upgrading_.addAll(other.upgrading_);
            }
            onChanged();
          }
        } else {
          if (!other.upgrading_.isEmpty()) {
            if (upgradingBuilder_.isEmpty()) {
              upgradingBuilder_.dispose();
              upgradingBuilder_ = null;
              upgrading_ = other.upgrading_;
              bitField0_ = (bitField0_ & ~0x00400000);
              upgradingBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUpgradingFieldBuilder() : null;
            } else {
              upgradingBuilder_.addAllMessages(other.upgrading_);
            }
          }
        }
        if (other.hasSelf()) {
          setSelf(other.getSelf());
        }
        if (other.hasVictorious()) {
          setVictorious(other.getVictorious());
        }
        if (other.hasDefeated()) {
          setDefeated(other.getDefeated());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasId()) {
          
          return false;
        }
        if (!hasName()) {
          
          return false;
        }
        if (!hasRace()) {
          
          return false;
        }
        if (!hasNeutral()) {
          
          return false;
        }
        if (!hasStartLocation()) {
          
          return false;
        }
        if (!hasLeftGame()) {
          
          return false;
        }
        if (!hasMinerals()) {
          
          return false;
        }
        if (!hasGas()) {
          
          return false;
        }
        if (!hasCumulativeMinerals()) {
          
          return false;
        }
        if (!hasCumulativeGas()) {
          
          return false;
        }
        if (!hasSupplyTotal()) {
          
          return false;
        }
        if (!hasSupplyUsed()) {
          
          return false;
        }
        if (!hasVictorious()) {
          
          return false;
        }
        if (!hasDefeated()) {
          
          return false;
        }
        for (int i = 0; i < getUnitsCount(); i++) {
          if (!getUnits(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getStancesCount(); i++) {
          if (!getStances(i).isInitialized()) {
            
            return false;
          }
        }
        if (!getStartLocation().isInitialized()) {
          
          return false;
        }
        for (int i = 0; i < getAllUnitCountCount(); i++) {
          if (!getAllUnitCount(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getCompletedUnitCountCount(); i++) {
          if (!getCompletedUnitCount(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getIncompleteUnitCountCount(); i++) {
          if (!getIncompleteUnitCount(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getDeadUnitCountCount(); i++) {
          if (!getDeadUnitCount(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getKilledUnitCountCount(); i++) {
          if (!getKilledUnitCount(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getUpgradeLevelsCount(); i++) {
          if (!getUpgradeLevels(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getResearchedTechsCount(); i++) {
          if (!getResearchedTechs(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getResearchingCount(); i++) {
          if (!getResearching(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getUpgradingCount(); i++) {
          if (!getUpgrading(i).isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.bwapi.proxy.messages.GameMessages.Player parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.bwapi.proxy.messages.GameMessages.Player) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required int32 id = 1;
      private int id_ ;
      /**
       * <code>required int32 id = 1;</code>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public int getId() {
        return id_;
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public Builder setId(int value) {
        bitField0_ |= 0x00000001;
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = 0;
        onChanged();
        return this;
      }

      // required string name = 2;
      private java.lang.Object name_ = "";
      /**
       * <code>required string name = 2;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required string name = 2;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string name = 2;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string name = 2;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string name = 2;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000002);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>required string name = 2;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }

      // repeated .messages.UnitId units = 3;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> units_ =
        java.util.Collections.emptyList();
      private void ensureUnitsIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          units_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitId>(units_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitId, org.bwapi.proxy.messages.GameMessages.UnitId.Builder, org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> unitsBuilder_;

      /**
       * <code>repeated .messages.UnitId units = 3;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> getUnitsList() {
        if (unitsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(units_);
        } else {
          return unitsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.UnitId units = 3;</code>
       */
      public int getUnitsCount() {
        if (unitsBuilder_ == null) {
          return units_.size();
        } else {
          return unitsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.UnitId units = 3;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId getUnits(int index) {
        if (unitsBuilder_ == null) {
          return units_.get(index);
        } else {
          return unitsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.UnitId units = 3;</code>
       */
      public Builder setUnits(
          int index, org.bwapi.proxy.messages.GameMessages.UnitId value) {
        if (unitsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUnitsIsMutable();
          units_.set(index, value);
          onChanged();
        } else {
          unitsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId units = 3;</code>
       */
      public Builder setUnits(
          int index, org.bwapi.proxy.messages.GameMessages.UnitId.Builder builderForValue) {
        if (unitsBuilder_ == null) {
          ensureUnitsIsMutable();
          units_.set(index, builderForValue.build());
          onChanged();
        } else {
          unitsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId units = 3;</code>
       */
      public Builder addUnits(org.bwapi.proxy.messages.GameMessages.UnitId value) {
        if (unitsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUnitsIsMutable();
          units_.add(value);
          onChanged();
        } else {
          unitsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId units = 3;</code>
       */
      public Builder addUnits(
          int index, org.bwapi.proxy.messages.GameMessages.UnitId value) {
        if (unitsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUnitsIsMutable();
          units_.add(index, value);
          onChanged();
        } else {
          unitsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId units = 3;</code>
       */
      public Builder addUnits(
          org.bwapi.proxy.messages.GameMessages.UnitId.Builder builderForValue) {
        if (unitsBuilder_ == null) {
          ensureUnitsIsMutable();
          units_.add(builderForValue.build());
          onChanged();
        } else {
          unitsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId units = 3;</code>
       */
      public Builder addUnits(
          int index, org.bwapi.proxy.messages.GameMessages.UnitId.Builder builderForValue) {
        if (unitsBuilder_ == null) {
          ensureUnitsIsMutable();
          units_.add(index, builderForValue.build());
          onChanged();
        } else {
          unitsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId units = 3;</code>
       */
      public Builder addAllUnits(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.UnitId> values) {
        if (unitsBuilder_ == null) {
          ensureUnitsIsMutable();
          super.addAll(values, units_);
          onChanged();
        } else {
          unitsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId units = 3;</code>
       */
      public Builder clearUnits() {
        if (unitsBuilder_ == null) {
          units_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          unitsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId units = 3;</code>
       */
      public Builder removeUnits(int index) {
        if (unitsBuilder_ == null) {
          ensureUnitsIsMutable();
          units_.remove(index);
          onChanged();
        } else {
          unitsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId units = 3;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId.Builder getUnitsBuilder(
          int index) {
        return getUnitsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.UnitId units = 3;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder getUnitsOrBuilder(
          int index) {
        if (unitsBuilder_ == null) {
          return units_.get(index);  } else {
          return unitsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.UnitId units = 3;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> 
           getUnitsOrBuilderList() {
        if (unitsBuilder_ != null) {
          return unitsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(units_);
        }
      }
      /**
       * <code>repeated .messages.UnitId units = 3;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId.Builder addUnitsBuilder() {
        return getUnitsFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.UnitId.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitId units = 3;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId.Builder addUnitsBuilder(
          int index) {
        return getUnitsFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.UnitId.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitId units = 3;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId.Builder> 
           getUnitsBuilderList() {
        return getUnitsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitId, org.bwapi.proxy.messages.GameMessages.UnitId.Builder, org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> 
          getUnitsFieldBuilder() {
        if (unitsBuilder_ == null) {
          unitsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UnitId, org.bwapi.proxy.messages.GameMessages.UnitId.Builder, org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder>(
                  units_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          units_ = null;
        }
        return unitsBuilder_;
      }

      // required .messages.Race race = 4;
      private org.bwapi.proxy.messages.GameMessages.Race race_ = org.bwapi.proxy.messages.GameMessages.Race.Zerg;
      /**
       * <code>required .messages.Race race = 4;</code>
       */
      public boolean hasRace() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>required .messages.Race race = 4;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.Race getRace() {
        return race_;
      }
      /**
       * <code>required .messages.Race race = 4;</code>
       */
      public Builder setRace(org.bwapi.proxy.messages.GameMessages.Race value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        race_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required .messages.Race race = 4;</code>
       */
      public Builder clearRace() {
        bitField0_ = (bitField0_ & ~0x00000008);
        race_ = org.bwapi.proxy.messages.GameMessages.Race.Zerg;
        onChanged();
        return this;
      }

      // repeated .messages.PlayerStatus stances = 5;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.PlayerStatus> stances_ =
        java.util.Collections.emptyList();
      private void ensureStancesIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          stances_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.PlayerStatus>(stances_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.PlayerStatus, org.bwapi.proxy.messages.GameMessages.PlayerStatus.Builder, org.bwapi.proxy.messages.GameMessages.PlayerStatusOrBuilder> stancesBuilder_;

      /**
       * <code>repeated .messages.PlayerStatus stances = 5;</code>
       *
       * <pre>
       *required PlayerType playerType()  = 0;
       *required Force* force  = 0;
       * </pre>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.PlayerStatus> getStancesList() {
        if (stancesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(stances_);
        } else {
          return stancesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.PlayerStatus stances = 5;</code>
       *
       * <pre>
       *required PlayerType playerType()  = 0;
       *required Force* force  = 0;
       * </pre>
       */
      public int getStancesCount() {
        if (stancesBuilder_ == null) {
          return stances_.size();
        } else {
          return stancesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.PlayerStatus stances = 5;</code>
       *
       * <pre>
       *required PlayerType playerType()  = 0;
       *required Force* force  = 0;
       * </pre>
       */
      public org.bwapi.proxy.messages.GameMessages.PlayerStatus getStances(int index) {
        if (stancesBuilder_ == null) {
          return stances_.get(index);
        } else {
          return stancesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.PlayerStatus stances = 5;</code>
       *
       * <pre>
       *required PlayerType playerType()  = 0;
       *required Force* force  = 0;
       * </pre>
       */
      public Builder setStances(
          int index, org.bwapi.proxy.messages.GameMessages.PlayerStatus value) {
        if (stancesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStancesIsMutable();
          stances_.set(index, value);
          onChanged();
        } else {
          stancesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.PlayerStatus stances = 5;</code>
       *
       * <pre>
       *required PlayerType playerType()  = 0;
       *required Force* force  = 0;
       * </pre>
       */
      public Builder setStances(
          int index, org.bwapi.proxy.messages.GameMessages.PlayerStatus.Builder builderForValue) {
        if (stancesBuilder_ == null) {
          ensureStancesIsMutable();
          stances_.set(index, builderForValue.build());
          onChanged();
        } else {
          stancesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.PlayerStatus stances = 5;</code>
       *
       * <pre>
       *required PlayerType playerType()  = 0;
       *required Force* force  = 0;
       * </pre>
       */
      public Builder addStances(org.bwapi.proxy.messages.GameMessages.PlayerStatus value) {
        if (stancesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStancesIsMutable();
          stances_.add(value);
          onChanged();
        } else {
          stancesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.PlayerStatus stances = 5;</code>
       *
       * <pre>
       *required PlayerType playerType()  = 0;
       *required Force* force  = 0;
       * </pre>
       */
      public Builder addStances(
          int index, org.bwapi.proxy.messages.GameMessages.PlayerStatus value) {
        if (stancesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStancesIsMutable();
          stances_.add(index, value);
          onChanged();
        } else {
          stancesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.PlayerStatus stances = 5;</code>
       *
       * <pre>
       *required PlayerType playerType()  = 0;
       *required Force* force  = 0;
       * </pre>
       */
      public Builder addStances(
          org.bwapi.proxy.messages.GameMessages.PlayerStatus.Builder builderForValue) {
        if (stancesBuilder_ == null) {
          ensureStancesIsMutable();
          stances_.add(builderForValue.build());
          onChanged();
        } else {
          stancesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.PlayerStatus stances = 5;</code>
       *
       * <pre>
       *required PlayerType playerType()  = 0;
       *required Force* force  = 0;
       * </pre>
       */
      public Builder addStances(
          int index, org.bwapi.proxy.messages.GameMessages.PlayerStatus.Builder builderForValue) {
        if (stancesBuilder_ == null) {
          ensureStancesIsMutable();
          stances_.add(index, builderForValue.build());
          onChanged();
        } else {
          stancesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.PlayerStatus stances = 5;</code>
       *
       * <pre>
       *required PlayerType playerType()  = 0;
       *required Force* force  = 0;
       * </pre>
       */
      public Builder addAllStances(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.PlayerStatus> values) {
        if (stancesBuilder_ == null) {
          ensureStancesIsMutable();
          super.addAll(values, stances_);
          onChanged();
        } else {
          stancesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.PlayerStatus stances = 5;</code>
       *
       * <pre>
       *required PlayerType playerType()  = 0;
       *required Force* force  = 0;
       * </pre>
       */
      public Builder clearStances() {
        if (stancesBuilder_ == null) {
          stances_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          stancesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.PlayerStatus stances = 5;</code>
       *
       * <pre>
       *required PlayerType playerType()  = 0;
       *required Force* force  = 0;
       * </pre>
       */
      public Builder removeStances(int index) {
        if (stancesBuilder_ == null) {
          ensureStancesIsMutable();
          stances_.remove(index);
          onChanged();
        } else {
          stancesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.PlayerStatus stances = 5;</code>
       *
       * <pre>
       *required PlayerType playerType()  = 0;
       *required Force* force  = 0;
       * </pre>
       */
      public org.bwapi.proxy.messages.GameMessages.PlayerStatus.Builder getStancesBuilder(
          int index) {
        return getStancesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.PlayerStatus stances = 5;</code>
       *
       * <pre>
       *required PlayerType playerType()  = 0;
       *required Force* force  = 0;
       * </pre>
       */
      public org.bwapi.proxy.messages.GameMessages.PlayerStatusOrBuilder getStancesOrBuilder(
          int index) {
        if (stancesBuilder_ == null) {
          return stances_.get(index);  } else {
          return stancesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.PlayerStatus stances = 5;</code>
       *
       * <pre>
       *required PlayerType playerType()  = 0;
       *required Force* force  = 0;
       * </pre>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.PlayerStatusOrBuilder> 
           getStancesOrBuilderList() {
        if (stancesBuilder_ != null) {
          return stancesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(stances_);
        }
      }
      /**
       * <code>repeated .messages.PlayerStatus stances = 5;</code>
       *
       * <pre>
       *required PlayerType playerType()  = 0;
       *required Force* force  = 0;
       * </pre>
       */
      public org.bwapi.proxy.messages.GameMessages.PlayerStatus.Builder addStancesBuilder() {
        return getStancesFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.PlayerStatus.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.PlayerStatus stances = 5;</code>
       *
       * <pre>
       *required PlayerType playerType()  = 0;
       *required Force* force  = 0;
       * </pre>
       */
      public org.bwapi.proxy.messages.GameMessages.PlayerStatus.Builder addStancesBuilder(
          int index) {
        return getStancesFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.PlayerStatus.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.PlayerStatus stances = 5;</code>
       *
       * <pre>
       *required PlayerType playerType()  = 0;
       *required Force* force  = 0;
       * </pre>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.PlayerStatus.Builder> 
           getStancesBuilderList() {
        return getStancesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.PlayerStatus, org.bwapi.proxy.messages.GameMessages.PlayerStatus.Builder, org.bwapi.proxy.messages.GameMessages.PlayerStatusOrBuilder> 
          getStancesFieldBuilder() {
        if (stancesBuilder_ == null) {
          stancesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.PlayerStatus, org.bwapi.proxy.messages.GameMessages.PlayerStatus.Builder, org.bwapi.proxy.messages.GameMessages.PlayerStatusOrBuilder>(
                  stances_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          stances_ = null;
        }
        return stancesBuilder_;
      }

      // required bool neutral = 6;
      private boolean neutral_ ;
      /**
       * <code>required bool neutral = 6;</code>
       */
      public boolean hasNeutral() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>required bool neutral = 6;</code>
       */
      public boolean getNeutral() {
        return neutral_;
      }
      /**
       * <code>required bool neutral = 6;</code>
       */
      public Builder setNeutral(boolean value) {
        bitField0_ |= 0x00000020;
        neutral_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bool neutral = 6;</code>
       */
      public Builder clearNeutral() {
        bitField0_ = (bitField0_ & ~0x00000020);
        neutral_ = false;
        onChanged();
        return this;
      }

      // required .messages.TilePosition startLocation = 7;
      private org.bwapi.proxy.messages.BasicTypes.TilePosition startLocation_ = org.bwapi.proxy.messages.BasicTypes.TilePosition.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.BasicTypes.TilePosition, org.bwapi.proxy.messages.BasicTypes.TilePosition.Builder, org.bwapi.proxy.messages.BasicTypes.TilePositionOrBuilder> startLocationBuilder_;
      /**
       * <code>required .messages.TilePosition startLocation = 7;</code>
       */
      public boolean hasStartLocation() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>required .messages.TilePosition startLocation = 7;</code>
       */
      public org.bwapi.proxy.messages.BasicTypes.TilePosition getStartLocation() {
        if (startLocationBuilder_ == null) {
          return startLocation_;
        } else {
          return startLocationBuilder_.getMessage();
        }
      }
      /**
       * <code>required .messages.TilePosition startLocation = 7;</code>
       */
      public Builder setStartLocation(org.bwapi.proxy.messages.BasicTypes.TilePosition value) {
        if (startLocationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          startLocation_ = value;
          onChanged();
        } else {
          startLocationBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>required .messages.TilePosition startLocation = 7;</code>
       */
      public Builder setStartLocation(
          org.bwapi.proxy.messages.BasicTypes.TilePosition.Builder builderForValue) {
        if (startLocationBuilder_ == null) {
          startLocation_ = builderForValue.build();
          onChanged();
        } else {
          startLocationBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>required .messages.TilePosition startLocation = 7;</code>
       */
      public Builder mergeStartLocation(org.bwapi.proxy.messages.BasicTypes.TilePosition value) {
        if (startLocationBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              startLocation_ != org.bwapi.proxy.messages.BasicTypes.TilePosition.getDefaultInstance()) {
            startLocation_ =
              org.bwapi.proxy.messages.BasicTypes.TilePosition.newBuilder(startLocation_).mergeFrom(value).buildPartial();
          } else {
            startLocation_ = value;
          }
          onChanged();
        } else {
          startLocationBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>required .messages.TilePosition startLocation = 7;</code>
       */
      public Builder clearStartLocation() {
        if (startLocationBuilder_ == null) {
          startLocation_ = org.bwapi.proxy.messages.BasicTypes.TilePosition.getDefaultInstance();
          onChanged();
        } else {
          startLocationBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       * <code>required .messages.TilePosition startLocation = 7;</code>
       */
      public org.bwapi.proxy.messages.BasicTypes.TilePosition.Builder getStartLocationBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getStartLocationFieldBuilder().getBuilder();
      }
      /**
       * <code>required .messages.TilePosition startLocation = 7;</code>
       */
      public org.bwapi.proxy.messages.BasicTypes.TilePositionOrBuilder getStartLocationOrBuilder() {
        if (startLocationBuilder_ != null) {
          return startLocationBuilder_.getMessageOrBuilder();
        } else {
          return startLocation_;
        }
      }
      /**
       * <code>required .messages.TilePosition startLocation = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.BasicTypes.TilePosition, org.bwapi.proxy.messages.BasicTypes.TilePosition.Builder, org.bwapi.proxy.messages.BasicTypes.TilePositionOrBuilder> 
          getStartLocationFieldBuilder() {
        if (startLocationBuilder_ == null) {
          startLocationBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.bwapi.proxy.messages.BasicTypes.TilePosition, org.bwapi.proxy.messages.BasicTypes.TilePosition.Builder, org.bwapi.proxy.messages.BasicTypes.TilePositionOrBuilder>(
                  startLocation_,
                  getParentForChildren(),
                  isClean());
          startLocation_ = null;
        }
        return startLocationBuilder_;
      }

      // required bool leftGame = 8;
      private boolean leftGame_ ;
      /**
       * <code>required bool leftGame = 8;</code>
       */
      public boolean hasLeftGame() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>required bool leftGame = 8;</code>
       */
      public boolean getLeftGame() {
        return leftGame_;
      }
      /**
       * <code>required bool leftGame = 8;</code>
       */
      public Builder setLeftGame(boolean value) {
        bitField0_ |= 0x00000080;
        leftGame_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bool leftGame = 8;</code>
       */
      public Builder clearLeftGame() {
        bitField0_ = (bitField0_ & ~0x00000080);
        leftGame_ = false;
        onChanged();
        return this;
      }

      // required int32 minerals = 9;
      private int minerals_ ;
      /**
       * <code>required int32 minerals = 9;</code>
       */
      public boolean hasMinerals() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>required int32 minerals = 9;</code>
       */
      public int getMinerals() {
        return minerals_;
      }
      /**
       * <code>required int32 minerals = 9;</code>
       */
      public Builder setMinerals(int value) {
        bitField0_ |= 0x00000100;
        minerals_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 minerals = 9;</code>
       */
      public Builder clearMinerals() {
        bitField0_ = (bitField0_ & ~0x00000100);
        minerals_ = 0;
        onChanged();
        return this;
      }

      // required int32 gas = 10;
      private int gas_ ;
      /**
       * <code>required int32 gas = 10;</code>
       */
      public boolean hasGas() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>required int32 gas = 10;</code>
       */
      public int getGas() {
        return gas_;
      }
      /**
       * <code>required int32 gas = 10;</code>
       */
      public Builder setGas(int value) {
        bitField0_ |= 0x00000200;
        gas_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 gas = 10;</code>
       */
      public Builder clearGas() {
        bitField0_ = (bitField0_ & ~0x00000200);
        gas_ = 0;
        onChanged();
        return this;
      }

      // required int32 cumulativeMinerals = 11;
      private int cumulativeMinerals_ ;
      /**
       * <code>required int32 cumulativeMinerals = 11;</code>
       */
      public boolean hasCumulativeMinerals() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>required int32 cumulativeMinerals = 11;</code>
       */
      public int getCumulativeMinerals() {
        return cumulativeMinerals_;
      }
      /**
       * <code>required int32 cumulativeMinerals = 11;</code>
       */
      public Builder setCumulativeMinerals(int value) {
        bitField0_ |= 0x00000400;
        cumulativeMinerals_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 cumulativeMinerals = 11;</code>
       */
      public Builder clearCumulativeMinerals() {
        bitField0_ = (bitField0_ & ~0x00000400);
        cumulativeMinerals_ = 0;
        onChanged();
        return this;
      }

      // required int32 cumulativeGas = 12;
      private int cumulativeGas_ ;
      /**
       * <code>required int32 cumulativeGas = 12;</code>
       */
      public boolean hasCumulativeGas() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>required int32 cumulativeGas = 12;</code>
       */
      public int getCumulativeGas() {
        return cumulativeGas_;
      }
      /**
       * <code>required int32 cumulativeGas = 12;</code>
       */
      public Builder setCumulativeGas(int value) {
        bitField0_ |= 0x00000800;
        cumulativeGas_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 cumulativeGas = 12;</code>
       */
      public Builder clearCumulativeGas() {
        bitField0_ = (bitField0_ & ~0x00000800);
        cumulativeGas_ = 0;
        onChanged();
        return this;
      }

      // required int32 supplyTotal = 13;
      private int supplyTotal_ ;
      /**
       * <code>required int32 supplyTotal = 13;</code>
       */
      public boolean hasSupplyTotal() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>required int32 supplyTotal = 13;</code>
       */
      public int getSupplyTotal() {
        return supplyTotal_;
      }
      /**
       * <code>required int32 supplyTotal = 13;</code>
       */
      public Builder setSupplyTotal(int value) {
        bitField0_ |= 0x00001000;
        supplyTotal_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 supplyTotal = 13;</code>
       */
      public Builder clearSupplyTotal() {
        bitField0_ = (bitField0_ & ~0x00001000);
        supplyTotal_ = 0;
        onChanged();
        return this;
      }

      // required int32 supplyUsed = 14;
      private int supplyUsed_ ;
      /**
       * <code>required int32 supplyUsed = 14;</code>
       */
      public boolean hasSupplyUsed() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       * <code>required int32 supplyUsed = 14;</code>
       */
      public int getSupplyUsed() {
        return supplyUsed_;
      }
      /**
       * <code>required int32 supplyUsed = 14;</code>
       */
      public Builder setSupplyUsed(int value) {
        bitField0_ |= 0x00002000;
        supplyUsed_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 supplyUsed = 14;</code>
       */
      public Builder clearSupplyUsed() {
        bitField0_ = (bitField0_ & ~0x00002000);
        supplyUsed_ = 0;
        onChanged();
        return this;
      }

      // repeated .messages.UnitTypeIntPair allUnitCount = 15;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> allUnitCount_ =
        java.util.Collections.emptyList();
      private void ensureAllUnitCountIsMutable() {
        if (!((bitField0_ & 0x00004000) == 0x00004000)) {
          allUnitCount_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair>(allUnitCount_);
          bitField0_ |= 0x00004000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> allUnitCountBuilder_;

      /**
       * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> getAllUnitCountList() {
        if (allUnitCountBuilder_ == null) {
          return java.util.Collections.unmodifiableList(allUnitCount_);
        } else {
          return allUnitCountBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
       */
      public int getAllUnitCountCount() {
        if (allUnitCountBuilder_ == null) {
          return allUnitCount_.size();
        } else {
          return allUnitCountBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair getAllUnitCount(int index) {
        if (allUnitCountBuilder_ == null) {
          return allUnitCount_.get(index);
        } else {
          return allUnitCountBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
       */
      public Builder setAllUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair value) {
        if (allUnitCountBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAllUnitCountIsMutable();
          allUnitCount_.set(index, value);
          onChanged();
        } else {
          allUnitCountBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
       */
      public Builder setAllUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder builderForValue) {
        if (allUnitCountBuilder_ == null) {
          ensureAllUnitCountIsMutable();
          allUnitCount_.set(index, builderForValue.build());
          onChanged();
        } else {
          allUnitCountBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
       */
      public Builder addAllUnitCount(org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair value) {
        if (allUnitCountBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAllUnitCountIsMutable();
          allUnitCount_.add(value);
          onChanged();
        } else {
          allUnitCountBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
       */
      public Builder addAllUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair value) {
        if (allUnitCountBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAllUnitCountIsMutable();
          allUnitCount_.add(index, value);
          onChanged();
        } else {
          allUnitCountBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
       */
      public Builder addAllUnitCount(
          org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder builderForValue) {
        if (allUnitCountBuilder_ == null) {
          ensureAllUnitCountIsMutable();
          allUnitCount_.add(builderForValue.build());
          onChanged();
        } else {
          allUnitCountBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
       */
      public Builder addAllUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder builderForValue) {
        if (allUnitCountBuilder_ == null) {
          ensureAllUnitCountIsMutable();
          allUnitCount_.add(index, builderForValue.build());
          onChanged();
        } else {
          allUnitCountBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
       */
      public Builder addAllAllUnitCount(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> values) {
        if (allUnitCountBuilder_ == null) {
          ensureAllUnitCountIsMutable();
          super.addAll(values, allUnitCount_);
          onChanged();
        } else {
          allUnitCountBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
       */
      public Builder clearAllUnitCount() {
        if (allUnitCountBuilder_ == null) {
          allUnitCount_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00004000);
          onChanged();
        } else {
          allUnitCountBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
       */
      public Builder removeAllUnitCount(int index) {
        if (allUnitCountBuilder_ == null) {
          ensureAllUnitCountIsMutable();
          allUnitCount_.remove(index);
          onChanged();
        } else {
          allUnitCountBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder getAllUnitCountBuilder(
          int index) {
        return getAllUnitCountFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder getAllUnitCountOrBuilder(
          int index) {
        if (allUnitCountBuilder_ == null) {
          return allUnitCount_.get(index);  } else {
          return allUnitCountBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
           getAllUnitCountOrBuilderList() {
        if (allUnitCountBuilder_ != null) {
          return allUnitCountBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(allUnitCount_);
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder addAllUnitCountBuilder() {
        return getAllUnitCountFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder addAllUnitCountBuilder(
          int index) {
        return getAllUnitCountFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair allUnitCount = 15;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder> 
           getAllUnitCountBuilderList() {
        return getAllUnitCountFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
          getAllUnitCountFieldBuilder() {
        if (allUnitCountBuilder_ == null) {
          allUnitCountBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder>(
                  allUnitCount_,
                  ((bitField0_ & 0x00004000) == 0x00004000),
                  getParentForChildren(),
                  isClean());
          allUnitCount_ = null;
        }
        return allUnitCountBuilder_;
      }

      // repeated .messages.UnitTypeIntPair completedUnitCount = 16;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> completedUnitCount_ =
        java.util.Collections.emptyList();
      private void ensureCompletedUnitCountIsMutable() {
        if (!((bitField0_ & 0x00008000) == 0x00008000)) {
          completedUnitCount_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair>(completedUnitCount_);
          bitField0_ |= 0x00008000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> completedUnitCountBuilder_;

      /**
       * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> getCompletedUnitCountList() {
        if (completedUnitCountBuilder_ == null) {
          return java.util.Collections.unmodifiableList(completedUnitCount_);
        } else {
          return completedUnitCountBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
       */
      public int getCompletedUnitCountCount() {
        if (completedUnitCountBuilder_ == null) {
          return completedUnitCount_.size();
        } else {
          return completedUnitCountBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair getCompletedUnitCount(int index) {
        if (completedUnitCountBuilder_ == null) {
          return completedUnitCount_.get(index);
        } else {
          return completedUnitCountBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
       */
      public Builder setCompletedUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair value) {
        if (completedUnitCountBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCompletedUnitCountIsMutable();
          completedUnitCount_.set(index, value);
          onChanged();
        } else {
          completedUnitCountBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
       */
      public Builder setCompletedUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder builderForValue) {
        if (completedUnitCountBuilder_ == null) {
          ensureCompletedUnitCountIsMutable();
          completedUnitCount_.set(index, builderForValue.build());
          onChanged();
        } else {
          completedUnitCountBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
       */
      public Builder addCompletedUnitCount(org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair value) {
        if (completedUnitCountBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCompletedUnitCountIsMutable();
          completedUnitCount_.add(value);
          onChanged();
        } else {
          completedUnitCountBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
       */
      public Builder addCompletedUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair value) {
        if (completedUnitCountBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCompletedUnitCountIsMutable();
          completedUnitCount_.add(index, value);
          onChanged();
        } else {
          completedUnitCountBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
       */
      public Builder addCompletedUnitCount(
          org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder builderForValue) {
        if (completedUnitCountBuilder_ == null) {
          ensureCompletedUnitCountIsMutable();
          completedUnitCount_.add(builderForValue.build());
          onChanged();
        } else {
          completedUnitCountBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
       */
      public Builder addCompletedUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder builderForValue) {
        if (completedUnitCountBuilder_ == null) {
          ensureCompletedUnitCountIsMutable();
          completedUnitCount_.add(index, builderForValue.build());
          onChanged();
        } else {
          completedUnitCountBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
       */
      public Builder addAllCompletedUnitCount(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> values) {
        if (completedUnitCountBuilder_ == null) {
          ensureCompletedUnitCountIsMutable();
          super.addAll(values, completedUnitCount_);
          onChanged();
        } else {
          completedUnitCountBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
       */
      public Builder clearCompletedUnitCount() {
        if (completedUnitCountBuilder_ == null) {
          completedUnitCount_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00008000);
          onChanged();
        } else {
          completedUnitCountBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
       */
      public Builder removeCompletedUnitCount(int index) {
        if (completedUnitCountBuilder_ == null) {
          ensureCompletedUnitCountIsMutable();
          completedUnitCount_.remove(index);
          onChanged();
        } else {
          completedUnitCountBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder getCompletedUnitCountBuilder(
          int index) {
        return getCompletedUnitCountFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder getCompletedUnitCountOrBuilder(
          int index) {
        if (completedUnitCountBuilder_ == null) {
          return completedUnitCount_.get(index);  } else {
          return completedUnitCountBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
           getCompletedUnitCountOrBuilderList() {
        if (completedUnitCountBuilder_ != null) {
          return completedUnitCountBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(completedUnitCount_);
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder addCompletedUnitCountBuilder() {
        return getCompletedUnitCountFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder addCompletedUnitCountBuilder(
          int index) {
        return getCompletedUnitCountFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair completedUnitCount = 16;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder> 
           getCompletedUnitCountBuilderList() {
        return getCompletedUnitCountFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
          getCompletedUnitCountFieldBuilder() {
        if (completedUnitCountBuilder_ == null) {
          completedUnitCountBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder>(
                  completedUnitCount_,
                  ((bitField0_ & 0x00008000) == 0x00008000),
                  getParentForChildren(),
                  isClean());
          completedUnitCount_ = null;
        }
        return completedUnitCountBuilder_;
      }

      // repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> incompleteUnitCount_ =
        java.util.Collections.emptyList();
      private void ensureIncompleteUnitCountIsMutable() {
        if (!((bitField0_ & 0x00010000) == 0x00010000)) {
          incompleteUnitCount_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair>(incompleteUnitCount_);
          bitField0_ |= 0x00010000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> incompleteUnitCountBuilder_;

      /**
       * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> getIncompleteUnitCountList() {
        if (incompleteUnitCountBuilder_ == null) {
          return java.util.Collections.unmodifiableList(incompleteUnitCount_);
        } else {
          return incompleteUnitCountBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
       */
      public int getIncompleteUnitCountCount() {
        if (incompleteUnitCountBuilder_ == null) {
          return incompleteUnitCount_.size();
        } else {
          return incompleteUnitCountBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair getIncompleteUnitCount(int index) {
        if (incompleteUnitCountBuilder_ == null) {
          return incompleteUnitCount_.get(index);
        } else {
          return incompleteUnitCountBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
       */
      public Builder setIncompleteUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair value) {
        if (incompleteUnitCountBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIncompleteUnitCountIsMutable();
          incompleteUnitCount_.set(index, value);
          onChanged();
        } else {
          incompleteUnitCountBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
       */
      public Builder setIncompleteUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder builderForValue) {
        if (incompleteUnitCountBuilder_ == null) {
          ensureIncompleteUnitCountIsMutable();
          incompleteUnitCount_.set(index, builderForValue.build());
          onChanged();
        } else {
          incompleteUnitCountBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
       */
      public Builder addIncompleteUnitCount(org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair value) {
        if (incompleteUnitCountBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIncompleteUnitCountIsMutable();
          incompleteUnitCount_.add(value);
          onChanged();
        } else {
          incompleteUnitCountBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
       */
      public Builder addIncompleteUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair value) {
        if (incompleteUnitCountBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIncompleteUnitCountIsMutable();
          incompleteUnitCount_.add(index, value);
          onChanged();
        } else {
          incompleteUnitCountBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
       */
      public Builder addIncompleteUnitCount(
          org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder builderForValue) {
        if (incompleteUnitCountBuilder_ == null) {
          ensureIncompleteUnitCountIsMutable();
          incompleteUnitCount_.add(builderForValue.build());
          onChanged();
        } else {
          incompleteUnitCountBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
       */
      public Builder addIncompleteUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder builderForValue) {
        if (incompleteUnitCountBuilder_ == null) {
          ensureIncompleteUnitCountIsMutable();
          incompleteUnitCount_.add(index, builderForValue.build());
          onChanged();
        } else {
          incompleteUnitCountBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
       */
      public Builder addAllIncompleteUnitCount(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> values) {
        if (incompleteUnitCountBuilder_ == null) {
          ensureIncompleteUnitCountIsMutable();
          super.addAll(values, incompleteUnitCount_);
          onChanged();
        } else {
          incompleteUnitCountBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
       */
      public Builder clearIncompleteUnitCount() {
        if (incompleteUnitCountBuilder_ == null) {
          incompleteUnitCount_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00010000);
          onChanged();
        } else {
          incompleteUnitCountBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
       */
      public Builder removeIncompleteUnitCount(int index) {
        if (incompleteUnitCountBuilder_ == null) {
          ensureIncompleteUnitCountIsMutable();
          incompleteUnitCount_.remove(index);
          onChanged();
        } else {
          incompleteUnitCountBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder getIncompleteUnitCountBuilder(
          int index) {
        return getIncompleteUnitCountFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder getIncompleteUnitCountOrBuilder(
          int index) {
        if (incompleteUnitCountBuilder_ == null) {
          return incompleteUnitCount_.get(index);  } else {
          return incompleteUnitCountBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
           getIncompleteUnitCountOrBuilderList() {
        if (incompleteUnitCountBuilder_ != null) {
          return incompleteUnitCountBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(incompleteUnitCount_);
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder addIncompleteUnitCountBuilder() {
        return getIncompleteUnitCountFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder addIncompleteUnitCountBuilder(
          int index) {
        return getIncompleteUnitCountFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair incompleteUnitCount = 17;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder> 
           getIncompleteUnitCountBuilderList() {
        return getIncompleteUnitCountFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
          getIncompleteUnitCountFieldBuilder() {
        if (incompleteUnitCountBuilder_ == null) {
          incompleteUnitCountBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder>(
                  incompleteUnitCount_,
                  ((bitField0_ & 0x00010000) == 0x00010000),
                  getParentForChildren(),
                  isClean());
          incompleteUnitCount_ = null;
        }
        return incompleteUnitCountBuilder_;
      }

      // repeated .messages.UnitTypeIntPair deadUnitCount = 18;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> deadUnitCount_ =
        java.util.Collections.emptyList();
      private void ensureDeadUnitCountIsMutable() {
        if (!((bitField0_ & 0x00020000) == 0x00020000)) {
          deadUnitCount_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair>(deadUnitCount_);
          bitField0_ |= 0x00020000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> deadUnitCountBuilder_;

      /**
       * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> getDeadUnitCountList() {
        if (deadUnitCountBuilder_ == null) {
          return java.util.Collections.unmodifiableList(deadUnitCount_);
        } else {
          return deadUnitCountBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
       */
      public int getDeadUnitCountCount() {
        if (deadUnitCountBuilder_ == null) {
          return deadUnitCount_.size();
        } else {
          return deadUnitCountBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair getDeadUnitCount(int index) {
        if (deadUnitCountBuilder_ == null) {
          return deadUnitCount_.get(index);
        } else {
          return deadUnitCountBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
       */
      public Builder setDeadUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair value) {
        if (deadUnitCountBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDeadUnitCountIsMutable();
          deadUnitCount_.set(index, value);
          onChanged();
        } else {
          deadUnitCountBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
       */
      public Builder setDeadUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder builderForValue) {
        if (deadUnitCountBuilder_ == null) {
          ensureDeadUnitCountIsMutable();
          deadUnitCount_.set(index, builderForValue.build());
          onChanged();
        } else {
          deadUnitCountBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
       */
      public Builder addDeadUnitCount(org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair value) {
        if (deadUnitCountBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDeadUnitCountIsMutable();
          deadUnitCount_.add(value);
          onChanged();
        } else {
          deadUnitCountBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
       */
      public Builder addDeadUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair value) {
        if (deadUnitCountBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDeadUnitCountIsMutable();
          deadUnitCount_.add(index, value);
          onChanged();
        } else {
          deadUnitCountBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
       */
      public Builder addDeadUnitCount(
          org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder builderForValue) {
        if (deadUnitCountBuilder_ == null) {
          ensureDeadUnitCountIsMutable();
          deadUnitCount_.add(builderForValue.build());
          onChanged();
        } else {
          deadUnitCountBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
       */
      public Builder addDeadUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder builderForValue) {
        if (deadUnitCountBuilder_ == null) {
          ensureDeadUnitCountIsMutable();
          deadUnitCount_.add(index, builderForValue.build());
          onChanged();
        } else {
          deadUnitCountBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
       */
      public Builder addAllDeadUnitCount(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> values) {
        if (deadUnitCountBuilder_ == null) {
          ensureDeadUnitCountIsMutable();
          super.addAll(values, deadUnitCount_);
          onChanged();
        } else {
          deadUnitCountBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
       */
      public Builder clearDeadUnitCount() {
        if (deadUnitCountBuilder_ == null) {
          deadUnitCount_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00020000);
          onChanged();
        } else {
          deadUnitCountBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
       */
      public Builder removeDeadUnitCount(int index) {
        if (deadUnitCountBuilder_ == null) {
          ensureDeadUnitCountIsMutable();
          deadUnitCount_.remove(index);
          onChanged();
        } else {
          deadUnitCountBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder getDeadUnitCountBuilder(
          int index) {
        return getDeadUnitCountFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder getDeadUnitCountOrBuilder(
          int index) {
        if (deadUnitCountBuilder_ == null) {
          return deadUnitCount_.get(index);  } else {
          return deadUnitCountBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
           getDeadUnitCountOrBuilderList() {
        if (deadUnitCountBuilder_ != null) {
          return deadUnitCountBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(deadUnitCount_);
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder addDeadUnitCountBuilder() {
        return getDeadUnitCountFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder addDeadUnitCountBuilder(
          int index) {
        return getDeadUnitCountFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair deadUnitCount = 18;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder> 
           getDeadUnitCountBuilderList() {
        return getDeadUnitCountFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
          getDeadUnitCountFieldBuilder() {
        if (deadUnitCountBuilder_ == null) {
          deadUnitCountBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder>(
                  deadUnitCount_,
                  ((bitField0_ & 0x00020000) == 0x00020000),
                  getParentForChildren(),
                  isClean());
          deadUnitCount_ = null;
        }
        return deadUnitCountBuilder_;
      }

      // repeated .messages.UnitTypeIntPair killedUnitCount = 19;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> killedUnitCount_ =
        java.util.Collections.emptyList();
      private void ensureKilledUnitCountIsMutable() {
        if (!((bitField0_ & 0x00040000) == 0x00040000)) {
          killedUnitCount_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair>(killedUnitCount_);
          bitField0_ |= 0x00040000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> killedUnitCountBuilder_;

      /**
       * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> getKilledUnitCountList() {
        if (killedUnitCountBuilder_ == null) {
          return java.util.Collections.unmodifiableList(killedUnitCount_);
        } else {
          return killedUnitCountBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
       */
      public int getKilledUnitCountCount() {
        if (killedUnitCountBuilder_ == null) {
          return killedUnitCount_.size();
        } else {
          return killedUnitCountBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair getKilledUnitCount(int index) {
        if (killedUnitCountBuilder_ == null) {
          return killedUnitCount_.get(index);
        } else {
          return killedUnitCountBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
       */
      public Builder setKilledUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair value) {
        if (killedUnitCountBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureKilledUnitCountIsMutable();
          killedUnitCount_.set(index, value);
          onChanged();
        } else {
          killedUnitCountBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
       */
      public Builder setKilledUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder builderForValue) {
        if (killedUnitCountBuilder_ == null) {
          ensureKilledUnitCountIsMutable();
          killedUnitCount_.set(index, builderForValue.build());
          onChanged();
        } else {
          killedUnitCountBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
       */
      public Builder addKilledUnitCount(org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair value) {
        if (killedUnitCountBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureKilledUnitCountIsMutable();
          killedUnitCount_.add(value);
          onChanged();
        } else {
          killedUnitCountBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
       */
      public Builder addKilledUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair value) {
        if (killedUnitCountBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureKilledUnitCountIsMutable();
          killedUnitCount_.add(index, value);
          onChanged();
        } else {
          killedUnitCountBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
       */
      public Builder addKilledUnitCount(
          org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder builderForValue) {
        if (killedUnitCountBuilder_ == null) {
          ensureKilledUnitCountIsMutable();
          killedUnitCount_.add(builderForValue.build());
          onChanged();
        } else {
          killedUnitCountBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
       */
      public Builder addKilledUnitCount(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder builderForValue) {
        if (killedUnitCountBuilder_ == null) {
          ensureKilledUnitCountIsMutable();
          killedUnitCount_.add(index, builderForValue.build());
          onChanged();
        } else {
          killedUnitCountBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
       */
      public Builder addAllKilledUnitCount(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair> values) {
        if (killedUnitCountBuilder_ == null) {
          ensureKilledUnitCountIsMutable();
          super.addAll(values, killedUnitCount_);
          onChanged();
        } else {
          killedUnitCountBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
       */
      public Builder clearKilledUnitCount() {
        if (killedUnitCountBuilder_ == null) {
          killedUnitCount_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00040000);
          onChanged();
        } else {
          killedUnitCountBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
       */
      public Builder removeKilledUnitCount(int index) {
        if (killedUnitCountBuilder_ == null) {
          ensureKilledUnitCountIsMutable();
          killedUnitCount_.remove(index);
          onChanged();
        } else {
          killedUnitCountBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder getKilledUnitCountBuilder(
          int index) {
        return getKilledUnitCountFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder getKilledUnitCountOrBuilder(
          int index) {
        if (killedUnitCountBuilder_ == null) {
          return killedUnitCount_.get(index);  } else {
          return killedUnitCountBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
           getKilledUnitCountOrBuilderList() {
        if (killedUnitCountBuilder_ != null) {
          return killedUnitCountBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(killedUnitCount_);
        }
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder addKilledUnitCountBuilder() {
        return getKilledUnitCountFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder addKilledUnitCountBuilder(
          int index) {
        return getKilledUnitCountFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitTypeIntPair killedUnitCount = 19;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder> 
           getKilledUnitCountBuilderList() {
        return getKilledUnitCountFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder> 
          getKilledUnitCountFieldBuilder() {
        if (killedUnitCountBuilder_ == null) {
          killedUnitCountBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPair.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeIntPairOrBuilder>(
                  killedUnitCount_,
                  ((bitField0_ & 0x00040000) == 0x00040000),
                  getParentForChildren(),
                  isClean());
          killedUnitCount_ = null;
        }
        return killedUnitCountBuilder_;
      }

      // repeated .messages.UpgradeLevel upgradeLevels = 20;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.UpgradeLevel> upgradeLevels_ =
        java.util.Collections.emptyList();
      private void ensureUpgradeLevelsIsMutable() {
        if (!((bitField0_ & 0x00080000) == 0x00080000)) {
          upgradeLevels_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UpgradeLevel>(upgradeLevels_);
          bitField0_ |= 0x00080000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UpgradeLevel, org.bwapi.proxy.messages.GameMessages.UpgradeLevel.Builder, org.bwapi.proxy.messages.GameMessages.UpgradeLevelOrBuilder> upgradeLevelsBuilder_;

      /**
       * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UpgradeLevel> getUpgradeLevelsList() {
        if (upgradeLevelsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(upgradeLevels_);
        } else {
          return upgradeLevelsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
       */
      public int getUpgradeLevelsCount() {
        if (upgradeLevelsBuilder_ == null) {
          return upgradeLevels_.size();
        } else {
          return upgradeLevelsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeLevel getUpgradeLevels(int index) {
        if (upgradeLevelsBuilder_ == null) {
          return upgradeLevels_.get(index);
        } else {
          return upgradeLevelsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
       */
      public Builder setUpgradeLevels(
          int index, org.bwapi.proxy.messages.GameMessages.UpgradeLevel value) {
        if (upgradeLevelsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUpgradeLevelsIsMutable();
          upgradeLevels_.set(index, value);
          onChanged();
        } else {
          upgradeLevelsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
       */
      public Builder setUpgradeLevels(
          int index, org.bwapi.proxy.messages.GameMessages.UpgradeLevel.Builder builderForValue) {
        if (upgradeLevelsBuilder_ == null) {
          ensureUpgradeLevelsIsMutable();
          upgradeLevels_.set(index, builderForValue.build());
          onChanged();
        } else {
          upgradeLevelsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
       */
      public Builder addUpgradeLevels(org.bwapi.proxy.messages.GameMessages.UpgradeLevel value) {
        if (upgradeLevelsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUpgradeLevelsIsMutable();
          upgradeLevels_.add(value);
          onChanged();
        } else {
          upgradeLevelsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
       */
      public Builder addUpgradeLevels(
          int index, org.bwapi.proxy.messages.GameMessages.UpgradeLevel value) {
        if (upgradeLevelsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUpgradeLevelsIsMutable();
          upgradeLevels_.add(index, value);
          onChanged();
        } else {
          upgradeLevelsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
       */
      public Builder addUpgradeLevels(
          org.bwapi.proxy.messages.GameMessages.UpgradeLevel.Builder builderForValue) {
        if (upgradeLevelsBuilder_ == null) {
          ensureUpgradeLevelsIsMutable();
          upgradeLevels_.add(builderForValue.build());
          onChanged();
        } else {
          upgradeLevelsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
       */
      public Builder addUpgradeLevels(
          int index, org.bwapi.proxy.messages.GameMessages.UpgradeLevel.Builder builderForValue) {
        if (upgradeLevelsBuilder_ == null) {
          ensureUpgradeLevelsIsMutable();
          upgradeLevels_.add(index, builderForValue.build());
          onChanged();
        } else {
          upgradeLevelsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
       */
      public Builder addAllUpgradeLevels(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.UpgradeLevel> values) {
        if (upgradeLevelsBuilder_ == null) {
          ensureUpgradeLevelsIsMutable();
          super.addAll(values, upgradeLevels_);
          onChanged();
        } else {
          upgradeLevelsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
       */
      public Builder clearUpgradeLevels() {
        if (upgradeLevelsBuilder_ == null) {
          upgradeLevels_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00080000);
          onChanged();
        } else {
          upgradeLevelsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
       */
      public Builder removeUpgradeLevels(int index) {
        if (upgradeLevelsBuilder_ == null) {
          ensureUpgradeLevelsIsMutable();
          upgradeLevels_.remove(index);
          onChanged();
        } else {
          upgradeLevelsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeLevel.Builder getUpgradeLevelsBuilder(
          int index) {
        return getUpgradeLevelsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeLevelOrBuilder getUpgradeLevelsOrBuilder(
          int index) {
        if (upgradeLevelsBuilder_ == null) {
          return upgradeLevels_.get(index);  } else {
          return upgradeLevelsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UpgradeLevelOrBuilder> 
           getUpgradeLevelsOrBuilderList() {
        if (upgradeLevelsBuilder_ != null) {
          return upgradeLevelsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(upgradeLevels_);
        }
      }
      /**
       * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeLevel.Builder addUpgradeLevelsBuilder() {
        return getUpgradeLevelsFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.UpgradeLevel.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeLevel.Builder addUpgradeLevelsBuilder(
          int index) {
        return getUpgradeLevelsFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.UpgradeLevel.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UpgradeLevel upgradeLevels = 20;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UpgradeLevel.Builder> 
           getUpgradeLevelsBuilderList() {
        return getUpgradeLevelsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UpgradeLevel, org.bwapi.proxy.messages.GameMessages.UpgradeLevel.Builder, org.bwapi.proxy.messages.GameMessages.UpgradeLevelOrBuilder> 
          getUpgradeLevelsFieldBuilder() {
        if (upgradeLevelsBuilder_ == null) {
          upgradeLevelsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UpgradeLevel, org.bwapi.proxy.messages.GameMessages.UpgradeLevel.Builder, org.bwapi.proxy.messages.GameMessages.UpgradeLevelOrBuilder>(
                  upgradeLevels_,
                  ((bitField0_ & 0x00080000) == 0x00080000),
                  getParentForChildren(),
                  isClean());
          upgradeLevels_ = null;
        }
        return upgradeLevelsBuilder_;
      }

      // repeated .messages.TechType researchedTechs = 21;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.TechType> researchedTechs_ =
        java.util.Collections.emptyList();
      private void ensureResearchedTechsIsMutable() {
        if (!((bitField0_ & 0x00100000) == 0x00100000)) {
          researchedTechs_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.TechType>(researchedTechs_);
          bitField0_ |= 0x00100000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.TechType, org.bwapi.proxy.messages.GameMessages.TechType.Builder, org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder> researchedTechsBuilder_;

      /**
       * <code>repeated .messages.TechType researchedTechs = 21;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.TechType> getResearchedTechsList() {
        if (researchedTechsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(researchedTechs_);
        } else {
          return researchedTechsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.TechType researchedTechs = 21;</code>
       */
      public int getResearchedTechsCount() {
        if (researchedTechsBuilder_ == null) {
          return researchedTechs_.size();
        } else {
          return researchedTechsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.TechType researchedTechs = 21;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.TechType getResearchedTechs(int index) {
        if (researchedTechsBuilder_ == null) {
          return researchedTechs_.get(index);
        } else {
          return researchedTechsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.TechType researchedTechs = 21;</code>
       */
      public Builder setResearchedTechs(
          int index, org.bwapi.proxy.messages.GameMessages.TechType value) {
        if (researchedTechsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureResearchedTechsIsMutable();
          researchedTechs_.set(index, value);
          onChanged();
        } else {
          researchedTechsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechType researchedTechs = 21;</code>
       */
      public Builder setResearchedTechs(
          int index, org.bwapi.proxy.messages.GameMessages.TechType.Builder builderForValue) {
        if (researchedTechsBuilder_ == null) {
          ensureResearchedTechsIsMutable();
          researchedTechs_.set(index, builderForValue.build());
          onChanged();
        } else {
          researchedTechsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechType researchedTechs = 21;</code>
       */
      public Builder addResearchedTechs(org.bwapi.proxy.messages.GameMessages.TechType value) {
        if (researchedTechsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureResearchedTechsIsMutable();
          researchedTechs_.add(value);
          onChanged();
        } else {
          researchedTechsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechType researchedTechs = 21;</code>
       */
      public Builder addResearchedTechs(
          int index, org.bwapi.proxy.messages.GameMessages.TechType value) {
        if (researchedTechsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureResearchedTechsIsMutable();
          researchedTechs_.add(index, value);
          onChanged();
        } else {
          researchedTechsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechType researchedTechs = 21;</code>
       */
      public Builder addResearchedTechs(
          org.bwapi.proxy.messages.GameMessages.TechType.Builder builderForValue) {
        if (researchedTechsBuilder_ == null) {
          ensureResearchedTechsIsMutable();
          researchedTechs_.add(builderForValue.build());
          onChanged();
        } else {
          researchedTechsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechType researchedTechs = 21;</code>
       */
      public Builder addResearchedTechs(
          int index, org.bwapi.proxy.messages.GameMessages.TechType.Builder builderForValue) {
        if (researchedTechsBuilder_ == null) {
          ensureResearchedTechsIsMutable();
          researchedTechs_.add(index, builderForValue.build());
          onChanged();
        } else {
          researchedTechsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechType researchedTechs = 21;</code>
       */
      public Builder addAllResearchedTechs(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.TechType> values) {
        if (researchedTechsBuilder_ == null) {
          ensureResearchedTechsIsMutable();
          super.addAll(values, researchedTechs_);
          onChanged();
        } else {
          researchedTechsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechType researchedTechs = 21;</code>
       */
      public Builder clearResearchedTechs() {
        if (researchedTechsBuilder_ == null) {
          researchedTechs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00100000);
          onChanged();
        } else {
          researchedTechsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechType researchedTechs = 21;</code>
       */
      public Builder removeResearchedTechs(int index) {
        if (researchedTechsBuilder_ == null) {
          ensureResearchedTechsIsMutable();
          researchedTechs_.remove(index);
          onChanged();
        } else {
          researchedTechsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechType researchedTechs = 21;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.TechType.Builder getResearchedTechsBuilder(
          int index) {
        return getResearchedTechsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.TechType researchedTechs = 21;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder getResearchedTechsOrBuilder(
          int index) {
        if (researchedTechsBuilder_ == null) {
          return researchedTechs_.get(index);  } else {
          return researchedTechsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.TechType researchedTechs = 21;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder> 
           getResearchedTechsOrBuilderList() {
        if (researchedTechsBuilder_ != null) {
          return researchedTechsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(researchedTechs_);
        }
      }
      /**
       * <code>repeated .messages.TechType researchedTechs = 21;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.TechType.Builder addResearchedTechsBuilder() {
        return getResearchedTechsFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.TechType.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.TechType researchedTechs = 21;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.TechType.Builder addResearchedTechsBuilder(
          int index) {
        return getResearchedTechsFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.TechType.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.TechType researchedTechs = 21;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.TechType.Builder> 
           getResearchedTechsBuilderList() {
        return getResearchedTechsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.TechType, org.bwapi.proxy.messages.GameMessages.TechType.Builder, org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder> 
          getResearchedTechsFieldBuilder() {
        if (researchedTechsBuilder_ == null) {
          researchedTechsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.TechType, org.bwapi.proxy.messages.GameMessages.TechType.Builder, org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder>(
                  researchedTechs_,
                  ((bitField0_ & 0x00100000) == 0x00100000),
                  getParentForChildren(),
                  isClean());
          researchedTechs_ = null;
        }
        return researchedTechsBuilder_;
      }

      // repeated .messages.TechType researching = 22;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.TechType> researching_ =
        java.util.Collections.emptyList();
      private void ensureResearchingIsMutable() {
        if (!((bitField0_ & 0x00200000) == 0x00200000)) {
          researching_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.TechType>(researching_);
          bitField0_ |= 0x00200000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.TechType, org.bwapi.proxy.messages.GameMessages.TechType.Builder, org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder> researchingBuilder_;

      /**
       * <code>repeated .messages.TechType researching = 22;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.TechType> getResearchingList() {
        if (researchingBuilder_ == null) {
          return java.util.Collections.unmodifiableList(researching_);
        } else {
          return researchingBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.TechType researching = 22;</code>
       */
      public int getResearchingCount() {
        if (researchingBuilder_ == null) {
          return researching_.size();
        } else {
          return researchingBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.TechType researching = 22;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.TechType getResearching(int index) {
        if (researchingBuilder_ == null) {
          return researching_.get(index);
        } else {
          return researchingBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.TechType researching = 22;</code>
       */
      public Builder setResearching(
          int index, org.bwapi.proxy.messages.GameMessages.TechType value) {
        if (researchingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureResearchingIsMutable();
          researching_.set(index, value);
          onChanged();
        } else {
          researchingBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechType researching = 22;</code>
       */
      public Builder setResearching(
          int index, org.bwapi.proxy.messages.GameMessages.TechType.Builder builderForValue) {
        if (researchingBuilder_ == null) {
          ensureResearchingIsMutable();
          researching_.set(index, builderForValue.build());
          onChanged();
        } else {
          researchingBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechType researching = 22;</code>
       */
      public Builder addResearching(org.bwapi.proxy.messages.GameMessages.TechType value) {
        if (researchingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureResearchingIsMutable();
          researching_.add(value);
          onChanged();
        } else {
          researchingBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechType researching = 22;</code>
       */
      public Builder addResearching(
          int index, org.bwapi.proxy.messages.GameMessages.TechType value) {
        if (researchingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureResearchingIsMutable();
          researching_.add(index, value);
          onChanged();
        } else {
          researchingBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechType researching = 22;</code>
       */
      public Builder addResearching(
          org.bwapi.proxy.messages.GameMessages.TechType.Builder builderForValue) {
        if (researchingBuilder_ == null) {
          ensureResearchingIsMutable();
          researching_.add(builderForValue.build());
          onChanged();
        } else {
          researchingBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechType researching = 22;</code>
       */
      public Builder addResearching(
          int index, org.bwapi.proxy.messages.GameMessages.TechType.Builder builderForValue) {
        if (researchingBuilder_ == null) {
          ensureResearchingIsMutable();
          researching_.add(index, builderForValue.build());
          onChanged();
        } else {
          researchingBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechType researching = 22;</code>
       */
      public Builder addAllResearching(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.TechType> values) {
        if (researchingBuilder_ == null) {
          ensureResearchingIsMutable();
          super.addAll(values, researching_);
          onChanged();
        } else {
          researchingBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechType researching = 22;</code>
       */
      public Builder clearResearching() {
        if (researchingBuilder_ == null) {
          researching_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00200000);
          onChanged();
        } else {
          researchingBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechType researching = 22;</code>
       */
      public Builder removeResearching(int index) {
        if (researchingBuilder_ == null) {
          ensureResearchingIsMutable();
          researching_.remove(index);
          onChanged();
        } else {
          researchingBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechType researching = 22;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.TechType.Builder getResearchingBuilder(
          int index) {
        return getResearchingFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.TechType researching = 22;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder getResearchingOrBuilder(
          int index) {
        if (researchingBuilder_ == null) {
          return researching_.get(index);  } else {
          return researchingBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.TechType researching = 22;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder> 
           getResearchingOrBuilderList() {
        if (researchingBuilder_ != null) {
          return researchingBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(researching_);
        }
      }
      /**
       * <code>repeated .messages.TechType researching = 22;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.TechType.Builder addResearchingBuilder() {
        return getResearchingFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.TechType.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.TechType researching = 22;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.TechType.Builder addResearchingBuilder(
          int index) {
        return getResearchingFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.TechType.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.TechType researching = 22;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.TechType.Builder> 
           getResearchingBuilderList() {
        return getResearchingFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.TechType, org.bwapi.proxy.messages.GameMessages.TechType.Builder, org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder> 
          getResearchingFieldBuilder() {
        if (researchingBuilder_ == null) {
          researchingBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.TechType, org.bwapi.proxy.messages.GameMessages.TechType.Builder, org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder>(
                  researching_,
                  ((bitField0_ & 0x00200000) == 0x00200000),
                  getParentForChildren(),
                  isClean());
          researching_ = null;
        }
        return researchingBuilder_;
      }

      // repeated .messages.UpgradeType upgrading = 23;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.UpgradeType> upgrading_ =
        java.util.Collections.emptyList();
      private void ensureUpgradingIsMutable() {
        if (!((bitField0_ & 0x00400000) == 0x00400000)) {
          upgrading_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UpgradeType>(upgrading_);
          bitField0_ |= 0x00400000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UpgradeType, org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder, org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder> upgradingBuilder_;

      /**
       * <code>repeated .messages.UpgradeType upgrading = 23;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UpgradeType> getUpgradingList() {
        if (upgradingBuilder_ == null) {
          return java.util.Collections.unmodifiableList(upgrading_);
        } else {
          return upgradingBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.UpgradeType upgrading = 23;</code>
       */
      public int getUpgradingCount() {
        if (upgradingBuilder_ == null) {
          return upgrading_.size();
        } else {
          return upgradingBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.UpgradeType upgrading = 23;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeType getUpgrading(int index) {
        if (upgradingBuilder_ == null) {
          return upgrading_.get(index);
        } else {
          return upgradingBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.UpgradeType upgrading = 23;</code>
       */
      public Builder setUpgrading(
          int index, org.bwapi.proxy.messages.GameMessages.UpgradeType value) {
        if (upgradingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUpgradingIsMutable();
          upgrading_.set(index, value);
          onChanged();
        } else {
          upgradingBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeType upgrading = 23;</code>
       */
      public Builder setUpgrading(
          int index, org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder builderForValue) {
        if (upgradingBuilder_ == null) {
          ensureUpgradingIsMutable();
          upgrading_.set(index, builderForValue.build());
          onChanged();
        } else {
          upgradingBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeType upgrading = 23;</code>
       */
      public Builder addUpgrading(org.bwapi.proxy.messages.GameMessages.UpgradeType value) {
        if (upgradingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUpgradingIsMutable();
          upgrading_.add(value);
          onChanged();
        } else {
          upgradingBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeType upgrading = 23;</code>
       */
      public Builder addUpgrading(
          int index, org.bwapi.proxy.messages.GameMessages.UpgradeType value) {
        if (upgradingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUpgradingIsMutable();
          upgrading_.add(index, value);
          onChanged();
        } else {
          upgradingBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeType upgrading = 23;</code>
       */
      public Builder addUpgrading(
          org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder builderForValue) {
        if (upgradingBuilder_ == null) {
          ensureUpgradingIsMutable();
          upgrading_.add(builderForValue.build());
          onChanged();
        } else {
          upgradingBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeType upgrading = 23;</code>
       */
      public Builder addUpgrading(
          int index, org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder builderForValue) {
        if (upgradingBuilder_ == null) {
          ensureUpgradingIsMutable();
          upgrading_.add(index, builderForValue.build());
          onChanged();
        } else {
          upgradingBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeType upgrading = 23;</code>
       */
      public Builder addAllUpgrading(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.UpgradeType> values) {
        if (upgradingBuilder_ == null) {
          ensureUpgradingIsMutable();
          super.addAll(values, upgrading_);
          onChanged();
        } else {
          upgradingBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeType upgrading = 23;</code>
       */
      public Builder clearUpgrading() {
        if (upgradingBuilder_ == null) {
          upgrading_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00400000);
          onChanged();
        } else {
          upgradingBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeType upgrading = 23;</code>
       */
      public Builder removeUpgrading(int index) {
        if (upgradingBuilder_ == null) {
          ensureUpgradingIsMutable();
          upgrading_.remove(index);
          onChanged();
        } else {
          upgradingBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeType upgrading = 23;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder getUpgradingBuilder(
          int index) {
        return getUpgradingFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.UpgradeType upgrading = 23;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder getUpgradingOrBuilder(
          int index) {
        if (upgradingBuilder_ == null) {
          return upgrading_.get(index);  } else {
          return upgradingBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.UpgradeType upgrading = 23;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder> 
           getUpgradingOrBuilderList() {
        if (upgradingBuilder_ != null) {
          return upgradingBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(upgrading_);
        }
      }
      /**
       * <code>repeated .messages.UpgradeType upgrading = 23;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder addUpgradingBuilder() {
        return getUpgradingFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.UpgradeType.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UpgradeType upgrading = 23;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder addUpgradingBuilder(
          int index) {
        return getUpgradingFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.UpgradeType.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UpgradeType upgrading = 23;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder> 
           getUpgradingBuilderList() {
        return getUpgradingFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UpgradeType, org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder, org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder> 
          getUpgradingFieldBuilder() {
        if (upgradingBuilder_ == null) {
          upgradingBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UpgradeType, org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder, org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder>(
                  upgrading_,
                  ((bitField0_ & 0x00400000) == 0x00400000),
                  getParentForChildren(),
                  isClean());
          upgrading_ = null;
        }
        return upgradingBuilder_;
      }

      // optional bool self = 24 [default = false];
      private boolean self_ ;
      /**
       * <code>optional bool self = 24 [default = false];</code>
       */
      public boolean hasSelf() {
        return ((bitField0_ & 0x00800000) == 0x00800000);
      }
      /**
       * <code>optional bool self = 24 [default = false];</code>
       */
      public boolean getSelf() {
        return self_;
      }
      /**
       * <code>optional bool self = 24 [default = false];</code>
       */
      public Builder setSelf(boolean value) {
        bitField0_ |= 0x00800000;
        self_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool self = 24 [default = false];</code>
       */
      public Builder clearSelf() {
        bitField0_ = (bitField0_ & ~0x00800000);
        self_ = false;
        onChanged();
        return this;
      }

      // required bool victorious = 25;
      private boolean victorious_ ;
      /**
       * <code>required bool victorious = 25;</code>
       */
      public boolean hasVictorious() {
        return ((bitField0_ & 0x01000000) == 0x01000000);
      }
      /**
       * <code>required bool victorious = 25;</code>
       */
      public boolean getVictorious() {
        return victorious_;
      }
      /**
       * <code>required bool victorious = 25;</code>
       */
      public Builder setVictorious(boolean value) {
        bitField0_ |= 0x01000000;
        victorious_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bool victorious = 25;</code>
       */
      public Builder clearVictorious() {
        bitField0_ = (bitField0_ & ~0x01000000);
        victorious_ = false;
        onChanged();
        return this;
      }

      // required bool defeated = 26;
      private boolean defeated_ ;
      /**
       * <code>required bool defeated = 26;</code>
       */
      public boolean hasDefeated() {
        return ((bitField0_ & 0x02000000) == 0x02000000);
      }
      /**
       * <code>required bool defeated = 26;</code>
       */
      public boolean getDefeated() {
        return defeated_;
      }
      /**
       * <code>required bool defeated = 26;</code>
       */
      public Builder setDefeated(boolean value) {
        bitField0_ |= 0x02000000;
        defeated_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bool defeated = 26;</code>
       */
      public Builder clearDefeated() {
        bitField0_ = (bitField0_ & ~0x02000000);
        defeated_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:messages.Player)
    }

    static {
      defaultInstance = new Player(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:messages.Player)
  }

  public interface UpgradeLevelOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required .messages.UpgradeType type = 1;
    /**
     * <code>required .messages.UpgradeType type = 1;</code>
     */
    boolean hasType();
    /**
     * <code>required .messages.UpgradeType type = 1;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UpgradeType getType();
    /**
     * <code>required .messages.UpgradeType type = 1;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder getTypeOrBuilder();

    // required int32 level = 2;
    /**
     * <code>required int32 level = 2;</code>
     */
    boolean hasLevel();
    /**
     * <code>required int32 level = 2;</code>
     */
    int getLevel();
  }
  /**
   * Protobuf type {@code messages.UpgradeLevel}
   */
  public static final class UpgradeLevel extends
      com.google.protobuf.GeneratedMessage
      implements UpgradeLevelOrBuilder {
    // Use UpgradeLevel.newBuilder() to construct.
    private UpgradeLevel(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private UpgradeLevel(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final UpgradeLevel defaultInstance;
    public static UpgradeLevel getDefaultInstance() {
      return defaultInstance;
    }

    public UpgradeLevel getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private UpgradeLevel(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = type_.toBuilder();
              }
              type_ = input.readMessage(org.bwapi.proxy.messages.GameMessages.UpgradeType.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(type_);
                type_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              level_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_UpgradeLevel_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_UpgradeLevel_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.bwapi.proxy.messages.GameMessages.UpgradeLevel.class, org.bwapi.proxy.messages.GameMessages.UpgradeLevel.Builder.class);
    }

    public static com.google.protobuf.Parser<UpgradeLevel> PARSER =
        new com.google.protobuf.AbstractParser<UpgradeLevel>() {
      public UpgradeLevel parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new UpgradeLevel(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    // required .messages.UpgradeType type = 1;
    public static final int TYPE_FIELD_NUMBER = 1;
    private org.bwapi.proxy.messages.GameMessages.UpgradeType type_;
    /**
     * <code>required .messages.UpgradeType type = 1;</code>
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required .messages.UpgradeType type = 1;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UpgradeType getType() {
      return type_;
    }
    /**
     * <code>required .messages.UpgradeType type = 1;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder getTypeOrBuilder() {
      return type_;
    }

    // required int32 level = 2;
    public static final int LEVEL_FIELD_NUMBER = 2;
    private int level_;
    /**
     * <code>required int32 level = 2;</code>
     */
    public boolean hasLevel() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>required int32 level = 2;</code>
     */
    public int getLevel() {
      return level_;
    }

    private void initFields() {
      type_ = org.bwapi.proxy.messages.GameMessages.UpgradeType.getDefaultInstance();
      level_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasType()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasLevel()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!getType().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, type_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, level_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, type_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, level_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.bwapi.proxy.messages.GameMessages.UpgradeLevel parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.UpgradeLevel parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.UpgradeLevel parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.UpgradeLevel parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.UpgradeLevel parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.UpgradeLevel parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.UpgradeLevel parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.UpgradeLevel parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.UpgradeLevel parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.UpgradeLevel parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bwapi.proxy.messages.GameMessages.UpgradeLevel prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code messages.UpgradeLevel}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bwapi.proxy.messages.GameMessages.UpgradeLevelOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_UpgradeLevel_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_UpgradeLevel_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.bwapi.proxy.messages.GameMessages.UpgradeLevel.class, org.bwapi.proxy.messages.GameMessages.UpgradeLevel.Builder.class);
      }

      // Construct using org.bwapi.proxy.messages.GameMessages.UpgradeLevel.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getTypeFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (typeBuilder_ == null) {
          type_ = org.bwapi.proxy.messages.GameMessages.UpgradeType.getDefaultInstance();
        } else {
          typeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        level_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_UpgradeLevel_descriptor;
      }

      public org.bwapi.proxy.messages.GameMessages.UpgradeLevel getDefaultInstanceForType() {
        return org.bwapi.proxy.messages.GameMessages.UpgradeLevel.getDefaultInstance();
      }

      public org.bwapi.proxy.messages.GameMessages.UpgradeLevel build() {
        org.bwapi.proxy.messages.GameMessages.UpgradeLevel result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.bwapi.proxy.messages.GameMessages.UpgradeLevel buildPartial() {
        org.bwapi.proxy.messages.GameMessages.UpgradeLevel result = new org.bwapi.proxy.messages.GameMessages.UpgradeLevel(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (typeBuilder_ == null) {
          result.type_ = type_;
        } else {
          result.type_ = typeBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.level_ = level_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bwapi.proxy.messages.GameMessages.UpgradeLevel) {
          return mergeFrom((org.bwapi.proxy.messages.GameMessages.UpgradeLevel)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.bwapi.proxy.messages.GameMessages.UpgradeLevel other) {
        if (other == org.bwapi.proxy.messages.GameMessages.UpgradeLevel.getDefaultInstance()) return this;
        if (other.hasType()) {
          mergeType(other.getType());
        }
        if (other.hasLevel()) {
          setLevel(other.getLevel());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasType()) {
          
          return false;
        }
        if (!hasLevel()) {
          
          return false;
        }
        if (!getType().isInitialized()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.bwapi.proxy.messages.GameMessages.UpgradeLevel parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.bwapi.proxy.messages.GameMessages.UpgradeLevel) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required .messages.UpgradeType type = 1;
      private org.bwapi.proxy.messages.GameMessages.UpgradeType type_ = org.bwapi.proxy.messages.GameMessages.UpgradeType.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UpgradeType, org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder, org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder> typeBuilder_;
      /**
       * <code>required .messages.UpgradeType type = 1;</code>
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required .messages.UpgradeType type = 1;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeType getType() {
        if (typeBuilder_ == null) {
          return type_;
        } else {
          return typeBuilder_.getMessage();
        }
      }
      /**
       * <code>required .messages.UpgradeType type = 1;</code>
       */
      public Builder setType(org.bwapi.proxy.messages.GameMessages.UpgradeType value) {
        if (typeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          type_ = value;
          onChanged();
        } else {
          typeBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .messages.UpgradeType type = 1;</code>
       */
      public Builder setType(
          org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder builderForValue) {
        if (typeBuilder_ == null) {
          type_ = builderForValue.build();
          onChanged();
        } else {
          typeBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .messages.UpgradeType type = 1;</code>
       */
      public Builder mergeType(org.bwapi.proxy.messages.GameMessages.UpgradeType value) {
        if (typeBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              type_ != org.bwapi.proxy.messages.GameMessages.UpgradeType.getDefaultInstance()) {
            type_ =
              org.bwapi.proxy.messages.GameMessages.UpgradeType.newBuilder(type_).mergeFrom(value).buildPartial();
          } else {
            type_ = value;
          }
          onChanged();
        } else {
          typeBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .messages.UpgradeType type = 1;</code>
       */
      public Builder clearType() {
        if (typeBuilder_ == null) {
          type_ = org.bwapi.proxy.messages.GameMessages.UpgradeType.getDefaultInstance();
          onChanged();
        } else {
          typeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>required .messages.UpgradeType type = 1;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder getTypeBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getTypeFieldBuilder().getBuilder();
      }
      /**
       * <code>required .messages.UpgradeType type = 1;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder getTypeOrBuilder() {
        if (typeBuilder_ != null) {
          return typeBuilder_.getMessageOrBuilder();
        } else {
          return type_;
        }
      }
      /**
       * <code>required .messages.UpgradeType type = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UpgradeType, org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder, org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder> 
          getTypeFieldBuilder() {
        if (typeBuilder_ == null) {
          typeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UpgradeType, org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder, org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder>(
                  type_,
                  getParentForChildren(),
                  isClean());
          type_ = null;
        }
        return typeBuilder_;
      }

      // required int32 level = 2;
      private int level_ ;
      /**
       * <code>required int32 level = 2;</code>
       */
      public boolean hasLevel() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required int32 level = 2;</code>
       */
      public int getLevel() {
        return level_;
      }
      /**
       * <code>required int32 level = 2;</code>
       */
      public Builder setLevel(int value) {
        bitField0_ |= 0x00000002;
        level_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 level = 2;</code>
       */
      public Builder clearLevel() {
        bitField0_ = (bitField0_ & ~0x00000002);
        level_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:messages.UpgradeLevel)
    }

    static {
      defaultInstance = new UpgradeLevel(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:messages.UpgradeLevel)
  }

  public interface TechTypeOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required int32 id = 1;
    /**
     * <code>required int32 id = 1;</code>
     */
    boolean hasId();
    /**
     * <code>required int32 id = 1;</code>
     */
    int getId();
  }
  /**
   * Protobuf type {@code messages.TechType}
   */
  public static final class TechType extends
      com.google.protobuf.GeneratedMessage
      implements TechTypeOrBuilder {
    // Use TechType.newBuilder() to construct.
    private TechType(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TechType(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final TechType defaultInstance;
    public static TechType getDefaultInstance() {
      return defaultInstance;
    }

    public TechType getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TechType(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              id_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_TechType_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_TechType_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.bwapi.proxy.messages.GameMessages.TechType.class, org.bwapi.proxy.messages.GameMessages.TechType.Builder.class);
    }

    public static com.google.protobuf.Parser<TechType> PARSER =
        new com.google.protobuf.AbstractParser<TechType>() {
      public TechType parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new TechType(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    // required int32 id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private int id_;
    /**
     * <code>required int32 id = 1;</code>
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required int32 id = 1;</code>
     */
    public int getId() {
      return id_;
    }

    private void initFields() {
      id_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasId()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, id_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, id_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.bwapi.proxy.messages.GameMessages.TechType parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.TechType parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.TechType parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.TechType parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.TechType parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.TechType parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.TechType parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.TechType parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.TechType parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.TechType parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bwapi.proxy.messages.GameMessages.TechType prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code messages.TechType}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_TechType_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_TechType_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.bwapi.proxy.messages.GameMessages.TechType.class, org.bwapi.proxy.messages.GameMessages.TechType.Builder.class);
      }

      // Construct using org.bwapi.proxy.messages.GameMessages.TechType.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        id_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_TechType_descriptor;
      }

      public org.bwapi.proxy.messages.GameMessages.TechType getDefaultInstanceForType() {
        return org.bwapi.proxy.messages.GameMessages.TechType.getDefaultInstance();
      }

      public org.bwapi.proxy.messages.GameMessages.TechType build() {
        org.bwapi.proxy.messages.GameMessages.TechType result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.bwapi.proxy.messages.GameMessages.TechType buildPartial() {
        org.bwapi.proxy.messages.GameMessages.TechType result = new org.bwapi.proxy.messages.GameMessages.TechType(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bwapi.proxy.messages.GameMessages.TechType) {
          return mergeFrom((org.bwapi.proxy.messages.GameMessages.TechType)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.bwapi.proxy.messages.GameMessages.TechType other) {
        if (other == org.bwapi.proxy.messages.GameMessages.TechType.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasId()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.bwapi.proxy.messages.GameMessages.TechType parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.bwapi.proxy.messages.GameMessages.TechType) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required int32 id = 1;
      private int id_ ;
      /**
       * <code>required int32 id = 1;</code>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public int getId() {
        return id_;
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public Builder setId(int value) {
        bitField0_ |= 0x00000001;
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:messages.TechType)
    }

    static {
      defaultInstance = new TechType(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:messages.TechType)
  }

  public interface UpgradeTypeOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required int32 id = 1;
    /**
     * <code>required int32 id = 1;</code>
     */
    boolean hasId();
    /**
     * <code>required int32 id = 1;</code>
     */
    int getId();
  }
  /**
   * Protobuf type {@code messages.UpgradeType}
   */
  public static final class UpgradeType extends
      com.google.protobuf.GeneratedMessage
      implements UpgradeTypeOrBuilder {
    // Use UpgradeType.newBuilder() to construct.
    private UpgradeType(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private UpgradeType(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final UpgradeType defaultInstance;
    public static UpgradeType getDefaultInstance() {
      return defaultInstance;
    }

    public UpgradeType getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private UpgradeType(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              id_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_UpgradeType_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_UpgradeType_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.bwapi.proxy.messages.GameMessages.UpgradeType.class, org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder.class);
    }

    public static com.google.protobuf.Parser<UpgradeType> PARSER =
        new com.google.protobuf.AbstractParser<UpgradeType>() {
      public UpgradeType parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new UpgradeType(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    // required int32 id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private int id_;
    /**
     * <code>required int32 id = 1;</code>
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required int32 id = 1;</code>
     */
    public int getId() {
      return id_;
    }

    private void initFields() {
      id_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasId()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, id_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, id_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.bwapi.proxy.messages.GameMessages.UpgradeType parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.UpgradeType parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.UpgradeType parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.UpgradeType parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.UpgradeType parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.UpgradeType parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.UpgradeType parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.UpgradeType parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.UpgradeType parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.UpgradeType parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bwapi.proxy.messages.GameMessages.UpgradeType prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code messages.UpgradeType}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_UpgradeType_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_UpgradeType_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.bwapi.proxy.messages.GameMessages.UpgradeType.class, org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder.class);
      }

      // Construct using org.bwapi.proxy.messages.GameMessages.UpgradeType.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        id_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_UpgradeType_descriptor;
      }

      public org.bwapi.proxy.messages.GameMessages.UpgradeType getDefaultInstanceForType() {
        return org.bwapi.proxy.messages.GameMessages.UpgradeType.getDefaultInstance();
      }

      public org.bwapi.proxy.messages.GameMessages.UpgradeType build() {
        org.bwapi.proxy.messages.GameMessages.UpgradeType result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.bwapi.proxy.messages.GameMessages.UpgradeType buildPartial() {
        org.bwapi.proxy.messages.GameMessages.UpgradeType result = new org.bwapi.proxy.messages.GameMessages.UpgradeType(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bwapi.proxy.messages.GameMessages.UpgradeType) {
          return mergeFrom((org.bwapi.proxy.messages.GameMessages.UpgradeType)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.bwapi.proxy.messages.GameMessages.UpgradeType other) {
        if (other == org.bwapi.proxy.messages.GameMessages.UpgradeType.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasId()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.bwapi.proxy.messages.GameMessages.UpgradeType parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.bwapi.proxy.messages.GameMessages.UpgradeType) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required int32 id = 1;
      private int id_ ;
      /**
       * <code>required int32 id = 1;</code>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public int getId() {
        return id_;
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public Builder setId(int value) {
        bitField0_ |= 0x00000001;
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:messages.UpgradeType)
    }

    static {
      defaultInstance = new UpgradeType(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:messages.UpgradeType)
  }

  public interface TechTypeDataOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required int32 id = 1;
    /**
     * <code>required int32 id = 1;</code>
     */
    boolean hasId();
    /**
     * <code>required int32 id = 1;</code>
     */
    int getId();

    // required string name = 2;
    /**
     * <code>required string name = 2;</code>
     */
    boolean hasName();
    /**
     * <code>required string name = 2;</code>
     */
    java.lang.String getName();
    /**
     * <code>required string name = 2;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    // required .messages.Race race = 3;
    /**
     * <code>required .messages.Race race = 3;</code>
     */
    boolean hasRace();
    /**
     * <code>required .messages.Race race = 3;</code>
     */
    org.bwapi.proxy.messages.GameMessages.Race getRace();

    // required int32 mineralPrice = 4;
    /**
     * <code>required int32 mineralPrice = 4;</code>
     */
    boolean hasMineralPrice();
    /**
     * <code>required int32 mineralPrice = 4;</code>
     */
    int getMineralPrice();

    // required int32 gasPrice = 5;
    /**
     * <code>required int32 gasPrice = 5;</code>
     */
    boolean hasGasPrice();
    /**
     * <code>required int32 gasPrice = 5;</code>
     */
    int getGasPrice();

    // required int32 researchTime = 6;
    /**
     * <code>required int32 researchTime = 6;</code>
     */
    boolean hasResearchTime();
    /**
     * <code>required int32 researchTime = 6;</code>
     */
    int getResearchTime();

    // required int32 energyUsed = 7;
    /**
     * <code>required int32 energyUsed = 7;</code>
     */
    boolean hasEnergyUsed();
    /**
     * <code>required int32 energyUsed = 7;</code>
     */
    int getEnergyUsed();

    // required .messages.UnitType whatResearches = 8;
    /**
     * <code>required .messages.UnitType whatResearches = 8;</code>
     */
    boolean hasWhatResearches();
    /**
     * <code>required .messages.UnitType whatResearches = 8;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitType getWhatResearches();
    /**
     * <code>required .messages.UnitType whatResearches = 8;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder getWhatResearchesOrBuilder();

    // required .messages.WeaponType weapon = 9;
    /**
     * <code>required .messages.WeaponType weapon = 9;</code>
     */
    boolean hasWeapon();
    /**
     * <code>required .messages.WeaponType weapon = 9;</code>
     */
    org.bwapi.proxy.messages.GameMessages.WeaponType getWeapon();
    /**
     * <code>required .messages.WeaponType weapon = 9;</code>
     */
    org.bwapi.proxy.messages.GameMessages.WeaponTypeOrBuilder getWeaponOrBuilder();

    // repeated .messages.UnitType whatUses = 10;
    /**
     * <code>repeated .messages.UnitType whatUses = 10;</code>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.UnitType> 
        getWhatUsesList();
    /**
     * <code>repeated .messages.UnitType whatUses = 10;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitType getWhatUses(int index);
    /**
     * <code>repeated .messages.UnitType whatUses = 10;</code>
     */
    int getWhatUsesCount();
    /**
     * <code>repeated .messages.UnitType whatUses = 10;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder> 
        getWhatUsesOrBuilderList();
    /**
     * <code>repeated .messages.UnitType whatUses = 10;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder getWhatUsesOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code messages.TechTypeData}
   */
  public static final class TechTypeData extends
      com.google.protobuf.GeneratedMessage
      implements TechTypeDataOrBuilder {
    // Use TechTypeData.newBuilder() to construct.
    private TechTypeData(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TechTypeData(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final TechTypeData defaultInstance;
    public static TechTypeData getDefaultInstance() {
      return defaultInstance;
    }

    public TechTypeData getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TechTypeData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              id_ = input.readInt32();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              name_ = input.readBytes();
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
              org.bwapi.proxy.messages.GameMessages.Race value = org.bwapi.proxy.messages.GameMessages.Race.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(3, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                race_ = value;
              }
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              mineralPrice_ = input.readInt32();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              gasPrice_ = input.readInt32();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              researchTime_ = input.readInt32();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000040;
              energyUsed_ = input.readInt32();
              break;
            }
            case 66: {
              org.bwapi.proxy.messages.GameMessages.UnitType.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) == 0x00000080)) {
                subBuilder = whatResearches_.toBuilder();
              }
              whatResearches_ = input.readMessage(org.bwapi.proxy.messages.GameMessages.UnitType.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(whatResearches_);
                whatResearches_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
            case 74: {
              org.bwapi.proxy.messages.GameMessages.WeaponType.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) == 0x00000100)) {
                subBuilder = weapon_.toBuilder();
              }
              weapon_ = input.readMessage(org.bwapi.proxy.messages.GameMessages.WeaponType.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(weapon_);
                weapon_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
            case 82: {
              if (!((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
                whatUses_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitType>();
                mutable_bitField0_ |= 0x00000200;
              }
              whatUses_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.UnitType.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
          whatUses_ = java.util.Collections.unmodifiableList(whatUses_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_TechTypeData_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_TechTypeData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.bwapi.proxy.messages.GameMessages.TechTypeData.class, org.bwapi.proxy.messages.GameMessages.TechTypeData.Builder.class);
    }

    public static com.google.protobuf.Parser<TechTypeData> PARSER =
        new com.google.protobuf.AbstractParser<TechTypeData>() {
      public TechTypeData parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new TechTypeData(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    // required int32 id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private int id_;
    /**
     * <code>required int32 id = 1;</code>
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required int32 id = 1;</code>
     */
    public int getId() {
      return id_;
    }

    // required string name = 2;
    public static final int NAME_FIELD_NUMBER = 2;
    private java.lang.Object name_;
    /**
     * <code>required string name = 2;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>required string name = 2;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string name = 2;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // required .messages.Race race = 3;
    public static final int RACE_FIELD_NUMBER = 3;
    private org.bwapi.proxy.messages.GameMessages.Race race_;
    /**
     * <code>required .messages.Race race = 3;</code>
     */
    public boolean hasRace() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>required .messages.Race race = 3;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.Race getRace() {
      return race_;
    }

    // required int32 mineralPrice = 4;
    public static final int MINERALPRICE_FIELD_NUMBER = 4;
    private int mineralPrice_;
    /**
     * <code>required int32 mineralPrice = 4;</code>
     */
    public boolean hasMineralPrice() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>required int32 mineralPrice = 4;</code>
     */
    public int getMineralPrice() {
      return mineralPrice_;
    }

    // required int32 gasPrice = 5;
    public static final int GASPRICE_FIELD_NUMBER = 5;
    private int gasPrice_;
    /**
     * <code>required int32 gasPrice = 5;</code>
     */
    public boolean hasGasPrice() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>required int32 gasPrice = 5;</code>
     */
    public int getGasPrice() {
      return gasPrice_;
    }

    // required int32 researchTime = 6;
    public static final int RESEARCHTIME_FIELD_NUMBER = 6;
    private int researchTime_;
    /**
     * <code>required int32 researchTime = 6;</code>
     */
    public boolean hasResearchTime() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>required int32 researchTime = 6;</code>
     */
    public int getResearchTime() {
      return researchTime_;
    }

    // required int32 energyUsed = 7;
    public static final int ENERGYUSED_FIELD_NUMBER = 7;
    private int energyUsed_;
    /**
     * <code>required int32 energyUsed = 7;</code>
     */
    public boolean hasEnergyUsed() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>required int32 energyUsed = 7;</code>
     */
    public int getEnergyUsed() {
      return energyUsed_;
    }

    // required .messages.UnitType whatResearches = 8;
    public static final int WHATRESEARCHES_FIELD_NUMBER = 8;
    private org.bwapi.proxy.messages.GameMessages.UnitType whatResearches_;
    /**
     * <code>required .messages.UnitType whatResearches = 8;</code>
     */
    public boolean hasWhatResearches() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>required .messages.UnitType whatResearches = 8;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitType getWhatResearches() {
      return whatResearches_;
    }
    /**
     * <code>required .messages.UnitType whatResearches = 8;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder getWhatResearchesOrBuilder() {
      return whatResearches_;
    }

    // required .messages.WeaponType weapon = 9;
    public static final int WEAPON_FIELD_NUMBER = 9;
    private org.bwapi.proxy.messages.GameMessages.WeaponType weapon_;
    /**
     * <code>required .messages.WeaponType weapon = 9;</code>
     */
    public boolean hasWeapon() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>required .messages.WeaponType weapon = 9;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.WeaponType getWeapon() {
      return weapon_;
    }
    /**
     * <code>required .messages.WeaponType weapon = 9;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.WeaponTypeOrBuilder getWeaponOrBuilder() {
      return weapon_;
    }

    // repeated .messages.UnitType whatUses = 10;
    public static final int WHATUSES_FIELD_NUMBER = 10;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitType> whatUses_;
    /**
     * <code>repeated .messages.UnitType whatUses = 10;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitType> getWhatUsesList() {
      return whatUses_;
    }
    /**
     * <code>repeated .messages.UnitType whatUses = 10;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder> 
        getWhatUsesOrBuilderList() {
      return whatUses_;
    }
    /**
     * <code>repeated .messages.UnitType whatUses = 10;</code>
     */
    public int getWhatUsesCount() {
      return whatUses_.size();
    }
    /**
     * <code>repeated .messages.UnitType whatUses = 10;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitType getWhatUses(int index) {
      return whatUses_.get(index);
    }
    /**
     * <code>repeated .messages.UnitType whatUses = 10;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder getWhatUsesOrBuilder(
        int index) {
      return whatUses_.get(index);
    }

    private void initFields() {
      id_ = 0;
      name_ = "";
      race_ = org.bwapi.proxy.messages.GameMessages.Race.Zerg;
      mineralPrice_ = 0;
      gasPrice_ = 0;
      researchTime_ = 0;
      energyUsed_ = 0;
      whatResearches_ = org.bwapi.proxy.messages.GameMessages.UnitType.getDefaultInstance();
      weapon_ = org.bwapi.proxy.messages.GameMessages.WeaponType.getDefaultInstance();
      whatUses_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasId()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasName()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasRace()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasMineralPrice()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasGasPrice()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasResearchTime()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasEnergyUsed()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasWhatResearches()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasWeapon()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!getWhatResearches().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!getWeapon().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      for (int i = 0; i < getWhatUsesCount(); i++) {
        if (!getWhatUses(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getNameBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeEnum(3, race_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(4, mineralPrice_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt32(5, gasPrice_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeInt32(6, researchTime_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeInt32(7, energyUsed_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeMessage(8, whatResearches_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeMessage(9, weapon_);
      }
      for (int i = 0; i < whatUses_.size(); i++) {
        output.writeMessage(10, whatUses_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getNameBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, race_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, mineralPrice_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, gasPrice_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(6, researchTime_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(7, energyUsed_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, whatResearches_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, weapon_);
      }
      for (int i = 0; i < whatUses_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, whatUses_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.bwapi.proxy.messages.GameMessages.TechTypeData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.TechTypeData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.TechTypeData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.TechTypeData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.TechTypeData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.TechTypeData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.TechTypeData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.TechTypeData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.TechTypeData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.TechTypeData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bwapi.proxy.messages.GameMessages.TechTypeData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code messages.TechTypeData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bwapi.proxy.messages.GameMessages.TechTypeDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_TechTypeData_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_TechTypeData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.bwapi.proxy.messages.GameMessages.TechTypeData.class, org.bwapi.proxy.messages.GameMessages.TechTypeData.Builder.class);
      }

      // Construct using org.bwapi.proxy.messages.GameMessages.TechTypeData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getWhatResearchesFieldBuilder();
          getWeaponFieldBuilder();
          getWhatUsesFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        id_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        race_ = org.bwapi.proxy.messages.GameMessages.Race.Zerg;
        bitField0_ = (bitField0_ & ~0x00000004);
        mineralPrice_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        gasPrice_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        researchTime_ = 0;
        bitField0_ = (bitField0_ & ~0x00000020);
        energyUsed_ = 0;
        bitField0_ = (bitField0_ & ~0x00000040);
        if (whatResearchesBuilder_ == null) {
          whatResearches_ = org.bwapi.proxy.messages.GameMessages.UnitType.getDefaultInstance();
        } else {
          whatResearchesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        if (weaponBuilder_ == null) {
          weapon_ = org.bwapi.proxy.messages.GameMessages.WeaponType.getDefaultInstance();
        } else {
          weaponBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        if (whatUsesBuilder_ == null) {
          whatUses_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
        } else {
          whatUsesBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_TechTypeData_descriptor;
      }

      public org.bwapi.proxy.messages.GameMessages.TechTypeData getDefaultInstanceForType() {
        return org.bwapi.proxy.messages.GameMessages.TechTypeData.getDefaultInstance();
      }

      public org.bwapi.proxy.messages.GameMessages.TechTypeData build() {
        org.bwapi.proxy.messages.GameMessages.TechTypeData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.bwapi.proxy.messages.GameMessages.TechTypeData buildPartial() {
        org.bwapi.proxy.messages.GameMessages.TechTypeData result = new org.bwapi.proxy.messages.GameMessages.TechTypeData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.race_ = race_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.mineralPrice_ = mineralPrice_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.gasPrice_ = gasPrice_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.researchTime_ = researchTime_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.energyUsed_ = energyUsed_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        if (whatResearchesBuilder_ == null) {
          result.whatResearches_ = whatResearches_;
        } else {
          result.whatResearches_ = whatResearchesBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        if (weaponBuilder_ == null) {
          result.weapon_ = weapon_;
        } else {
          result.weapon_ = weaponBuilder_.build();
        }
        if (whatUsesBuilder_ == null) {
          if (((bitField0_ & 0x00000200) == 0x00000200)) {
            whatUses_ = java.util.Collections.unmodifiableList(whatUses_);
            bitField0_ = (bitField0_ & ~0x00000200);
          }
          result.whatUses_ = whatUses_;
        } else {
          result.whatUses_ = whatUsesBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bwapi.proxy.messages.GameMessages.TechTypeData) {
          return mergeFrom((org.bwapi.proxy.messages.GameMessages.TechTypeData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.bwapi.proxy.messages.GameMessages.TechTypeData other) {
        if (other == org.bwapi.proxy.messages.GameMessages.TechTypeData.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasName()) {
          bitField0_ |= 0x00000002;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasRace()) {
          setRace(other.getRace());
        }
        if (other.hasMineralPrice()) {
          setMineralPrice(other.getMineralPrice());
        }
        if (other.hasGasPrice()) {
          setGasPrice(other.getGasPrice());
        }
        if (other.hasResearchTime()) {
          setResearchTime(other.getResearchTime());
        }
        if (other.hasEnergyUsed()) {
          setEnergyUsed(other.getEnergyUsed());
        }
        if (other.hasWhatResearches()) {
          mergeWhatResearches(other.getWhatResearches());
        }
        if (other.hasWeapon()) {
          mergeWeapon(other.getWeapon());
        }
        if (whatUsesBuilder_ == null) {
          if (!other.whatUses_.isEmpty()) {
            if (whatUses_.isEmpty()) {
              whatUses_ = other.whatUses_;
              bitField0_ = (bitField0_ & ~0x00000200);
            } else {
              ensureWhatUsesIsMutable();
              whatUses_.addAll(other.whatUses_);
            }
            onChanged();
          }
        } else {
          if (!other.whatUses_.isEmpty()) {
            if (whatUsesBuilder_.isEmpty()) {
              whatUsesBuilder_.dispose();
              whatUsesBuilder_ = null;
              whatUses_ = other.whatUses_;
              bitField0_ = (bitField0_ & ~0x00000200);
              whatUsesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getWhatUsesFieldBuilder() : null;
            } else {
              whatUsesBuilder_.addAllMessages(other.whatUses_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasId()) {
          
          return false;
        }
        if (!hasName()) {
          
          return false;
        }
        if (!hasRace()) {
          
          return false;
        }
        if (!hasMineralPrice()) {
          
          return false;
        }
        if (!hasGasPrice()) {
          
          return false;
        }
        if (!hasResearchTime()) {
          
          return false;
        }
        if (!hasEnergyUsed()) {
          
          return false;
        }
        if (!hasWhatResearches()) {
          
          return false;
        }
        if (!hasWeapon()) {
          
          return false;
        }
        if (!getWhatResearches().isInitialized()) {
          
          return false;
        }
        if (!getWeapon().isInitialized()) {
          
          return false;
        }
        for (int i = 0; i < getWhatUsesCount(); i++) {
          if (!getWhatUses(i).isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.bwapi.proxy.messages.GameMessages.TechTypeData parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.bwapi.proxy.messages.GameMessages.TechTypeData) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required int32 id = 1;
      private int id_ ;
      /**
       * <code>required int32 id = 1;</code>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public int getId() {
        return id_;
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public Builder setId(int value) {
        bitField0_ |= 0x00000001;
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = 0;
        onChanged();
        return this;
      }

      // required string name = 2;
      private java.lang.Object name_ = "";
      /**
       * <code>required string name = 2;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required string name = 2;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string name = 2;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string name = 2;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string name = 2;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000002);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>required string name = 2;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }

      // required .messages.Race race = 3;
      private org.bwapi.proxy.messages.GameMessages.Race race_ = org.bwapi.proxy.messages.GameMessages.Race.Zerg;
      /**
       * <code>required .messages.Race race = 3;</code>
       */
      public boolean hasRace() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>required .messages.Race race = 3;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.Race getRace() {
        return race_;
      }
      /**
       * <code>required .messages.Race race = 3;</code>
       */
      public Builder setRace(org.bwapi.proxy.messages.GameMessages.Race value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        race_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required .messages.Race race = 3;</code>
       */
      public Builder clearRace() {
        bitField0_ = (bitField0_ & ~0x00000004);
        race_ = org.bwapi.proxy.messages.GameMessages.Race.Zerg;
        onChanged();
        return this;
      }

      // required int32 mineralPrice = 4;
      private int mineralPrice_ ;
      /**
       * <code>required int32 mineralPrice = 4;</code>
       */
      public boolean hasMineralPrice() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>required int32 mineralPrice = 4;</code>
       */
      public int getMineralPrice() {
        return mineralPrice_;
      }
      /**
       * <code>required int32 mineralPrice = 4;</code>
       */
      public Builder setMineralPrice(int value) {
        bitField0_ |= 0x00000008;
        mineralPrice_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 mineralPrice = 4;</code>
       */
      public Builder clearMineralPrice() {
        bitField0_ = (bitField0_ & ~0x00000008);
        mineralPrice_ = 0;
        onChanged();
        return this;
      }

      // required int32 gasPrice = 5;
      private int gasPrice_ ;
      /**
       * <code>required int32 gasPrice = 5;</code>
       */
      public boolean hasGasPrice() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>required int32 gasPrice = 5;</code>
       */
      public int getGasPrice() {
        return gasPrice_;
      }
      /**
       * <code>required int32 gasPrice = 5;</code>
       */
      public Builder setGasPrice(int value) {
        bitField0_ |= 0x00000010;
        gasPrice_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 gasPrice = 5;</code>
       */
      public Builder clearGasPrice() {
        bitField0_ = (bitField0_ & ~0x00000010);
        gasPrice_ = 0;
        onChanged();
        return this;
      }

      // required int32 researchTime = 6;
      private int researchTime_ ;
      /**
       * <code>required int32 researchTime = 6;</code>
       */
      public boolean hasResearchTime() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>required int32 researchTime = 6;</code>
       */
      public int getResearchTime() {
        return researchTime_;
      }
      /**
       * <code>required int32 researchTime = 6;</code>
       */
      public Builder setResearchTime(int value) {
        bitField0_ |= 0x00000020;
        researchTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 researchTime = 6;</code>
       */
      public Builder clearResearchTime() {
        bitField0_ = (bitField0_ & ~0x00000020);
        researchTime_ = 0;
        onChanged();
        return this;
      }

      // required int32 energyUsed = 7;
      private int energyUsed_ ;
      /**
       * <code>required int32 energyUsed = 7;</code>
       */
      public boolean hasEnergyUsed() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>required int32 energyUsed = 7;</code>
       */
      public int getEnergyUsed() {
        return energyUsed_;
      }
      /**
       * <code>required int32 energyUsed = 7;</code>
       */
      public Builder setEnergyUsed(int value) {
        bitField0_ |= 0x00000040;
        energyUsed_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 energyUsed = 7;</code>
       */
      public Builder clearEnergyUsed() {
        bitField0_ = (bitField0_ & ~0x00000040);
        energyUsed_ = 0;
        onChanged();
        return this;
      }

      // required .messages.UnitType whatResearches = 8;
      private org.bwapi.proxy.messages.GameMessages.UnitType whatResearches_ = org.bwapi.proxy.messages.GameMessages.UnitType.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitType, org.bwapi.proxy.messages.GameMessages.UnitType.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder> whatResearchesBuilder_;
      /**
       * <code>required .messages.UnitType whatResearches = 8;</code>
       */
      public boolean hasWhatResearches() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>required .messages.UnitType whatResearches = 8;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitType getWhatResearches() {
        if (whatResearchesBuilder_ == null) {
          return whatResearches_;
        } else {
          return whatResearchesBuilder_.getMessage();
        }
      }
      /**
       * <code>required .messages.UnitType whatResearches = 8;</code>
       */
      public Builder setWhatResearches(org.bwapi.proxy.messages.GameMessages.UnitType value) {
        if (whatResearchesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          whatResearches_ = value;
          onChanged();
        } else {
          whatResearchesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>required .messages.UnitType whatResearches = 8;</code>
       */
      public Builder setWhatResearches(
          org.bwapi.proxy.messages.GameMessages.UnitType.Builder builderForValue) {
        if (whatResearchesBuilder_ == null) {
          whatResearches_ = builderForValue.build();
          onChanged();
        } else {
          whatResearchesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>required .messages.UnitType whatResearches = 8;</code>
       */
      public Builder mergeWhatResearches(org.bwapi.proxy.messages.GameMessages.UnitType value) {
        if (whatResearchesBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              whatResearches_ != org.bwapi.proxy.messages.GameMessages.UnitType.getDefaultInstance()) {
            whatResearches_ =
              org.bwapi.proxy.messages.GameMessages.UnitType.newBuilder(whatResearches_).mergeFrom(value).buildPartial();
          } else {
            whatResearches_ = value;
          }
          onChanged();
        } else {
          whatResearchesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>required .messages.UnitType whatResearches = 8;</code>
       */
      public Builder clearWhatResearches() {
        if (whatResearchesBuilder_ == null) {
          whatResearches_ = org.bwapi.proxy.messages.GameMessages.UnitType.getDefaultInstance();
          onChanged();
        } else {
          whatResearchesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       * <code>required .messages.UnitType whatResearches = 8;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitType.Builder getWhatResearchesBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getWhatResearchesFieldBuilder().getBuilder();
      }
      /**
       * <code>required .messages.UnitType whatResearches = 8;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder getWhatResearchesOrBuilder() {
        if (whatResearchesBuilder_ != null) {
          return whatResearchesBuilder_.getMessageOrBuilder();
        } else {
          return whatResearches_;
        }
      }
      /**
       * <code>required .messages.UnitType whatResearches = 8;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitType, org.bwapi.proxy.messages.GameMessages.UnitType.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder> 
          getWhatResearchesFieldBuilder() {
        if (whatResearchesBuilder_ == null) {
          whatResearchesBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UnitType, org.bwapi.proxy.messages.GameMessages.UnitType.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder>(
                  whatResearches_,
                  getParentForChildren(),
                  isClean());
          whatResearches_ = null;
        }
        return whatResearchesBuilder_;
      }

      // required .messages.WeaponType weapon = 9;
      private org.bwapi.proxy.messages.GameMessages.WeaponType weapon_ = org.bwapi.proxy.messages.GameMessages.WeaponType.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.WeaponType, org.bwapi.proxy.messages.GameMessages.WeaponType.Builder, org.bwapi.proxy.messages.GameMessages.WeaponTypeOrBuilder> weaponBuilder_;
      /**
       * <code>required .messages.WeaponType weapon = 9;</code>
       */
      public boolean hasWeapon() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>required .messages.WeaponType weapon = 9;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.WeaponType getWeapon() {
        if (weaponBuilder_ == null) {
          return weapon_;
        } else {
          return weaponBuilder_.getMessage();
        }
      }
      /**
       * <code>required .messages.WeaponType weapon = 9;</code>
       */
      public Builder setWeapon(org.bwapi.proxy.messages.GameMessages.WeaponType value) {
        if (weaponBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          weapon_ = value;
          onChanged();
        } else {
          weaponBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>required .messages.WeaponType weapon = 9;</code>
       */
      public Builder setWeapon(
          org.bwapi.proxy.messages.GameMessages.WeaponType.Builder builderForValue) {
        if (weaponBuilder_ == null) {
          weapon_ = builderForValue.build();
          onChanged();
        } else {
          weaponBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>required .messages.WeaponType weapon = 9;</code>
       */
      public Builder mergeWeapon(org.bwapi.proxy.messages.GameMessages.WeaponType value) {
        if (weaponBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100) &&
              weapon_ != org.bwapi.proxy.messages.GameMessages.WeaponType.getDefaultInstance()) {
            weapon_ =
              org.bwapi.proxy.messages.GameMessages.WeaponType.newBuilder(weapon_).mergeFrom(value).buildPartial();
          } else {
            weapon_ = value;
          }
          onChanged();
        } else {
          weaponBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>required .messages.WeaponType weapon = 9;</code>
       */
      public Builder clearWeapon() {
        if (weaponBuilder_ == null) {
          weapon_ = org.bwapi.proxy.messages.GameMessages.WeaponType.getDefaultInstance();
          onChanged();
        } else {
          weaponBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      /**
       * <code>required .messages.WeaponType weapon = 9;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.WeaponType.Builder getWeaponBuilder() {
        bitField0_ |= 0x00000100;
        onChanged();
        return getWeaponFieldBuilder().getBuilder();
      }
      /**
       * <code>required .messages.WeaponType weapon = 9;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.WeaponTypeOrBuilder getWeaponOrBuilder() {
        if (weaponBuilder_ != null) {
          return weaponBuilder_.getMessageOrBuilder();
        } else {
          return weapon_;
        }
      }
      /**
       * <code>required .messages.WeaponType weapon = 9;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.WeaponType, org.bwapi.proxy.messages.GameMessages.WeaponType.Builder, org.bwapi.proxy.messages.GameMessages.WeaponTypeOrBuilder> 
          getWeaponFieldBuilder() {
        if (weaponBuilder_ == null) {
          weaponBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.WeaponType, org.bwapi.proxy.messages.GameMessages.WeaponType.Builder, org.bwapi.proxy.messages.GameMessages.WeaponTypeOrBuilder>(
                  weapon_,
                  getParentForChildren(),
                  isClean());
          weapon_ = null;
        }
        return weaponBuilder_;
      }

      // repeated .messages.UnitType whatUses = 10;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitType> whatUses_ =
        java.util.Collections.emptyList();
      private void ensureWhatUsesIsMutable() {
        if (!((bitField0_ & 0x00000200) == 0x00000200)) {
          whatUses_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitType>(whatUses_);
          bitField0_ |= 0x00000200;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitType, org.bwapi.proxy.messages.GameMessages.UnitType.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder> whatUsesBuilder_;

      /**
       * <code>repeated .messages.UnitType whatUses = 10;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitType> getWhatUsesList() {
        if (whatUsesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(whatUses_);
        } else {
          return whatUsesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.UnitType whatUses = 10;</code>
       */
      public int getWhatUsesCount() {
        if (whatUsesBuilder_ == null) {
          return whatUses_.size();
        } else {
          return whatUsesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.UnitType whatUses = 10;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitType getWhatUses(int index) {
        if (whatUsesBuilder_ == null) {
          return whatUses_.get(index);
        } else {
          return whatUsesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.UnitType whatUses = 10;</code>
       */
      public Builder setWhatUses(
          int index, org.bwapi.proxy.messages.GameMessages.UnitType value) {
        if (whatUsesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureWhatUsesIsMutable();
          whatUses_.set(index, value);
          onChanged();
        } else {
          whatUsesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitType whatUses = 10;</code>
       */
      public Builder setWhatUses(
          int index, org.bwapi.proxy.messages.GameMessages.UnitType.Builder builderForValue) {
        if (whatUsesBuilder_ == null) {
          ensureWhatUsesIsMutable();
          whatUses_.set(index, builderForValue.build());
          onChanged();
        } else {
          whatUsesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitType whatUses = 10;</code>
       */
      public Builder addWhatUses(org.bwapi.proxy.messages.GameMessages.UnitType value) {
        if (whatUsesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureWhatUsesIsMutable();
          whatUses_.add(value);
          onChanged();
        } else {
          whatUsesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitType whatUses = 10;</code>
       */
      public Builder addWhatUses(
          int index, org.bwapi.proxy.messages.GameMessages.UnitType value) {
        if (whatUsesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureWhatUsesIsMutable();
          whatUses_.add(index, value);
          onChanged();
        } else {
          whatUsesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitType whatUses = 10;</code>
       */
      public Builder addWhatUses(
          org.bwapi.proxy.messages.GameMessages.UnitType.Builder builderForValue) {
        if (whatUsesBuilder_ == null) {
          ensureWhatUsesIsMutable();
          whatUses_.add(builderForValue.build());
          onChanged();
        } else {
          whatUsesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitType whatUses = 10;</code>
       */
      public Builder addWhatUses(
          int index, org.bwapi.proxy.messages.GameMessages.UnitType.Builder builderForValue) {
        if (whatUsesBuilder_ == null) {
          ensureWhatUsesIsMutable();
          whatUses_.add(index, builderForValue.build());
          onChanged();
        } else {
          whatUsesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitType whatUses = 10;</code>
       */
      public Builder addAllWhatUses(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.UnitType> values) {
        if (whatUsesBuilder_ == null) {
          ensureWhatUsesIsMutable();
          super.addAll(values, whatUses_);
          onChanged();
        } else {
          whatUsesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitType whatUses = 10;</code>
       */
      public Builder clearWhatUses() {
        if (whatUsesBuilder_ == null) {
          whatUses_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
          onChanged();
        } else {
          whatUsesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitType whatUses = 10;</code>
       */
      public Builder removeWhatUses(int index) {
        if (whatUsesBuilder_ == null) {
          ensureWhatUsesIsMutable();
          whatUses_.remove(index);
          onChanged();
        } else {
          whatUsesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitType whatUses = 10;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitType.Builder getWhatUsesBuilder(
          int index) {
        return getWhatUsesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.UnitType whatUses = 10;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder getWhatUsesOrBuilder(
          int index) {
        if (whatUsesBuilder_ == null) {
          return whatUses_.get(index);  } else {
          return whatUsesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.UnitType whatUses = 10;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder> 
           getWhatUsesOrBuilderList() {
        if (whatUsesBuilder_ != null) {
          return whatUsesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(whatUses_);
        }
      }
      /**
       * <code>repeated .messages.UnitType whatUses = 10;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitType.Builder addWhatUsesBuilder() {
        return getWhatUsesFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.UnitType.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitType whatUses = 10;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitType.Builder addWhatUsesBuilder(
          int index) {
        return getWhatUsesFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.UnitType.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitType whatUses = 10;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitType.Builder> 
           getWhatUsesBuilderList() {
        return getWhatUsesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitType, org.bwapi.proxy.messages.GameMessages.UnitType.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder> 
          getWhatUsesFieldBuilder() {
        if (whatUsesBuilder_ == null) {
          whatUsesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UnitType, org.bwapi.proxy.messages.GameMessages.UnitType.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder>(
                  whatUses_,
                  ((bitField0_ & 0x00000200) == 0x00000200),
                  getParentForChildren(),
                  isClean());
          whatUses_ = null;
        }
        return whatUsesBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:messages.TechTypeData)
    }

    static {
      defaultInstance = new TechTypeData(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:messages.TechTypeData)
  }

  public interface WeaponTypeOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required int32 id = 1;
    /**
     * <code>required int32 id = 1;</code>
     */
    boolean hasId();
    /**
     * <code>required int32 id = 1;</code>
     */
    int getId();
  }
  /**
   * Protobuf type {@code messages.WeaponType}
   */
  public static final class WeaponType extends
      com.google.protobuf.GeneratedMessage
      implements WeaponTypeOrBuilder {
    // Use WeaponType.newBuilder() to construct.
    private WeaponType(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private WeaponType(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final WeaponType defaultInstance;
    public static WeaponType getDefaultInstance() {
      return defaultInstance;
    }

    public WeaponType getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private WeaponType(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              id_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_WeaponType_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_WeaponType_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.bwapi.proxy.messages.GameMessages.WeaponType.class, org.bwapi.proxy.messages.GameMessages.WeaponType.Builder.class);
    }

    public static com.google.protobuf.Parser<WeaponType> PARSER =
        new com.google.protobuf.AbstractParser<WeaponType>() {
      public WeaponType parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new WeaponType(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    // required int32 id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private int id_;
    /**
     * <code>required int32 id = 1;</code>
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required int32 id = 1;</code>
     */
    public int getId() {
      return id_;
    }

    private void initFields() {
      id_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasId()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, id_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, id_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.bwapi.proxy.messages.GameMessages.WeaponType parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.WeaponType parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.WeaponType parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.WeaponType parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.WeaponType parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.WeaponType parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.WeaponType parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.WeaponType parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.WeaponType parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.WeaponType parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bwapi.proxy.messages.GameMessages.WeaponType prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code messages.WeaponType}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bwapi.proxy.messages.GameMessages.WeaponTypeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_WeaponType_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_WeaponType_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.bwapi.proxy.messages.GameMessages.WeaponType.class, org.bwapi.proxy.messages.GameMessages.WeaponType.Builder.class);
      }

      // Construct using org.bwapi.proxy.messages.GameMessages.WeaponType.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        id_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_WeaponType_descriptor;
      }

      public org.bwapi.proxy.messages.GameMessages.WeaponType getDefaultInstanceForType() {
        return org.bwapi.proxy.messages.GameMessages.WeaponType.getDefaultInstance();
      }

      public org.bwapi.proxy.messages.GameMessages.WeaponType build() {
        org.bwapi.proxy.messages.GameMessages.WeaponType result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.bwapi.proxy.messages.GameMessages.WeaponType buildPartial() {
        org.bwapi.proxy.messages.GameMessages.WeaponType result = new org.bwapi.proxy.messages.GameMessages.WeaponType(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bwapi.proxy.messages.GameMessages.WeaponType) {
          return mergeFrom((org.bwapi.proxy.messages.GameMessages.WeaponType)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.bwapi.proxy.messages.GameMessages.WeaponType other) {
        if (other == org.bwapi.proxy.messages.GameMessages.WeaponType.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasId()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.bwapi.proxy.messages.GameMessages.WeaponType parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.bwapi.proxy.messages.GameMessages.WeaponType) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required int32 id = 1;
      private int id_ ;
      /**
       * <code>required int32 id = 1;</code>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public int getId() {
        return id_;
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public Builder setId(int value) {
        bitField0_ |= 0x00000001;
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:messages.WeaponType)
    }

    static {
      defaultInstance = new WeaponType(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:messages.WeaponType)
  }

  public interface WeaponTypeDataOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required int32 id = 1;
    /**
     * <code>required int32 id = 1;</code>
     */
    boolean hasId();
    /**
     * <code>required int32 id = 1;</code>
     */
    int getId();

    // required string name = 2;
    /**
     * <code>required string name = 2;</code>
     */
    boolean hasName();
    /**
     * <code>required string name = 2;</code>
     */
    java.lang.String getName();
    /**
     * <code>required string name = 2;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    // required .messages.TechType tech = 3;
    /**
     * <code>required .messages.TechType tech = 3;</code>
     */
    boolean hasTech();
    /**
     * <code>required .messages.TechType tech = 3;</code>
     */
    org.bwapi.proxy.messages.GameMessages.TechType getTech();
    /**
     * <code>required .messages.TechType tech = 3;</code>
     */
    org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder getTechOrBuilder();

    // required .messages.UnitType whatUses = 4;
    /**
     * <code>required .messages.UnitType whatUses = 4;</code>
     */
    boolean hasWhatUses();
    /**
     * <code>required .messages.UnitType whatUses = 4;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitType getWhatUses();
    /**
     * <code>required .messages.UnitType whatUses = 4;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder getWhatUsesOrBuilder();

    // required int32 damageAmount = 5;
    /**
     * <code>required int32 damageAmount = 5;</code>
     */
    boolean hasDamageAmount();
    /**
     * <code>required int32 damageAmount = 5;</code>
     */
    int getDamageAmount();

    // required int32 damageBonus = 6;
    /**
     * <code>required int32 damageBonus = 6;</code>
     */
    boolean hasDamageBonus();
    /**
     * <code>required int32 damageBonus = 6;</code>
     */
    int getDamageBonus();

    // required int32 damageCooldown = 7;
    /**
     * <code>required int32 damageCooldown = 7;</code>
     */
    boolean hasDamageCooldown();
    /**
     * <code>required int32 damageCooldown = 7;</code>
     */
    int getDamageCooldown();

    // required int32 damageFactor = 8;
    /**
     * <code>required int32 damageFactor = 8;</code>
     */
    boolean hasDamageFactor();
    /**
     * <code>required int32 damageFactor = 8;</code>
     */
    int getDamageFactor();

    // required .messages.UpgradeType upgradeType = 9;
    /**
     * <code>required .messages.UpgradeType upgradeType = 9;</code>
     */
    boolean hasUpgradeType();
    /**
     * <code>required .messages.UpgradeType upgradeType = 9;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UpgradeType getUpgradeType();
    /**
     * <code>required .messages.UpgradeType upgradeType = 9;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder getUpgradeTypeOrBuilder();

    // required .messages.DamageType damageType = 10;
    /**
     * <code>required .messages.DamageType damageType = 10;</code>
     */
    boolean hasDamageType();
    /**
     * <code>required .messages.DamageType damageType = 10;</code>
     */
    org.bwapi.proxy.messages.GameMessages.DamageType getDamageType();

    // required .messages.ExplosionType explosionType = 11;
    /**
     * <code>required .messages.ExplosionType explosionType = 11;</code>
     */
    boolean hasExplosionType();
    /**
     * <code>required .messages.ExplosionType explosionType = 11;</code>
     */
    org.bwapi.proxy.messages.GameMessages.ExplosionType getExplosionType();

    // required int32 minRange = 12;
    /**
     * <code>required int32 minRange = 12;</code>
     */
    boolean hasMinRange();
    /**
     * <code>required int32 minRange = 12;</code>
     */
    int getMinRange();

    // required int32 maxRange = 13;
    /**
     * <code>required int32 maxRange = 13;</code>
     */
    boolean hasMaxRange();
    /**
     * <code>required int32 maxRange = 13;</code>
     */
    int getMaxRange();

    // required int32 innerSplashRadius = 14;
    /**
     * <code>required int32 innerSplashRadius = 14;</code>
     */
    boolean hasInnerSplashRadius();
    /**
     * <code>required int32 innerSplashRadius = 14;</code>
     */
    int getInnerSplashRadius();

    // required int32 medianSplashRadius = 15;
    /**
     * <code>required int32 medianSplashRadius = 15;</code>
     */
    boolean hasMedianSplashRadius();
    /**
     * <code>required int32 medianSplashRadius = 15;</code>
     */
    int getMedianSplashRadius();

    // required int32 outerSplashRadius = 16;
    /**
     * <code>required int32 outerSplashRadius = 16;</code>
     */
    boolean hasOuterSplashRadius();
    /**
     * <code>required int32 outerSplashRadius = 16;</code>
     */
    int getOuterSplashRadius();

    // required bool targetsAir = 17;
    /**
     * <code>required bool targetsAir = 17;</code>
     */
    boolean hasTargetsAir();
    /**
     * <code>required bool targetsAir = 17;</code>
     */
    boolean getTargetsAir();

    // required bool targetsGround = 18;
    /**
     * <code>required bool targetsGround = 18;</code>
     */
    boolean hasTargetsGround();
    /**
     * <code>required bool targetsGround = 18;</code>
     */
    boolean getTargetsGround();

    // required bool targetsMechanical = 19;
    /**
     * <code>required bool targetsMechanical = 19;</code>
     */
    boolean hasTargetsMechanical();
    /**
     * <code>required bool targetsMechanical = 19;</code>
     */
    boolean getTargetsMechanical();

    // required bool targetsOrganic = 20;
    /**
     * <code>required bool targetsOrganic = 20;</code>
     */
    boolean hasTargetsOrganic();
    /**
     * <code>required bool targetsOrganic = 20;</code>
     */
    boolean getTargetsOrganic();

    // required bool targetsNonBuilding = 21;
    /**
     * <code>required bool targetsNonBuilding = 21;</code>
     */
    boolean hasTargetsNonBuilding();
    /**
     * <code>required bool targetsNonBuilding = 21;</code>
     */
    boolean getTargetsNonBuilding();

    // required bool targetsNonRobotic = 22;
    /**
     * <code>required bool targetsNonRobotic = 22;</code>
     */
    boolean hasTargetsNonRobotic();
    /**
     * <code>required bool targetsNonRobotic = 22;</code>
     */
    boolean getTargetsNonRobotic();

    // required bool targetsTerrain = 23;
    /**
     * <code>required bool targetsTerrain = 23;</code>
     */
    boolean hasTargetsTerrain();
    /**
     * <code>required bool targetsTerrain = 23;</code>
     */
    boolean getTargetsTerrain();

    // required bool targetsOrgOrMech = 24;
    /**
     * <code>required bool targetsOrgOrMech = 24;</code>
     */
    boolean hasTargetsOrgOrMech();
    /**
     * <code>required bool targetsOrgOrMech = 24;</code>
     */
    boolean getTargetsOrgOrMech();

    // required bool targetsOwn = 25;
    /**
     * <code>required bool targetsOwn = 25;</code>
     */
    boolean hasTargetsOwn();
    /**
     * <code>required bool targetsOwn = 25;</code>
     */
    boolean getTargetsOwn();
  }
  /**
   * Protobuf type {@code messages.WeaponTypeData}
   */
  public static final class WeaponTypeData extends
      com.google.protobuf.GeneratedMessage
      implements WeaponTypeDataOrBuilder {
    // Use WeaponTypeData.newBuilder() to construct.
    private WeaponTypeData(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private WeaponTypeData(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final WeaponTypeData defaultInstance;
    public static WeaponTypeData getDefaultInstance() {
      return defaultInstance;
    }

    public WeaponTypeData getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private WeaponTypeData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              id_ = input.readInt32();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              name_ = input.readBytes();
              break;
            }
            case 26: {
              org.bwapi.proxy.messages.GameMessages.TechType.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = tech_.toBuilder();
              }
              tech_ = input.readMessage(org.bwapi.proxy.messages.GameMessages.TechType.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(tech_);
                tech_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 34: {
              org.bwapi.proxy.messages.GameMessages.UnitType.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = whatUses_.toBuilder();
              }
              whatUses_ = input.readMessage(org.bwapi.proxy.messages.GameMessages.UnitType.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(whatUses_);
                whatUses_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              damageAmount_ = input.readInt32();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              damageBonus_ = input.readInt32();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000040;
              damageCooldown_ = input.readInt32();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000080;
              damageFactor_ = input.readInt32();
              break;
            }
            case 74: {
              org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) == 0x00000100)) {
                subBuilder = upgradeType_.toBuilder();
              }
              upgradeType_ = input.readMessage(org.bwapi.proxy.messages.GameMessages.UpgradeType.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(upgradeType_);
                upgradeType_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
            case 80: {
              int rawValue = input.readEnum();
              org.bwapi.proxy.messages.GameMessages.DamageType value = org.bwapi.proxy.messages.GameMessages.DamageType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(10, rawValue);
              } else {
                bitField0_ |= 0x00000200;
                damageType_ = value;
              }
              break;
            }
            case 88: {
              int rawValue = input.readEnum();
              org.bwapi.proxy.messages.GameMessages.ExplosionType value = org.bwapi.proxy.messages.GameMessages.ExplosionType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(11, rawValue);
              } else {
                bitField0_ |= 0x00000400;
                explosionType_ = value;
              }
              break;
            }
            case 96: {
              bitField0_ |= 0x00000800;
              minRange_ = input.readInt32();
              break;
            }
            case 104: {
              bitField0_ |= 0x00001000;
              maxRange_ = input.readInt32();
              break;
            }
            case 112: {
              bitField0_ |= 0x00002000;
              innerSplashRadius_ = input.readInt32();
              break;
            }
            case 120: {
              bitField0_ |= 0x00004000;
              medianSplashRadius_ = input.readInt32();
              break;
            }
            case 128: {
              bitField0_ |= 0x00008000;
              outerSplashRadius_ = input.readInt32();
              break;
            }
            case 136: {
              bitField0_ |= 0x00010000;
              targetsAir_ = input.readBool();
              break;
            }
            case 144: {
              bitField0_ |= 0x00020000;
              targetsGround_ = input.readBool();
              break;
            }
            case 152: {
              bitField0_ |= 0x00040000;
              targetsMechanical_ = input.readBool();
              break;
            }
            case 160: {
              bitField0_ |= 0x00080000;
              targetsOrganic_ = input.readBool();
              break;
            }
            case 168: {
              bitField0_ |= 0x00100000;
              targetsNonBuilding_ = input.readBool();
              break;
            }
            case 176: {
              bitField0_ |= 0x00200000;
              targetsNonRobotic_ = input.readBool();
              break;
            }
            case 184: {
              bitField0_ |= 0x00400000;
              targetsTerrain_ = input.readBool();
              break;
            }
            case 192: {
              bitField0_ |= 0x00800000;
              targetsOrgOrMech_ = input.readBool();
              break;
            }
            case 200: {
              bitField0_ |= 0x01000000;
              targetsOwn_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_WeaponTypeData_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_WeaponTypeData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.bwapi.proxy.messages.GameMessages.WeaponTypeData.class, org.bwapi.proxy.messages.GameMessages.WeaponTypeData.Builder.class);
    }

    public static com.google.protobuf.Parser<WeaponTypeData> PARSER =
        new com.google.protobuf.AbstractParser<WeaponTypeData>() {
      public WeaponTypeData parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new WeaponTypeData(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    // required int32 id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private int id_;
    /**
     * <code>required int32 id = 1;</code>
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required int32 id = 1;</code>
     */
    public int getId() {
      return id_;
    }

    // required string name = 2;
    public static final int NAME_FIELD_NUMBER = 2;
    private java.lang.Object name_;
    /**
     * <code>required string name = 2;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>required string name = 2;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string name = 2;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // required .messages.TechType tech = 3;
    public static final int TECH_FIELD_NUMBER = 3;
    private org.bwapi.proxy.messages.GameMessages.TechType tech_;
    /**
     * <code>required .messages.TechType tech = 3;</code>
     */
    public boolean hasTech() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>required .messages.TechType tech = 3;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.TechType getTech() {
      return tech_;
    }
    /**
     * <code>required .messages.TechType tech = 3;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder getTechOrBuilder() {
      return tech_;
    }

    // required .messages.UnitType whatUses = 4;
    public static final int WHATUSES_FIELD_NUMBER = 4;
    private org.bwapi.proxy.messages.GameMessages.UnitType whatUses_;
    /**
     * <code>required .messages.UnitType whatUses = 4;</code>
     */
    public boolean hasWhatUses() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>required .messages.UnitType whatUses = 4;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitType getWhatUses() {
      return whatUses_;
    }
    /**
     * <code>required .messages.UnitType whatUses = 4;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder getWhatUsesOrBuilder() {
      return whatUses_;
    }

    // required int32 damageAmount = 5;
    public static final int DAMAGEAMOUNT_FIELD_NUMBER = 5;
    private int damageAmount_;
    /**
     * <code>required int32 damageAmount = 5;</code>
     */
    public boolean hasDamageAmount() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>required int32 damageAmount = 5;</code>
     */
    public int getDamageAmount() {
      return damageAmount_;
    }

    // required int32 damageBonus = 6;
    public static final int DAMAGEBONUS_FIELD_NUMBER = 6;
    private int damageBonus_;
    /**
     * <code>required int32 damageBonus = 6;</code>
     */
    public boolean hasDamageBonus() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>required int32 damageBonus = 6;</code>
     */
    public int getDamageBonus() {
      return damageBonus_;
    }

    // required int32 damageCooldown = 7;
    public static final int DAMAGECOOLDOWN_FIELD_NUMBER = 7;
    private int damageCooldown_;
    /**
     * <code>required int32 damageCooldown = 7;</code>
     */
    public boolean hasDamageCooldown() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>required int32 damageCooldown = 7;</code>
     */
    public int getDamageCooldown() {
      return damageCooldown_;
    }

    // required int32 damageFactor = 8;
    public static final int DAMAGEFACTOR_FIELD_NUMBER = 8;
    private int damageFactor_;
    /**
     * <code>required int32 damageFactor = 8;</code>
     */
    public boolean hasDamageFactor() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>required int32 damageFactor = 8;</code>
     */
    public int getDamageFactor() {
      return damageFactor_;
    }

    // required .messages.UpgradeType upgradeType = 9;
    public static final int UPGRADETYPE_FIELD_NUMBER = 9;
    private org.bwapi.proxy.messages.GameMessages.UpgradeType upgradeType_;
    /**
     * <code>required .messages.UpgradeType upgradeType = 9;</code>
     */
    public boolean hasUpgradeType() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>required .messages.UpgradeType upgradeType = 9;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UpgradeType getUpgradeType() {
      return upgradeType_;
    }
    /**
     * <code>required .messages.UpgradeType upgradeType = 9;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder getUpgradeTypeOrBuilder() {
      return upgradeType_;
    }

    // required .messages.DamageType damageType = 10;
    public static final int DAMAGETYPE_FIELD_NUMBER = 10;
    private org.bwapi.proxy.messages.GameMessages.DamageType damageType_;
    /**
     * <code>required .messages.DamageType damageType = 10;</code>
     */
    public boolean hasDamageType() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>required .messages.DamageType damageType = 10;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.DamageType getDamageType() {
      return damageType_;
    }

    // required .messages.ExplosionType explosionType = 11;
    public static final int EXPLOSIONTYPE_FIELD_NUMBER = 11;
    private org.bwapi.proxy.messages.GameMessages.ExplosionType explosionType_;
    /**
     * <code>required .messages.ExplosionType explosionType = 11;</code>
     */
    public boolean hasExplosionType() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>required .messages.ExplosionType explosionType = 11;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.ExplosionType getExplosionType() {
      return explosionType_;
    }

    // required int32 minRange = 12;
    public static final int MINRANGE_FIELD_NUMBER = 12;
    private int minRange_;
    /**
     * <code>required int32 minRange = 12;</code>
     */
    public boolean hasMinRange() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>required int32 minRange = 12;</code>
     */
    public int getMinRange() {
      return minRange_;
    }

    // required int32 maxRange = 13;
    public static final int MAXRANGE_FIELD_NUMBER = 13;
    private int maxRange_;
    /**
     * <code>required int32 maxRange = 13;</code>
     */
    public boolean hasMaxRange() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     * <code>required int32 maxRange = 13;</code>
     */
    public int getMaxRange() {
      return maxRange_;
    }

    // required int32 innerSplashRadius = 14;
    public static final int INNERSPLASHRADIUS_FIELD_NUMBER = 14;
    private int innerSplashRadius_;
    /**
     * <code>required int32 innerSplashRadius = 14;</code>
     */
    public boolean hasInnerSplashRadius() {
      return ((bitField0_ & 0x00002000) == 0x00002000);
    }
    /**
     * <code>required int32 innerSplashRadius = 14;</code>
     */
    public int getInnerSplashRadius() {
      return innerSplashRadius_;
    }

    // required int32 medianSplashRadius = 15;
    public static final int MEDIANSPLASHRADIUS_FIELD_NUMBER = 15;
    private int medianSplashRadius_;
    /**
     * <code>required int32 medianSplashRadius = 15;</code>
     */
    public boolean hasMedianSplashRadius() {
      return ((bitField0_ & 0x00004000) == 0x00004000);
    }
    /**
     * <code>required int32 medianSplashRadius = 15;</code>
     */
    public int getMedianSplashRadius() {
      return medianSplashRadius_;
    }

    // required int32 outerSplashRadius = 16;
    public static final int OUTERSPLASHRADIUS_FIELD_NUMBER = 16;
    private int outerSplashRadius_;
    /**
     * <code>required int32 outerSplashRadius = 16;</code>
     */
    public boolean hasOuterSplashRadius() {
      return ((bitField0_ & 0x00008000) == 0x00008000);
    }
    /**
     * <code>required int32 outerSplashRadius = 16;</code>
     */
    public int getOuterSplashRadius() {
      return outerSplashRadius_;
    }

    // required bool targetsAir = 17;
    public static final int TARGETSAIR_FIELD_NUMBER = 17;
    private boolean targetsAir_;
    /**
     * <code>required bool targetsAir = 17;</code>
     */
    public boolean hasTargetsAir() {
      return ((bitField0_ & 0x00010000) == 0x00010000);
    }
    /**
     * <code>required bool targetsAir = 17;</code>
     */
    public boolean getTargetsAir() {
      return targetsAir_;
    }

    // required bool targetsGround = 18;
    public static final int TARGETSGROUND_FIELD_NUMBER = 18;
    private boolean targetsGround_;
    /**
     * <code>required bool targetsGround = 18;</code>
     */
    public boolean hasTargetsGround() {
      return ((bitField0_ & 0x00020000) == 0x00020000);
    }
    /**
     * <code>required bool targetsGround = 18;</code>
     */
    public boolean getTargetsGround() {
      return targetsGround_;
    }

    // required bool targetsMechanical = 19;
    public static final int TARGETSMECHANICAL_FIELD_NUMBER = 19;
    private boolean targetsMechanical_;
    /**
     * <code>required bool targetsMechanical = 19;</code>
     */
    public boolean hasTargetsMechanical() {
      return ((bitField0_ & 0x00040000) == 0x00040000);
    }
    /**
     * <code>required bool targetsMechanical = 19;</code>
     */
    public boolean getTargetsMechanical() {
      return targetsMechanical_;
    }

    // required bool targetsOrganic = 20;
    public static final int TARGETSORGANIC_FIELD_NUMBER = 20;
    private boolean targetsOrganic_;
    /**
     * <code>required bool targetsOrganic = 20;</code>
     */
    public boolean hasTargetsOrganic() {
      return ((bitField0_ & 0x00080000) == 0x00080000);
    }
    /**
     * <code>required bool targetsOrganic = 20;</code>
     */
    public boolean getTargetsOrganic() {
      return targetsOrganic_;
    }

    // required bool targetsNonBuilding = 21;
    public static final int TARGETSNONBUILDING_FIELD_NUMBER = 21;
    private boolean targetsNonBuilding_;
    /**
     * <code>required bool targetsNonBuilding = 21;</code>
     */
    public boolean hasTargetsNonBuilding() {
      return ((bitField0_ & 0x00100000) == 0x00100000);
    }
    /**
     * <code>required bool targetsNonBuilding = 21;</code>
     */
    public boolean getTargetsNonBuilding() {
      return targetsNonBuilding_;
    }

    // required bool targetsNonRobotic = 22;
    public static final int TARGETSNONROBOTIC_FIELD_NUMBER = 22;
    private boolean targetsNonRobotic_;
    /**
     * <code>required bool targetsNonRobotic = 22;</code>
     */
    public boolean hasTargetsNonRobotic() {
      return ((bitField0_ & 0x00200000) == 0x00200000);
    }
    /**
     * <code>required bool targetsNonRobotic = 22;</code>
     */
    public boolean getTargetsNonRobotic() {
      return targetsNonRobotic_;
    }

    // required bool targetsTerrain = 23;
    public static final int TARGETSTERRAIN_FIELD_NUMBER = 23;
    private boolean targetsTerrain_;
    /**
     * <code>required bool targetsTerrain = 23;</code>
     */
    public boolean hasTargetsTerrain() {
      return ((bitField0_ & 0x00400000) == 0x00400000);
    }
    /**
     * <code>required bool targetsTerrain = 23;</code>
     */
    public boolean getTargetsTerrain() {
      return targetsTerrain_;
    }

    // required bool targetsOrgOrMech = 24;
    public static final int TARGETSORGORMECH_FIELD_NUMBER = 24;
    private boolean targetsOrgOrMech_;
    /**
     * <code>required bool targetsOrgOrMech = 24;</code>
     */
    public boolean hasTargetsOrgOrMech() {
      return ((bitField0_ & 0x00800000) == 0x00800000);
    }
    /**
     * <code>required bool targetsOrgOrMech = 24;</code>
     */
    public boolean getTargetsOrgOrMech() {
      return targetsOrgOrMech_;
    }

    // required bool targetsOwn = 25;
    public static final int TARGETSOWN_FIELD_NUMBER = 25;
    private boolean targetsOwn_;
    /**
     * <code>required bool targetsOwn = 25;</code>
     */
    public boolean hasTargetsOwn() {
      return ((bitField0_ & 0x01000000) == 0x01000000);
    }
    /**
     * <code>required bool targetsOwn = 25;</code>
     */
    public boolean getTargetsOwn() {
      return targetsOwn_;
    }

    private void initFields() {
      id_ = 0;
      name_ = "";
      tech_ = org.bwapi.proxy.messages.GameMessages.TechType.getDefaultInstance();
      whatUses_ = org.bwapi.proxy.messages.GameMessages.UnitType.getDefaultInstance();
      damageAmount_ = 0;
      damageBonus_ = 0;
      damageCooldown_ = 0;
      damageFactor_ = 0;
      upgradeType_ = org.bwapi.proxy.messages.GameMessages.UpgradeType.getDefaultInstance();
      damageType_ = org.bwapi.proxy.messages.GameMessages.DamageType.IndependentDamage;
      explosionType_ = org.bwapi.proxy.messages.GameMessages.ExplosionType.ExplosionNone;
      minRange_ = 0;
      maxRange_ = 0;
      innerSplashRadius_ = 0;
      medianSplashRadius_ = 0;
      outerSplashRadius_ = 0;
      targetsAir_ = false;
      targetsGround_ = false;
      targetsMechanical_ = false;
      targetsOrganic_ = false;
      targetsNonBuilding_ = false;
      targetsNonRobotic_ = false;
      targetsTerrain_ = false;
      targetsOrgOrMech_ = false;
      targetsOwn_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasId()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasName()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasTech()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasWhatUses()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasDamageAmount()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasDamageBonus()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasDamageCooldown()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasDamageFactor()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasUpgradeType()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasDamageType()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasExplosionType()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasMinRange()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasMaxRange()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasInnerSplashRadius()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasMedianSplashRadius()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasOuterSplashRadius()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasTargetsAir()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasTargetsGround()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasTargetsMechanical()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasTargetsOrganic()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasTargetsNonBuilding()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasTargetsNonRobotic()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasTargetsTerrain()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasTargetsOrgOrMech()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasTargetsOwn()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!getTech().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!getWhatUses().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!getUpgradeType().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getNameBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, tech_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, whatUses_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt32(5, damageAmount_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeInt32(6, damageBonus_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeInt32(7, damageCooldown_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeInt32(8, damageFactor_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeMessage(9, upgradeType_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeEnum(10, damageType_.getNumber());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeEnum(11, explosionType_.getNumber());
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeInt32(12, minRange_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeInt32(13, maxRange_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        output.writeInt32(14, innerSplashRadius_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        output.writeInt32(15, medianSplashRadius_);
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        output.writeInt32(16, outerSplashRadius_);
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        output.writeBool(17, targetsAir_);
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        output.writeBool(18, targetsGround_);
      }
      if (((bitField0_ & 0x00040000) == 0x00040000)) {
        output.writeBool(19, targetsMechanical_);
      }
      if (((bitField0_ & 0x00080000) == 0x00080000)) {
        output.writeBool(20, targetsOrganic_);
      }
      if (((bitField0_ & 0x00100000) == 0x00100000)) {
        output.writeBool(21, targetsNonBuilding_);
      }
      if (((bitField0_ & 0x00200000) == 0x00200000)) {
        output.writeBool(22, targetsNonRobotic_);
      }
      if (((bitField0_ & 0x00400000) == 0x00400000)) {
        output.writeBool(23, targetsTerrain_);
      }
      if (((bitField0_ & 0x00800000) == 0x00800000)) {
        output.writeBool(24, targetsOrgOrMech_);
      }
      if (((bitField0_ & 0x01000000) == 0x01000000)) {
        output.writeBool(25, targetsOwn_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getNameBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, tech_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, whatUses_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, damageAmount_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(6, damageBonus_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(7, damageCooldown_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(8, damageFactor_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, upgradeType_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(10, damageType_.getNumber());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(11, explosionType_.getNumber());
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(12, minRange_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(13, maxRange_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(14, innerSplashRadius_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(15, medianSplashRadius_);
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(16, outerSplashRadius_);
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(17, targetsAir_);
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(18, targetsGround_);
      }
      if (((bitField0_ & 0x00040000) == 0x00040000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(19, targetsMechanical_);
      }
      if (((bitField0_ & 0x00080000) == 0x00080000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(20, targetsOrganic_);
      }
      if (((bitField0_ & 0x00100000) == 0x00100000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(21, targetsNonBuilding_);
      }
      if (((bitField0_ & 0x00200000) == 0x00200000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(22, targetsNonRobotic_);
      }
      if (((bitField0_ & 0x00400000) == 0x00400000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(23, targetsTerrain_);
      }
      if (((bitField0_ & 0x00800000) == 0x00800000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(24, targetsOrgOrMech_);
      }
      if (((bitField0_ & 0x01000000) == 0x01000000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(25, targetsOwn_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.bwapi.proxy.messages.GameMessages.WeaponTypeData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.WeaponTypeData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.WeaponTypeData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.WeaponTypeData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.WeaponTypeData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.WeaponTypeData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.WeaponTypeData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.WeaponTypeData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.WeaponTypeData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.WeaponTypeData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bwapi.proxy.messages.GameMessages.WeaponTypeData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code messages.WeaponTypeData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bwapi.proxy.messages.GameMessages.WeaponTypeDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_WeaponTypeData_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_WeaponTypeData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.bwapi.proxy.messages.GameMessages.WeaponTypeData.class, org.bwapi.proxy.messages.GameMessages.WeaponTypeData.Builder.class);
      }

      // Construct using org.bwapi.proxy.messages.GameMessages.WeaponTypeData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getTechFieldBuilder();
          getWhatUsesFieldBuilder();
          getUpgradeTypeFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        id_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        if (techBuilder_ == null) {
          tech_ = org.bwapi.proxy.messages.GameMessages.TechType.getDefaultInstance();
        } else {
          techBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (whatUsesBuilder_ == null) {
          whatUses_ = org.bwapi.proxy.messages.GameMessages.UnitType.getDefaultInstance();
        } else {
          whatUsesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        damageAmount_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        damageBonus_ = 0;
        bitField0_ = (bitField0_ & ~0x00000020);
        damageCooldown_ = 0;
        bitField0_ = (bitField0_ & ~0x00000040);
        damageFactor_ = 0;
        bitField0_ = (bitField0_ & ~0x00000080);
        if (upgradeTypeBuilder_ == null) {
          upgradeType_ = org.bwapi.proxy.messages.GameMessages.UpgradeType.getDefaultInstance();
        } else {
          upgradeTypeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        damageType_ = org.bwapi.proxy.messages.GameMessages.DamageType.IndependentDamage;
        bitField0_ = (bitField0_ & ~0x00000200);
        explosionType_ = org.bwapi.proxy.messages.GameMessages.ExplosionType.ExplosionNone;
        bitField0_ = (bitField0_ & ~0x00000400);
        minRange_ = 0;
        bitField0_ = (bitField0_ & ~0x00000800);
        maxRange_ = 0;
        bitField0_ = (bitField0_ & ~0x00001000);
        innerSplashRadius_ = 0;
        bitField0_ = (bitField0_ & ~0x00002000);
        medianSplashRadius_ = 0;
        bitField0_ = (bitField0_ & ~0x00004000);
        outerSplashRadius_ = 0;
        bitField0_ = (bitField0_ & ~0x00008000);
        targetsAir_ = false;
        bitField0_ = (bitField0_ & ~0x00010000);
        targetsGround_ = false;
        bitField0_ = (bitField0_ & ~0x00020000);
        targetsMechanical_ = false;
        bitField0_ = (bitField0_ & ~0x00040000);
        targetsOrganic_ = false;
        bitField0_ = (bitField0_ & ~0x00080000);
        targetsNonBuilding_ = false;
        bitField0_ = (bitField0_ & ~0x00100000);
        targetsNonRobotic_ = false;
        bitField0_ = (bitField0_ & ~0x00200000);
        targetsTerrain_ = false;
        bitField0_ = (bitField0_ & ~0x00400000);
        targetsOrgOrMech_ = false;
        bitField0_ = (bitField0_ & ~0x00800000);
        targetsOwn_ = false;
        bitField0_ = (bitField0_ & ~0x01000000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_WeaponTypeData_descriptor;
      }

      public org.bwapi.proxy.messages.GameMessages.WeaponTypeData getDefaultInstanceForType() {
        return org.bwapi.proxy.messages.GameMessages.WeaponTypeData.getDefaultInstance();
      }

      public org.bwapi.proxy.messages.GameMessages.WeaponTypeData build() {
        org.bwapi.proxy.messages.GameMessages.WeaponTypeData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.bwapi.proxy.messages.GameMessages.WeaponTypeData buildPartial() {
        org.bwapi.proxy.messages.GameMessages.WeaponTypeData result = new org.bwapi.proxy.messages.GameMessages.WeaponTypeData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (techBuilder_ == null) {
          result.tech_ = tech_;
        } else {
          result.tech_ = techBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (whatUsesBuilder_ == null) {
          result.whatUses_ = whatUses_;
        } else {
          result.whatUses_ = whatUsesBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.damageAmount_ = damageAmount_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.damageBonus_ = damageBonus_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.damageCooldown_ = damageCooldown_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.damageFactor_ = damageFactor_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        if (upgradeTypeBuilder_ == null) {
          result.upgradeType_ = upgradeType_;
        } else {
          result.upgradeType_ = upgradeTypeBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        result.damageType_ = damageType_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        result.explosionType_ = explosionType_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        result.minRange_ = minRange_;
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00001000;
        }
        result.maxRange_ = maxRange_;
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00002000;
        }
        result.innerSplashRadius_ = innerSplashRadius_;
        if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
          to_bitField0_ |= 0x00004000;
        }
        result.medianSplashRadius_ = medianSplashRadius_;
        if (((from_bitField0_ & 0x00008000) == 0x00008000)) {
          to_bitField0_ |= 0x00008000;
        }
        result.outerSplashRadius_ = outerSplashRadius_;
        if (((from_bitField0_ & 0x00010000) == 0x00010000)) {
          to_bitField0_ |= 0x00010000;
        }
        result.targetsAir_ = targetsAir_;
        if (((from_bitField0_ & 0x00020000) == 0x00020000)) {
          to_bitField0_ |= 0x00020000;
        }
        result.targetsGround_ = targetsGround_;
        if (((from_bitField0_ & 0x00040000) == 0x00040000)) {
          to_bitField0_ |= 0x00040000;
        }
        result.targetsMechanical_ = targetsMechanical_;
        if (((from_bitField0_ & 0x00080000) == 0x00080000)) {
          to_bitField0_ |= 0x00080000;
        }
        result.targetsOrganic_ = targetsOrganic_;
        if (((from_bitField0_ & 0x00100000) == 0x00100000)) {
          to_bitField0_ |= 0x00100000;
        }
        result.targetsNonBuilding_ = targetsNonBuilding_;
        if (((from_bitField0_ & 0x00200000) == 0x00200000)) {
          to_bitField0_ |= 0x00200000;
        }
        result.targetsNonRobotic_ = targetsNonRobotic_;
        if (((from_bitField0_ & 0x00400000) == 0x00400000)) {
          to_bitField0_ |= 0x00400000;
        }
        result.targetsTerrain_ = targetsTerrain_;
        if (((from_bitField0_ & 0x00800000) == 0x00800000)) {
          to_bitField0_ |= 0x00800000;
        }
        result.targetsOrgOrMech_ = targetsOrgOrMech_;
        if (((from_bitField0_ & 0x01000000) == 0x01000000)) {
          to_bitField0_ |= 0x01000000;
        }
        result.targetsOwn_ = targetsOwn_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bwapi.proxy.messages.GameMessages.WeaponTypeData) {
          return mergeFrom((org.bwapi.proxy.messages.GameMessages.WeaponTypeData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.bwapi.proxy.messages.GameMessages.WeaponTypeData other) {
        if (other == org.bwapi.proxy.messages.GameMessages.WeaponTypeData.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasName()) {
          bitField0_ |= 0x00000002;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasTech()) {
          mergeTech(other.getTech());
        }
        if (other.hasWhatUses()) {
          mergeWhatUses(other.getWhatUses());
        }
        if (other.hasDamageAmount()) {
          setDamageAmount(other.getDamageAmount());
        }
        if (other.hasDamageBonus()) {
          setDamageBonus(other.getDamageBonus());
        }
        if (other.hasDamageCooldown()) {
          setDamageCooldown(other.getDamageCooldown());
        }
        if (other.hasDamageFactor()) {
          setDamageFactor(other.getDamageFactor());
        }
        if (other.hasUpgradeType()) {
          mergeUpgradeType(other.getUpgradeType());
        }
        if (other.hasDamageType()) {
          setDamageType(other.getDamageType());
        }
        if (other.hasExplosionType()) {
          setExplosionType(other.getExplosionType());
        }
        if (other.hasMinRange()) {
          setMinRange(other.getMinRange());
        }
        if (other.hasMaxRange()) {
          setMaxRange(other.getMaxRange());
        }
        if (other.hasInnerSplashRadius()) {
          setInnerSplashRadius(other.getInnerSplashRadius());
        }
        if (other.hasMedianSplashRadius()) {
          setMedianSplashRadius(other.getMedianSplashRadius());
        }
        if (other.hasOuterSplashRadius()) {
          setOuterSplashRadius(other.getOuterSplashRadius());
        }
        if (other.hasTargetsAir()) {
          setTargetsAir(other.getTargetsAir());
        }
        if (other.hasTargetsGround()) {
          setTargetsGround(other.getTargetsGround());
        }
        if (other.hasTargetsMechanical()) {
          setTargetsMechanical(other.getTargetsMechanical());
        }
        if (other.hasTargetsOrganic()) {
          setTargetsOrganic(other.getTargetsOrganic());
        }
        if (other.hasTargetsNonBuilding()) {
          setTargetsNonBuilding(other.getTargetsNonBuilding());
        }
        if (other.hasTargetsNonRobotic()) {
          setTargetsNonRobotic(other.getTargetsNonRobotic());
        }
        if (other.hasTargetsTerrain()) {
          setTargetsTerrain(other.getTargetsTerrain());
        }
        if (other.hasTargetsOrgOrMech()) {
          setTargetsOrgOrMech(other.getTargetsOrgOrMech());
        }
        if (other.hasTargetsOwn()) {
          setTargetsOwn(other.getTargetsOwn());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasId()) {
          
          return false;
        }
        if (!hasName()) {
          
          return false;
        }
        if (!hasTech()) {
          
          return false;
        }
        if (!hasWhatUses()) {
          
          return false;
        }
        if (!hasDamageAmount()) {
          
          return false;
        }
        if (!hasDamageBonus()) {
          
          return false;
        }
        if (!hasDamageCooldown()) {
          
          return false;
        }
        if (!hasDamageFactor()) {
          
          return false;
        }
        if (!hasUpgradeType()) {
          
          return false;
        }
        if (!hasDamageType()) {
          
          return false;
        }
        if (!hasExplosionType()) {
          
          return false;
        }
        if (!hasMinRange()) {
          
          return false;
        }
        if (!hasMaxRange()) {
          
          return false;
        }
        if (!hasInnerSplashRadius()) {
          
          return false;
        }
        if (!hasMedianSplashRadius()) {
          
          return false;
        }
        if (!hasOuterSplashRadius()) {
          
          return false;
        }
        if (!hasTargetsAir()) {
          
          return false;
        }
        if (!hasTargetsGround()) {
          
          return false;
        }
        if (!hasTargetsMechanical()) {
          
          return false;
        }
        if (!hasTargetsOrganic()) {
          
          return false;
        }
        if (!hasTargetsNonBuilding()) {
          
          return false;
        }
        if (!hasTargetsNonRobotic()) {
          
          return false;
        }
        if (!hasTargetsTerrain()) {
          
          return false;
        }
        if (!hasTargetsOrgOrMech()) {
          
          return false;
        }
        if (!hasTargetsOwn()) {
          
          return false;
        }
        if (!getTech().isInitialized()) {
          
          return false;
        }
        if (!getWhatUses().isInitialized()) {
          
          return false;
        }
        if (!getUpgradeType().isInitialized()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.bwapi.proxy.messages.GameMessages.WeaponTypeData parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.bwapi.proxy.messages.GameMessages.WeaponTypeData) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required int32 id = 1;
      private int id_ ;
      /**
       * <code>required int32 id = 1;</code>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public int getId() {
        return id_;
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public Builder setId(int value) {
        bitField0_ |= 0x00000001;
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = 0;
        onChanged();
        return this;
      }

      // required string name = 2;
      private java.lang.Object name_ = "";
      /**
       * <code>required string name = 2;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required string name = 2;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string name = 2;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string name = 2;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string name = 2;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000002);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>required string name = 2;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }

      // required .messages.TechType tech = 3;
      private org.bwapi.proxy.messages.GameMessages.TechType tech_ = org.bwapi.proxy.messages.GameMessages.TechType.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.TechType, org.bwapi.proxy.messages.GameMessages.TechType.Builder, org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder> techBuilder_;
      /**
       * <code>required .messages.TechType tech = 3;</code>
       */
      public boolean hasTech() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>required .messages.TechType tech = 3;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.TechType getTech() {
        if (techBuilder_ == null) {
          return tech_;
        } else {
          return techBuilder_.getMessage();
        }
      }
      /**
       * <code>required .messages.TechType tech = 3;</code>
       */
      public Builder setTech(org.bwapi.proxy.messages.GameMessages.TechType value) {
        if (techBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          tech_ = value;
          onChanged();
        } else {
          techBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>required .messages.TechType tech = 3;</code>
       */
      public Builder setTech(
          org.bwapi.proxy.messages.GameMessages.TechType.Builder builderForValue) {
        if (techBuilder_ == null) {
          tech_ = builderForValue.build();
          onChanged();
        } else {
          techBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>required .messages.TechType tech = 3;</code>
       */
      public Builder mergeTech(org.bwapi.proxy.messages.GameMessages.TechType value) {
        if (techBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              tech_ != org.bwapi.proxy.messages.GameMessages.TechType.getDefaultInstance()) {
            tech_ =
              org.bwapi.proxy.messages.GameMessages.TechType.newBuilder(tech_).mergeFrom(value).buildPartial();
          } else {
            tech_ = value;
          }
          onChanged();
        } else {
          techBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>required .messages.TechType tech = 3;</code>
       */
      public Builder clearTech() {
        if (techBuilder_ == null) {
          tech_ = org.bwapi.proxy.messages.GameMessages.TechType.getDefaultInstance();
          onChanged();
        } else {
          techBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>required .messages.TechType tech = 3;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.TechType.Builder getTechBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getTechFieldBuilder().getBuilder();
      }
      /**
       * <code>required .messages.TechType tech = 3;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder getTechOrBuilder() {
        if (techBuilder_ != null) {
          return techBuilder_.getMessageOrBuilder();
        } else {
          return tech_;
        }
      }
      /**
       * <code>required .messages.TechType tech = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.TechType, org.bwapi.proxy.messages.GameMessages.TechType.Builder, org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder> 
          getTechFieldBuilder() {
        if (techBuilder_ == null) {
          techBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.TechType, org.bwapi.proxy.messages.GameMessages.TechType.Builder, org.bwapi.proxy.messages.GameMessages.TechTypeOrBuilder>(
                  tech_,
                  getParentForChildren(),
                  isClean());
          tech_ = null;
        }
        return techBuilder_;
      }

      // required .messages.UnitType whatUses = 4;
      private org.bwapi.proxy.messages.GameMessages.UnitType whatUses_ = org.bwapi.proxy.messages.GameMessages.UnitType.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitType, org.bwapi.proxy.messages.GameMessages.UnitType.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder> whatUsesBuilder_;
      /**
       * <code>required .messages.UnitType whatUses = 4;</code>
       */
      public boolean hasWhatUses() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>required .messages.UnitType whatUses = 4;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitType getWhatUses() {
        if (whatUsesBuilder_ == null) {
          return whatUses_;
        } else {
          return whatUsesBuilder_.getMessage();
        }
      }
      /**
       * <code>required .messages.UnitType whatUses = 4;</code>
       */
      public Builder setWhatUses(org.bwapi.proxy.messages.GameMessages.UnitType value) {
        if (whatUsesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          whatUses_ = value;
          onChanged();
        } else {
          whatUsesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>required .messages.UnitType whatUses = 4;</code>
       */
      public Builder setWhatUses(
          org.bwapi.proxy.messages.GameMessages.UnitType.Builder builderForValue) {
        if (whatUsesBuilder_ == null) {
          whatUses_ = builderForValue.build();
          onChanged();
        } else {
          whatUsesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>required .messages.UnitType whatUses = 4;</code>
       */
      public Builder mergeWhatUses(org.bwapi.proxy.messages.GameMessages.UnitType value) {
        if (whatUsesBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              whatUses_ != org.bwapi.proxy.messages.GameMessages.UnitType.getDefaultInstance()) {
            whatUses_ =
              org.bwapi.proxy.messages.GameMessages.UnitType.newBuilder(whatUses_).mergeFrom(value).buildPartial();
          } else {
            whatUses_ = value;
          }
          onChanged();
        } else {
          whatUsesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>required .messages.UnitType whatUses = 4;</code>
       */
      public Builder clearWhatUses() {
        if (whatUsesBuilder_ == null) {
          whatUses_ = org.bwapi.proxy.messages.GameMessages.UnitType.getDefaultInstance();
          onChanged();
        } else {
          whatUsesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       * <code>required .messages.UnitType whatUses = 4;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitType.Builder getWhatUsesBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getWhatUsesFieldBuilder().getBuilder();
      }
      /**
       * <code>required .messages.UnitType whatUses = 4;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder getWhatUsesOrBuilder() {
        if (whatUsesBuilder_ != null) {
          return whatUsesBuilder_.getMessageOrBuilder();
        } else {
          return whatUses_;
        }
      }
      /**
       * <code>required .messages.UnitType whatUses = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitType, org.bwapi.proxy.messages.GameMessages.UnitType.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder> 
          getWhatUsesFieldBuilder() {
        if (whatUsesBuilder_ == null) {
          whatUsesBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UnitType, org.bwapi.proxy.messages.GameMessages.UnitType.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeOrBuilder>(
                  whatUses_,
                  getParentForChildren(),
                  isClean());
          whatUses_ = null;
        }
        return whatUsesBuilder_;
      }

      // required int32 damageAmount = 5;
      private int damageAmount_ ;
      /**
       * <code>required int32 damageAmount = 5;</code>
       */
      public boolean hasDamageAmount() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>required int32 damageAmount = 5;</code>
       */
      public int getDamageAmount() {
        return damageAmount_;
      }
      /**
       * <code>required int32 damageAmount = 5;</code>
       */
      public Builder setDamageAmount(int value) {
        bitField0_ |= 0x00000010;
        damageAmount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 damageAmount = 5;</code>
       */
      public Builder clearDamageAmount() {
        bitField0_ = (bitField0_ & ~0x00000010);
        damageAmount_ = 0;
        onChanged();
        return this;
      }

      // required int32 damageBonus = 6;
      private int damageBonus_ ;
      /**
       * <code>required int32 damageBonus = 6;</code>
       */
      public boolean hasDamageBonus() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>required int32 damageBonus = 6;</code>
       */
      public int getDamageBonus() {
        return damageBonus_;
      }
      /**
       * <code>required int32 damageBonus = 6;</code>
       */
      public Builder setDamageBonus(int value) {
        bitField0_ |= 0x00000020;
        damageBonus_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 damageBonus = 6;</code>
       */
      public Builder clearDamageBonus() {
        bitField0_ = (bitField0_ & ~0x00000020);
        damageBonus_ = 0;
        onChanged();
        return this;
      }

      // required int32 damageCooldown = 7;
      private int damageCooldown_ ;
      /**
       * <code>required int32 damageCooldown = 7;</code>
       */
      public boolean hasDamageCooldown() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>required int32 damageCooldown = 7;</code>
       */
      public int getDamageCooldown() {
        return damageCooldown_;
      }
      /**
       * <code>required int32 damageCooldown = 7;</code>
       */
      public Builder setDamageCooldown(int value) {
        bitField0_ |= 0x00000040;
        damageCooldown_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 damageCooldown = 7;</code>
       */
      public Builder clearDamageCooldown() {
        bitField0_ = (bitField0_ & ~0x00000040);
        damageCooldown_ = 0;
        onChanged();
        return this;
      }

      // required int32 damageFactor = 8;
      private int damageFactor_ ;
      /**
       * <code>required int32 damageFactor = 8;</code>
       */
      public boolean hasDamageFactor() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>required int32 damageFactor = 8;</code>
       */
      public int getDamageFactor() {
        return damageFactor_;
      }
      /**
       * <code>required int32 damageFactor = 8;</code>
       */
      public Builder setDamageFactor(int value) {
        bitField0_ |= 0x00000080;
        damageFactor_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 damageFactor = 8;</code>
       */
      public Builder clearDamageFactor() {
        bitField0_ = (bitField0_ & ~0x00000080);
        damageFactor_ = 0;
        onChanged();
        return this;
      }

      // required .messages.UpgradeType upgradeType = 9;
      private org.bwapi.proxy.messages.GameMessages.UpgradeType upgradeType_ = org.bwapi.proxy.messages.GameMessages.UpgradeType.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UpgradeType, org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder, org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder> upgradeTypeBuilder_;
      /**
       * <code>required .messages.UpgradeType upgradeType = 9;</code>
       */
      public boolean hasUpgradeType() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>required .messages.UpgradeType upgradeType = 9;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeType getUpgradeType() {
        if (upgradeTypeBuilder_ == null) {
          return upgradeType_;
        } else {
          return upgradeTypeBuilder_.getMessage();
        }
      }
      /**
       * <code>required .messages.UpgradeType upgradeType = 9;</code>
       */
      public Builder setUpgradeType(org.bwapi.proxy.messages.GameMessages.UpgradeType value) {
        if (upgradeTypeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          upgradeType_ = value;
          onChanged();
        } else {
          upgradeTypeBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>required .messages.UpgradeType upgradeType = 9;</code>
       */
      public Builder setUpgradeType(
          org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder builderForValue) {
        if (upgradeTypeBuilder_ == null) {
          upgradeType_ = builderForValue.build();
          onChanged();
        } else {
          upgradeTypeBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>required .messages.UpgradeType upgradeType = 9;</code>
       */
      public Builder mergeUpgradeType(org.bwapi.proxy.messages.GameMessages.UpgradeType value) {
        if (upgradeTypeBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100) &&
              upgradeType_ != org.bwapi.proxy.messages.GameMessages.UpgradeType.getDefaultInstance()) {
            upgradeType_ =
              org.bwapi.proxy.messages.GameMessages.UpgradeType.newBuilder(upgradeType_).mergeFrom(value).buildPartial();
          } else {
            upgradeType_ = value;
          }
          onChanged();
        } else {
          upgradeTypeBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>required .messages.UpgradeType upgradeType = 9;</code>
       */
      public Builder clearUpgradeType() {
        if (upgradeTypeBuilder_ == null) {
          upgradeType_ = org.bwapi.proxy.messages.GameMessages.UpgradeType.getDefaultInstance();
          onChanged();
        } else {
          upgradeTypeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      /**
       * <code>required .messages.UpgradeType upgradeType = 9;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder getUpgradeTypeBuilder() {
        bitField0_ |= 0x00000100;
        onChanged();
        return getUpgradeTypeFieldBuilder().getBuilder();
      }
      /**
       * <code>required .messages.UpgradeType upgradeType = 9;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder getUpgradeTypeOrBuilder() {
        if (upgradeTypeBuilder_ != null) {
          return upgradeTypeBuilder_.getMessageOrBuilder();
        } else {
          return upgradeType_;
        }
      }
      /**
       * <code>required .messages.UpgradeType upgradeType = 9;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UpgradeType, org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder, org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder> 
          getUpgradeTypeFieldBuilder() {
        if (upgradeTypeBuilder_ == null) {
          upgradeTypeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UpgradeType, org.bwapi.proxy.messages.GameMessages.UpgradeType.Builder, org.bwapi.proxy.messages.GameMessages.UpgradeTypeOrBuilder>(
                  upgradeType_,
                  getParentForChildren(),
                  isClean());
          upgradeType_ = null;
        }
        return upgradeTypeBuilder_;
      }

      // required .messages.DamageType damageType = 10;
      private org.bwapi.proxy.messages.GameMessages.DamageType damageType_ = org.bwapi.proxy.messages.GameMessages.DamageType.IndependentDamage;
      /**
       * <code>required .messages.DamageType damageType = 10;</code>
       */
      public boolean hasDamageType() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>required .messages.DamageType damageType = 10;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.DamageType getDamageType() {
        return damageType_;
      }
      /**
       * <code>required .messages.DamageType damageType = 10;</code>
       */
      public Builder setDamageType(org.bwapi.proxy.messages.GameMessages.DamageType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000200;
        damageType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required .messages.DamageType damageType = 10;</code>
       */
      public Builder clearDamageType() {
        bitField0_ = (bitField0_ & ~0x00000200);
        damageType_ = org.bwapi.proxy.messages.GameMessages.DamageType.IndependentDamage;
        onChanged();
        return this;
      }

      // required .messages.ExplosionType explosionType = 11;
      private org.bwapi.proxy.messages.GameMessages.ExplosionType explosionType_ = org.bwapi.proxy.messages.GameMessages.ExplosionType.ExplosionNone;
      /**
       * <code>required .messages.ExplosionType explosionType = 11;</code>
       */
      public boolean hasExplosionType() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>required .messages.ExplosionType explosionType = 11;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.ExplosionType getExplosionType() {
        return explosionType_;
      }
      /**
       * <code>required .messages.ExplosionType explosionType = 11;</code>
       */
      public Builder setExplosionType(org.bwapi.proxy.messages.GameMessages.ExplosionType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000400;
        explosionType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required .messages.ExplosionType explosionType = 11;</code>
       */
      public Builder clearExplosionType() {
        bitField0_ = (bitField0_ & ~0x00000400);
        explosionType_ = org.bwapi.proxy.messages.GameMessages.ExplosionType.ExplosionNone;
        onChanged();
        return this;
      }

      // required int32 minRange = 12;
      private int minRange_ ;
      /**
       * <code>required int32 minRange = 12;</code>
       */
      public boolean hasMinRange() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>required int32 minRange = 12;</code>
       */
      public int getMinRange() {
        return minRange_;
      }
      /**
       * <code>required int32 minRange = 12;</code>
       */
      public Builder setMinRange(int value) {
        bitField0_ |= 0x00000800;
        minRange_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 minRange = 12;</code>
       */
      public Builder clearMinRange() {
        bitField0_ = (bitField0_ & ~0x00000800);
        minRange_ = 0;
        onChanged();
        return this;
      }

      // required int32 maxRange = 13;
      private int maxRange_ ;
      /**
       * <code>required int32 maxRange = 13;</code>
       */
      public boolean hasMaxRange() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>required int32 maxRange = 13;</code>
       */
      public int getMaxRange() {
        return maxRange_;
      }
      /**
       * <code>required int32 maxRange = 13;</code>
       */
      public Builder setMaxRange(int value) {
        bitField0_ |= 0x00001000;
        maxRange_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 maxRange = 13;</code>
       */
      public Builder clearMaxRange() {
        bitField0_ = (bitField0_ & ~0x00001000);
        maxRange_ = 0;
        onChanged();
        return this;
      }

      // required int32 innerSplashRadius = 14;
      private int innerSplashRadius_ ;
      /**
       * <code>required int32 innerSplashRadius = 14;</code>
       */
      public boolean hasInnerSplashRadius() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       * <code>required int32 innerSplashRadius = 14;</code>
       */
      public int getInnerSplashRadius() {
        return innerSplashRadius_;
      }
      /**
       * <code>required int32 innerSplashRadius = 14;</code>
       */
      public Builder setInnerSplashRadius(int value) {
        bitField0_ |= 0x00002000;
        innerSplashRadius_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 innerSplashRadius = 14;</code>
       */
      public Builder clearInnerSplashRadius() {
        bitField0_ = (bitField0_ & ~0x00002000);
        innerSplashRadius_ = 0;
        onChanged();
        return this;
      }

      // required int32 medianSplashRadius = 15;
      private int medianSplashRadius_ ;
      /**
       * <code>required int32 medianSplashRadius = 15;</code>
       */
      public boolean hasMedianSplashRadius() {
        return ((bitField0_ & 0x00004000) == 0x00004000);
      }
      /**
       * <code>required int32 medianSplashRadius = 15;</code>
       */
      public int getMedianSplashRadius() {
        return medianSplashRadius_;
      }
      /**
       * <code>required int32 medianSplashRadius = 15;</code>
       */
      public Builder setMedianSplashRadius(int value) {
        bitField0_ |= 0x00004000;
        medianSplashRadius_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 medianSplashRadius = 15;</code>
       */
      public Builder clearMedianSplashRadius() {
        bitField0_ = (bitField0_ & ~0x00004000);
        medianSplashRadius_ = 0;
        onChanged();
        return this;
      }

      // required int32 outerSplashRadius = 16;
      private int outerSplashRadius_ ;
      /**
       * <code>required int32 outerSplashRadius = 16;</code>
       */
      public boolean hasOuterSplashRadius() {
        return ((bitField0_ & 0x00008000) == 0x00008000);
      }
      /**
       * <code>required int32 outerSplashRadius = 16;</code>
       */
      public int getOuterSplashRadius() {
        return outerSplashRadius_;
      }
      /**
       * <code>required int32 outerSplashRadius = 16;</code>
       */
      public Builder setOuterSplashRadius(int value) {
        bitField0_ |= 0x00008000;
        outerSplashRadius_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 outerSplashRadius = 16;</code>
       */
      public Builder clearOuterSplashRadius() {
        bitField0_ = (bitField0_ & ~0x00008000);
        outerSplashRadius_ = 0;
        onChanged();
        return this;
      }

      // required bool targetsAir = 17;
      private boolean targetsAir_ ;
      /**
       * <code>required bool targetsAir = 17;</code>
       */
      public boolean hasTargetsAir() {
        return ((bitField0_ & 0x00010000) == 0x00010000);
      }
      /**
       * <code>required bool targetsAir = 17;</code>
       */
      public boolean getTargetsAir() {
        return targetsAir_;
      }
      /**
       * <code>required bool targetsAir = 17;</code>
       */
      public Builder setTargetsAir(boolean value) {
        bitField0_ |= 0x00010000;
        targetsAir_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bool targetsAir = 17;</code>
       */
      public Builder clearTargetsAir() {
        bitField0_ = (bitField0_ & ~0x00010000);
        targetsAir_ = false;
        onChanged();
        return this;
      }

      // required bool targetsGround = 18;
      private boolean targetsGround_ ;
      /**
       * <code>required bool targetsGround = 18;</code>
       */
      public boolean hasTargetsGround() {
        return ((bitField0_ & 0x00020000) == 0x00020000);
      }
      /**
       * <code>required bool targetsGround = 18;</code>
       */
      public boolean getTargetsGround() {
        return targetsGround_;
      }
      /**
       * <code>required bool targetsGround = 18;</code>
       */
      public Builder setTargetsGround(boolean value) {
        bitField0_ |= 0x00020000;
        targetsGround_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bool targetsGround = 18;</code>
       */
      public Builder clearTargetsGround() {
        bitField0_ = (bitField0_ & ~0x00020000);
        targetsGround_ = false;
        onChanged();
        return this;
      }

      // required bool targetsMechanical = 19;
      private boolean targetsMechanical_ ;
      /**
       * <code>required bool targetsMechanical = 19;</code>
       */
      public boolean hasTargetsMechanical() {
        return ((bitField0_ & 0x00040000) == 0x00040000);
      }
      /**
       * <code>required bool targetsMechanical = 19;</code>
       */
      public boolean getTargetsMechanical() {
        return targetsMechanical_;
      }
      /**
       * <code>required bool targetsMechanical = 19;</code>
       */
      public Builder setTargetsMechanical(boolean value) {
        bitField0_ |= 0x00040000;
        targetsMechanical_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bool targetsMechanical = 19;</code>
       */
      public Builder clearTargetsMechanical() {
        bitField0_ = (bitField0_ & ~0x00040000);
        targetsMechanical_ = false;
        onChanged();
        return this;
      }

      // required bool targetsOrganic = 20;
      private boolean targetsOrganic_ ;
      /**
       * <code>required bool targetsOrganic = 20;</code>
       */
      public boolean hasTargetsOrganic() {
        return ((bitField0_ & 0x00080000) == 0x00080000);
      }
      /**
       * <code>required bool targetsOrganic = 20;</code>
       */
      public boolean getTargetsOrganic() {
        return targetsOrganic_;
      }
      /**
       * <code>required bool targetsOrganic = 20;</code>
       */
      public Builder setTargetsOrganic(boolean value) {
        bitField0_ |= 0x00080000;
        targetsOrganic_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bool targetsOrganic = 20;</code>
       */
      public Builder clearTargetsOrganic() {
        bitField0_ = (bitField0_ & ~0x00080000);
        targetsOrganic_ = false;
        onChanged();
        return this;
      }

      // required bool targetsNonBuilding = 21;
      private boolean targetsNonBuilding_ ;
      /**
       * <code>required bool targetsNonBuilding = 21;</code>
       */
      public boolean hasTargetsNonBuilding() {
        return ((bitField0_ & 0x00100000) == 0x00100000);
      }
      /**
       * <code>required bool targetsNonBuilding = 21;</code>
       */
      public boolean getTargetsNonBuilding() {
        return targetsNonBuilding_;
      }
      /**
       * <code>required bool targetsNonBuilding = 21;</code>
       */
      public Builder setTargetsNonBuilding(boolean value) {
        bitField0_ |= 0x00100000;
        targetsNonBuilding_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bool targetsNonBuilding = 21;</code>
       */
      public Builder clearTargetsNonBuilding() {
        bitField0_ = (bitField0_ & ~0x00100000);
        targetsNonBuilding_ = false;
        onChanged();
        return this;
      }

      // required bool targetsNonRobotic = 22;
      private boolean targetsNonRobotic_ ;
      /**
       * <code>required bool targetsNonRobotic = 22;</code>
       */
      public boolean hasTargetsNonRobotic() {
        return ((bitField0_ & 0x00200000) == 0x00200000);
      }
      /**
       * <code>required bool targetsNonRobotic = 22;</code>
       */
      public boolean getTargetsNonRobotic() {
        return targetsNonRobotic_;
      }
      /**
       * <code>required bool targetsNonRobotic = 22;</code>
       */
      public Builder setTargetsNonRobotic(boolean value) {
        bitField0_ |= 0x00200000;
        targetsNonRobotic_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bool targetsNonRobotic = 22;</code>
       */
      public Builder clearTargetsNonRobotic() {
        bitField0_ = (bitField0_ & ~0x00200000);
        targetsNonRobotic_ = false;
        onChanged();
        return this;
      }

      // required bool targetsTerrain = 23;
      private boolean targetsTerrain_ ;
      /**
       * <code>required bool targetsTerrain = 23;</code>
       */
      public boolean hasTargetsTerrain() {
        return ((bitField0_ & 0x00400000) == 0x00400000);
      }
      /**
       * <code>required bool targetsTerrain = 23;</code>
       */
      public boolean getTargetsTerrain() {
        return targetsTerrain_;
      }
      /**
       * <code>required bool targetsTerrain = 23;</code>
       */
      public Builder setTargetsTerrain(boolean value) {
        bitField0_ |= 0x00400000;
        targetsTerrain_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bool targetsTerrain = 23;</code>
       */
      public Builder clearTargetsTerrain() {
        bitField0_ = (bitField0_ & ~0x00400000);
        targetsTerrain_ = false;
        onChanged();
        return this;
      }

      // required bool targetsOrgOrMech = 24;
      private boolean targetsOrgOrMech_ ;
      /**
       * <code>required bool targetsOrgOrMech = 24;</code>
       */
      public boolean hasTargetsOrgOrMech() {
        return ((bitField0_ & 0x00800000) == 0x00800000);
      }
      /**
       * <code>required bool targetsOrgOrMech = 24;</code>
       */
      public boolean getTargetsOrgOrMech() {
        return targetsOrgOrMech_;
      }
      /**
       * <code>required bool targetsOrgOrMech = 24;</code>
       */
      public Builder setTargetsOrgOrMech(boolean value) {
        bitField0_ |= 0x00800000;
        targetsOrgOrMech_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bool targetsOrgOrMech = 24;</code>
       */
      public Builder clearTargetsOrgOrMech() {
        bitField0_ = (bitField0_ & ~0x00800000);
        targetsOrgOrMech_ = false;
        onChanged();
        return this;
      }

      // required bool targetsOwn = 25;
      private boolean targetsOwn_ ;
      /**
       * <code>required bool targetsOwn = 25;</code>
       */
      public boolean hasTargetsOwn() {
        return ((bitField0_ & 0x01000000) == 0x01000000);
      }
      /**
       * <code>required bool targetsOwn = 25;</code>
       */
      public boolean getTargetsOwn() {
        return targetsOwn_;
      }
      /**
       * <code>required bool targetsOwn = 25;</code>
       */
      public Builder setTargetsOwn(boolean value) {
        bitField0_ |= 0x01000000;
        targetsOwn_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bool targetsOwn = 25;</code>
       */
      public Builder clearTargetsOwn() {
        bitField0_ = (bitField0_ & ~0x01000000);
        targetsOwn_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:messages.WeaponTypeData)
    }

    static {
      defaultInstance = new WeaponTypeData(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:messages.WeaponTypeData)
  }

  public interface StaticGameDataOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // repeated .messages.UnitId staticMinerals = 1;
    /**
     * <code>repeated .messages.UnitId staticMinerals = 1;</code>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> 
        getStaticMineralsList();
    /**
     * <code>repeated .messages.UnitId staticMinerals = 1;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitId getStaticMinerals(int index);
    /**
     * <code>repeated .messages.UnitId staticMinerals = 1;</code>
     */
    int getStaticMineralsCount();
    /**
     * <code>repeated .messages.UnitId staticMinerals = 1;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> 
        getStaticMineralsOrBuilderList();
    /**
     * <code>repeated .messages.UnitId staticMinerals = 1;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder getStaticMineralsOrBuilder(
        int index);

    // repeated .messages.UnitId staticGeysers = 2;
    /**
     * <code>repeated .messages.UnitId staticGeysers = 2;</code>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> 
        getStaticGeysersList();
    /**
     * <code>repeated .messages.UnitId staticGeysers = 2;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitId getStaticGeysers(int index);
    /**
     * <code>repeated .messages.UnitId staticGeysers = 2;</code>
     */
    int getStaticGeysersCount();
    /**
     * <code>repeated .messages.UnitId staticGeysers = 2;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> 
        getStaticGeysersOrBuilderList();
    /**
     * <code>repeated .messages.UnitId staticGeysers = 2;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder getStaticGeysersOrBuilder(
        int index);

    // repeated .messages.UnitId staticNeutralUnits = 3;
    /**
     * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> 
        getStaticNeutralUnitsList();
    /**
     * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitId getStaticNeutralUnits(int index);
    /**
     * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
     */
    int getStaticNeutralUnitsCount();
    /**
     * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> 
        getStaticNeutralUnitsOrBuilderList();
    /**
     * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder getStaticNeutralUnitsOrBuilder(
        int index);

    // required int32 mapWidth = 4;
    /**
     * <code>required int32 mapWidth = 4;</code>
     */
    boolean hasMapWidth();
    /**
     * <code>required int32 mapWidth = 4;</code>
     */
    int getMapWidth();

    // required int32 mapHeight = 5;
    /**
     * <code>required int32 mapHeight = 5;</code>
     */
    boolean hasMapHeight();
    /**
     * <code>required int32 mapHeight = 5;</code>
     */
    int getMapHeight();

    // required string mapFilename = 6;
    /**
     * <code>required string mapFilename = 6;</code>
     */
    boolean hasMapFilename();
    /**
     * <code>required string mapFilename = 6;</code>
     */
    java.lang.String getMapFilename();
    /**
     * <code>required string mapFilename = 6;</code>
     */
    com.google.protobuf.ByteString
        getMapFilenameBytes();

    // required string mapName = 7;
    /**
     * <code>required string mapName = 7;</code>
     */
    boolean hasMapName();
    /**
     * <code>required string mapName = 7;</code>
     */
    java.lang.String getMapName();
    /**
     * <code>required string mapName = 7;</code>
     */
    com.google.protobuf.ByteString
        getMapNameBytes();

    // required string mapHash = 8;
    /**
     * <code>required string mapHash = 8;</code>
     */
    boolean hasMapHash();
    /**
     * <code>required string mapHash = 8;</code>
     */
    java.lang.String getMapHash();
    /**
     * <code>required string mapHash = 8;</code>
     */
    com.google.protobuf.ByteString
        getMapHashBytes();

    // repeated fixed32 walkable = 9;
    /**
     * <code>repeated fixed32 walkable = 9;</code>
     *
     * <pre>
     * bitmasks; increment y's before x's.
     * </pre>
     */
    java.util.List<java.lang.Integer> getWalkableList();
    /**
     * <code>repeated fixed32 walkable = 9;</code>
     *
     * <pre>
     * bitmasks; increment y's before x's.
     * </pre>
     */
    int getWalkableCount();
    /**
     * <code>repeated fixed32 walkable = 9;</code>
     *
     * <pre>
     * bitmasks; increment y's before x's.
     * </pre>
     */
    int getWalkable(int index);

    // repeated fixed32 buildable = 10;
    /**
     * <code>repeated fixed32 buildable = 10;</code>
     */
    java.util.List<java.lang.Integer> getBuildableList();
    /**
     * <code>repeated fixed32 buildable = 10;</code>
     */
    int getBuildableCount();
    /**
     * <code>repeated fixed32 buildable = 10;</code>
     */
    int getBuildable(int index);

    // repeated int32 groundHeight = 17;
    /**
     * <code>repeated int32 groundHeight = 17;</code>
     *
     * <pre>
     * not a bit mask.
     * </pre>
     */
    java.util.List<java.lang.Integer> getGroundHeightList();
    /**
     * <code>repeated int32 groundHeight = 17;</code>
     *
     * <pre>
     * not a bit mask.
     * </pre>
     */
    int getGroundHeightCount();
    /**
     * <code>repeated int32 groundHeight = 17;</code>
     *
     * <pre>
     * not a bit mask.
     * </pre>
     */
    int getGroundHeight(int index);

    // repeated .messages.UnitTypeData unitTypes = 11;
    /**
     * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeData> 
        getUnitTypesList();
    /**
     * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitTypeData getUnitTypes(int index);
    /**
     * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
     */
    int getUnitTypesCount();
    /**
     * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeDataOrBuilder> 
        getUnitTypesOrBuilderList();
    /**
     * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitTypeDataOrBuilder getUnitTypesOrBuilder(
        int index);

    // repeated .messages.WeaponTypeData weapons = 12;
    /**
     * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.WeaponTypeData> 
        getWeaponsList();
    /**
     * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
     */
    org.bwapi.proxy.messages.GameMessages.WeaponTypeData getWeapons(int index);
    /**
     * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
     */
    int getWeaponsCount();
    /**
     * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.WeaponTypeDataOrBuilder> 
        getWeaponsOrBuilderList();
    /**
     * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
     */
    org.bwapi.proxy.messages.GameMessages.WeaponTypeDataOrBuilder getWeaponsOrBuilder(
        int index);

    // repeated .messages.UpgradeTypeData upgrades = 13;
    /**
     * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.UpgradeTypeData> 
        getUpgradesList();
    /**
     * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UpgradeTypeData getUpgrades(int index);
    /**
     * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
     */
    int getUpgradesCount();
    /**
     * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UpgradeTypeDataOrBuilder> 
        getUpgradesOrBuilderList();
    /**
     * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UpgradeTypeDataOrBuilder getUpgradesOrBuilder(
        int index);

    // repeated .messages.TechTypeData techs = 14;
    /**
     * <code>repeated .messages.TechTypeData techs = 14;</code>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.TechTypeData> 
        getTechsList();
    /**
     * <code>repeated .messages.TechTypeData techs = 14;</code>
     */
    org.bwapi.proxy.messages.GameMessages.TechTypeData getTechs(int index);
    /**
     * <code>repeated .messages.TechTypeData techs = 14;</code>
     */
    int getTechsCount();
    /**
     * <code>repeated .messages.TechTypeData techs = 14;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.TechTypeDataOrBuilder> 
        getTechsOrBuilderList();
    /**
     * <code>repeated .messages.TechTypeData techs = 14;</code>
     */
    org.bwapi.proxy.messages.GameMessages.TechTypeDataOrBuilder getTechsOrBuilder(
        int index);

    // repeated .messages.Color colors = 15;
    /**
     * <code>repeated .messages.Color colors = 15;</code>
     */
    java.util.List<org.bwapi.proxy.messages.DrawCommands.Color> 
        getColorsList();
    /**
     * <code>repeated .messages.Color colors = 15;</code>
     */
    org.bwapi.proxy.messages.DrawCommands.Color getColors(int index);
    /**
     * <code>repeated .messages.Color colors = 15;</code>
     */
    int getColorsCount();
    /**
     * <code>repeated .messages.Color colors = 15;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.DrawCommands.ColorOrBuilder> 
        getColorsOrBuilderList();
    /**
     * <code>repeated .messages.Color colors = 15;</code>
     */
    org.bwapi.proxy.messages.DrawCommands.ColorOrBuilder getColorsOrBuilder(
        int index);

    // repeated .messages.RaceData races = 18;
    /**
     * <code>repeated .messages.RaceData races = 18;</code>
     */
    java.util.List<org.bwapi.proxy.messages.GameMessages.RaceData> 
        getRacesList();
    /**
     * <code>repeated .messages.RaceData races = 18;</code>
     */
    org.bwapi.proxy.messages.GameMessages.RaceData getRaces(int index);
    /**
     * <code>repeated .messages.RaceData races = 18;</code>
     */
    int getRacesCount();
    /**
     * <code>repeated .messages.RaceData races = 18;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.GameMessages.RaceDataOrBuilder> 
        getRacesOrBuilderList();
    /**
     * <code>repeated .messages.RaceData races = 18;</code>
     */
    org.bwapi.proxy.messages.GameMessages.RaceDataOrBuilder getRacesOrBuilder(
        int index);

    // repeated .messages.TilePosition startLocations = 16;
    /**
     * <code>repeated .messages.TilePosition startLocations = 16;</code>
     */
    java.util.List<org.bwapi.proxy.messages.BasicTypes.TilePosition> 
        getStartLocationsList();
    /**
     * <code>repeated .messages.TilePosition startLocations = 16;</code>
     */
    org.bwapi.proxy.messages.BasicTypes.TilePosition getStartLocations(int index);
    /**
     * <code>repeated .messages.TilePosition startLocations = 16;</code>
     */
    int getStartLocationsCount();
    /**
     * <code>repeated .messages.TilePosition startLocations = 16;</code>
     */
    java.util.List<? extends org.bwapi.proxy.messages.BasicTypes.TilePositionOrBuilder> 
        getStartLocationsOrBuilderList();
    /**
     * <code>repeated .messages.TilePosition startLocations = 16;</code>
     */
    org.bwapi.proxy.messages.BasicTypes.TilePositionOrBuilder getStartLocationsOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code messages.StaticGameData}
   */
  public static final class StaticGameData extends
      com.google.protobuf.GeneratedMessage
      implements StaticGameDataOrBuilder {
    // Use StaticGameData.newBuilder() to construct.
    private StaticGameData(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private StaticGameData(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final StaticGameData defaultInstance;
    public static StaticGameData getDefaultInstance() {
      return defaultInstance;
    }

    public StaticGameData getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private StaticGameData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                staticMinerals_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitId>();
                mutable_bitField0_ |= 0x00000001;
              }
              staticMinerals_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.UnitId.PARSER, extensionRegistry));
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                staticGeysers_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitId>();
                mutable_bitField0_ |= 0x00000002;
              }
              staticGeysers_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.UnitId.PARSER, extensionRegistry));
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                staticNeutralUnits_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitId>();
                mutable_bitField0_ |= 0x00000004;
              }
              staticNeutralUnits_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.UnitId.PARSER, extensionRegistry));
              break;
            }
            case 32: {
              bitField0_ |= 0x00000001;
              mapWidth_ = input.readInt32();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000002;
              mapHeight_ = input.readInt32();
              break;
            }
            case 50: {
              bitField0_ |= 0x00000004;
              mapFilename_ = input.readBytes();
              break;
            }
            case 58: {
              bitField0_ |= 0x00000008;
              mapName_ = input.readBytes();
              break;
            }
            case 66: {
              bitField0_ |= 0x00000010;
              mapHash_ = input.readBytes();
              break;
            }
            case 77: {
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                walkable_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000100;
              }
              walkable_.add(input.readFixed32());
              break;
            }
            case 74: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100) && input.getBytesUntilLimit() > 0) {
                walkable_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000100;
              }
              while (input.getBytesUntilLimit() > 0) {
                walkable_.add(input.readFixed32());
              }
              input.popLimit(limit);
              break;
            }
            case 85: {
              if (!((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
                buildable_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000200;
              }
              buildable_.add(input.readFixed32());
              break;
            }
            case 82: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000200) == 0x00000200) && input.getBytesUntilLimit() > 0) {
                buildable_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000200;
              }
              while (input.getBytesUntilLimit() > 0) {
                buildable_.add(input.readFixed32());
              }
              input.popLimit(limit);
              break;
            }
            case 90: {
              if (!((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
                unitTypes_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitTypeData>();
                mutable_bitField0_ |= 0x00000800;
              }
              unitTypes_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.UnitTypeData.PARSER, extensionRegistry));
              break;
            }
            case 98: {
              if (!((mutable_bitField0_ & 0x00001000) == 0x00001000)) {
                weapons_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.WeaponTypeData>();
                mutable_bitField0_ |= 0x00001000;
              }
              weapons_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.WeaponTypeData.PARSER, extensionRegistry));
              break;
            }
            case 106: {
              if (!((mutable_bitField0_ & 0x00002000) == 0x00002000)) {
                upgrades_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UpgradeTypeData>();
                mutable_bitField0_ |= 0x00002000;
              }
              upgrades_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.UpgradeTypeData.PARSER, extensionRegistry));
              break;
            }
            case 114: {
              if (!((mutable_bitField0_ & 0x00004000) == 0x00004000)) {
                techs_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.TechTypeData>();
                mutable_bitField0_ |= 0x00004000;
              }
              techs_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.TechTypeData.PARSER, extensionRegistry));
              break;
            }
            case 122: {
              if (!((mutable_bitField0_ & 0x00008000) == 0x00008000)) {
                colors_ = new java.util.ArrayList<org.bwapi.proxy.messages.DrawCommands.Color>();
                mutable_bitField0_ |= 0x00008000;
              }
              colors_.add(input.readMessage(org.bwapi.proxy.messages.DrawCommands.Color.PARSER, extensionRegistry));
              break;
            }
            case 130: {
              if (!((mutable_bitField0_ & 0x00020000) == 0x00020000)) {
                startLocations_ = new java.util.ArrayList<org.bwapi.proxy.messages.BasicTypes.TilePosition>();
                mutable_bitField0_ |= 0x00020000;
              }
              startLocations_.add(input.readMessage(org.bwapi.proxy.messages.BasicTypes.TilePosition.PARSER, extensionRegistry));
              break;
            }
            case 136: {
              if (!((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
                groundHeight_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000400;
              }
              groundHeight_.add(input.readInt32());
              break;
            }
            case 138: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000400) == 0x00000400) && input.getBytesUntilLimit() > 0) {
                groundHeight_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000400;
              }
              while (input.getBytesUntilLimit() > 0) {
                groundHeight_.add(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 146: {
              if (!((mutable_bitField0_ & 0x00010000) == 0x00010000)) {
                races_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.RaceData>();
                mutable_bitField0_ |= 0x00010000;
              }
              races_.add(input.readMessage(org.bwapi.proxy.messages.GameMessages.RaceData.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          staticMinerals_ = java.util.Collections.unmodifiableList(staticMinerals_);
        }
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          staticGeysers_ = java.util.Collections.unmodifiableList(staticGeysers_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          staticNeutralUnits_ = java.util.Collections.unmodifiableList(staticNeutralUnits_);
        }
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          walkable_ = java.util.Collections.unmodifiableList(walkable_);
        }
        if (((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
          buildable_ = java.util.Collections.unmodifiableList(buildable_);
        }
        if (((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
          unitTypes_ = java.util.Collections.unmodifiableList(unitTypes_);
        }
        if (((mutable_bitField0_ & 0x00001000) == 0x00001000)) {
          weapons_ = java.util.Collections.unmodifiableList(weapons_);
        }
        if (((mutable_bitField0_ & 0x00002000) == 0x00002000)) {
          upgrades_ = java.util.Collections.unmodifiableList(upgrades_);
        }
        if (((mutable_bitField0_ & 0x00004000) == 0x00004000)) {
          techs_ = java.util.Collections.unmodifiableList(techs_);
        }
        if (((mutable_bitField0_ & 0x00008000) == 0x00008000)) {
          colors_ = java.util.Collections.unmodifiableList(colors_);
        }
        if (((mutable_bitField0_ & 0x00020000) == 0x00020000)) {
          startLocations_ = java.util.Collections.unmodifiableList(startLocations_);
        }
        if (((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
          groundHeight_ = java.util.Collections.unmodifiableList(groundHeight_);
        }
        if (((mutable_bitField0_ & 0x00010000) == 0x00010000)) {
          races_ = java.util.Collections.unmodifiableList(races_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_StaticGameData_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_StaticGameData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.bwapi.proxy.messages.GameMessages.StaticGameData.class, org.bwapi.proxy.messages.GameMessages.StaticGameData.Builder.class);
    }

    public static com.google.protobuf.Parser<StaticGameData> PARSER =
        new com.google.protobuf.AbstractParser<StaticGameData>() {
      public StaticGameData parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new StaticGameData(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    // repeated .messages.UnitId staticMinerals = 1;
    public static final int STATICMINERALS_FIELD_NUMBER = 1;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> staticMinerals_;
    /**
     * <code>repeated .messages.UnitId staticMinerals = 1;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> getStaticMineralsList() {
      return staticMinerals_;
    }
    /**
     * <code>repeated .messages.UnitId staticMinerals = 1;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> 
        getStaticMineralsOrBuilderList() {
      return staticMinerals_;
    }
    /**
     * <code>repeated .messages.UnitId staticMinerals = 1;</code>
     */
    public int getStaticMineralsCount() {
      return staticMinerals_.size();
    }
    /**
     * <code>repeated .messages.UnitId staticMinerals = 1;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitId getStaticMinerals(int index) {
      return staticMinerals_.get(index);
    }
    /**
     * <code>repeated .messages.UnitId staticMinerals = 1;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder getStaticMineralsOrBuilder(
        int index) {
      return staticMinerals_.get(index);
    }

    // repeated .messages.UnitId staticGeysers = 2;
    public static final int STATICGEYSERS_FIELD_NUMBER = 2;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> staticGeysers_;
    /**
     * <code>repeated .messages.UnitId staticGeysers = 2;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> getStaticGeysersList() {
      return staticGeysers_;
    }
    /**
     * <code>repeated .messages.UnitId staticGeysers = 2;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> 
        getStaticGeysersOrBuilderList() {
      return staticGeysers_;
    }
    /**
     * <code>repeated .messages.UnitId staticGeysers = 2;</code>
     */
    public int getStaticGeysersCount() {
      return staticGeysers_.size();
    }
    /**
     * <code>repeated .messages.UnitId staticGeysers = 2;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitId getStaticGeysers(int index) {
      return staticGeysers_.get(index);
    }
    /**
     * <code>repeated .messages.UnitId staticGeysers = 2;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder getStaticGeysersOrBuilder(
        int index) {
      return staticGeysers_.get(index);
    }

    // repeated .messages.UnitId staticNeutralUnits = 3;
    public static final int STATICNEUTRALUNITS_FIELD_NUMBER = 3;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> staticNeutralUnits_;
    /**
     * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> getStaticNeutralUnitsList() {
      return staticNeutralUnits_;
    }
    /**
     * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> 
        getStaticNeutralUnitsOrBuilderList() {
      return staticNeutralUnits_;
    }
    /**
     * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
     */
    public int getStaticNeutralUnitsCount() {
      return staticNeutralUnits_.size();
    }
    /**
     * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitId getStaticNeutralUnits(int index) {
      return staticNeutralUnits_.get(index);
    }
    /**
     * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder getStaticNeutralUnitsOrBuilder(
        int index) {
      return staticNeutralUnits_.get(index);
    }

    // required int32 mapWidth = 4;
    public static final int MAPWIDTH_FIELD_NUMBER = 4;
    private int mapWidth_;
    /**
     * <code>required int32 mapWidth = 4;</code>
     */
    public boolean hasMapWidth() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required int32 mapWidth = 4;</code>
     */
    public int getMapWidth() {
      return mapWidth_;
    }

    // required int32 mapHeight = 5;
    public static final int MAPHEIGHT_FIELD_NUMBER = 5;
    private int mapHeight_;
    /**
     * <code>required int32 mapHeight = 5;</code>
     */
    public boolean hasMapHeight() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>required int32 mapHeight = 5;</code>
     */
    public int getMapHeight() {
      return mapHeight_;
    }

    // required string mapFilename = 6;
    public static final int MAPFILENAME_FIELD_NUMBER = 6;
    private java.lang.Object mapFilename_;
    /**
     * <code>required string mapFilename = 6;</code>
     */
    public boolean hasMapFilename() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>required string mapFilename = 6;</code>
     */
    public java.lang.String getMapFilename() {
      java.lang.Object ref = mapFilename_;
      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()) {
          mapFilename_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string mapFilename = 6;</code>
     */
    public com.google.protobuf.ByteString
        getMapFilenameBytes() {
      java.lang.Object ref = mapFilename_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        mapFilename_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // required string mapName = 7;
    public static final int MAPNAME_FIELD_NUMBER = 7;
    private java.lang.Object mapName_;
    /**
     * <code>required string mapName = 7;</code>
     */
    public boolean hasMapName() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>required string mapName = 7;</code>
     */
    public java.lang.String getMapName() {
      java.lang.Object ref = mapName_;
      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()) {
          mapName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string mapName = 7;</code>
     */
    public com.google.protobuf.ByteString
        getMapNameBytes() {
      java.lang.Object ref = mapName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        mapName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // required string mapHash = 8;
    public static final int MAPHASH_FIELD_NUMBER = 8;
    private java.lang.Object mapHash_;
    /**
     * <code>required string mapHash = 8;</code>
     */
    public boolean hasMapHash() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>required string mapHash = 8;</code>
     */
    public java.lang.String getMapHash() {
      java.lang.Object ref = mapHash_;
      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()) {
          mapHash_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string mapHash = 8;</code>
     */
    public com.google.protobuf.ByteString
        getMapHashBytes() {
      java.lang.Object ref = mapHash_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        mapHash_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated fixed32 walkable = 9;
    public static final int WALKABLE_FIELD_NUMBER = 9;
    private java.util.List<java.lang.Integer> walkable_;
    /**
     * <code>repeated fixed32 walkable = 9;</code>
     *
     * <pre>
     * bitmasks; increment y's before x's.
     * </pre>
     */
    public java.util.List<java.lang.Integer>
        getWalkableList() {
      return walkable_;
    }
    /**
     * <code>repeated fixed32 walkable = 9;</code>
     *
     * <pre>
     * bitmasks; increment y's before x's.
     * </pre>
     */
    public int getWalkableCount() {
      return walkable_.size();
    }
    /**
     * <code>repeated fixed32 walkable = 9;</code>
     *
     * <pre>
     * bitmasks; increment y's before x's.
     * </pre>
     */
    public int getWalkable(int index) {
      return walkable_.get(index);
    }

    // repeated fixed32 buildable = 10;
    public static final int BUILDABLE_FIELD_NUMBER = 10;
    private java.util.List<java.lang.Integer> buildable_;
    /**
     * <code>repeated fixed32 buildable = 10;</code>
     */
    public java.util.List<java.lang.Integer>
        getBuildableList() {
      return buildable_;
    }
    /**
     * <code>repeated fixed32 buildable = 10;</code>
     */
    public int getBuildableCount() {
      return buildable_.size();
    }
    /**
     * <code>repeated fixed32 buildable = 10;</code>
     */
    public int getBuildable(int index) {
      return buildable_.get(index);
    }

    // repeated int32 groundHeight = 17;
    public static final int GROUNDHEIGHT_FIELD_NUMBER = 17;
    private java.util.List<java.lang.Integer> groundHeight_;
    /**
     * <code>repeated int32 groundHeight = 17;</code>
     *
     * <pre>
     * not a bit mask.
     * </pre>
     */
    public java.util.List<java.lang.Integer>
        getGroundHeightList() {
      return groundHeight_;
    }
    /**
     * <code>repeated int32 groundHeight = 17;</code>
     *
     * <pre>
     * not a bit mask.
     * </pre>
     */
    public int getGroundHeightCount() {
      return groundHeight_.size();
    }
    /**
     * <code>repeated int32 groundHeight = 17;</code>
     *
     * <pre>
     * not a bit mask.
     * </pre>
     */
    public int getGroundHeight(int index) {
      return groundHeight_.get(index);
    }

    // repeated .messages.UnitTypeData unitTypes = 11;
    public static final int UNITTYPES_FIELD_NUMBER = 11;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeData> unitTypes_;
    /**
     * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeData> getUnitTypesList() {
      return unitTypes_;
    }
    /**
     * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeDataOrBuilder> 
        getUnitTypesOrBuilderList() {
      return unitTypes_;
    }
    /**
     * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
     */
    public int getUnitTypesCount() {
      return unitTypes_.size();
    }
    /**
     * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitTypeData getUnitTypes(int index) {
      return unitTypes_.get(index);
    }
    /**
     * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitTypeDataOrBuilder getUnitTypesOrBuilder(
        int index) {
      return unitTypes_.get(index);
    }

    // repeated .messages.WeaponTypeData weapons = 12;
    public static final int WEAPONS_FIELD_NUMBER = 12;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.WeaponTypeData> weapons_;
    /**
     * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.WeaponTypeData> getWeaponsList() {
      return weapons_;
    }
    /**
     * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.WeaponTypeDataOrBuilder> 
        getWeaponsOrBuilderList() {
      return weapons_;
    }
    /**
     * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
     */
    public int getWeaponsCount() {
      return weapons_.size();
    }
    /**
     * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.WeaponTypeData getWeapons(int index) {
      return weapons_.get(index);
    }
    /**
     * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.WeaponTypeDataOrBuilder getWeaponsOrBuilder(
        int index) {
      return weapons_.get(index);
    }

    // repeated .messages.UpgradeTypeData upgrades = 13;
    public static final int UPGRADES_FIELD_NUMBER = 13;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.UpgradeTypeData> upgrades_;
    /**
     * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.UpgradeTypeData> getUpgradesList() {
      return upgrades_;
    }
    /**
     * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UpgradeTypeDataOrBuilder> 
        getUpgradesOrBuilderList() {
      return upgrades_;
    }
    /**
     * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
     */
    public int getUpgradesCount() {
      return upgrades_.size();
    }
    /**
     * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UpgradeTypeData getUpgrades(int index) {
      return upgrades_.get(index);
    }
    /**
     * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UpgradeTypeDataOrBuilder getUpgradesOrBuilder(
        int index) {
      return upgrades_.get(index);
    }

    // repeated .messages.TechTypeData techs = 14;
    public static final int TECHS_FIELD_NUMBER = 14;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.TechTypeData> techs_;
    /**
     * <code>repeated .messages.TechTypeData techs = 14;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.TechTypeData> getTechsList() {
      return techs_;
    }
    /**
     * <code>repeated .messages.TechTypeData techs = 14;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.TechTypeDataOrBuilder> 
        getTechsOrBuilderList() {
      return techs_;
    }
    /**
     * <code>repeated .messages.TechTypeData techs = 14;</code>
     */
    public int getTechsCount() {
      return techs_.size();
    }
    /**
     * <code>repeated .messages.TechTypeData techs = 14;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.TechTypeData getTechs(int index) {
      return techs_.get(index);
    }
    /**
     * <code>repeated .messages.TechTypeData techs = 14;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.TechTypeDataOrBuilder getTechsOrBuilder(
        int index) {
      return techs_.get(index);
    }

    // repeated .messages.Color colors = 15;
    public static final int COLORS_FIELD_NUMBER = 15;
    private java.util.List<org.bwapi.proxy.messages.DrawCommands.Color> colors_;
    /**
     * <code>repeated .messages.Color colors = 15;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.DrawCommands.Color> getColorsList() {
      return colors_;
    }
    /**
     * <code>repeated .messages.Color colors = 15;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.DrawCommands.ColorOrBuilder> 
        getColorsOrBuilderList() {
      return colors_;
    }
    /**
     * <code>repeated .messages.Color colors = 15;</code>
     */
    public int getColorsCount() {
      return colors_.size();
    }
    /**
     * <code>repeated .messages.Color colors = 15;</code>
     */
    public org.bwapi.proxy.messages.DrawCommands.Color getColors(int index) {
      return colors_.get(index);
    }
    /**
     * <code>repeated .messages.Color colors = 15;</code>
     */
    public org.bwapi.proxy.messages.DrawCommands.ColorOrBuilder getColorsOrBuilder(
        int index) {
      return colors_.get(index);
    }

    // repeated .messages.RaceData races = 18;
    public static final int RACES_FIELD_NUMBER = 18;
    private java.util.List<org.bwapi.proxy.messages.GameMessages.RaceData> races_;
    /**
     * <code>repeated .messages.RaceData races = 18;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.GameMessages.RaceData> getRacesList() {
      return races_;
    }
    /**
     * <code>repeated .messages.RaceData races = 18;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.RaceDataOrBuilder> 
        getRacesOrBuilderList() {
      return races_;
    }
    /**
     * <code>repeated .messages.RaceData races = 18;</code>
     */
    public int getRacesCount() {
      return races_.size();
    }
    /**
     * <code>repeated .messages.RaceData races = 18;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.RaceData getRaces(int index) {
      return races_.get(index);
    }
    /**
     * <code>repeated .messages.RaceData races = 18;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.RaceDataOrBuilder getRacesOrBuilder(
        int index) {
      return races_.get(index);
    }

    // repeated .messages.TilePosition startLocations = 16;
    public static final int STARTLOCATIONS_FIELD_NUMBER = 16;
    private java.util.List<org.bwapi.proxy.messages.BasicTypes.TilePosition> startLocations_;
    /**
     * <code>repeated .messages.TilePosition startLocations = 16;</code>
     */
    public java.util.List<org.bwapi.proxy.messages.BasicTypes.TilePosition> getStartLocationsList() {
      return startLocations_;
    }
    /**
     * <code>repeated .messages.TilePosition startLocations = 16;</code>
     */
    public java.util.List<? extends org.bwapi.proxy.messages.BasicTypes.TilePositionOrBuilder> 
        getStartLocationsOrBuilderList() {
      return startLocations_;
    }
    /**
     * <code>repeated .messages.TilePosition startLocations = 16;</code>
     */
    public int getStartLocationsCount() {
      return startLocations_.size();
    }
    /**
     * <code>repeated .messages.TilePosition startLocations = 16;</code>
     */
    public org.bwapi.proxy.messages.BasicTypes.TilePosition getStartLocations(int index) {
      return startLocations_.get(index);
    }
    /**
     * <code>repeated .messages.TilePosition startLocations = 16;</code>
     */
    public org.bwapi.proxy.messages.BasicTypes.TilePositionOrBuilder getStartLocationsOrBuilder(
        int index) {
      return startLocations_.get(index);
    }

    private void initFields() {
      staticMinerals_ = java.util.Collections.emptyList();
      staticGeysers_ = java.util.Collections.emptyList();
      staticNeutralUnits_ = java.util.Collections.emptyList();
      mapWidth_ = 0;
      mapHeight_ = 0;
      mapFilename_ = "";
      mapName_ = "";
      mapHash_ = "";
      walkable_ = java.util.Collections.emptyList();
      buildable_ = java.util.Collections.emptyList();
      groundHeight_ = java.util.Collections.emptyList();
      unitTypes_ = java.util.Collections.emptyList();
      weapons_ = java.util.Collections.emptyList();
      upgrades_ = java.util.Collections.emptyList();
      techs_ = java.util.Collections.emptyList();
      colors_ = java.util.Collections.emptyList();
      races_ = java.util.Collections.emptyList();
      startLocations_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasMapWidth()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasMapHeight()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasMapFilename()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasMapName()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasMapHash()) {
        memoizedIsInitialized = 0;
        return false;
      }
      for (int i = 0; i < getStaticMineralsCount(); i++) {
        if (!getStaticMinerals(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getStaticGeysersCount(); i++) {
        if (!getStaticGeysers(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getStaticNeutralUnitsCount(); i++) {
        if (!getStaticNeutralUnits(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getUnitTypesCount(); i++) {
        if (!getUnitTypes(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getWeaponsCount(); i++) {
        if (!getWeapons(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getUpgradesCount(); i++) {
        if (!getUpgrades(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getTechsCount(); i++) {
        if (!getTechs(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getRacesCount(); i++) {
        if (!getRaces(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getStartLocationsCount(); i++) {
        if (!getStartLocations(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < staticMinerals_.size(); i++) {
        output.writeMessage(1, staticMinerals_.get(i));
      }
      for (int i = 0; i < staticGeysers_.size(); i++) {
        output.writeMessage(2, staticGeysers_.get(i));
      }
      for (int i = 0; i < staticNeutralUnits_.size(); i++) {
        output.writeMessage(3, staticNeutralUnits_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(4, mapWidth_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(5, mapHeight_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(6, getMapFilenameBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(7, getMapNameBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(8, getMapHashBytes());
      }
      for (int i = 0; i < walkable_.size(); i++) {
        output.writeFixed32(9, walkable_.get(i));
      }
      for (int i = 0; i < buildable_.size(); i++) {
        output.writeFixed32(10, buildable_.get(i));
      }
      for (int i = 0; i < unitTypes_.size(); i++) {
        output.writeMessage(11, unitTypes_.get(i));
      }
      for (int i = 0; i < weapons_.size(); i++) {
        output.writeMessage(12, weapons_.get(i));
      }
      for (int i = 0; i < upgrades_.size(); i++) {
        output.writeMessage(13, upgrades_.get(i));
      }
      for (int i = 0; i < techs_.size(); i++) {
        output.writeMessage(14, techs_.get(i));
      }
      for (int i = 0; i < colors_.size(); i++) {
        output.writeMessage(15, colors_.get(i));
      }
      for (int i = 0; i < startLocations_.size(); i++) {
        output.writeMessage(16, startLocations_.get(i));
      }
      for (int i = 0; i < groundHeight_.size(); i++) {
        output.writeInt32(17, groundHeight_.get(i));
      }
      for (int i = 0; i < races_.size(); i++) {
        output.writeMessage(18, races_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < staticMinerals_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, staticMinerals_.get(i));
      }
      for (int i = 0; i < staticGeysers_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, staticGeysers_.get(i));
      }
      for (int i = 0; i < staticNeutralUnits_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, staticNeutralUnits_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, mapWidth_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, mapHeight_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, getMapFilenameBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, getMapNameBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getMapHashBytes());
      }
      {
        int dataSize = 0;
        dataSize = 4 * getWalkableList().size();
        size += dataSize;
        size += 1 * getWalkableList().size();
      }
      {
        int dataSize = 0;
        dataSize = 4 * getBuildableList().size();
        size += dataSize;
        size += 1 * getBuildableList().size();
      }
      for (int i = 0; i < unitTypes_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(11, unitTypes_.get(i));
      }
      for (int i = 0; i < weapons_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, weapons_.get(i));
      }
      for (int i = 0; i < upgrades_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(13, upgrades_.get(i));
      }
      for (int i = 0; i < techs_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(14, techs_.get(i));
      }
      for (int i = 0; i < colors_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(15, colors_.get(i));
      }
      for (int i = 0; i < startLocations_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(16, startLocations_.get(i));
      }
      {
        int dataSize = 0;
        for (int i = 0; i < groundHeight_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(groundHeight_.get(i));
        }
        size += dataSize;
        size += 2 * getGroundHeightList().size();
      }
      for (int i = 0; i < races_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(18, races_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.bwapi.proxy.messages.GameMessages.StaticGameData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.StaticGameData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.StaticGameData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.StaticGameData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.StaticGameData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.StaticGameData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.StaticGameData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.StaticGameData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.StaticGameData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.StaticGameData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bwapi.proxy.messages.GameMessages.StaticGameData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code messages.StaticGameData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bwapi.proxy.messages.GameMessages.StaticGameDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_StaticGameData_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_StaticGameData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.bwapi.proxy.messages.GameMessages.StaticGameData.class, org.bwapi.proxy.messages.GameMessages.StaticGameData.Builder.class);
      }

      // Construct using org.bwapi.proxy.messages.GameMessages.StaticGameData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getStaticMineralsFieldBuilder();
          getStaticGeysersFieldBuilder();
          getStaticNeutralUnitsFieldBuilder();
          getUnitTypesFieldBuilder();
          getWeaponsFieldBuilder();
          getUpgradesFieldBuilder();
          getTechsFieldBuilder();
          getColorsFieldBuilder();
          getRacesFieldBuilder();
          getStartLocationsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (staticMineralsBuilder_ == null) {
          staticMinerals_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          staticMineralsBuilder_.clear();
        }
        if (staticGeysersBuilder_ == null) {
          staticGeysers_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          staticGeysersBuilder_.clear();
        }
        if (staticNeutralUnitsBuilder_ == null) {
          staticNeutralUnits_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          staticNeutralUnitsBuilder_.clear();
        }
        mapWidth_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        mapHeight_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        mapFilename_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        mapName_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        mapHash_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        walkable_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000100);
        buildable_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000200);
        groundHeight_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000400);
        if (unitTypesBuilder_ == null) {
          unitTypes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000800);
        } else {
          unitTypesBuilder_.clear();
        }
        if (weaponsBuilder_ == null) {
          weapons_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00001000);
        } else {
          weaponsBuilder_.clear();
        }
        if (upgradesBuilder_ == null) {
          upgrades_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00002000);
        } else {
          upgradesBuilder_.clear();
        }
        if (techsBuilder_ == null) {
          techs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00004000);
        } else {
          techsBuilder_.clear();
        }
        if (colorsBuilder_ == null) {
          colors_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00008000);
        } else {
          colorsBuilder_.clear();
        }
        if (racesBuilder_ == null) {
          races_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00010000);
        } else {
          racesBuilder_.clear();
        }
        if (startLocationsBuilder_ == null) {
          startLocations_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00020000);
        } else {
          startLocationsBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_StaticGameData_descriptor;
      }

      public org.bwapi.proxy.messages.GameMessages.StaticGameData getDefaultInstanceForType() {
        return org.bwapi.proxy.messages.GameMessages.StaticGameData.getDefaultInstance();
      }

      public org.bwapi.proxy.messages.GameMessages.StaticGameData build() {
        org.bwapi.proxy.messages.GameMessages.StaticGameData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.bwapi.proxy.messages.GameMessages.StaticGameData buildPartial() {
        org.bwapi.proxy.messages.GameMessages.StaticGameData result = new org.bwapi.proxy.messages.GameMessages.StaticGameData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (staticMineralsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            staticMinerals_ = java.util.Collections.unmodifiableList(staticMinerals_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.staticMinerals_ = staticMinerals_;
        } else {
          result.staticMinerals_ = staticMineralsBuilder_.build();
        }
        if (staticGeysersBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            staticGeysers_ = java.util.Collections.unmodifiableList(staticGeysers_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.staticGeysers_ = staticGeysers_;
        } else {
          result.staticGeysers_ = staticGeysersBuilder_.build();
        }
        if (staticNeutralUnitsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            staticNeutralUnits_ = java.util.Collections.unmodifiableList(staticNeutralUnits_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.staticNeutralUnits_ = staticNeutralUnits_;
        } else {
          result.staticNeutralUnits_ = staticNeutralUnitsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000001;
        }
        result.mapWidth_ = mapWidth_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000002;
        }
        result.mapHeight_ = mapHeight_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000004;
        }
        result.mapFilename_ = mapFilename_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000008;
        }
        result.mapName_ = mapName_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000010;
        }
        result.mapHash_ = mapHash_;
        if (((bitField0_ & 0x00000100) == 0x00000100)) {
          walkable_ = java.util.Collections.unmodifiableList(walkable_);
          bitField0_ = (bitField0_ & ~0x00000100);
        }
        result.walkable_ = walkable_;
        if (((bitField0_ & 0x00000200) == 0x00000200)) {
          buildable_ = java.util.Collections.unmodifiableList(buildable_);
          bitField0_ = (bitField0_ & ~0x00000200);
        }
        result.buildable_ = buildable_;
        if (((bitField0_ & 0x00000400) == 0x00000400)) {
          groundHeight_ = java.util.Collections.unmodifiableList(groundHeight_);
          bitField0_ = (bitField0_ & ~0x00000400);
        }
        result.groundHeight_ = groundHeight_;
        if (unitTypesBuilder_ == null) {
          if (((bitField0_ & 0x00000800) == 0x00000800)) {
            unitTypes_ = java.util.Collections.unmodifiableList(unitTypes_);
            bitField0_ = (bitField0_ & ~0x00000800);
          }
          result.unitTypes_ = unitTypes_;
        } else {
          result.unitTypes_ = unitTypesBuilder_.build();
        }
        if (weaponsBuilder_ == null) {
          if (((bitField0_ & 0x00001000) == 0x00001000)) {
            weapons_ = java.util.Collections.unmodifiableList(weapons_);
            bitField0_ = (bitField0_ & ~0x00001000);
          }
          result.weapons_ = weapons_;
        } else {
          result.weapons_ = weaponsBuilder_.build();
        }
        if (upgradesBuilder_ == null) {
          if (((bitField0_ & 0x00002000) == 0x00002000)) {
            upgrades_ = java.util.Collections.unmodifiableList(upgrades_);
            bitField0_ = (bitField0_ & ~0x00002000);
          }
          result.upgrades_ = upgrades_;
        } else {
          result.upgrades_ = upgradesBuilder_.build();
        }
        if (techsBuilder_ == null) {
          if (((bitField0_ & 0x00004000) == 0x00004000)) {
            techs_ = java.util.Collections.unmodifiableList(techs_);
            bitField0_ = (bitField0_ & ~0x00004000);
          }
          result.techs_ = techs_;
        } else {
          result.techs_ = techsBuilder_.build();
        }
        if (colorsBuilder_ == null) {
          if (((bitField0_ & 0x00008000) == 0x00008000)) {
            colors_ = java.util.Collections.unmodifiableList(colors_);
            bitField0_ = (bitField0_ & ~0x00008000);
          }
          result.colors_ = colors_;
        } else {
          result.colors_ = colorsBuilder_.build();
        }
        if (racesBuilder_ == null) {
          if (((bitField0_ & 0x00010000) == 0x00010000)) {
            races_ = java.util.Collections.unmodifiableList(races_);
            bitField0_ = (bitField0_ & ~0x00010000);
          }
          result.races_ = races_;
        } else {
          result.races_ = racesBuilder_.build();
        }
        if (startLocationsBuilder_ == null) {
          if (((bitField0_ & 0x00020000) == 0x00020000)) {
            startLocations_ = java.util.Collections.unmodifiableList(startLocations_);
            bitField0_ = (bitField0_ & ~0x00020000);
          }
          result.startLocations_ = startLocations_;
        } else {
          result.startLocations_ = startLocationsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bwapi.proxy.messages.GameMessages.StaticGameData) {
          return mergeFrom((org.bwapi.proxy.messages.GameMessages.StaticGameData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.bwapi.proxy.messages.GameMessages.StaticGameData other) {
        if (other == org.bwapi.proxy.messages.GameMessages.StaticGameData.getDefaultInstance()) return this;
        if (staticMineralsBuilder_ == null) {
          if (!other.staticMinerals_.isEmpty()) {
            if (staticMinerals_.isEmpty()) {
              staticMinerals_ = other.staticMinerals_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureStaticMineralsIsMutable();
              staticMinerals_.addAll(other.staticMinerals_);
            }
            onChanged();
          }
        } else {
          if (!other.staticMinerals_.isEmpty()) {
            if (staticMineralsBuilder_.isEmpty()) {
              staticMineralsBuilder_.dispose();
              staticMineralsBuilder_ = null;
              staticMinerals_ = other.staticMinerals_;
              bitField0_ = (bitField0_ & ~0x00000001);
              staticMineralsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getStaticMineralsFieldBuilder() : null;
            } else {
              staticMineralsBuilder_.addAllMessages(other.staticMinerals_);
            }
          }
        }
        if (staticGeysersBuilder_ == null) {
          if (!other.staticGeysers_.isEmpty()) {
            if (staticGeysers_.isEmpty()) {
              staticGeysers_ = other.staticGeysers_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureStaticGeysersIsMutable();
              staticGeysers_.addAll(other.staticGeysers_);
            }
            onChanged();
          }
        } else {
          if (!other.staticGeysers_.isEmpty()) {
            if (staticGeysersBuilder_.isEmpty()) {
              staticGeysersBuilder_.dispose();
              staticGeysersBuilder_ = null;
              staticGeysers_ = other.staticGeysers_;
              bitField0_ = (bitField0_ & ~0x00000002);
              staticGeysersBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getStaticGeysersFieldBuilder() : null;
            } else {
              staticGeysersBuilder_.addAllMessages(other.staticGeysers_);
            }
          }
        }
        if (staticNeutralUnitsBuilder_ == null) {
          if (!other.staticNeutralUnits_.isEmpty()) {
            if (staticNeutralUnits_.isEmpty()) {
              staticNeutralUnits_ = other.staticNeutralUnits_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureStaticNeutralUnitsIsMutable();
              staticNeutralUnits_.addAll(other.staticNeutralUnits_);
            }
            onChanged();
          }
        } else {
          if (!other.staticNeutralUnits_.isEmpty()) {
            if (staticNeutralUnitsBuilder_.isEmpty()) {
              staticNeutralUnitsBuilder_.dispose();
              staticNeutralUnitsBuilder_ = null;
              staticNeutralUnits_ = other.staticNeutralUnits_;
              bitField0_ = (bitField0_ & ~0x00000004);
              staticNeutralUnitsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getStaticNeutralUnitsFieldBuilder() : null;
            } else {
              staticNeutralUnitsBuilder_.addAllMessages(other.staticNeutralUnits_);
            }
          }
        }
        if (other.hasMapWidth()) {
          setMapWidth(other.getMapWidth());
        }
        if (other.hasMapHeight()) {
          setMapHeight(other.getMapHeight());
        }
        if (other.hasMapFilename()) {
          bitField0_ |= 0x00000020;
          mapFilename_ = other.mapFilename_;
          onChanged();
        }
        if (other.hasMapName()) {
          bitField0_ |= 0x00000040;
          mapName_ = other.mapName_;
          onChanged();
        }
        if (other.hasMapHash()) {
          bitField0_ |= 0x00000080;
          mapHash_ = other.mapHash_;
          onChanged();
        }
        if (!other.walkable_.isEmpty()) {
          if (walkable_.isEmpty()) {
            walkable_ = other.walkable_;
            bitField0_ = (bitField0_ & ~0x00000100);
          } else {
            ensureWalkableIsMutable();
            walkable_.addAll(other.walkable_);
          }
          onChanged();
        }
        if (!other.buildable_.isEmpty()) {
          if (buildable_.isEmpty()) {
            buildable_ = other.buildable_;
            bitField0_ = (bitField0_ & ~0x00000200);
          } else {
            ensureBuildableIsMutable();
            buildable_.addAll(other.buildable_);
          }
          onChanged();
        }
        if (!other.groundHeight_.isEmpty()) {
          if (groundHeight_.isEmpty()) {
            groundHeight_ = other.groundHeight_;
            bitField0_ = (bitField0_ & ~0x00000400);
          } else {
            ensureGroundHeightIsMutable();
            groundHeight_.addAll(other.groundHeight_);
          }
          onChanged();
        }
        if (unitTypesBuilder_ == null) {
          if (!other.unitTypes_.isEmpty()) {
            if (unitTypes_.isEmpty()) {
              unitTypes_ = other.unitTypes_;
              bitField0_ = (bitField0_ & ~0x00000800);
            } else {
              ensureUnitTypesIsMutable();
              unitTypes_.addAll(other.unitTypes_);
            }
            onChanged();
          }
        } else {
          if (!other.unitTypes_.isEmpty()) {
            if (unitTypesBuilder_.isEmpty()) {
              unitTypesBuilder_.dispose();
              unitTypesBuilder_ = null;
              unitTypes_ = other.unitTypes_;
              bitField0_ = (bitField0_ & ~0x00000800);
              unitTypesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUnitTypesFieldBuilder() : null;
            } else {
              unitTypesBuilder_.addAllMessages(other.unitTypes_);
            }
          }
        }
        if (weaponsBuilder_ == null) {
          if (!other.weapons_.isEmpty()) {
            if (weapons_.isEmpty()) {
              weapons_ = other.weapons_;
              bitField0_ = (bitField0_ & ~0x00001000);
            } else {
              ensureWeaponsIsMutable();
              weapons_.addAll(other.weapons_);
            }
            onChanged();
          }
        } else {
          if (!other.weapons_.isEmpty()) {
            if (weaponsBuilder_.isEmpty()) {
              weaponsBuilder_.dispose();
              weaponsBuilder_ = null;
              weapons_ = other.weapons_;
              bitField0_ = (bitField0_ & ~0x00001000);
              weaponsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getWeaponsFieldBuilder() : null;
            } else {
              weaponsBuilder_.addAllMessages(other.weapons_);
            }
          }
        }
        if (upgradesBuilder_ == null) {
          if (!other.upgrades_.isEmpty()) {
            if (upgrades_.isEmpty()) {
              upgrades_ = other.upgrades_;
              bitField0_ = (bitField0_ & ~0x00002000);
            } else {
              ensureUpgradesIsMutable();
              upgrades_.addAll(other.upgrades_);
            }
            onChanged();
          }
        } else {
          if (!other.upgrades_.isEmpty()) {
            if (upgradesBuilder_.isEmpty()) {
              upgradesBuilder_.dispose();
              upgradesBuilder_ = null;
              upgrades_ = other.upgrades_;
              bitField0_ = (bitField0_ & ~0x00002000);
              upgradesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUpgradesFieldBuilder() : null;
            } else {
              upgradesBuilder_.addAllMessages(other.upgrades_);
            }
          }
        }
        if (techsBuilder_ == null) {
          if (!other.techs_.isEmpty()) {
            if (techs_.isEmpty()) {
              techs_ = other.techs_;
              bitField0_ = (bitField0_ & ~0x00004000);
            } else {
              ensureTechsIsMutable();
              techs_.addAll(other.techs_);
            }
            onChanged();
          }
        } else {
          if (!other.techs_.isEmpty()) {
            if (techsBuilder_.isEmpty()) {
              techsBuilder_.dispose();
              techsBuilder_ = null;
              techs_ = other.techs_;
              bitField0_ = (bitField0_ & ~0x00004000);
              techsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getTechsFieldBuilder() : null;
            } else {
              techsBuilder_.addAllMessages(other.techs_);
            }
          }
        }
        if (colorsBuilder_ == null) {
          if (!other.colors_.isEmpty()) {
            if (colors_.isEmpty()) {
              colors_ = other.colors_;
              bitField0_ = (bitField0_ & ~0x00008000);
            } else {
              ensureColorsIsMutable();
              colors_.addAll(other.colors_);
            }
            onChanged();
          }
        } else {
          if (!other.colors_.isEmpty()) {
            if (colorsBuilder_.isEmpty()) {
              colorsBuilder_.dispose();
              colorsBuilder_ = null;
              colors_ = other.colors_;
              bitField0_ = (bitField0_ & ~0x00008000);
              colorsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getColorsFieldBuilder() : null;
            } else {
              colorsBuilder_.addAllMessages(other.colors_);
            }
          }
        }
        if (racesBuilder_ == null) {
          if (!other.races_.isEmpty()) {
            if (races_.isEmpty()) {
              races_ = other.races_;
              bitField0_ = (bitField0_ & ~0x00010000);
            } else {
              ensureRacesIsMutable();
              races_.addAll(other.races_);
            }
            onChanged();
          }
        } else {
          if (!other.races_.isEmpty()) {
            if (racesBuilder_.isEmpty()) {
              racesBuilder_.dispose();
              racesBuilder_ = null;
              races_ = other.races_;
              bitField0_ = (bitField0_ & ~0x00010000);
              racesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getRacesFieldBuilder() : null;
            } else {
              racesBuilder_.addAllMessages(other.races_);
            }
          }
        }
        if (startLocationsBuilder_ == null) {
          if (!other.startLocations_.isEmpty()) {
            if (startLocations_.isEmpty()) {
              startLocations_ = other.startLocations_;
              bitField0_ = (bitField0_ & ~0x00020000);
            } else {
              ensureStartLocationsIsMutable();
              startLocations_.addAll(other.startLocations_);
            }
            onChanged();
          }
        } else {
          if (!other.startLocations_.isEmpty()) {
            if (startLocationsBuilder_.isEmpty()) {
              startLocationsBuilder_.dispose();
              startLocationsBuilder_ = null;
              startLocations_ = other.startLocations_;
              bitField0_ = (bitField0_ & ~0x00020000);
              startLocationsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getStartLocationsFieldBuilder() : null;
            } else {
              startLocationsBuilder_.addAllMessages(other.startLocations_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasMapWidth()) {
          
          return false;
        }
        if (!hasMapHeight()) {
          
          return false;
        }
        if (!hasMapFilename()) {
          
          return false;
        }
        if (!hasMapName()) {
          
          return false;
        }
        if (!hasMapHash()) {
          
          return false;
        }
        for (int i = 0; i < getStaticMineralsCount(); i++) {
          if (!getStaticMinerals(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getStaticGeysersCount(); i++) {
          if (!getStaticGeysers(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getStaticNeutralUnitsCount(); i++) {
          if (!getStaticNeutralUnits(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getUnitTypesCount(); i++) {
          if (!getUnitTypes(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getWeaponsCount(); i++) {
          if (!getWeapons(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getUpgradesCount(); i++) {
          if (!getUpgrades(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getTechsCount(); i++) {
          if (!getTechs(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getRacesCount(); i++) {
          if (!getRaces(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getStartLocationsCount(); i++) {
          if (!getStartLocations(i).isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.bwapi.proxy.messages.GameMessages.StaticGameData parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.bwapi.proxy.messages.GameMessages.StaticGameData) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // repeated .messages.UnitId staticMinerals = 1;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> staticMinerals_ =
        java.util.Collections.emptyList();
      private void ensureStaticMineralsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          staticMinerals_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitId>(staticMinerals_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitId, org.bwapi.proxy.messages.GameMessages.UnitId.Builder, org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> staticMineralsBuilder_;

      /**
       * <code>repeated .messages.UnitId staticMinerals = 1;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> getStaticMineralsList() {
        if (staticMineralsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(staticMinerals_);
        } else {
          return staticMineralsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.UnitId staticMinerals = 1;</code>
       */
      public int getStaticMineralsCount() {
        if (staticMineralsBuilder_ == null) {
          return staticMinerals_.size();
        } else {
          return staticMineralsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.UnitId staticMinerals = 1;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId getStaticMinerals(int index) {
        if (staticMineralsBuilder_ == null) {
          return staticMinerals_.get(index);
        } else {
          return staticMineralsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.UnitId staticMinerals = 1;</code>
       */
      public Builder setStaticMinerals(
          int index, org.bwapi.proxy.messages.GameMessages.UnitId value) {
        if (staticMineralsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStaticMineralsIsMutable();
          staticMinerals_.set(index, value);
          onChanged();
        } else {
          staticMineralsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticMinerals = 1;</code>
       */
      public Builder setStaticMinerals(
          int index, org.bwapi.proxy.messages.GameMessages.UnitId.Builder builderForValue) {
        if (staticMineralsBuilder_ == null) {
          ensureStaticMineralsIsMutable();
          staticMinerals_.set(index, builderForValue.build());
          onChanged();
        } else {
          staticMineralsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticMinerals = 1;</code>
       */
      public Builder addStaticMinerals(org.bwapi.proxy.messages.GameMessages.UnitId value) {
        if (staticMineralsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStaticMineralsIsMutable();
          staticMinerals_.add(value);
          onChanged();
        } else {
          staticMineralsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticMinerals = 1;</code>
       */
      public Builder addStaticMinerals(
          int index, org.bwapi.proxy.messages.GameMessages.UnitId value) {
        if (staticMineralsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStaticMineralsIsMutable();
          staticMinerals_.add(index, value);
          onChanged();
        } else {
          staticMineralsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticMinerals = 1;</code>
       */
      public Builder addStaticMinerals(
          org.bwapi.proxy.messages.GameMessages.UnitId.Builder builderForValue) {
        if (staticMineralsBuilder_ == null) {
          ensureStaticMineralsIsMutable();
          staticMinerals_.add(builderForValue.build());
          onChanged();
        } else {
          staticMineralsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticMinerals = 1;</code>
       */
      public Builder addStaticMinerals(
          int index, org.bwapi.proxy.messages.GameMessages.UnitId.Builder builderForValue) {
        if (staticMineralsBuilder_ == null) {
          ensureStaticMineralsIsMutable();
          staticMinerals_.add(index, builderForValue.build());
          onChanged();
        } else {
          staticMineralsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticMinerals = 1;</code>
       */
      public Builder addAllStaticMinerals(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.UnitId> values) {
        if (staticMineralsBuilder_ == null) {
          ensureStaticMineralsIsMutable();
          super.addAll(values, staticMinerals_);
          onChanged();
        } else {
          staticMineralsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticMinerals = 1;</code>
       */
      public Builder clearStaticMinerals() {
        if (staticMineralsBuilder_ == null) {
          staticMinerals_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          staticMineralsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticMinerals = 1;</code>
       */
      public Builder removeStaticMinerals(int index) {
        if (staticMineralsBuilder_ == null) {
          ensureStaticMineralsIsMutable();
          staticMinerals_.remove(index);
          onChanged();
        } else {
          staticMineralsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticMinerals = 1;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId.Builder getStaticMineralsBuilder(
          int index) {
        return getStaticMineralsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.UnitId staticMinerals = 1;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder getStaticMineralsOrBuilder(
          int index) {
        if (staticMineralsBuilder_ == null) {
          return staticMinerals_.get(index);  } else {
          return staticMineralsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.UnitId staticMinerals = 1;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> 
           getStaticMineralsOrBuilderList() {
        if (staticMineralsBuilder_ != null) {
          return staticMineralsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(staticMinerals_);
        }
      }
      /**
       * <code>repeated .messages.UnitId staticMinerals = 1;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId.Builder addStaticMineralsBuilder() {
        return getStaticMineralsFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.UnitId.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitId staticMinerals = 1;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId.Builder addStaticMineralsBuilder(
          int index) {
        return getStaticMineralsFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.UnitId.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitId staticMinerals = 1;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId.Builder> 
           getStaticMineralsBuilderList() {
        return getStaticMineralsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitId, org.bwapi.proxy.messages.GameMessages.UnitId.Builder, org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> 
          getStaticMineralsFieldBuilder() {
        if (staticMineralsBuilder_ == null) {
          staticMineralsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UnitId, org.bwapi.proxy.messages.GameMessages.UnitId.Builder, org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder>(
                  staticMinerals_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          staticMinerals_ = null;
        }
        return staticMineralsBuilder_;
      }

      // repeated .messages.UnitId staticGeysers = 2;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> staticGeysers_ =
        java.util.Collections.emptyList();
      private void ensureStaticGeysersIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          staticGeysers_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitId>(staticGeysers_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitId, org.bwapi.proxy.messages.GameMessages.UnitId.Builder, org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> staticGeysersBuilder_;

      /**
       * <code>repeated .messages.UnitId staticGeysers = 2;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> getStaticGeysersList() {
        if (staticGeysersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(staticGeysers_);
        } else {
          return staticGeysersBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.UnitId staticGeysers = 2;</code>
       */
      public int getStaticGeysersCount() {
        if (staticGeysersBuilder_ == null) {
          return staticGeysers_.size();
        } else {
          return staticGeysersBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.UnitId staticGeysers = 2;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId getStaticGeysers(int index) {
        if (staticGeysersBuilder_ == null) {
          return staticGeysers_.get(index);
        } else {
          return staticGeysersBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.UnitId staticGeysers = 2;</code>
       */
      public Builder setStaticGeysers(
          int index, org.bwapi.proxy.messages.GameMessages.UnitId value) {
        if (staticGeysersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStaticGeysersIsMutable();
          staticGeysers_.set(index, value);
          onChanged();
        } else {
          staticGeysersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticGeysers = 2;</code>
       */
      public Builder setStaticGeysers(
          int index, org.bwapi.proxy.messages.GameMessages.UnitId.Builder builderForValue) {
        if (staticGeysersBuilder_ == null) {
          ensureStaticGeysersIsMutable();
          staticGeysers_.set(index, builderForValue.build());
          onChanged();
        } else {
          staticGeysersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticGeysers = 2;</code>
       */
      public Builder addStaticGeysers(org.bwapi.proxy.messages.GameMessages.UnitId value) {
        if (staticGeysersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStaticGeysersIsMutable();
          staticGeysers_.add(value);
          onChanged();
        } else {
          staticGeysersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticGeysers = 2;</code>
       */
      public Builder addStaticGeysers(
          int index, org.bwapi.proxy.messages.GameMessages.UnitId value) {
        if (staticGeysersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStaticGeysersIsMutable();
          staticGeysers_.add(index, value);
          onChanged();
        } else {
          staticGeysersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticGeysers = 2;</code>
       */
      public Builder addStaticGeysers(
          org.bwapi.proxy.messages.GameMessages.UnitId.Builder builderForValue) {
        if (staticGeysersBuilder_ == null) {
          ensureStaticGeysersIsMutable();
          staticGeysers_.add(builderForValue.build());
          onChanged();
        } else {
          staticGeysersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticGeysers = 2;</code>
       */
      public Builder addStaticGeysers(
          int index, org.bwapi.proxy.messages.GameMessages.UnitId.Builder builderForValue) {
        if (staticGeysersBuilder_ == null) {
          ensureStaticGeysersIsMutable();
          staticGeysers_.add(index, builderForValue.build());
          onChanged();
        } else {
          staticGeysersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticGeysers = 2;</code>
       */
      public Builder addAllStaticGeysers(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.UnitId> values) {
        if (staticGeysersBuilder_ == null) {
          ensureStaticGeysersIsMutable();
          super.addAll(values, staticGeysers_);
          onChanged();
        } else {
          staticGeysersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticGeysers = 2;</code>
       */
      public Builder clearStaticGeysers() {
        if (staticGeysersBuilder_ == null) {
          staticGeysers_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          staticGeysersBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticGeysers = 2;</code>
       */
      public Builder removeStaticGeysers(int index) {
        if (staticGeysersBuilder_ == null) {
          ensureStaticGeysersIsMutable();
          staticGeysers_.remove(index);
          onChanged();
        } else {
          staticGeysersBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticGeysers = 2;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId.Builder getStaticGeysersBuilder(
          int index) {
        return getStaticGeysersFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.UnitId staticGeysers = 2;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder getStaticGeysersOrBuilder(
          int index) {
        if (staticGeysersBuilder_ == null) {
          return staticGeysers_.get(index);  } else {
          return staticGeysersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.UnitId staticGeysers = 2;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> 
           getStaticGeysersOrBuilderList() {
        if (staticGeysersBuilder_ != null) {
          return staticGeysersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(staticGeysers_);
        }
      }
      /**
       * <code>repeated .messages.UnitId staticGeysers = 2;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId.Builder addStaticGeysersBuilder() {
        return getStaticGeysersFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.UnitId.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitId staticGeysers = 2;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId.Builder addStaticGeysersBuilder(
          int index) {
        return getStaticGeysersFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.UnitId.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitId staticGeysers = 2;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId.Builder> 
           getStaticGeysersBuilderList() {
        return getStaticGeysersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitId, org.bwapi.proxy.messages.GameMessages.UnitId.Builder, org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> 
          getStaticGeysersFieldBuilder() {
        if (staticGeysersBuilder_ == null) {
          staticGeysersBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UnitId, org.bwapi.proxy.messages.GameMessages.UnitId.Builder, org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder>(
                  staticGeysers_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          staticGeysers_ = null;
        }
        return staticGeysersBuilder_;
      }

      // repeated .messages.UnitId staticNeutralUnits = 3;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> staticNeutralUnits_ =
        java.util.Collections.emptyList();
      private void ensureStaticNeutralUnitsIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          staticNeutralUnits_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitId>(staticNeutralUnits_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitId, org.bwapi.proxy.messages.GameMessages.UnitId.Builder, org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> staticNeutralUnitsBuilder_;

      /**
       * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId> getStaticNeutralUnitsList() {
        if (staticNeutralUnitsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(staticNeutralUnits_);
        } else {
          return staticNeutralUnitsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
       */
      public int getStaticNeutralUnitsCount() {
        if (staticNeutralUnitsBuilder_ == null) {
          return staticNeutralUnits_.size();
        } else {
          return staticNeutralUnitsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId getStaticNeutralUnits(int index) {
        if (staticNeutralUnitsBuilder_ == null) {
          return staticNeutralUnits_.get(index);
        } else {
          return staticNeutralUnitsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
       */
      public Builder setStaticNeutralUnits(
          int index, org.bwapi.proxy.messages.GameMessages.UnitId value) {
        if (staticNeutralUnitsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStaticNeutralUnitsIsMutable();
          staticNeutralUnits_.set(index, value);
          onChanged();
        } else {
          staticNeutralUnitsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
       */
      public Builder setStaticNeutralUnits(
          int index, org.bwapi.proxy.messages.GameMessages.UnitId.Builder builderForValue) {
        if (staticNeutralUnitsBuilder_ == null) {
          ensureStaticNeutralUnitsIsMutable();
          staticNeutralUnits_.set(index, builderForValue.build());
          onChanged();
        } else {
          staticNeutralUnitsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
       */
      public Builder addStaticNeutralUnits(org.bwapi.proxy.messages.GameMessages.UnitId value) {
        if (staticNeutralUnitsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStaticNeutralUnitsIsMutable();
          staticNeutralUnits_.add(value);
          onChanged();
        } else {
          staticNeutralUnitsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
       */
      public Builder addStaticNeutralUnits(
          int index, org.bwapi.proxy.messages.GameMessages.UnitId value) {
        if (staticNeutralUnitsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStaticNeutralUnitsIsMutable();
          staticNeutralUnits_.add(index, value);
          onChanged();
        } else {
          staticNeutralUnitsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
       */
      public Builder addStaticNeutralUnits(
          org.bwapi.proxy.messages.GameMessages.UnitId.Builder builderForValue) {
        if (staticNeutralUnitsBuilder_ == null) {
          ensureStaticNeutralUnitsIsMutable();
          staticNeutralUnits_.add(builderForValue.build());
          onChanged();
        } else {
          staticNeutralUnitsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
       */
      public Builder addStaticNeutralUnits(
          int index, org.bwapi.proxy.messages.GameMessages.UnitId.Builder builderForValue) {
        if (staticNeutralUnitsBuilder_ == null) {
          ensureStaticNeutralUnitsIsMutable();
          staticNeutralUnits_.add(index, builderForValue.build());
          onChanged();
        } else {
          staticNeutralUnitsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
       */
      public Builder addAllStaticNeutralUnits(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.UnitId> values) {
        if (staticNeutralUnitsBuilder_ == null) {
          ensureStaticNeutralUnitsIsMutable();
          super.addAll(values, staticNeutralUnits_);
          onChanged();
        } else {
          staticNeutralUnitsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
       */
      public Builder clearStaticNeutralUnits() {
        if (staticNeutralUnitsBuilder_ == null) {
          staticNeutralUnits_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          staticNeutralUnitsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
       */
      public Builder removeStaticNeutralUnits(int index) {
        if (staticNeutralUnitsBuilder_ == null) {
          ensureStaticNeutralUnitsIsMutable();
          staticNeutralUnits_.remove(index);
          onChanged();
        } else {
          staticNeutralUnitsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId.Builder getStaticNeutralUnitsBuilder(
          int index) {
        return getStaticNeutralUnitsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder getStaticNeutralUnitsOrBuilder(
          int index) {
        if (staticNeutralUnitsBuilder_ == null) {
          return staticNeutralUnits_.get(index);  } else {
          return staticNeutralUnitsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> 
           getStaticNeutralUnitsOrBuilderList() {
        if (staticNeutralUnitsBuilder_ != null) {
          return staticNeutralUnitsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(staticNeutralUnits_);
        }
      }
      /**
       * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId.Builder addStaticNeutralUnitsBuilder() {
        return getStaticNeutralUnitsFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.UnitId.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId.Builder addStaticNeutralUnitsBuilder(
          int index) {
        return getStaticNeutralUnitsFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.UnitId.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitId staticNeutralUnits = 3;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitId.Builder> 
           getStaticNeutralUnitsBuilderList() {
        return getStaticNeutralUnitsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitId, org.bwapi.proxy.messages.GameMessages.UnitId.Builder, org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> 
          getStaticNeutralUnitsFieldBuilder() {
        if (staticNeutralUnitsBuilder_ == null) {
          staticNeutralUnitsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UnitId, org.bwapi.proxy.messages.GameMessages.UnitId.Builder, org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder>(
                  staticNeutralUnits_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          staticNeutralUnits_ = null;
        }
        return staticNeutralUnitsBuilder_;
      }

      // required int32 mapWidth = 4;
      private int mapWidth_ ;
      /**
       * <code>required int32 mapWidth = 4;</code>
       */
      public boolean hasMapWidth() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>required int32 mapWidth = 4;</code>
       */
      public int getMapWidth() {
        return mapWidth_;
      }
      /**
       * <code>required int32 mapWidth = 4;</code>
       */
      public Builder setMapWidth(int value) {
        bitField0_ |= 0x00000008;
        mapWidth_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 mapWidth = 4;</code>
       */
      public Builder clearMapWidth() {
        bitField0_ = (bitField0_ & ~0x00000008);
        mapWidth_ = 0;
        onChanged();
        return this;
      }

      // required int32 mapHeight = 5;
      private int mapHeight_ ;
      /**
       * <code>required int32 mapHeight = 5;</code>
       */
      public boolean hasMapHeight() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>required int32 mapHeight = 5;</code>
       */
      public int getMapHeight() {
        return mapHeight_;
      }
      /**
       * <code>required int32 mapHeight = 5;</code>
       */
      public Builder setMapHeight(int value) {
        bitField0_ |= 0x00000010;
        mapHeight_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 mapHeight = 5;</code>
       */
      public Builder clearMapHeight() {
        bitField0_ = (bitField0_ & ~0x00000010);
        mapHeight_ = 0;
        onChanged();
        return this;
      }

      // required string mapFilename = 6;
      private java.lang.Object mapFilename_ = "";
      /**
       * <code>required string mapFilename = 6;</code>
       */
      public boolean hasMapFilename() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>required string mapFilename = 6;</code>
       */
      public java.lang.String getMapFilename() {
        java.lang.Object ref = mapFilename_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          mapFilename_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string mapFilename = 6;</code>
       */
      public com.google.protobuf.ByteString
          getMapFilenameBytes() {
        java.lang.Object ref = mapFilename_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          mapFilename_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string mapFilename = 6;</code>
       */
      public Builder setMapFilename(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        mapFilename_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string mapFilename = 6;</code>
       */
      public Builder clearMapFilename() {
        bitField0_ = (bitField0_ & ~0x00000020);
        mapFilename_ = getDefaultInstance().getMapFilename();
        onChanged();
        return this;
      }
      /**
       * <code>required string mapFilename = 6;</code>
       */
      public Builder setMapFilenameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        mapFilename_ = value;
        onChanged();
        return this;
      }

      // required string mapName = 7;
      private java.lang.Object mapName_ = "";
      /**
       * <code>required string mapName = 7;</code>
       */
      public boolean hasMapName() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>required string mapName = 7;</code>
       */
      public java.lang.String getMapName() {
        java.lang.Object ref = mapName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          mapName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string mapName = 7;</code>
       */
      public com.google.protobuf.ByteString
          getMapNameBytes() {
        java.lang.Object ref = mapName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          mapName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string mapName = 7;</code>
       */
      public Builder setMapName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        mapName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string mapName = 7;</code>
       */
      public Builder clearMapName() {
        bitField0_ = (bitField0_ & ~0x00000040);
        mapName_ = getDefaultInstance().getMapName();
        onChanged();
        return this;
      }
      /**
       * <code>required string mapName = 7;</code>
       */
      public Builder setMapNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        mapName_ = value;
        onChanged();
        return this;
      }

      // required string mapHash = 8;
      private java.lang.Object mapHash_ = "";
      /**
       * <code>required string mapHash = 8;</code>
       */
      public boolean hasMapHash() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>required string mapHash = 8;</code>
       */
      public java.lang.String getMapHash() {
        java.lang.Object ref = mapHash_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          mapHash_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string mapHash = 8;</code>
       */
      public com.google.protobuf.ByteString
          getMapHashBytes() {
        java.lang.Object ref = mapHash_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          mapHash_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string mapHash = 8;</code>
       */
      public Builder setMapHash(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        mapHash_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string mapHash = 8;</code>
       */
      public Builder clearMapHash() {
        bitField0_ = (bitField0_ & ~0x00000080);
        mapHash_ = getDefaultInstance().getMapHash();
        onChanged();
        return this;
      }
      /**
       * <code>required string mapHash = 8;</code>
       */
      public Builder setMapHashBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        mapHash_ = value;
        onChanged();
        return this;
      }

      // repeated fixed32 walkable = 9;
      private java.util.List<java.lang.Integer> walkable_ = java.util.Collections.emptyList();
      private void ensureWalkableIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          walkable_ = new java.util.ArrayList<java.lang.Integer>(walkable_);
          bitField0_ |= 0x00000100;
         }
      }
      /**
       * <code>repeated fixed32 walkable = 9;</code>
       *
       * <pre>
       * bitmasks; increment y's before x's.
       * </pre>
       */
      public java.util.List<java.lang.Integer>
          getWalkableList() {
        return java.util.Collections.unmodifiableList(walkable_);
      }
      /**
       * <code>repeated fixed32 walkable = 9;</code>
       *
       * <pre>
       * bitmasks; increment y's before x's.
       * </pre>
       */
      public int getWalkableCount() {
        return walkable_.size();
      }
      /**
       * <code>repeated fixed32 walkable = 9;</code>
       *
       * <pre>
       * bitmasks; increment y's before x's.
       * </pre>
       */
      public int getWalkable(int index) {
        return walkable_.get(index);
      }
      /**
       * <code>repeated fixed32 walkable = 9;</code>
       *
       * <pre>
       * bitmasks; increment y's before x's.
       * </pre>
       */
      public Builder setWalkable(
          int index, int value) {
        ensureWalkableIsMutable();
        walkable_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated fixed32 walkable = 9;</code>
       *
       * <pre>
       * bitmasks; increment y's before x's.
       * </pre>
       */
      public Builder addWalkable(int value) {
        ensureWalkableIsMutable();
        walkable_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated fixed32 walkable = 9;</code>
       *
       * <pre>
       * bitmasks; increment y's before x's.
       * </pre>
       */
      public Builder addAllWalkable(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureWalkableIsMutable();
        super.addAll(values, walkable_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated fixed32 walkable = 9;</code>
       *
       * <pre>
       * bitmasks; increment y's before x's.
       * </pre>
       */
      public Builder clearWalkable() {
        walkable_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000100);
        onChanged();
        return this;
      }

      // repeated fixed32 buildable = 10;
      private java.util.List<java.lang.Integer> buildable_ = java.util.Collections.emptyList();
      private void ensureBuildableIsMutable() {
        if (!((bitField0_ & 0x00000200) == 0x00000200)) {
          buildable_ = new java.util.ArrayList<java.lang.Integer>(buildable_);
          bitField0_ |= 0x00000200;
         }
      }
      /**
       * <code>repeated fixed32 buildable = 10;</code>
       */
      public java.util.List<java.lang.Integer>
          getBuildableList() {
        return java.util.Collections.unmodifiableList(buildable_);
      }
      /**
       * <code>repeated fixed32 buildable = 10;</code>
       */
      public int getBuildableCount() {
        return buildable_.size();
      }
      /**
       * <code>repeated fixed32 buildable = 10;</code>
       */
      public int getBuildable(int index) {
        return buildable_.get(index);
      }
      /**
       * <code>repeated fixed32 buildable = 10;</code>
       */
      public Builder setBuildable(
          int index, int value) {
        ensureBuildableIsMutable();
        buildable_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated fixed32 buildable = 10;</code>
       */
      public Builder addBuildable(int value) {
        ensureBuildableIsMutable();
        buildable_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated fixed32 buildable = 10;</code>
       */
      public Builder addAllBuildable(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureBuildableIsMutable();
        super.addAll(values, buildable_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated fixed32 buildable = 10;</code>
       */
      public Builder clearBuildable() {
        buildable_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000200);
        onChanged();
        return this;
      }

      // repeated int32 groundHeight = 17;
      private java.util.List<java.lang.Integer> groundHeight_ = java.util.Collections.emptyList();
      private void ensureGroundHeightIsMutable() {
        if (!((bitField0_ & 0x00000400) == 0x00000400)) {
          groundHeight_ = new java.util.ArrayList<java.lang.Integer>(groundHeight_);
          bitField0_ |= 0x00000400;
         }
      }
      /**
       * <code>repeated int32 groundHeight = 17;</code>
       *
       * <pre>
       * not a bit mask.
       * </pre>
       */
      public java.util.List<java.lang.Integer>
          getGroundHeightList() {
        return java.util.Collections.unmodifiableList(groundHeight_);
      }
      /**
       * <code>repeated int32 groundHeight = 17;</code>
       *
       * <pre>
       * not a bit mask.
       * </pre>
       */
      public int getGroundHeightCount() {
        return groundHeight_.size();
      }
      /**
       * <code>repeated int32 groundHeight = 17;</code>
       *
       * <pre>
       * not a bit mask.
       * </pre>
       */
      public int getGroundHeight(int index) {
        return groundHeight_.get(index);
      }
      /**
       * <code>repeated int32 groundHeight = 17;</code>
       *
       * <pre>
       * not a bit mask.
       * </pre>
       */
      public Builder setGroundHeight(
          int index, int value) {
        ensureGroundHeightIsMutable();
        groundHeight_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 groundHeight = 17;</code>
       *
       * <pre>
       * not a bit mask.
       * </pre>
       */
      public Builder addGroundHeight(int value) {
        ensureGroundHeightIsMutable();
        groundHeight_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 groundHeight = 17;</code>
       *
       * <pre>
       * not a bit mask.
       * </pre>
       */
      public Builder addAllGroundHeight(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureGroundHeightIsMutable();
        super.addAll(values, groundHeight_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 groundHeight = 17;</code>
       *
       * <pre>
       * not a bit mask.
       * </pre>
       */
      public Builder clearGroundHeight() {
        groundHeight_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000400);
        onChanged();
        return this;
      }

      // repeated .messages.UnitTypeData unitTypes = 11;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeData> unitTypes_ =
        java.util.Collections.emptyList();
      private void ensureUnitTypesIsMutable() {
        if (!((bitField0_ & 0x00000800) == 0x00000800)) {
          unitTypes_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UnitTypeData>(unitTypes_);
          bitField0_ |= 0x00000800;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitTypeData, org.bwapi.proxy.messages.GameMessages.UnitTypeData.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeDataOrBuilder> unitTypesBuilder_;

      /**
       * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeData> getUnitTypesList() {
        if (unitTypesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(unitTypes_);
        } else {
          return unitTypesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
       */
      public int getUnitTypesCount() {
        if (unitTypesBuilder_ == null) {
          return unitTypes_.size();
        } else {
          return unitTypesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeData getUnitTypes(int index) {
        if (unitTypesBuilder_ == null) {
          return unitTypes_.get(index);
        } else {
          return unitTypesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
       */
      public Builder setUnitTypes(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeData value) {
        if (unitTypesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUnitTypesIsMutable();
          unitTypes_.set(index, value);
          onChanged();
        } else {
          unitTypesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
       */
      public Builder setUnitTypes(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeData.Builder builderForValue) {
        if (unitTypesBuilder_ == null) {
          ensureUnitTypesIsMutable();
          unitTypes_.set(index, builderForValue.build());
          onChanged();
        } else {
          unitTypesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
       */
      public Builder addUnitTypes(org.bwapi.proxy.messages.GameMessages.UnitTypeData value) {
        if (unitTypesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUnitTypesIsMutable();
          unitTypes_.add(value);
          onChanged();
        } else {
          unitTypesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
       */
      public Builder addUnitTypes(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeData value) {
        if (unitTypesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUnitTypesIsMutable();
          unitTypes_.add(index, value);
          onChanged();
        } else {
          unitTypesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
       */
      public Builder addUnitTypes(
          org.bwapi.proxy.messages.GameMessages.UnitTypeData.Builder builderForValue) {
        if (unitTypesBuilder_ == null) {
          ensureUnitTypesIsMutable();
          unitTypes_.add(builderForValue.build());
          onChanged();
        } else {
          unitTypesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
       */
      public Builder addUnitTypes(
          int index, org.bwapi.proxy.messages.GameMessages.UnitTypeData.Builder builderForValue) {
        if (unitTypesBuilder_ == null) {
          ensureUnitTypesIsMutable();
          unitTypes_.add(index, builderForValue.build());
          onChanged();
        } else {
          unitTypesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
       */
      public Builder addAllUnitTypes(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeData> values) {
        if (unitTypesBuilder_ == null) {
          ensureUnitTypesIsMutable();
          super.addAll(values, unitTypes_);
          onChanged();
        } else {
          unitTypesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
       */
      public Builder clearUnitTypes() {
        if (unitTypesBuilder_ == null) {
          unitTypes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000800);
          onChanged();
        } else {
          unitTypesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
       */
      public Builder removeUnitTypes(int index) {
        if (unitTypesBuilder_ == null) {
          ensureUnitTypesIsMutable();
          unitTypes_.remove(index);
          onChanged();
        } else {
          unitTypesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeData.Builder getUnitTypesBuilder(
          int index) {
        return getUnitTypesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeDataOrBuilder getUnitTypesOrBuilder(
          int index) {
        if (unitTypesBuilder_ == null) {
          return unitTypes_.get(index);  } else {
          return unitTypesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UnitTypeDataOrBuilder> 
           getUnitTypesOrBuilderList() {
        if (unitTypesBuilder_ != null) {
          return unitTypesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(unitTypes_);
        }
      }
      /**
       * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeData.Builder addUnitTypesBuilder() {
        return getUnitTypesFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.UnitTypeData.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitTypeData.Builder addUnitTypesBuilder(
          int index) {
        return getUnitTypesFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.UnitTypeData.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UnitTypeData unitTypes = 11;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UnitTypeData.Builder> 
           getUnitTypesBuilderList() {
        return getUnitTypesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitTypeData, org.bwapi.proxy.messages.GameMessages.UnitTypeData.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeDataOrBuilder> 
          getUnitTypesFieldBuilder() {
        if (unitTypesBuilder_ == null) {
          unitTypesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UnitTypeData, org.bwapi.proxy.messages.GameMessages.UnitTypeData.Builder, org.bwapi.proxy.messages.GameMessages.UnitTypeDataOrBuilder>(
                  unitTypes_,
                  ((bitField0_ & 0x00000800) == 0x00000800),
                  getParentForChildren(),
                  isClean());
          unitTypes_ = null;
        }
        return unitTypesBuilder_;
      }

      // repeated .messages.WeaponTypeData weapons = 12;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.WeaponTypeData> weapons_ =
        java.util.Collections.emptyList();
      private void ensureWeaponsIsMutable() {
        if (!((bitField0_ & 0x00001000) == 0x00001000)) {
          weapons_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.WeaponTypeData>(weapons_);
          bitField0_ |= 0x00001000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.WeaponTypeData, org.bwapi.proxy.messages.GameMessages.WeaponTypeData.Builder, org.bwapi.proxy.messages.GameMessages.WeaponTypeDataOrBuilder> weaponsBuilder_;

      /**
       * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.WeaponTypeData> getWeaponsList() {
        if (weaponsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(weapons_);
        } else {
          return weaponsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
       */
      public int getWeaponsCount() {
        if (weaponsBuilder_ == null) {
          return weapons_.size();
        } else {
          return weaponsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.WeaponTypeData getWeapons(int index) {
        if (weaponsBuilder_ == null) {
          return weapons_.get(index);
        } else {
          return weaponsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
       */
      public Builder setWeapons(
          int index, org.bwapi.proxy.messages.GameMessages.WeaponTypeData value) {
        if (weaponsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureWeaponsIsMutable();
          weapons_.set(index, value);
          onChanged();
        } else {
          weaponsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
       */
      public Builder setWeapons(
          int index, org.bwapi.proxy.messages.GameMessages.WeaponTypeData.Builder builderForValue) {
        if (weaponsBuilder_ == null) {
          ensureWeaponsIsMutable();
          weapons_.set(index, builderForValue.build());
          onChanged();
        } else {
          weaponsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
       */
      public Builder addWeapons(org.bwapi.proxy.messages.GameMessages.WeaponTypeData value) {
        if (weaponsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureWeaponsIsMutable();
          weapons_.add(value);
          onChanged();
        } else {
          weaponsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
       */
      public Builder addWeapons(
          int index, org.bwapi.proxy.messages.GameMessages.WeaponTypeData value) {
        if (weaponsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureWeaponsIsMutable();
          weapons_.add(index, value);
          onChanged();
        } else {
          weaponsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
       */
      public Builder addWeapons(
          org.bwapi.proxy.messages.GameMessages.WeaponTypeData.Builder builderForValue) {
        if (weaponsBuilder_ == null) {
          ensureWeaponsIsMutable();
          weapons_.add(builderForValue.build());
          onChanged();
        } else {
          weaponsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
       */
      public Builder addWeapons(
          int index, org.bwapi.proxy.messages.GameMessages.WeaponTypeData.Builder builderForValue) {
        if (weaponsBuilder_ == null) {
          ensureWeaponsIsMutable();
          weapons_.add(index, builderForValue.build());
          onChanged();
        } else {
          weaponsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
       */
      public Builder addAllWeapons(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.WeaponTypeData> values) {
        if (weaponsBuilder_ == null) {
          ensureWeaponsIsMutable();
          super.addAll(values, weapons_);
          onChanged();
        } else {
          weaponsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
       */
      public Builder clearWeapons() {
        if (weaponsBuilder_ == null) {
          weapons_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00001000);
          onChanged();
        } else {
          weaponsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
       */
      public Builder removeWeapons(int index) {
        if (weaponsBuilder_ == null) {
          ensureWeaponsIsMutable();
          weapons_.remove(index);
          onChanged();
        } else {
          weaponsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.WeaponTypeData.Builder getWeaponsBuilder(
          int index) {
        return getWeaponsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.WeaponTypeDataOrBuilder getWeaponsOrBuilder(
          int index) {
        if (weaponsBuilder_ == null) {
          return weapons_.get(index);  } else {
          return weaponsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.WeaponTypeDataOrBuilder> 
           getWeaponsOrBuilderList() {
        if (weaponsBuilder_ != null) {
          return weaponsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(weapons_);
        }
      }
      /**
       * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.WeaponTypeData.Builder addWeaponsBuilder() {
        return getWeaponsFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.WeaponTypeData.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.WeaponTypeData.Builder addWeaponsBuilder(
          int index) {
        return getWeaponsFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.WeaponTypeData.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.WeaponTypeData weapons = 12;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.WeaponTypeData.Builder> 
           getWeaponsBuilderList() {
        return getWeaponsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.WeaponTypeData, org.bwapi.proxy.messages.GameMessages.WeaponTypeData.Builder, org.bwapi.proxy.messages.GameMessages.WeaponTypeDataOrBuilder> 
          getWeaponsFieldBuilder() {
        if (weaponsBuilder_ == null) {
          weaponsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.WeaponTypeData, org.bwapi.proxy.messages.GameMessages.WeaponTypeData.Builder, org.bwapi.proxy.messages.GameMessages.WeaponTypeDataOrBuilder>(
                  weapons_,
                  ((bitField0_ & 0x00001000) == 0x00001000),
                  getParentForChildren(),
                  isClean());
          weapons_ = null;
        }
        return weaponsBuilder_;
      }

      // repeated .messages.UpgradeTypeData upgrades = 13;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.UpgradeTypeData> upgrades_ =
        java.util.Collections.emptyList();
      private void ensureUpgradesIsMutable() {
        if (!((bitField0_ & 0x00002000) == 0x00002000)) {
          upgrades_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.UpgradeTypeData>(upgrades_);
          bitField0_ |= 0x00002000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UpgradeTypeData, org.bwapi.proxy.messages.GameMessages.UpgradeTypeData.Builder, org.bwapi.proxy.messages.GameMessages.UpgradeTypeDataOrBuilder> upgradesBuilder_;

      /**
       * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UpgradeTypeData> getUpgradesList() {
        if (upgradesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(upgrades_);
        } else {
          return upgradesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
       */
      public int getUpgradesCount() {
        if (upgradesBuilder_ == null) {
          return upgrades_.size();
        } else {
          return upgradesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeTypeData getUpgrades(int index) {
        if (upgradesBuilder_ == null) {
          return upgrades_.get(index);
        } else {
          return upgradesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
       */
      public Builder setUpgrades(
          int index, org.bwapi.proxy.messages.GameMessages.UpgradeTypeData value) {
        if (upgradesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUpgradesIsMutable();
          upgrades_.set(index, value);
          onChanged();
        } else {
          upgradesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
       */
      public Builder setUpgrades(
          int index, org.bwapi.proxy.messages.GameMessages.UpgradeTypeData.Builder builderForValue) {
        if (upgradesBuilder_ == null) {
          ensureUpgradesIsMutable();
          upgrades_.set(index, builderForValue.build());
          onChanged();
        } else {
          upgradesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
       */
      public Builder addUpgrades(org.bwapi.proxy.messages.GameMessages.UpgradeTypeData value) {
        if (upgradesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUpgradesIsMutable();
          upgrades_.add(value);
          onChanged();
        } else {
          upgradesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
       */
      public Builder addUpgrades(
          int index, org.bwapi.proxy.messages.GameMessages.UpgradeTypeData value) {
        if (upgradesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUpgradesIsMutable();
          upgrades_.add(index, value);
          onChanged();
        } else {
          upgradesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
       */
      public Builder addUpgrades(
          org.bwapi.proxy.messages.GameMessages.UpgradeTypeData.Builder builderForValue) {
        if (upgradesBuilder_ == null) {
          ensureUpgradesIsMutable();
          upgrades_.add(builderForValue.build());
          onChanged();
        } else {
          upgradesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
       */
      public Builder addUpgrades(
          int index, org.bwapi.proxy.messages.GameMessages.UpgradeTypeData.Builder builderForValue) {
        if (upgradesBuilder_ == null) {
          ensureUpgradesIsMutable();
          upgrades_.add(index, builderForValue.build());
          onChanged();
        } else {
          upgradesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
       */
      public Builder addAllUpgrades(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.UpgradeTypeData> values) {
        if (upgradesBuilder_ == null) {
          ensureUpgradesIsMutable();
          super.addAll(values, upgrades_);
          onChanged();
        } else {
          upgradesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
       */
      public Builder clearUpgrades() {
        if (upgradesBuilder_ == null) {
          upgrades_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00002000);
          onChanged();
        } else {
          upgradesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
       */
      public Builder removeUpgrades(int index) {
        if (upgradesBuilder_ == null) {
          ensureUpgradesIsMutable();
          upgrades_.remove(index);
          onChanged();
        } else {
          upgradesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeTypeData.Builder getUpgradesBuilder(
          int index) {
        return getUpgradesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeTypeDataOrBuilder getUpgradesOrBuilder(
          int index) {
        if (upgradesBuilder_ == null) {
          return upgrades_.get(index);  } else {
          return upgradesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.UpgradeTypeDataOrBuilder> 
           getUpgradesOrBuilderList() {
        if (upgradesBuilder_ != null) {
          return upgradesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(upgrades_);
        }
      }
      /**
       * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeTypeData.Builder addUpgradesBuilder() {
        return getUpgradesFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.UpgradeTypeData.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UpgradeTypeData.Builder addUpgradesBuilder(
          int index) {
        return getUpgradesFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.UpgradeTypeData.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.UpgradeTypeData upgrades = 13;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.UpgradeTypeData.Builder> 
           getUpgradesBuilderList() {
        return getUpgradesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UpgradeTypeData, org.bwapi.proxy.messages.GameMessages.UpgradeTypeData.Builder, org.bwapi.proxy.messages.GameMessages.UpgradeTypeDataOrBuilder> 
          getUpgradesFieldBuilder() {
        if (upgradesBuilder_ == null) {
          upgradesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UpgradeTypeData, org.bwapi.proxy.messages.GameMessages.UpgradeTypeData.Builder, org.bwapi.proxy.messages.GameMessages.UpgradeTypeDataOrBuilder>(
                  upgrades_,
                  ((bitField0_ & 0x00002000) == 0x00002000),
                  getParentForChildren(),
                  isClean());
          upgrades_ = null;
        }
        return upgradesBuilder_;
      }

      // repeated .messages.TechTypeData techs = 14;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.TechTypeData> techs_ =
        java.util.Collections.emptyList();
      private void ensureTechsIsMutable() {
        if (!((bitField0_ & 0x00004000) == 0x00004000)) {
          techs_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.TechTypeData>(techs_);
          bitField0_ |= 0x00004000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.TechTypeData, org.bwapi.proxy.messages.GameMessages.TechTypeData.Builder, org.bwapi.proxy.messages.GameMessages.TechTypeDataOrBuilder> techsBuilder_;

      /**
       * <code>repeated .messages.TechTypeData techs = 14;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.TechTypeData> getTechsList() {
        if (techsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(techs_);
        } else {
          return techsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.TechTypeData techs = 14;</code>
       */
      public int getTechsCount() {
        if (techsBuilder_ == null) {
          return techs_.size();
        } else {
          return techsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.TechTypeData techs = 14;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.TechTypeData getTechs(int index) {
        if (techsBuilder_ == null) {
          return techs_.get(index);
        } else {
          return techsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.TechTypeData techs = 14;</code>
       */
      public Builder setTechs(
          int index, org.bwapi.proxy.messages.GameMessages.TechTypeData value) {
        if (techsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTechsIsMutable();
          techs_.set(index, value);
          onChanged();
        } else {
          techsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechTypeData techs = 14;</code>
       */
      public Builder setTechs(
          int index, org.bwapi.proxy.messages.GameMessages.TechTypeData.Builder builderForValue) {
        if (techsBuilder_ == null) {
          ensureTechsIsMutable();
          techs_.set(index, builderForValue.build());
          onChanged();
        } else {
          techsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechTypeData techs = 14;</code>
       */
      public Builder addTechs(org.bwapi.proxy.messages.GameMessages.TechTypeData value) {
        if (techsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTechsIsMutable();
          techs_.add(value);
          onChanged();
        } else {
          techsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechTypeData techs = 14;</code>
       */
      public Builder addTechs(
          int index, org.bwapi.proxy.messages.GameMessages.TechTypeData value) {
        if (techsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTechsIsMutable();
          techs_.add(index, value);
          onChanged();
        } else {
          techsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechTypeData techs = 14;</code>
       */
      public Builder addTechs(
          org.bwapi.proxy.messages.GameMessages.TechTypeData.Builder builderForValue) {
        if (techsBuilder_ == null) {
          ensureTechsIsMutable();
          techs_.add(builderForValue.build());
          onChanged();
        } else {
          techsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechTypeData techs = 14;</code>
       */
      public Builder addTechs(
          int index, org.bwapi.proxy.messages.GameMessages.TechTypeData.Builder builderForValue) {
        if (techsBuilder_ == null) {
          ensureTechsIsMutable();
          techs_.add(index, builderForValue.build());
          onChanged();
        } else {
          techsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechTypeData techs = 14;</code>
       */
      public Builder addAllTechs(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.TechTypeData> values) {
        if (techsBuilder_ == null) {
          ensureTechsIsMutable();
          super.addAll(values, techs_);
          onChanged();
        } else {
          techsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechTypeData techs = 14;</code>
       */
      public Builder clearTechs() {
        if (techsBuilder_ == null) {
          techs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00004000);
          onChanged();
        } else {
          techsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechTypeData techs = 14;</code>
       */
      public Builder removeTechs(int index) {
        if (techsBuilder_ == null) {
          ensureTechsIsMutable();
          techs_.remove(index);
          onChanged();
        } else {
          techsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TechTypeData techs = 14;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.TechTypeData.Builder getTechsBuilder(
          int index) {
        return getTechsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.TechTypeData techs = 14;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.TechTypeDataOrBuilder getTechsOrBuilder(
          int index) {
        if (techsBuilder_ == null) {
          return techs_.get(index);  } else {
          return techsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.TechTypeData techs = 14;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.TechTypeDataOrBuilder> 
           getTechsOrBuilderList() {
        if (techsBuilder_ != null) {
          return techsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(techs_);
        }
      }
      /**
       * <code>repeated .messages.TechTypeData techs = 14;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.TechTypeData.Builder addTechsBuilder() {
        return getTechsFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.TechTypeData.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.TechTypeData techs = 14;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.TechTypeData.Builder addTechsBuilder(
          int index) {
        return getTechsFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.TechTypeData.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.TechTypeData techs = 14;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.TechTypeData.Builder> 
           getTechsBuilderList() {
        return getTechsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.TechTypeData, org.bwapi.proxy.messages.GameMessages.TechTypeData.Builder, org.bwapi.proxy.messages.GameMessages.TechTypeDataOrBuilder> 
          getTechsFieldBuilder() {
        if (techsBuilder_ == null) {
          techsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.TechTypeData, org.bwapi.proxy.messages.GameMessages.TechTypeData.Builder, org.bwapi.proxy.messages.GameMessages.TechTypeDataOrBuilder>(
                  techs_,
                  ((bitField0_ & 0x00004000) == 0x00004000),
                  getParentForChildren(),
                  isClean());
          techs_ = null;
        }
        return techsBuilder_;
      }

      // repeated .messages.Color colors = 15;
      private java.util.List<org.bwapi.proxy.messages.DrawCommands.Color> colors_ =
        java.util.Collections.emptyList();
      private void ensureColorsIsMutable() {
        if (!((bitField0_ & 0x00008000) == 0x00008000)) {
          colors_ = new java.util.ArrayList<org.bwapi.proxy.messages.DrawCommands.Color>(colors_);
          bitField0_ |= 0x00008000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.DrawCommands.Color, org.bwapi.proxy.messages.DrawCommands.Color.Builder, org.bwapi.proxy.messages.DrawCommands.ColorOrBuilder> colorsBuilder_;

      /**
       * <code>repeated .messages.Color colors = 15;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.DrawCommands.Color> getColorsList() {
        if (colorsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(colors_);
        } else {
          return colorsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.Color colors = 15;</code>
       */
      public int getColorsCount() {
        if (colorsBuilder_ == null) {
          return colors_.size();
        } else {
          return colorsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.Color colors = 15;</code>
       */
      public org.bwapi.proxy.messages.DrawCommands.Color getColors(int index) {
        if (colorsBuilder_ == null) {
          return colors_.get(index);
        } else {
          return colorsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.Color colors = 15;</code>
       */
      public Builder setColors(
          int index, org.bwapi.proxy.messages.DrawCommands.Color value) {
        if (colorsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureColorsIsMutable();
          colors_.set(index, value);
          onChanged();
        } else {
          colorsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.Color colors = 15;</code>
       */
      public Builder setColors(
          int index, org.bwapi.proxy.messages.DrawCommands.Color.Builder builderForValue) {
        if (colorsBuilder_ == null) {
          ensureColorsIsMutable();
          colors_.set(index, builderForValue.build());
          onChanged();
        } else {
          colorsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.Color colors = 15;</code>
       */
      public Builder addColors(org.bwapi.proxy.messages.DrawCommands.Color value) {
        if (colorsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureColorsIsMutable();
          colors_.add(value);
          onChanged();
        } else {
          colorsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.Color colors = 15;</code>
       */
      public Builder addColors(
          int index, org.bwapi.proxy.messages.DrawCommands.Color value) {
        if (colorsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureColorsIsMutable();
          colors_.add(index, value);
          onChanged();
        } else {
          colorsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.Color colors = 15;</code>
       */
      public Builder addColors(
          org.bwapi.proxy.messages.DrawCommands.Color.Builder builderForValue) {
        if (colorsBuilder_ == null) {
          ensureColorsIsMutable();
          colors_.add(builderForValue.build());
          onChanged();
        } else {
          colorsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.Color colors = 15;</code>
       */
      public Builder addColors(
          int index, org.bwapi.proxy.messages.DrawCommands.Color.Builder builderForValue) {
        if (colorsBuilder_ == null) {
          ensureColorsIsMutable();
          colors_.add(index, builderForValue.build());
          onChanged();
        } else {
          colorsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.Color colors = 15;</code>
       */
      public Builder addAllColors(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.DrawCommands.Color> values) {
        if (colorsBuilder_ == null) {
          ensureColorsIsMutable();
          super.addAll(values, colors_);
          onChanged();
        } else {
          colorsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.Color colors = 15;</code>
       */
      public Builder clearColors() {
        if (colorsBuilder_ == null) {
          colors_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00008000);
          onChanged();
        } else {
          colorsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.Color colors = 15;</code>
       */
      public Builder removeColors(int index) {
        if (colorsBuilder_ == null) {
          ensureColorsIsMutable();
          colors_.remove(index);
          onChanged();
        } else {
          colorsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.Color colors = 15;</code>
       */
      public org.bwapi.proxy.messages.DrawCommands.Color.Builder getColorsBuilder(
          int index) {
        return getColorsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.Color colors = 15;</code>
       */
      public org.bwapi.proxy.messages.DrawCommands.ColorOrBuilder getColorsOrBuilder(
          int index) {
        if (colorsBuilder_ == null) {
          return colors_.get(index);  } else {
          return colorsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.Color colors = 15;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.DrawCommands.ColorOrBuilder> 
           getColorsOrBuilderList() {
        if (colorsBuilder_ != null) {
          return colorsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(colors_);
        }
      }
      /**
       * <code>repeated .messages.Color colors = 15;</code>
       */
      public org.bwapi.proxy.messages.DrawCommands.Color.Builder addColorsBuilder() {
        return getColorsFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.DrawCommands.Color.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.Color colors = 15;</code>
       */
      public org.bwapi.proxy.messages.DrawCommands.Color.Builder addColorsBuilder(
          int index) {
        return getColorsFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.DrawCommands.Color.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.Color colors = 15;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.DrawCommands.Color.Builder> 
           getColorsBuilderList() {
        return getColorsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.DrawCommands.Color, org.bwapi.proxy.messages.DrawCommands.Color.Builder, org.bwapi.proxy.messages.DrawCommands.ColorOrBuilder> 
          getColorsFieldBuilder() {
        if (colorsBuilder_ == null) {
          colorsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.DrawCommands.Color, org.bwapi.proxy.messages.DrawCommands.Color.Builder, org.bwapi.proxy.messages.DrawCommands.ColorOrBuilder>(
                  colors_,
                  ((bitField0_ & 0x00008000) == 0x00008000),
                  getParentForChildren(),
                  isClean());
          colors_ = null;
        }
        return colorsBuilder_;
      }

      // repeated .messages.RaceData races = 18;
      private java.util.List<org.bwapi.proxy.messages.GameMessages.RaceData> races_ =
        java.util.Collections.emptyList();
      private void ensureRacesIsMutable() {
        if (!((bitField0_ & 0x00010000) == 0x00010000)) {
          races_ = new java.util.ArrayList<org.bwapi.proxy.messages.GameMessages.RaceData>(races_);
          bitField0_ |= 0x00010000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.RaceData, org.bwapi.proxy.messages.GameMessages.RaceData.Builder, org.bwapi.proxy.messages.GameMessages.RaceDataOrBuilder> racesBuilder_;

      /**
       * <code>repeated .messages.RaceData races = 18;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.RaceData> getRacesList() {
        if (racesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(races_);
        } else {
          return racesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.RaceData races = 18;</code>
       */
      public int getRacesCount() {
        if (racesBuilder_ == null) {
          return races_.size();
        } else {
          return racesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.RaceData races = 18;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.RaceData getRaces(int index) {
        if (racesBuilder_ == null) {
          return races_.get(index);
        } else {
          return racesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.RaceData races = 18;</code>
       */
      public Builder setRaces(
          int index, org.bwapi.proxy.messages.GameMessages.RaceData value) {
        if (racesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRacesIsMutable();
          races_.set(index, value);
          onChanged();
        } else {
          racesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.RaceData races = 18;</code>
       */
      public Builder setRaces(
          int index, org.bwapi.proxy.messages.GameMessages.RaceData.Builder builderForValue) {
        if (racesBuilder_ == null) {
          ensureRacesIsMutable();
          races_.set(index, builderForValue.build());
          onChanged();
        } else {
          racesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.RaceData races = 18;</code>
       */
      public Builder addRaces(org.bwapi.proxy.messages.GameMessages.RaceData value) {
        if (racesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRacesIsMutable();
          races_.add(value);
          onChanged();
        } else {
          racesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.RaceData races = 18;</code>
       */
      public Builder addRaces(
          int index, org.bwapi.proxy.messages.GameMessages.RaceData value) {
        if (racesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRacesIsMutable();
          races_.add(index, value);
          onChanged();
        } else {
          racesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.RaceData races = 18;</code>
       */
      public Builder addRaces(
          org.bwapi.proxy.messages.GameMessages.RaceData.Builder builderForValue) {
        if (racesBuilder_ == null) {
          ensureRacesIsMutable();
          races_.add(builderForValue.build());
          onChanged();
        } else {
          racesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.RaceData races = 18;</code>
       */
      public Builder addRaces(
          int index, org.bwapi.proxy.messages.GameMessages.RaceData.Builder builderForValue) {
        if (racesBuilder_ == null) {
          ensureRacesIsMutable();
          races_.add(index, builderForValue.build());
          onChanged();
        } else {
          racesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.RaceData races = 18;</code>
       */
      public Builder addAllRaces(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.GameMessages.RaceData> values) {
        if (racesBuilder_ == null) {
          ensureRacesIsMutable();
          super.addAll(values, races_);
          onChanged();
        } else {
          racesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.RaceData races = 18;</code>
       */
      public Builder clearRaces() {
        if (racesBuilder_ == null) {
          races_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00010000);
          onChanged();
        } else {
          racesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.RaceData races = 18;</code>
       */
      public Builder removeRaces(int index) {
        if (racesBuilder_ == null) {
          ensureRacesIsMutable();
          races_.remove(index);
          onChanged();
        } else {
          racesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.RaceData races = 18;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.RaceData.Builder getRacesBuilder(
          int index) {
        return getRacesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.RaceData races = 18;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.RaceDataOrBuilder getRacesOrBuilder(
          int index) {
        if (racesBuilder_ == null) {
          return races_.get(index);  } else {
          return racesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.RaceData races = 18;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.GameMessages.RaceDataOrBuilder> 
           getRacesOrBuilderList() {
        if (racesBuilder_ != null) {
          return racesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(races_);
        }
      }
      /**
       * <code>repeated .messages.RaceData races = 18;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.RaceData.Builder addRacesBuilder() {
        return getRacesFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.GameMessages.RaceData.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.RaceData races = 18;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.RaceData.Builder addRacesBuilder(
          int index) {
        return getRacesFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.GameMessages.RaceData.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.RaceData races = 18;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.GameMessages.RaceData.Builder> 
           getRacesBuilderList() {
        return getRacesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.RaceData, org.bwapi.proxy.messages.GameMessages.RaceData.Builder, org.bwapi.proxy.messages.GameMessages.RaceDataOrBuilder> 
          getRacesFieldBuilder() {
        if (racesBuilder_ == null) {
          racesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.RaceData, org.bwapi.proxy.messages.GameMessages.RaceData.Builder, org.bwapi.proxy.messages.GameMessages.RaceDataOrBuilder>(
                  races_,
                  ((bitField0_ & 0x00010000) == 0x00010000),
                  getParentForChildren(),
                  isClean());
          races_ = null;
        }
        return racesBuilder_;
      }

      // repeated .messages.TilePosition startLocations = 16;
      private java.util.List<org.bwapi.proxy.messages.BasicTypes.TilePosition> startLocations_ =
        java.util.Collections.emptyList();
      private void ensureStartLocationsIsMutable() {
        if (!((bitField0_ & 0x00020000) == 0x00020000)) {
          startLocations_ = new java.util.ArrayList<org.bwapi.proxy.messages.BasicTypes.TilePosition>(startLocations_);
          bitField0_ |= 0x00020000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.BasicTypes.TilePosition, org.bwapi.proxy.messages.BasicTypes.TilePosition.Builder, org.bwapi.proxy.messages.BasicTypes.TilePositionOrBuilder> startLocationsBuilder_;

      /**
       * <code>repeated .messages.TilePosition startLocations = 16;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.BasicTypes.TilePosition> getStartLocationsList() {
        if (startLocationsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(startLocations_);
        } else {
          return startLocationsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .messages.TilePosition startLocations = 16;</code>
       */
      public int getStartLocationsCount() {
        if (startLocationsBuilder_ == null) {
          return startLocations_.size();
        } else {
          return startLocationsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .messages.TilePosition startLocations = 16;</code>
       */
      public org.bwapi.proxy.messages.BasicTypes.TilePosition getStartLocations(int index) {
        if (startLocationsBuilder_ == null) {
          return startLocations_.get(index);
        } else {
          return startLocationsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .messages.TilePosition startLocations = 16;</code>
       */
      public Builder setStartLocations(
          int index, org.bwapi.proxy.messages.BasicTypes.TilePosition value) {
        if (startLocationsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStartLocationsIsMutable();
          startLocations_.set(index, value);
          onChanged();
        } else {
          startLocationsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TilePosition startLocations = 16;</code>
       */
      public Builder setStartLocations(
          int index, org.bwapi.proxy.messages.BasicTypes.TilePosition.Builder builderForValue) {
        if (startLocationsBuilder_ == null) {
          ensureStartLocationsIsMutable();
          startLocations_.set(index, builderForValue.build());
          onChanged();
        } else {
          startLocationsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.TilePosition startLocations = 16;</code>
       */
      public Builder addStartLocations(org.bwapi.proxy.messages.BasicTypes.TilePosition value) {
        if (startLocationsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStartLocationsIsMutable();
          startLocations_.add(value);
          onChanged();
        } else {
          startLocationsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TilePosition startLocations = 16;</code>
       */
      public Builder addStartLocations(
          int index, org.bwapi.proxy.messages.BasicTypes.TilePosition value) {
        if (startLocationsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStartLocationsIsMutable();
          startLocations_.add(index, value);
          onChanged();
        } else {
          startLocationsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TilePosition startLocations = 16;</code>
       */
      public Builder addStartLocations(
          org.bwapi.proxy.messages.BasicTypes.TilePosition.Builder builderForValue) {
        if (startLocationsBuilder_ == null) {
          ensureStartLocationsIsMutable();
          startLocations_.add(builderForValue.build());
          onChanged();
        } else {
          startLocationsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.TilePosition startLocations = 16;</code>
       */
      public Builder addStartLocations(
          int index, org.bwapi.proxy.messages.BasicTypes.TilePosition.Builder builderForValue) {
        if (startLocationsBuilder_ == null) {
          ensureStartLocationsIsMutable();
          startLocations_.add(index, builderForValue.build());
          onChanged();
        } else {
          startLocationsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .messages.TilePosition startLocations = 16;</code>
       */
      public Builder addAllStartLocations(
          java.lang.Iterable<? extends org.bwapi.proxy.messages.BasicTypes.TilePosition> values) {
        if (startLocationsBuilder_ == null) {
          ensureStartLocationsIsMutable();
          super.addAll(values, startLocations_);
          onChanged();
        } else {
          startLocationsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TilePosition startLocations = 16;</code>
       */
      public Builder clearStartLocations() {
        if (startLocationsBuilder_ == null) {
          startLocations_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00020000);
          onChanged();
        } else {
          startLocationsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .messages.TilePosition startLocations = 16;</code>
       */
      public Builder removeStartLocations(int index) {
        if (startLocationsBuilder_ == null) {
          ensureStartLocationsIsMutable();
          startLocations_.remove(index);
          onChanged();
        } else {
          startLocationsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .messages.TilePosition startLocations = 16;</code>
       */
      public org.bwapi.proxy.messages.BasicTypes.TilePosition.Builder getStartLocationsBuilder(
          int index) {
        return getStartLocationsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .messages.TilePosition startLocations = 16;</code>
       */
      public org.bwapi.proxy.messages.BasicTypes.TilePositionOrBuilder getStartLocationsOrBuilder(
          int index) {
        if (startLocationsBuilder_ == null) {
          return startLocations_.get(index);  } else {
          return startLocationsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .messages.TilePosition startLocations = 16;</code>
       */
      public java.util.List<? extends org.bwapi.proxy.messages.BasicTypes.TilePositionOrBuilder> 
           getStartLocationsOrBuilderList() {
        if (startLocationsBuilder_ != null) {
          return startLocationsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(startLocations_);
        }
      }
      /**
       * <code>repeated .messages.TilePosition startLocations = 16;</code>
       */
      public org.bwapi.proxy.messages.BasicTypes.TilePosition.Builder addStartLocationsBuilder() {
        return getStartLocationsFieldBuilder().addBuilder(
            org.bwapi.proxy.messages.BasicTypes.TilePosition.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.TilePosition startLocations = 16;</code>
       */
      public org.bwapi.proxy.messages.BasicTypes.TilePosition.Builder addStartLocationsBuilder(
          int index) {
        return getStartLocationsFieldBuilder().addBuilder(
            index, org.bwapi.proxy.messages.BasicTypes.TilePosition.getDefaultInstance());
      }
      /**
       * <code>repeated .messages.TilePosition startLocations = 16;</code>
       */
      public java.util.List<org.bwapi.proxy.messages.BasicTypes.TilePosition.Builder> 
           getStartLocationsBuilderList() {
        return getStartLocationsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bwapi.proxy.messages.BasicTypes.TilePosition, org.bwapi.proxy.messages.BasicTypes.TilePosition.Builder, org.bwapi.proxy.messages.BasicTypes.TilePositionOrBuilder> 
          getStartLocationsFieldBuilder() {
        if (startLocationsBuilder_ == null) {
          startLocationsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bwapi.proxy.messages.BasicTypes.TilePosition, org.bwapi.proxy.messages.BasicTypes.TilePosition.Builder, org.bwapi.proxy.messages.BasicTypes.TilePositionOrBuilder>(
                  startLocations_,
                  ((bitField0_ & 0x00020000) == 0x00020000),
                  getParentForChildren(),
                  isClean());
          startLocations_ = null;
        }
        return startLocationsBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:messages.StaticGameData)
    }

    static {
      defaultInstance = new StaticGameData(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:messages.StaticGameData)
  }

  public interface BulletOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required int32 id = 1;
    /**
     * <code>required int32 id = 1;</code>
     */
    boolean hasId();
    /**
     * <code>required int32 id = 1;</code>
     */
    int getId();

    // optional int32 player = 2;
    /**
     * <code>optional int32 player = 2;</code>
     */
    boolean hasPlayer();
    /**
     * <code>optional int32 player = 2;</code>
     */
    int getPlayer();

    // required .messages.BulletType type = 3;
    /**
     * <code>required .messages.BulletType type = 3;</code>
     */
    boolean hasType();
    /**
     * <code>required .messages.BulletType type = 3;</code>
     */
    org.bwapi.proxy.messages.GameMessages.BulletType getType();

    // optional .messages.UnitId source = 4;
    /**
     * <code>optional .messages.UnitId source = 4;</code>
     */
    boolean hasSource();
    /**
     * <code>optional .messages.UnitId source = 4;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitId getSource();
    /**
     * <code>optional .messages.UnitId source = 4;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder getSourceOrBuilder();

    // required .messages.Position position = 5;
    /**
     * <code>required .messages.Position position = 5;</code>
     */
    boolean hasPosition();
    /**
     * <code>required .messages.Position position = 5;</code>
     */
    org.bwapi.proxy.messages.BasicTypes.Position getPosition();
    /**
     * <code>required .messages.Position position = 5;</code>
     */
    org.bwapi.proxy.messages.BasicTypes.PositionOrBuilder getPositionOrBuilder();

    // required double angle = 6;
    /**
     * <code>required double angle = 6;</code>
     */
    boolean hasAngle();
    /**
     * <code>required double angle = 6;</code>
     */
    double getAngle();

    // required double velocityX = 7;
    /**
     * <code>required double velocityX = 7;</code>
     */
    boolean hasVelocityX();
    /**
     * <code>required double velocityX = 7;</code>
     */
    double getVelocityX();

    // required double velocityY = 8;
    /**
     * <code>required double velocityY = 8;</code>
     */
    boolean hasVelocityY();
    /**
     * <code>required double velocityY = 8;</code>
     */
    double getVelocityY();

    // optional .messages.UnitId target = 9;
    /**
     * <code>optional .messages.UnitId target = 9;</code>
     */
    boolean hasTarget();
    /**
     * <code>optional .messages.UnitId target = 9;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitId getTarget();
    /**
     * <code>optional .messages.UnitId target = 9;</code>
     */
    org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder getTargetOrBuilder();

    // required .messages.Position targetPosition = 10;
    /**
     * <code>required .messages.Position targetPosition = 10;</code>
     */
    boolean hasTargetPosition();
    /**
     * <code>required .messages.Position targetPosition = 10;</code>
     */
    org.bwapi.proxy.messages.BasicTypes.Position getTargetPosition();
    /**
     * <code>required .messages.Position targetPosition = 10;</code>
     */
    org.bwapi.proxy.messages.BasicTypes.PositionOrBuilder getTargetPositionOrBuilder();

    // required int32 removeTimer = 11;
    /**
     * <code>required int32 removeTimer = 11;</code>
     */
    boolean hasRemoveTimer();
    /**
     * <code>required int32 removeTimer = 11;</code>
     */
    int getRemoveTimer();

    // required bool exists = 12;
    /**
     * <code>required bool exists = 12;</code>
     */
    boolean hasExists();
    /**
     * <code>required bool exists = 12;</code>
     */
    boolean getExists();

    // required bool isVisible = 13;
    /**
     * <code>required bool isVisible = 13;</code>
     */
    boolean hasIsVisible();
    /**
     * <code>required bool isVisible = 13;</code>
     */
    boolean getIsVisible();
  }
  /**
   * Protobuf type {@code messages.Bullet}
   */
  public static final class Bullet extends
      com.google.protobuf.GeneratedMessage
      implements BulletOrBuilder {
    // Use Bullet.newBuilder() to construct.
    private Bullet(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Bullet(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Bullet defaultInstance;
    public static Bullet getDefaultInstance() {
      return defaultInstance;
    }

    public Bullet getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Bullet(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              id_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              player_ = input.readInt32();
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
              org.bwapi.proxy.messages.GameMessages.BulletType value = org.bwapi.proxy.messages.GameMessages.BulletType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(3, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                type_ = value;
              }
              break;
            }
            case 34: {
              org.bwapi.proxy.messages.GameMessages.UnitId.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = source_.toBuilder();
              }
              source_ = input.readMessage(org.bwapi.proxy.messages.GameMessages.UnitId.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(source_);
                source_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 42: {
              org.bwapi.proxy.messages.BasicTypes.Position.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = position_.toBuilder();
              }
              position_ = input.readMessage(org.bwapi.proxy.messages.BasicTypes.Position.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(position_);
                position_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 49: {
              bitField0_ |= 0x00000020;
              angle_ = input.readDouble();
              break;
            }
            case 57: {
              bitField0_ |= 0x00000040;
              velocityX_ = input.readDouble();
              break;
            }
            case 65: {
              bitField0_ |= 0x00000080;
              velocityY_ = input.readDouble();
              break;
            }
            case 74: {
              org.bwapi.proxy.messages.GameMessages.UnitId.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) == 0x00000100)) {
                subBuilder = target_.toBuilder();
              }
              target_ = input.readMessage(org.bwapi.proxy.messages.GameMessages.UnitId.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(target_);
                target_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
            case 82: {
              org.bwapi.proxy.messages.BasicTypes.Position.Builder subBuilder = null;
              if (((bitField0_ & 0x00000200) == 0x00000200)) {
                subBuilder = targetPosition_.toBuilder();
              }
              targetPosition_ = input.readMessage(org.bwapi.proxy.messages.BasicTypes.Position.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(targetPosition_);
                targetPosition_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000200;
              break;
            }
            case 88: {
              bitField0_ |= 0x00000400;
              removeTimer_ = input.readInt32();
              break;
            }
            case 96: {
              bitField0_ |= 0x00000800;
              exists_ = input.readBool();
              break;
            }
            case 104: {
              bitField0_ |= 0x00001000;
              isVisible_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_Bullet_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bwapi.proxy.messages.GameMessages.internal_static_messages_Bullet_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.bwapi.proxy.messages.GameMessages.Bullet.class, org.bwapi.proxy.messages.GameMessages.Bullet.Builder.class);
    }

    public static com.google.protobuf.Parser<Bullet> PARSER =
        new com.google.protobuf.AbstractParser<Bullet>() {
      public Bullet parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Bullet(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    // required int32 id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private int id_;
    /**
     * <code>required int32 id = 1;</code>
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required int32 id = 1;</code>
     */
    public int getId() {
      return id_;
    }

    // optional int32 player = 2;
    public static final int PLAYER_FIELD_NUMBER = 2;
    private int player_;
    /**
     * <code>optional int32 player = 2;</code>
     */
    public boolean hasPlayer() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 player = 2;</code>
     */
    public int getPlayer() {
      return player_;
    }

    // required .messages.BulletType type = 3;
    public static final int TYPE_FIELD_NUMBER = 3;
    private org.bwapi.proxy.messages.GameMessages.BulletType type_;
    /**
     * <code>required .messages.BulletType type = 3;</code>
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>required .messages.BulletType type = 3;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.BulletType getType() {
      return type_;
    }

    // optional .messages.UnitId source = 4;
    public static final int SOURCE_FIELD_NUMBER = 4;
    private org.bwapi.proxy.messages.GameMessages.UnitId source_;
    /**
     * <code>optional .messages.UnitId source = 4;</code>
     */
    public boolean hasSource() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional .messages.UnitId source = 4;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitId getSource() {
      return source_;
    }
    /**
     * <code>optional .messages.UnitId source = 4;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder getSourceOrBuilder() {
      return source_;
    }

    // required .messages.Position position = 5;
    public static final int POSITION_FIELD_NUMBER = 5;
    private org.bwapi.proxy.messages.BasicTypes.Position position_;
    /**
     * <code>required .messages.Position position = 5;</code>
     */
    public boolean hasPosition() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>required .messages.Position position = 5;</code>
     */
    public org.bwapi.proxy.messages.BasicTypes.Position getPosition() {
      return position_;
    }
    /**
     * <code>required .messages.Position position = 5;</code>
     */
    public org.bwapi.proxy.messages.BasicTypes.PositionOrBuilder getPositionOrBuilder() {
      return position_;
    }

    // required double angle = 6;
    public static final int ANGLE_FIELD_NUMBER = 6;
    private double angle_;
    /**
     * <code>required double angle = 6;</code>
     */
    public boolean hasAngle() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>required double angle = 6;</code>
     */
    public double getAngle() {
      return angle_;
    }

    // required double velocityX = 7;
    public static final int VELOCITYX_FIELD_NUMBER = 7;
    private double velocityX_;
    /**
     * <code>required double velocityX = 7;</code>
     */
    public boolean hasVelocityX() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>required double velocityX = 7;</code>
     */
    public double getVelocityX() {
      return velocityX_;
    }

    // required double velocityY = 8;
    public static final int VELOCITYY_FIELD_NUMBER = 8;
    private double velocityY_;
    /**
     * <code>required double velocityY = 8;</code>
     */
    public boolean hasVelocityY() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>required double velocityY = 8;</code>
     */
    public double getVelocityY() {
      return velocityY_;
    }

    // optional .messages.UnitId target = 9;
    public static final int TARGET_FIELD_NUMBER = 9;
    private org.bwapi.proxy.messages.GameMessages.UnitId target_;
    /**
     * <code>optional .messages.UnitId target = 9;</code>
     */
    public boolean hasTarget() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional .messages.UnitId target = 9;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitId getTarget() {
      return target_;
    }
    /**
     * <code>optional .messages.UnitId target = 9;</code>
     */
    public org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder getTargetOrBuilder() {
      return target_;
    }

    // required .messages.Position targetPosition = 10;
    public static final int TARGETPOSITION_FIELD_NUMBER = 10;
    private org.bwapi.proxy.messages.BasicTypes.Position targetPosition_;
    /**
     * <code>required .messages.Position targetPosition = 10;</code>
     */
    public boolean hasTargetPosition() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>required .messages.Position targetPosition = 10;</code>
     */
    public org.bwapi.proxy.messages.BasicTypes.Position getTargetPosition() {
      return targetPosition_;
    }
    /**
     * <code>required .messages.Position targetPosition = 10;</code>
     */
    public org.bwapi.proxy.messages.BasicTypes.PositionOrBuilder getTargetPositionOrBuilder() {
      return targetPosition_;
    }

    // required int32 removeTimer = 11;
    public static final int REMOVETIMER_FIELD_NUMBER = 11;
    private int removeTimer_;
    /**
     * <code>required int32 removeTimer = 11;</code>
     */
    public boolean hasRemoveTimer() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>required int32 removeTimer = 11;</code>
     */
    public int getRemoveTimer() {
      return removeTimer_;
    }

    // required bool exists = 12;
    public static final int EXISTS_FIELD_NUMBER = 12;
    private boolean exists_;
    /**
     * <code>required bool exists = 12;</code>
     */
    public boolean hasExists() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>required bool exists = 12;</code>
     */
    public boolean getExists() {
      return exists_;
    }

    // required bool isVisible = 13;
    public static final int ISVISIBLE_FIELD_NUMBER = 13;
    private boolean isVisible_;
    /**
     * <code>required bool isVisible = 13;</code>
     */
    public boolean hasIsVisible() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     * <code>required bool isVisible = 13;</code>
     */
    public boolean getIsVisible() {
      return isVisible_;
    }

    private void initFields() {
      id_ = 0;
      player_ = 0;
      type_ = org.bwapi.proxy.messages.GameMessages.BulletType.Melee;
      source_ = org.bwapi.proxy.messages.GameMessages.UnitId.getDefaultInstance();
      position_ = org.bwapi.proxy.messages.BasicTypes.Position.getDefaultInstance();
      angle_ = 0D;
      velocityX_ = 0D;
      velocityY_ = 0D;
      target_ = org.bwapi.proxy.messages.GameMessages.UnitId.getDefaultInstance();
      targetPosition_ = org.bwapi.proxy.messages.BasicTypes.Position.getDefaultInstance();
      removeTimer_ = 0;
      exists_ = false;
      isVisible_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasId()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasType()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasPosition()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasAngle()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasVelocityX()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasVelocityY()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasTargetPosition()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasRemoveTimer()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasExists()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasIsVisible()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (hasSource()) {
        if (!getSource().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (!getPosition().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (hasTarget()) {
        if (!getTarget().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (!getTargetPosition().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, player_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeEnum(3, type_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, source_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(5, position_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeDouble(6, angle_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeDouble(7, velocityX_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeDouble(8, velocityY_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeMessage(9, target_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeMessage(10, targetPosition_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeInt32(11, removeTimer_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeBool(12, exists_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeBool(13, isVisible_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, player_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, type_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, source_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, position_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(6, angle_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(7, velocityX_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(8, velocityY_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, target_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, targetPosition_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(11, removeTimer_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(12, exists_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(13, isVisible_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.bwapi.proxy.messages.GameMessages.Bullet parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.Bullet parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.Bullet parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.bwapi.proxy.messages.GameMessages.Bullet parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.Bullet parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.Bullet parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.Bullet parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.Bullet parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.bwapi.proxy.messages.GameMessages.Bullet parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.bwapi.proxy.messages.GameMessages.Bullet parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bwapi.proxy.messages.GameMessages.Bullet prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code messages.Bullet}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bwapi.proxy.messages.GameMessages.BulletOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_Bullet_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_Bullet_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.bwapi.proxy.messages.GameMessages.Bullet.class, org.bwapi.proxy.messages.GameMessages.Bullet.Builder.class);
      }

      // Construct using org.bwapi.proxy.messages.GameMessages.Bullet.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getSourceFieldBuilder();
          getPositionFieldBuilder();
          getTargetFieldBuilder();
          getTargetPositionFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        id_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        player_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        type_ = org.bwapi.proxy.messages.GameMessages.BulletType.Melee;
        bitField0_ = (bitField0_ & ~0x00000004);
        if (sourceBuilder_ == null) {
          source_ = org.bwapi.proxy.messages.GameMessages.UnitId.getDefaultInstance();
        } else {
          sourceBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        if (positionBuilder_ == null) {
          position_ = org.bwapi.proxy.messages.BasicTypes.Position.getDefaultInstance();
        } else {
          positionBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        angle_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000020);
        velocityX_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000040);
        velocityY_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000080);
        if (targetBuilder_ == null) {
          target_ = org.bwapi.proxy.messages.GameMessages.UnitId.getDefaultInstance();
        } else {
          targetBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        if (targetPositionBuilder_ == null) {
          targetPosition_ = org.bwapi.proxy.messages.BasicTypes.Position.getDefaultInstance();
        } else {
          targetPositionBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        removeTimer_ = 0;
        bitField0_ = (bitField0_ & ~0x00000400);
        exists_ = false;
        bitField0_ = (bitField0_ & ~0x00000800);
        isVisible_ = false;
        bitField0_ = (bitField0_ & ~0x00001000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bwapi.proxy.messages.GameMessages.internal_static_messages_Bullet_descriptor;
      }

      public org.bwapi.proxy.messages.GameMessages.Bullet getDefaultInstanceForType() {
        return org.bwapi.proxy.messages.GameMessages.Bullet.getDefaultInstance();
      }

      public org.bwapi.proxy.messages.GameMessages.Bullet build() {
        org.bwapi.proxy.messages.GameMessages.Bullet result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.bwapi.proxy.messages.GameMessages.Bullet buildPartial() {
        org.bwapi.proxy.messages.GameMessages.Bullet result = new org.bwapi.proxy.messages.GameMessages.Bullet(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.player_ = player_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (sourceBuilder_ == null) {
          result.source_ = source_;
        } else {
          result.source_ = sourceBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        if (positionBuilder_ == null) {
          result.position_ = position_;
        } else {
          result.position_ = positionBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.angle_ = angle_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.velocityX_ = velocityX_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.velocityY_ = velocityY_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        if (targetBuilder_ == null) {
          result.target_ = target_;
        } else {
          result.target_ = targetBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        if (targetPositionBuilder_ == null) {
          result.targetPosition_ = targetPosition_;
        } else {
          result.targetPosition_ = targetPositionBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        result.removeTimer_ = removeTimer_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        result.exists_ = exists_;
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00001000;
        }
        result.isVisible_ = isVisible_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bwapi.proxy.messages.GameMessages.Bullet) {
          return mergeFrom((org.bwapi.proxy.messages.GameMessages.Bullet)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.bwapi.proxy.messages.GameMessages.Bullet other) {
        if (other == org.bwapi.proxy.messages.GameMessages.Bullet.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasPlayer()) {
          setPlayer(other.getPlayer());
        }
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasSource()) {
          mergeSource(other.getSource());
        }
        if (other.hasPosition()) {
          mergePosition(other.getPosition());
        }
        if (other.hasAngle()) {
          setAngle(other.getAngle());
        }
        if (other.hasVelocityX()) {
          setVelocityX(other.getVelocityX());
        }
        if (other.hasVelocityY()) {
          setVelocityY(other.getVelocityY());
        }
        if (other.hasTarget()) {
          mergeTarget(other.getTarget());
        }
        if (other.hasTargetPosition()) {
          mergeTargetPosition(other.getTargetPosition());
        }
        if (other.hasRemoveTimer()) {
          setRemoveTimer(other.getRemoveTimer());
        }
        if (other.hasExists()) {
          setExists(other.getExists());
        }
        if (other.hasIsVisible()) {
          setIsVisible(other.getIsVisible());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasId()) {
          
          return false;
        }
        if (!hasType()) {
          
          return false;
        }
        if (!hasPosition()) {
          
          return false;
        }
        if (!hasAngle()) {
          
          return false;
        }
        if (!hasVelocityX()) {
          
          return false;
        }
        if (!hasVelocityY()) {
          
          return false;
        }
        if (!hasTargetPosition()) {
          
          return false;
        }
        if (!hasRemoveTimer()) {
          
          return false;
        }
        if (!hasExists()) {
          
          return false;
        }
        if (!hasIsVisible()) {
          
          return false;
        }
        if (hasSource()) {
          if (!getSource().isInitialized()) {
            
            return false;
          }
        }
        if (!getPosition().isInitialized()) {
          
          return false;
        }
        if (hasTarget()) {
          if (!getTarget().isInitialized()) {
            
            return false;
          }
        }
        if (!getTargetPosition().isInitialized()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.bwapi.proxy.messages.GameMessages.Bullet parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.bwapi.proxy.messages.GameMessages.Bullet) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required int32 id = 1;
      private int id_ ;
      /**
       * <code>required int32 id = 1;</code>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public int getId() {
        return id_;
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public Builder setId(int value) {
        bitField0_ |= 0x00000001;
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 id = 1;</code>
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = 0;
        onChanged();
        return this;
      }

      // optional int32 player = 2;
      private int player_ ;
      /**
       * <code>optional int32 player = 2;</code>
       */
      public boolean hasPlayer() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 player = 2;</code>
       */
      public int getPlayer() {
        return player_;
      }
      /**
       * <code>optional int32 player = 2;</code>
       */
      public Builder setPlayer(int value) {
        bitField0_ |= 0x00000002;
        player_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 player = 2;</code>
       */
      public Builder clearPlayer() {
        bitField0_ = (bitField0_ & ~0x00000002);
        player_ = 0;
        onChanged();
        return this;
      }

      // required .messages.BulletType type = 3;
      private org.bwapi.proxy.messages.GameMessages.BulletType type_ = org.bwapi.proxy.messages.GameMessages.BulletType.Melee;
      /**
       * <code>required .messages.BulletType type = 3;</code>
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>required .messages.BulletType type = 3;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.BulletType getType() {
        return type_;
      }
      /**
       * <code>required .messages.BulletType type = 3;</code>
       */
      public Builder setType(org.bwapi.proxy.messages.GameMessages.BulletType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required .messages.BulletType type = 3;</code>
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000004);
        type_ = org.bwapi.proxy.messages.GameMessages.BulletType.Melee;
        onChanged();
        return this;
      }

      // optional .messages.UnitId source = 4;
      private org.bwapi.proxy.messages.GameMessages.UnitId source_ = org.bwapi.proxy.messages.GameMessages.UnitId.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitId, org.bwapi.proxy.messages.GameMessages.UnitId.Builder, org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> sourceBuilder_;
      /**
       * <code>optional .messages.UnitId source = 4;</code>
       */
      public boolean hasSource() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .messages.UnitId source = 4;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId getSource() {
        if (sourceBuilder_ == null) {
          return source_;
        } else {
          return sourceBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .messages.UnitId source = 4;</code>
       */
      public Builder setSource(org.bwapi.proxy.messages.GameMessages.UnitId value) {
        if (sourceBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          source_ = value;
          onChanged();
        } else {
          sourceBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .messages.UnitId source = 4;</code>
       */
      public Builder setSource(
          org.bwapi.proxy.messages.GameMessages.UnitId.Builder builderForValue) {
        if (sourceBuilder_ == null) {
          source_ = builderForValue.build();
          onChanged();
        } else {
          sourceBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .messages.UnitId source = 4;</code>
       */
      public Builder mergeSource(org.bwapi.proxy.messages.GameMessages.UnitId value) {
        if (sourceBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              source_ != org.bwapi.proxy.messages.GameMessages.UnitId.getDefaultInstance()) {
            source_ =
              org.bwapi.proxy.messages.GameMessages.UnitId.newBuilder(source_).mergeFrom(value).buildPartial();
          } else {
            source_ = value;
          }
          onChanged();
        } else {
          sourceBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .messages.UnitId source = 4;</code>
       */
      public Builder clearSource() {
        if (sourceBuilder_ == null) {
          source_ = org.bwapi.proxy.messages.GameMessages.UnitId.getDefaultInstance();
          onChanged();
        } else {
          sourceBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       * <code>optional .messages.UnitId source = 4;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId.Builder getSourceBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getSourceFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .messages.UnitId source = 4;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder getSourceOrBuilder() {
        if (sourceBuilder_ != null) {
          return sourceBuilder_.getMessageOrBuilder();
        } else {
          return source_;
        }
      }
      /**
       * <code>optional .messages.UnitId source = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitId, org.bwapi.proxy.messages.GameMessages.UnitId.Builder, org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> 
          getSourceFieldBuilder() {
        if (sourceBuilder_ == null) {
          sourceBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UnitId, org.bwapi.proxy.messages.GameMessages.UnitId.Builder, org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder>(
                  source_,
                  getParentForChildren(),
                  isClean());
          source_ = null;
        }
        return sourceBuilder_;
      }

      // required .messages.Position position = 5;
      private org.bwapi.proxy.messages.BasicTypes.Position position_ = org.bwapi.proxy.messages.BasicTypes.Position.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.BasicTypes.Position, org.bwapi.proxy.messages.BasicTypes.Position.Builder, org.bwapi.proxy.messages.BasicTypes.PositionOrBuilder> positionBuilder_;
      /**
       * <code>required .messages.Position position = 5;</code>
       */
      public boolean hasPosition() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>required .messages.Position position = 5;</code>
       */
      public org.bwapi.proxy.messages.BasicTypes.Position getPosition() {
        if (positionBuilder_ == null) {
          return position_;
        } else {
          return positionBuilder_.getMessage();
        }
      }
      /**
       * <code>required .messages.Position position = 5;</code>
       */
      public Builder setPosition(org.bwapi.proxy.messages.BasicTypes.Position value) {
        if (positionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          position_ = value;
          onChanged();
        } else {
          positionBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>required .messages.Position position = 5;</code>
       */
      public Builder setPosition(
          org.bwapi.proxy.messages.BasicTypes.Position.Builder builderForValue) {
        if (positionBuilder_ == null) {
          position_ = builderForValue.build();
          onChanged();
        } else {
          positionBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>required .messages.Position position = 5;</code>
       */
      public Builder mergePosition(org.bwapi.proxy.messages.BasicTypes.Position value) {
        if (positionBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010) &&
              position_ != org.bwapi.proxy.messages.BasicTypes.Position.getDefaultInstance()) {
            position_ =
              org.bwapi.proxy.messages.BasicTypes.Position.newBuilder(position_).mergeFrom(value).buildPartial();
          } else {
            position_ = value;
          }
          onChanged();
        } else {
          positionBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>required .messages.Position position = 5;</code>
       */
      public Builder clearPosition() {
        if (positionBuilder_ == null) {
          position_ = org.bwapi.proxy.messages.BasicTypes.Position.getDefaultInstance();
          onChanged();
        } else {
          positionBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       * <code>required .messages.Position position = 5;</code>
       */
      public org.bwapi.proxy.messages.BasicTypes.Position.Builder getPositionBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getPositionFieldBuilder().getBuilder();
      }
      /**
       * <code>required .messages.Position position = 5;</code>
       */
      public org.bwapi.proxy.messages.BasicTypes.PositionOrBuilder getPositionOrBuilder() {
        if (positionBuilder_ != null) {
          return positionBuilder_.getMessageOrBuilder();
        } else {
          return position_;
        }
      }
      /**
       * <code>required .messages.Position position = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.BasicTypes.Position, org.bwapi.proxy.messages.BasicTypes.Position.Builder, org.bwapi.proxy.messages.BasicTypes.PositionOrBuilder> 
          getPositionFieldBuilder() {
        if (positionBuilder_ == null) {
          positionBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.bwapi.proxy.messages.BasicTypes.Position, org.bwapi.proxy.messages.BasicTypes.Position.Builder, org.bwapi.proxy.messages.BasicTypes.PositionOrBuilder>(
                  position_,
                  getParentForChildren(),
                  isClean());
          position_ = null;
        }
        return positionBuilder_;
      }

      // required double angle = 6;
      private double angle_ ;
      /**
       * <code>required double angle = 6;</code>
       */
      public boolean hasAngle() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>required double angle = 6;</code>
       */
      public double getAngle() {
        return angle_;
      }
      /**
       * <code>required double angle = 6;</code>
       */
      public Builder setAngle(double value) {
        bitField0_ |= 0x00000020;
        angle_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required double angle = 6;</code>
       */
      public Builder clearAngle() {
        bitField0_ = (bitField0_ & ~0x00000020);
        angle_ = 0D;
        onChanged();
        return this;
      }

      // required double velocityX = 7;
      private double velocityX_ ;
      /**
       * <code>required double velocityX = 7;</code>
       */
      public boolean hasVelocityX() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>required double velocityX = 7;</code>
       */
      public double getVelocityX() {
        return velocityX_;
      }
      /**
       * <code>required double velocityX = 7;</code>
       */
      public Builder setVelocityX(double value) {
        bitField0_ |= 0x00000040;
        velocityX_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required double velocityX = 7;</code>
       */
      public Builder clearVelocityX() {
        bitField0_ = (bitField0_ & ~0x00000040);
        velocityX_ = 0D;
        onChanged();
        return this;
      }

      // required double velocityY = 8;
      private double velocityY_ ;
      /**
       * <code>required double velocityY = 8;</code>
       */
      public boolean hasVelocityY() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>required double velocityY = 8;</code>
       */
      public double getVelocityY() {
        return velocityY_;
      }
      /**
       * <code>required double velocityY = 8;</code>
       */
      public Builder setVelocityY(double value) {
        bitField0_ |= 0x00000080;
        velocityY_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required double velocityY = 8;</code>
       */
      public Builder clearVelocityY() {
        bitField0_ = (bitField0_ & ~0x00000080);
        velocityY_ = 0D;
        onChanged();
        return this;
      }

      // optional .messages.UnitId target = 9;
      private org.bwapi.proxy.messages.GameMessages.UnitId target_ = org.bwapi.proxy.messages.GameMessages.UnitId.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitId, org.bwapi.proxy.messages.GameMessages.UnitId.Builder, org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> targetBuilder_;
      /**
       * <code>optional .messages.UnitId target = 9;</code>
       */
      public boolean hasTarget() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional .messages.UnitId target = 9;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId getTarget() {
        if (targetBuilder_ == null) {
          return target_;
        } else {
          return targetBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .messages.UnitId target = 9;</code>
       */
      public Builder setTarget(org.bwapi.proxy.messages.GameMessages.UnitId value) {
        if (targetBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          target_ = value;
          onChanged();
        } else {
          targetBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .messages.UnitId target = 9;</code>
       */
      public Builder setTarget(
          org.bwapi.proxy.messages.GameMessages.UnitId.Builder builderForValue) {
        if (targetBuilder_ == null) {
          target_ = builderForValue.build();
          onChanged();
        } else {
          targetBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .messages.UnitId target = 9;</code>
       */
      public Builder mergeTarget(org.bwapi.proxy.messages.GameMessages.UnitId value) {
        if (targetBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100) &&
              target_ != org.bwapi.proxy.messages.GameMessages.UnitId.getDefaultInstance()) {
            target_ =
              org.bwapi.proxy.messages.GameMessages.UnitId.newBuilder(target_).mergeFrom(value).buildPartial();
          } else {
            target_ = value;
          }
          onChanged();
        } else {
          targetBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .messages.UnitId target = 9;</code>
       */
      public Builder clearTarget() {
        if (targetBuilder_ == null) {
          target_ = org.bwapi.proxy.messages.GameMessages.UnitId.getDefaultInstance();
          onChanged();
        } else {
          targetBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      /**
       * <code>optional .messages.UnitId target = 9;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitId.Builder getTargetBuilder() {
        bitField0_ |= 0x00000100;
        onChanged();
        return getTargetFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .messages.UnitId target = 9;</code>
       */
      public org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder getTargetOrBuilder() {
        if (targetBuilder_ != null) {
          return targetBuilder_.getMessageOrBuilder();
        } else {
          return target_;
        }
      }
      /**
       * <code>optional .messages.UnitId target = 9;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.GameMessages.UnitId, org.bwapi.proxy.messages.GameMessages.UnitId.Builder, org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder> 
          getTargetFieldBuilder() {
        if (targetBuilder_ == null) {
          targetBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.bwapi.proxy.messages.GameMessages.UnitId, org.bwapi.proxy.messages.GameMessages.UnitId.Builder, org.bwapi.proxy.messages.GameMessages.UnitIdOrBuilder>(
                  target_,
                  getParentForChildren(),
                  isClean());
          target_ = null;
        }
        return targetBuilder_;
      }

      // required .messages.Position targetPosition = 10;
      private org.bwapi.proxy.messages.BasicTypes.Position targetPosition_ = org.bwapi.proxy.messages.BasicTypes.Position.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.BasicTypes.Position, org.bwapi.proxy.messages.BasicTypes.Position.Builder, org.bwapi.proxy.messages.BasicTypes.PositionOrBuilder> targetPositionBuilder_;
      /**
       * <code>required .messages.Position targetPosition = 10;</code>
       */
      public boolean hasTargetPosition() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>required .messages.Position targetPosition = 10;</code>
       */
      public org.bwapi.proxy.messages.BasicTypes.Position getTargetPosition() {
        if (targetPositionBuilder_ == null) {
          return targetPosition_;
        } else {
          return targetPositionBuilder_.getMessage();
        }
      }
      /**
       * <code>required .messages.Position targetPosition = 10;</code>
       */
      public Builder setTargetPosition(org.bwapi.proxy.messages.BasicTypes.Position value) {
        if (targetPositionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          targetPosition_ = value;
          onChanged();
        } else {
          targetPositionBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>required .messages.Position targetPosition = 10;</code>
       */
      public Builder setTargetPosition(
          org.bwapi.proxy.messages.BasicTypes.Position.Builder builderForValue) {
        if (targetPositionBuilder_ == null) {
          targetPosition_ = builderForValue.build();
          onChanged();
        } else {
          targetPositionBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>required .messages.Position targetPosition = 10;</code>
       */
      public Builder mergeTargetPosition(org.bwapi.proxy.messages.BasicTypes.Position value) {
        if (targetPositionBuilder_ == null) {
          if (((bitField0_ & 0x00000200) == 0x00000200) &&
              targetPosition_ != org.bwapi.proxy.messages.BasicTypes.Position.getDefaultInstance()) {
            targetPosition_ =
              org.bwapi.proxy.messages.BasicTypes.Position.newBuilder(targetPosition_).mergeFrom(value).buildPartial();
          } else {
            targetPosition_ = value;
          }
          onChanged();
        } else {
          targetPositionBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>required .messages.Position targetPosition = 10;</code>
       */
      public Builder clearTargetPosition() {
        if (targetPositionBuilder_ == null) {
          targetPosition_ = org.bwapi.proxy.messages.BasicTypes.Position.getDefaultInstance();
          onChanged();
        } else {
          targetPositionBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }
      /**
       * <code>required .messages.Position targetPosition = 10;</code>
       */
      public org.bwapi.proxy.messages.BasicTypes.Position.Builder getTargetPositionBuilder() {
        bitField0_ |= 0x00000200;
        onChanged();
        return getTargetPositionFieldBuilder().getBuilder();
      }
      /**
       * <code>required .messages.Position targetPosition = 10;</code>
       */
      public org.bwapi.proxy.messages.BasicTypes.PositionOrBuilder getTargetPositionOrBuilder() {
        if (targetPositionBuilder_ != null) {
          return targetPositionBuilder_.getMessageOrBuilder();
        } else {
          return targetPosition_;
        }
      }
      /**
       * <code>required .messages.Position targetPosition = 10;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.bwapi.proxy.messages.BasicTypes.Position, org.bwapi.proxy.messages.BasicTypes.Position.Builder, org.bwapi.proxy.messages.BasicTypes.PositionOrBuilder> 
          getTargetPositionFieldBuilder() {
        if (targetPositionBuilder_ == null) {
          targetPositionBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.bwapi.proxy.messages.BasicTypes.Position, org.bwapi.proxy.messages.BasicTypes.Position.Builder, org.bwapi.proxy.messages.BasicTypes.PositionOrBuilder>(
                  targetPosition_,
                  getParentForChildren(),
                  isClean());
          targetPosition_ = null;
        }
        return targetPositionBuilder_;
      }

      // required int32 removeTimer = 11;
      private int removeTimer_ ;
      /**
       * <code>required int32 removeTimer = 11;</code>
       */
      public boolean hasRemoveTimer() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>required int32 removeTimer = 11;</code>
       */
      public int getRemoveTimer() {
        return removeTimer_;
      }
      /**
       * <code>required int32 removeTimer = 11;</code>
       */
      public Builder setRemoveTimer(int value) {
        bitField0_ |= 0x00000400;
        removeTimer_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required int32 removeTimer = 11;</code>
       */
      public Builder clearRemoveTimer() {
        bitField0_ = (bitField0_ & ~0x00000400);
        removeTimer_ = 0;
        onChanged();
        return this;
      }

      // required bool exists = 12;
      private boolean exists_ ;
      /**
       * <code>required bool exists = 12;</code>
       */
      public boolean hasExists() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>required bool exists = 12;</code>
       */
      public boolean getExists() {
        return exists_;
      }
      /**
       * <code>required bool exists = 12;</code>
       */
      public Builder setExists(boolean value) {
        bitField0_ |= 0x00000800;
        exists_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bool exists = 12;</code>
       */
      public Builder clearExists() {
        bitField0_ = (bitField0_ & ~0x00000800);
        exists_ = false;
        onChanged();
        return this;
      }

      // required bool isVisible = 13;
      private boolean isVisible_ ;
      /**
       * <code>required bool isVisible = 13;</code>
       */
      public boolean hasIsVisible() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>required bool isVisible = 13;</code>
       */
      public boolean getIsVisible() {
        return isVisible_;
      }
      /**
       * <code>required bool isVisible = 13;</code>
       */
      public Builder setIsVisible(boolean value) {
        bitField0_ |= 0x00001000;
        isVisible_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bool isVisible = 13;</code>
       */
      public Builder clearIsVisible() {
        bitField0_ = (bitField0_ & ~0x00001000);
        isVisible_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:messages.Bullet)
    }

    static {
      defaultInstance = new Bullet(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:messages.Bullet)
  }

  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_UnitId_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_UnitId_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_UnitType_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_UnitType_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_UnitTypeData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_UnitTypeData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_UpgradeTypeData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_UpgradeTypeData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_Unit_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_Unit_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_RaceData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_RaceData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_PlayerStatus_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_PlayerStatus_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_UnitTypeIntPair_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_UnitTypeIntPair_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_Player_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_Player_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_UpgradeLevel_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_UpgradeLevel_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_TechType_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_TechType_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_UpgradeType_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_UpgradeType_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_TechTypeData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_TechTypeData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_WeaponType_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_WeaponType_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_WeaponTypeData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_WeaponTypeData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_StaticGameData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_StaticGameData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_messages_Bullet_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_messages_Bullet_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\nunit.proto\022\010messages\032\013types.proto\032\ndra" +
      "w.proto\"\024\n\006UnitId\022\n\n\002id\030\001 \002(\005\"\026\n\010UnitTyp" +
      "e\022\n\n\002id\030\001 \002(\005\"\300\014\n\014UnitTypeData\022\n\n\002id\030\001 \002" +
      "(\005\022\014\n\004name\030\002 \002(\t\022\020\n\010sublabel\030\003 \002(\t\022\034\n\004ra" +
      "ce\030\004 \002(\0162\016.messages.Race\022*\n\016whatBuildsTy" +
      "pe\030\005 \002(\0132\022.messages.UnitType\022\030\n\020whatBuil" +
      "dsNumber\030\006 \002(\005\0220\n\rrequiredUnits\030\007 \003(\0132\031." +
      "messages.UnitTypeIntPair\022(\n\014requiredTech" +
      "\030\010 \002(\0132\022.messages.TechType\022%\n\tabilities\030" +
      "\t \003(\0132\022.messages.TechType\022\'\n\010upgrades\030\n ",
      "\003(\0132\025.messages.UpgradeType\022+\n\014armorUpgra" +
      "de\030\013 \002(\0132\025.messages.UpgradeType\022\024\n\014maxHi" +
      "tPoints\030\014 \002(\005\022\022\n\nmaxShields\030\r \002(\005\022\021\n\tmax" +
      "Energy\030\016 \002(\005\022\r\n\005armor\030\017 \002(\005\022\024\n\014mineralPr" +
      "ice\030\020 \002(\005\022\020\n\010gasPrice\030\021 \002(\005\022\021\n\tbuildTime" +
      "\030\022 \002(\005\022\026\n\016supplyRequired\030\023 \002(\005\022\026\n\016supply" +
      "Provided\030\024 \002(\005\022\025\n\rspaceRequired\030\025 \002(\005\022\025\n" +
      "\rspaceProvided\030B \002(\005\022\022\n\nbuildScore\030\026 \002(\005" +
      "\022\024\n\014destroyScore\030\027 \002(\005\022$\n\004size\030\030 \002(\0162\026.m" +
      "essages.UnitSizeType\022\021\n\ttileWidth\030\031 \002(\005\022",
      "\022\n\ntileHeight\030\032 \002(\005\022\025\n\rdimensionLeft\030\033 \002" +
      "(\005\022\023\n\013dimensionUp\030\034 \002(\005\022\026\n\016dimensionRigh" +
      "t\030\035 \002(\005\022\025\n\rdimensionDown\030\036 \002(\005\022\021\n\tseekRa" +
      "nge\030\037 \002(\005\022\022\n\nsightRange\030  \002(\005\022*\n\014groundW" +
      "eapon\030! \002(\0132\024.messages.WeaponType\022\025\n\rmax" +
      "GroundHits\030\" \002(\005\022\'\n\tairWeapon\030# \002(\0132\024.me" +
      "ssages.WeaponType\022\022\n\nmaxAirHits\030$ \002(\005\022\020\n" +
      "\010topSpeed\030% \002(\001\022\024\n\014acceleration\030& \002(\005\022\024\n" +
      "\014haltDistance\030\' \002(\005\022\022\n\nturnRadius\030( \002(\005\022" +
      "\022\n\ncanProduce\030) \002(\010\022\021\n\tcanAttack\030* \002(\010\022\017",
      "\n\007canMove\030+ \002(\010\022\017\n\007isFlyer\030, \002(\010\022\025\n\rrege" +
      "neratesHP\030- \002(\010\022\025\n\risSpellcaster\030. \002(\010\022\031" +
      "\n\021hasPermanentCloak\030/ \002(\010\022\024\n\014isInvincibl" +
      "e\0300 \002(\010\022\021\n\tisOrganic\0301 \002(\010\022\024\n\014isMechanic" +
      "al\0302 \002(\010\022\021\n\tisRobotic\0303 \002(\010\022\022\n\nisDetecto" +
      "r\0304 \002(\010\022\033\n\023isResourceContainer\0305 \002(\010\022\027\n\017" +
      "isResourceDepot\0306 \002(\010\022\022\n\nisRefinery\0307 \002(" +
      "\010\022\020\n\010isWorker\0308 \002(\010\022\023\n\013requiresPsi\0309 \002(\010" +
      "\022\025\n\rrequiresCreep\030: \002(\010\022\032\n\022isTwoUnitsInO" +
      "neEgg\030; \002(\010\022\024\n\014isBurrowable\030< \002(\010\022\023\n\013isC",
      "loakable\030= \002(\010\022\022\n\nisBuilding\030> \002(\010\022\017\n\007is" +
      "Addon\030? \002(\010\022\030\n\020isFlyingBuilding\030@ \002(\010\022\021\n" +
      "\tisNeutral\030A \002(\010\"\305\002\n\017UpgradeTypeData\022\n\n\002" +
      "id\030\001 \002(\005\022\014\n\004name\030\002 \002(\t\022\034\n\004race\030\003 \002(\0162\016.m" +
      "essages.Race\022\030\n\020mineralPriceBase\030\004 \002(\005\022\032" +
      "\n\022mineralPriceFactor\030\005 \002(\005\022\024\n\014gasPriceBa" +
      "se\030\006 \002(\005\022\026\n\016gasPriceFactor\030\007 \002(\005\022\027\n\017upgr" +
      "adeTimeBase\030\010 \002(\005\022\031\n\021upgradeTimeFactor\030\t" +
      " \002(\005\022\022\n\nmaxRepeats\030\n \002(\005\022(\n\014whatUpgrades" +
      "\030\013 \002(\0132\022.messages.UnitType\022$\n\010whatUses\030\014",
      " \003(\0132\022.messages.UnitType\"\374\024\n\004Unit\022\037\n\005the" +
      "ID\030\001 \002(\0132\020.messages.UnitId\022\016\n\006player\030\002 \002" +
      "(\005\022 \n\004type\030\003 \002(\0132\022.messages.UnitType\022\'\n\013" +
      "initialType\030\004 \002(\0132\022.messages.UnitType\022\021\n" +
      "\thitPoints\030\005 \002(\005\022\030\n\020initialHitPoints\030\006 \002" +
      "(\005\022\017\n\007shields\030\007 \002(\005\022\016\n\006energy\030\010 \002(\005\022\021\n\tr" +
      "esources\030\t \002(\005\022\025\n\rresourceGroup\030g \002(\005\022\030\n" +
      "\020initialResources\030\n \002(\005\022\021\n\tkillCount\030\013 \002" +
      "(\005\022\034\n\024groundWeaponCooldown\030\014 \002(\005\022\031\n\021airW" +
      "eaponCooldown\030\r \002(\005\022\025\n\rspellCooldown\030\016 \002",
      "(\005\022\033\n\023defenseMatrixPoints\030\017 \002(\005\022\032\n\022defen" +
      "seMatrixTimer\030\020 \002(\005\022\024\n\014ensnareTimer\030\021 \002(" +
      "\005\022\026\n\016irradiateTimer\030\022 \002(\005\022\025\n\rlockdownTim" +
      "er\030\023 \002(\005\022\026\n\016maelstromTimer\030\024 \002(\005\022\023\n\013plag" +
      "ueTimer\030\025 \002(\005\022\023\n\013removeTimer\030\026 \002(\005\022\023\n\013st" +
      "asisTimer\030\027 \002(\005\022\021\n\tstimTimer\030\030 \002(\005\022$\n\010po" +
      "sition\030\031 \002(\0132\022.messages.Position\022+\n\017init" +
      "ialPosition\030\032 \002(\0132\022.messages.Position\022,\n" +
      "\014tilePosition\030\033 \002(\0132\026.messages.TilePosit" +
      "ion\0223\n\023initialTilePosition\030\034 \002(\0132\026.messa",
      "ges.TilePosition\022\r\n\005angle\030\036 \002(\001\022\021\n\tveloc" +
      "ityX\030\037 \002(\001\022\021\n\tvelocityY\030  \002(\001\022 \n\006target\030" +
      "! \001(\0132\020.messages.UnitId\022*\n\016targetPositio" +
      "n\030\" \002(\0132\022.messages.Position\022\r\n\005order\030# \002" +
      "(\005\022%\n\013orderTarget\030$ \001(\0132\020.messages.UnitI" +
      "d\022\022\n\norderTimer\030% \002(\005\022\026\n\016secondaryOrder\030" +
      "& \002(\005\022#\n\tbuildUnit\030\' \001(\0132\020.messages.Unit" +
      "Id\022\032\n\022remainingBuildTime\030( \002(\005\022\032\n\022remain" +
      "ingTrainTime\030) \002(\005\022)\n\rtrainingQueue\030+ \003(" +
      "\0132\022.messages.UnitType\022#\n\ttransport\030, \001(\013",
      "2\020.messages.UnitId\022%\n\013loadedUnits\030- \003(\0132" +
      "\020.messages.UnitId\022\030\n\020interceptorCount\030. " +
      "\002(\005\022\023\n\013scarabCount\030/ \002(\005\022\027\n\017spiderMineCo" +
      "unt\0300 \002(\005\022\014\n\004tech\0301 \002(\005\022\017\n\007upgrade\0302 \002(\005" +
      "\022\035\n\025remainingResearchTime\0303 \002(\005\022\034\n\024remai" +
      "ningUpgradeTime\0304 \002(\005\022)\n\rrallyPosition\0305" +
      " \002(\0132\022.messages.Position\022#\n\trallyUnit\0306 " +
      "\001(\0132\020.messages.UnitId\022\037\n\005addon\0307 \001(\0132\020.m" +
      "essages.UnitId\022!\n\007carrier\030* \001(\0132\020.messag" +
      "es.UnitId\022&\n\014interceptors\030e \003(\0132\020.messag",
      "es.UnitId\022#\n\tnydusExit\030i \001(\0132\020.messages." +
      "UnitId\022\016\n\006exists\0308 \002(\010\022\017\n\007hasNuke\030d \002(\010\022" +
      "\024\n\014accelerating\0309 \002(\010\022\030\n\020beingConstructe" +
      "d\030: \002(\010\022\023\n\013beingHealed\030; \002(\010\022\r\n\005blind\030< " +
      "\002(\010\022\017\n\007braking\030= \002(\010\022\020\n\010burrowed\030> \002(\010\022\023" +
      "\n\013carryingGas\030? \002(\010\022\030\n\020carryingMinerals\030" +
      "@ \002(\010\022\017\n\007cloaked\030A \002(\010\022\021\n\tcompleted\030B \002(" +
      "\010\022\024\n\014constructing\030C \002(\010\022\027\n\017defenseMatrix" +
      "ed\030D \002(\010\022\020\n\010ensnared\030E \002(\010\022\021\n\tfollowing\030" +
      "F \002(\010\022\024\n\014gatheringGas\030G \002(\010\022\031\n\021gathering",
      "Minerals\030H \002(\010\022\025\n\rhallucination\030I \002(\010\022\014\n" +
      "\004idle\030J \002(\010\022\022\n\nirradiated\030K \002(\010\022\016\n\006lifte" +
      "d\030L \002(\010\022\016\n\006loaded\030M \002(\010\022\022\n\nlockedDown\030N " +
      "\002(\010\022\024\n\014maelstrommed\030O \002(\010\022\020\n\010morphing\030P " +
      "\002(\010\022\016\n\006moving\030Q \002(\010\022\021\n\tparasited\030R \002(\010\022\022" +
      "\n\npatrolling\030S \002(\010\022\017\n\007plagued\030T \002(\010\022\021\n\tr" +
      "epairing\030U \002(\010\022\023\n\013researching\030V \002(\010\022\020\n\010s" +
      "elected\030W \002(\010\022\016\n\006sieged\030X \002(\010\022\026\n\016startin" +
      "gAttack\030Y \002(\010\022\020\n\010stasised\030Z \002(\010\022\017\n\007stimm" +
      "ed\030[ \002(\010\022\020\n\010training\030\\ \002(\010\022\022\n\nunderStorm",
      "\030] \002(\010\022\023\n\013underAttack\030o \002(\010\022\026\n\016underDark" +
      "Swarm\030p \002(\010\022\021\n\tunpowered\030^ \002(\010\022\021\n\tupgrad" +
      "ing\030_ \002(\010\022\017\n\007visible\030` \002(\010\022\025\n\rbeingGathe" +
      "red\030a \002(\010\022 \n\006larvae\030c \003(\0132\020.messages.Uni" +
      "tId\022\"\n\010hatchery\030h \001(\0132\020.messages.UnitId\022" +
      "%\n\tbuildType\030n \001(\0132\022.messages.UnitType\022\020" +
      "\n\010detected\030j \002(\010\022\021\n\tattacking\030k \002(\010\022\023\n\013a" +
      "ttackFrame\030l \002(\010\022\r\n\005stuck\030m \002(\010\"\365\001\n\010Race" +
      "Data\022\032\n\002id\030\001 \002(\0162\016.messages.Race\022\014\n\004name" +
      "\030\002 \002(\t\022\"\n\006worker\030\003 \002(\0132\022.messages.UnitTy",
      "pe\022\"\n\006center\030\004 \002(\0132\022.messages.UnitType\022$" +
      "\n\010refinery\030\005 \002(\0132\022.messages.UnitType\022%\n\t" +
      "transport\030\006 \002(\0132\022.messages.UnitType\022*\n\016s" +
      "upplyProvider\030\007 \002(\0132\022.messages.UnitType\"" +
      "S\n\014PlayerStatus\022\n\n\002id\030\001 \002(\005\022&\n\006stance\030\002 " +
      "\002(\0162\026.messages.PlayerStance\022\017\n\007ownerId\030\003" +
      " \002(\005\"B\n\017UnitTypeIntPair\022 \n\004type\030\001 \002(\0132\022." +
      "messages.UnitType\022\r\n\005count\030\002 \002(\005\"\307\006\n\006Pla" +
      "yer\022\n\n\002id\030\001 \002(\005\022\014\n\004name\030\002 \002(\t\022\037\n\005units\030\003" +
      " \003(\0132\020.messages.UnitId\022\034\n\004race\030\004 \002(\0162\016.m",
      "essages.Race\022\'\n\007stances\030\005 \003(\0132\026.messages" +
      ".PlayerStatus\022\017\n\007neutral\030\006 \002(\010\022-\n\rstartL" +
      "ocation\030\007 \002(\0132\026.messages.TilePosition\022\020\n" +
      "\010leftGame\030\010 \002(\010\022\020\n\010minerals\030\t \002(\005\022\013\n\003gas" +
      "\030\n \002(\005\022\032\n\022cumulativeMinerals\030\013 \002(\005\022\025\n\rcu" +
      "mulativeGas\030\014 \002(\005\022\023\n\013supplyTotal\030\r \002(\005\022\022" +
      "\n\nsupplyUsed\030\016 \002(\005\022/\n\014allUnitCount\030\017 \003(\013" +
      "2\031.messages.UnitTypeIntPair\0225\n\022completed" +
      "UnitCount\030\020 \003(\0132\031.messages.UnitTypeIntPa" +
      "ir\0226\n\023incompleteUnitCount\030\021 \003(\0132\031.messag",
      "es.UnitTypeIntPair\0220\n\rdeadUnitCount\030\022 \003(" +
      "\0132\031.messages.UnitTypeIntPair\0222\n\017killedUn" +
      "itCount\030\023 \003(\0132\031.messages.UnitTypeIntPair" +
      "\022-\n\rupgradeLevels\030\024 \003(\0132\026.messages.Upgra" +
      "deLevel\022+\n\017researchedTechs\030\025 \003(\0132\022.messa" +
      "ges.TechType\022\'\n\013researching\030\026 \003(\0132\022.mess" +
      "ages.TechType\022(\n\tupgrading\030\027 \003(\0132\025.messa" +
      "ges.UpgradeType\022\023\n\004self\030\030 \001(\010:\005false\022\022\n\n" +
      "victorious\030\031 \002(\010\022\020\n\010defeated\030\032 \002(\010\"B\n\014Up" +
      "gradeLevel\022#\n\004type\030\001 \002(\0132\025.messages.Upgr",
      "adeType\022\r\n\005level\030\002 \002(\005\"\026\n\010TechType\022\n\n\002id" +
      "\030\001 \002(\005\"\031\n\013UpgradeType\022\n\n\002id\030\001 \002(\005\"\220\002\n\014Te" +
      "chTypeData\022\n\n\002id\030\001 \002(\005\022\014\n\004name\030\002 \002(\t\022\034\n\004" +
      "race\030\003 \002(\0162\016.messages.Race\022\024\n\014mineralPri" +
      "ce\030\004 \002(\005\022\020\n\010gasPrice\030\005 \002(\005\022\024\n\014researchTi" +
      "me\030\006 \002(\005\022\022\n\nenergyUsed\030\007 \002(\005\022*\n\016whatRese" +
      "arches\030\010 \002(\0132\022.messages.UnitType\022$\n\006weap" +
      "on\030\t \002(\0132\024.messages.WeaponType\022$\n\010whatUs" +
      "es\030\n \003(\0132\022.messages.UnitType\"\030\n\nWeaponTy" +
      "pe\022\n\n\002id\030\001 \002(\005\"\242\005\n\016WeaponTypeData\022\n\n\002id\030",
      "\001 \002(\005\022\014\n\004name\030\002 \002(\t\022 \n\004tech\030\003 \002(\0132\022.mess" +
      "ages.TechType\022$\n\010whatUses\030\004 \002(\0132\022.messag" +
      "es.UnitType\022\024\n\014damageAmount\030\005 \002(\005\022\023\n\013dam" +
      "ageBonus\030\006 \002(\005\022\026\n\016damageCooldown\030\007 \002(\005\022\024" +
      "\n\014damageFactor\030\010 \002(\005\022*\n\013upgradeType\030\t \002(" +
      "\0132\025.messages.UpgradeType\022(\n\ndamageType\030\n" +
      " \002(\0162\024.messages.DamageType\022.\n\rexplosionT" +
      "ype\030\013 \002(\0162\027.messages.ExplosionType\022\020\n\010mi" +
      "nRange\030\014 \002(\005\022\020\n\010maxRange\030\r \002(\005\022\031\n\021innerS" +
      "plashRadius\030\016 \002(\005\022\032\n\022medianSplashRadius\030",
      "\017 \002(\005\022\031\n\021outerSplashRadius\030\020 \002(\005\022\022\n\ntarg" +
      "etsAir\030\021 \002(\010\022\025\n\rtargetsGround\030\022 \002(\010\022\031\n\021t" +
      "argetsMechanical\030\023 \002(\010\022\026\n\016targetsOrganic" +
      "\030\024 \002(\010\022\032\n\022targetsNonBuilding\030\025 \002(\010\022\031\n\021ta" +
      "rgetsNonRobotic\030\026 \002(\010\022\026\n\016targetsTerrain\030" +
      "\027 \002(\010\022\030\n\020targetsOrgOrMech\030\030 \002(\010\022\022\n\ntarge" +
      "tsOwn\030\031 \002(\010\"\306\004\n\016StaticGameData\022(\n\016static" +
      "Minerals\030\001 \003(\0132\020.messages.UnitId\022\'\n\rstat" +
      "icGeysers\030\002 \003(\0132\020.messages.UnitId\022,\n\022sta" +
      "ticNeutralUnits\030\003 \003(\0132\020.messages.UnitId\022",
      "\020\n\010mapWidth\030\004 \002(\005\022\021\n\tmapHeight\030\005 \002(\005\022\023\n\013" +
      "mapFilename\030\006 \002(\t\022\017\n\007mapName\030\007 \002(\t\022\017\n\007ma" +
      "pHash\030\010 \002(\t\022\020\n\010walkable\030\t \003(\007\022\021\n\tbuildab" +
      "le\030\n \003(\007\022\024\n\014groundHeight\030\021 \003(\005\022)\n\tunitTy" +
      "pes\030\013 \003(\0132\026.messages.UnitTypeData\022)\n\007wea" +
      "pons\030\014 \003(\0132\030.messages.WeaponTypeData\022+\n\010" +
      "upgrades\030\r \003(\0132\031.messages.UpgradeTypeDat" +
      "a\022%\n\005techs\030\016 \003(\0132\026.messages.TechTypeData" +
      "\022\037\n\006colors\030\017 \003(\0132\017.messages.Color\022!\n\005rac" +
      "es\030\022 \003(\0132\022.messages.RaceData\022.\n\016startLoc",
      "ations\030\020 \003(\0132\026.messages.TilePosition\"\313\002\n" +
      "\006Bullet\022\n\n\002id\030\001 \002(\005\022\016\n\006player\030\002 \001(\005\022\"\n\004t" +
      "ype\030\003 \002(\0162\024.messages.BulletType\022 \n\006sourc" +
      "e\030\004 \001(\0132\020.messages.UnitId\022$\n\010position\030\005 " +
      "\002(\0132\022.messages.Position\022\r\n\005angle\030\006 \002(\001\022\021" +
      "\n\tvelocityX\030\007 \002(\001\022\021\n\tvelocityY\030\010 \002(\001\022 \n\006" +
      "target\030\t \001(\0132\020.messages.UnitId\022*\n\016target" +
      "Position\030\n \002(\0132\022.messages.Position\022\023\n\013re" +
      "moveTimer\030\013 \002(\005\022\016\n\006exists\030\014 \002(\010\022\021\n\tisVis" +
      "ible\030\r \002(\010*`\n\014UnitSizeType\022\017\n\013Independen",
      "t\020\000\022\t\n\005Small\020\001\022\n\n\006Medium\020\002\022\t\n\005Large\020\003\022\014\n" +
      "\010NoneSize\020\004\022\017\n\013UnknownSize\020\005*W\n\004Race\022\010\n\004" +
      "Zerg\020\000\022\n\n\006Terran\020\001\022\013\n\007Protoss\020\002\022\n\n\006Rando" +
      "m\020\003\022\t\n\005Other\020\004\022\010\n\004None\020\005\022\013\n\007Unknown\020\006*0\n" +
      "\014PlayerStance\022\013\n\007Neutral\020\001\022\010\n\004Ally\020\002\022\t\n\005" +
      "Enemy\020\003*\202\001\n\nDamageType\022\025\n\021IndependentDam" +
      "age\020\000\022\r\n\tExplosive\020\001\022\016\n\nConcussive\020\002\022\n\n\006" +
      "Normal\020\003\022\017\n\013IgnoreArmor\020\004\022\016\n\nNoneDamage\020" +
      "\005\022\021\n\rUnknownDamage\020\006*\270\003\n\rExplosionType\022\021" +
      "\n\rExplosionNone\020\000\022\023\n\017ExplosionNormal\020\001\022\021",
      "\n\rRadial_Splash\020\002\022\020\n\014Enemy_Splash\020\003\022\014\n\010L" +
      "ockdown\020\004\022\023\n\017Nuclear_Missile\020\005\022\014\n\010Parasi" +
      "te\020\006\022\016\n\nBroodlings\020\007\022\021\n\rEMP_Shockwave\020\010\022" +
      "\r\n\tIrradiate\020\t\022\013\n\007Ensnare\020\n\022\n\n\006Plague\020\013\022" +
      "\020\n\014Stasis_Field\020\014\022\016\n\nDark_Swarm\020\r\022\013\n\007Con" +
      "sume\020\016\022\016\n\nYamato_Gun\020\017\022\017\n\013Restoration\020\020\022" +
      "\022\n\016Disruption_Web\020\021\022\022\n\016Corrosive_Acid\020\022\022" +
      "\020\n\014Mind_Control\020\023\022\014\n\010Feedback\020\024\022\021\n\rOptic" +
      "al_Flare\020\025\022\r\n\tMaelstrom\020\026\022\016\n\nAir_Splash\020" +
      "\030\022\024\n\020ExplosionUnknown\020\031*\302\006\n\nBulletType\022\t",
      "\n\005Melee\020\000\022\026\n\021Fusion_Cutter_Hit\020\215\001\022\024\n\017Gau" +
      "ss_Rifle_Hit\020\216\001\022\034\n\027C_10_Canister_Rifle_H" +
      "it\020\217\001\022\024\n\017Gemini_Missiles\020\220\001\022\032\n\025Fragmenta" +
      "tion_Grenade\020\221\001\022\025\n\020Longbolt_Missile\020\222\001\022\032" +
      "\n\025ATS_ATA_Laser_Battery\020\224\001\022\021\n\014Burst_Lase" +
      "rs\020\225\001\022\035\n\030Arclite_Shock_Cannon_Hit\020\226\001\022\020\n\013" +
      "EMP_Missile\020\227\001\022\035\n\030Dual_Photon_Blasters_H" +
      "it\020\230\001\022\026\n\021Particle_Beam_Hit\020\231\001\022\030\n\023Anti_Ma" +
      "tter_Missile\020\232\001\022\021\n\014Pulse_Cannon\020\233\001\022\032\n\025Ps" +
      "ionic_Shockwave_Hit\020\234\001\022\022\n\rPsionic_Storm\020",
      "\235\001\022\026\n\021Yamato_Gun_Bullet\020\236\001\022\024\n\017Phase_Disr" +
      "uptor\020\237\001\022\033\n\026STA_STS_Cannon_Overlay\020\240\001\022\033\n" +
      "\026Sunken_Colony_Tentacle\020\241\001\022\017\n\nAcid_Spore" +
      "\020\243\001\022\017\n\nGlave_Wurm\020\245\001\022\022\n\rSeeker_Spores\020\246\001" +
      "\022\030\n\023Queen_Spell_Carrier\020\247\001\022\021\n\014Plague_Clo" +
      "ud\020\250\001\022\022\n\rConsumeBullet\020\251\001\022\025\n\020Needle_Spin" +
      "e_Hit\020\253\001\022\016\n\tInvisible\020\254\001\022\032\n\025Optical_Flar" +
      "e_Grenade\020\311\001\022\021\n\014Halo_Rockets\020\312\001\022\030\n\023Subte" +
      "rranean_Spines\020\313\001\022\030\n\023Corrosive_Acid_Shot" +
      "\020\314\001\022\022\n\rNeutron_Flare\020\316\001\022\017\n\nNoneBullet\020\321\001",
      "\022\022\n\rUnknownBullet\020\322\001B(\n\030org.bwapi.proxy." +
      "messagesB\014GameMessages"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
      new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
        public com.google.protobuf.ExtensionRegistry assignDescriptors(
            com.google.protobuf.Descriptors.FileDescriptor root) {
          descriptor = root;
          internal_static_messages_UnitId_descriptor =
            getDescriptor().getMessageTypes().get(0);
          internal_static_messages_UnitId_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_UnitId_descriptor,
              new java.lang.String[] { "Id", });
          internal_static_messages_UnitType_descriptor =
            getDescriptor().getMessageTypes().get(1);
          internal_static_messages_UnitType_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_UnitType_descriptor,
              new java.lang.String[] { "Id", });
          internal_static_messages_UnitTypeData_descriptor =
            getDescriptor().getMessageTypes().get(2);
          internal_static_messages_UnitTypeData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_UnitTypeData_descriptor,
              new java.lang.String[] { "Id", "Name", "Sublabel", "Race", "WhatBuildsType", "WhatBuildsNumber", "RequiredUnits", "RequiredTech", "Abilities", "Upgrades", "ArmorUpgrade", "MaxHitPoints", "MaxShields", "MaxEnergy", "Armor", "MineralPrice", "GasPrice", "BuildTime", "SupplyRequired", "SupplyProvided", "SpaceRequired", "SpaceProvided", "BuildScore", "DestroyScore", "Size", "TileWidth", "TileHeight", "DimensionLeft", "DimensionUp", "DimensionRight", "DimensionDown", "SeekRange", "SightRange", "GroundWeapon", "MaxGroundHits", "AirWeapon", "MaxAirHits", "TopSpeed", "Acceleration", "HaltDistance", "TurnRadius", "CanProduce", "CanAttack", "CanMove", "IsFlyer", "RegeneratesHP", "IsSpellcaster", "HasPermanentCloak", "IsInvincible", "IsOrganic", "IsMechanical", "IsRobotic", "IsDetector", "IsResourceContainer", "IsResourceDepot", "IsRefinery", "IsWorker", "RequiresPsi", "RequiresCreep", "IsTwoUnitsInOneEgg", "IsBurrowable", "IsCloakable", "IsBuilding", "IsAddon", "IsFlyingBuilding", "IsNeutral", });
          internal_static_messages_UpgradeTypeData_descriptor =
            getDescriptor().getMessageTypes().get(3);
          internal_static_messages_UpgradeTypeData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_UpgradeTypeData_descriptor,
              new java.lang.String[] { "Id", "Name", "Race", "MineralPriceBase", "MineralPriceFactor", "GasPriceBase", "GasPriceFactor", "UpgradeTimeBase", "UpgradeTimeFactor", "MaxRepeats", "WhatUpgrades", "WhatUses", });
          internal_static_messages_Unit_descriptor =
            getDescriptor().getMessageTypes().get(4);
          internal_static_messages_Unit_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_Unit_descriptor,
              new java.lang.String[] { "TheID", "Player", "Type", "InitialType", "HitPoints", "InitialHitPoints", "Shields", "Energy", "Resources", "ResourceGroup", "InitialResources", "KillCount", "GroundWeaponCooldown", "AirWeaponCooldown", "SpellCooldown", "DefenseMatrixPoints", "DefenseMatrixTimer", "EnsnareTimer", "IrradiateTimer", "LockdownTimer", "MaelstromTimer", "PlagueTimer", "RemoveTimer", "StasisTimer", "StimTimer", "Position", "InitialPosition", "TilePosition", "InitialTilePosition", "Angle", "VelocityX", "VelocityY", "Target", "TargetPosition", "Order", "OrderTarget", "OrderTimer", "SecondaryOrder", "BuildUnit", "RemainingBuildTime", "RemainingTrainTime", "TrainingQueue", "Transport", "LoadedUnits", "InterceptorCount", "ScarabCount", "SpiderMineCount", "Tech", "Upgrade", "RemainingResearchTime", "RemainingUpgradeTime", "RallyPosition", "RallyUnit", "Addon", "Carrier", "Interceptors", "NydusExit", "Exists", "HasNuke", "Accelerating", "BeingConstructed", "BeingHealed", "Blind", "Braking", "Burrowed", "CarryingGas", "CarryingMinerals", "Cloaked", "Completed", "Constructing", "DefenseMatrixed", "Ensnared", "Following", "GatheringGas", "GatheringMinerals", "Hallucination", "Idle", "Irradiated", "Lifted", "Loaded", "LockedDown", "Maelstrommed", "Morphing", "Moving", "Parasited", "Patrolling", "Plagued", "Repairing", "Researching", "Selected", "Sieged", "StartingAttack", "Stasised", "Stimmed", "Training", "UnderStorm", "UnderAttack", "UnderDarkSwarm", "Unpowered", "Upgrading", "Visible", "BeingGathered", "Larvae", "Hatchery", "BuildType", "Detected", "Attacking", "AttackFrame", "Stuck", });
          internal_static_messages_RaceData_descriptor =
            getDescriptor().getMessageTypes().get(5);
          internal_static_messages_RaceData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_RaceData_descriptor,
              new java.lang.String[] { "Id", "Name", "Worker", "Center", "Refinery", "Transport", "SupplyProvider", });
          internal_static_messages_PlayerStatus_descriptor =
            getDescriptor().getMessageTypes().get(6);
          internal_static_messages_PlayerStatus_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_PlayerStatus_descriptor,
              new java.lang.String[] { "Id", "Stance", "OwnerId", });
          internal_static_messages_UnitTypeIntPair_descriptor =
            getDescriptor().getMessageTypes().get(7);
          internal_static_messages_UnitTypeIntPair_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_UnitTypeIntPair_descriptor,
              new java.lang.String[] { "Type", "Count", });
          internal_static_messages_Player_descriptor =
            getDescriptor().getMessageTypes().get(8);
          internal_static_messages_Player_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_Player_descriptor,
              new java.lang.String[] { "Id", "Name", "Units", "Race", "Stances", "Neutral", "StartLocation", "LeftGame", "Minerals", "Gas", "CumulativeMinerals", "CumulativeGas", "SupplyTotal", "SupplyUsed", "AllUnitCount", "CompletedUnitCount", "IncompleteUnitCount", "DeadUnitCount", "KilledUnitCount", "UpgradeLevels", "ResearchedTechs", "Researching", "Upgrading", "Self", "Victorious", "Defeated", });
          internal_static_messages_UpgradeLevel_descriptor =
            getDescriptor().getMessageTypes().get(9);
          internal_static_messages_UpgradeLevel_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_UpgradeLevel_descriptor,
              new java.lang.String[] { "Type", "Level", });
          internal_static_messages_TechType_descriptor =
            getDescriptor().getMessageTypes().get(10);
          internal_static_messages_TechType_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_TechType_descriptor,
              new java.lang.String[] { "Id", });
          internal_static_messages_UpgradeType_descriptor =
            getDescriptor().getMessageTypes().get(11);
          internal_static_messages_UpgradeType_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_UpgradeType_descriptor,
              new java.lang.String[] { "Id", });
          internal_static_messages_TechTypeData_descriptor =
            getDescriptor().getMessageTypes().get(12);
          internal_static_messages_TechTypeData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_TechTypeData_descriptor,
              new java.lang.String[] { "Id", "Name", "Race", "MineralPrice", "GasPrice", "ResearchTime", "EnergyUsed", "WhatResearches", "Weapon", "WhatUses", });
          internal_static_messages_WeaponType_descriptor =
            getDescriptor().getMessageTypes().get(13);
          internal_static_messages_WeaponType_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_WeaponType_descriptor,
              new java.lang.String[] { "Id", });
          internal_static_messages_WeaponTypeData_descriptor =
            getDescriptor().getMessageTypes().get(14);
          internal_static_messages_WeaponTypeData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_WeaponTypeData_descriptor,
              new java.lang.String[] { "Id", "Name", "Tech", "WhatUses", "DamageAmount", "DamageBonus", "DamageCooldown", "DamageFactor", "UpgradeType", "DamageType", "ExplosionType", "MinRange", "MaxRange", "InnerSplashRadius", "MedianSplashRadius", "OuterSplashRadius", "TargetsAir", "TargetsGround", "TargetsMechanical", "TargetsOrganic", "TargetsNonBuilding", "TargetsNonRobotic", "TargetsTerrain", "TargetsOrgOrMech", "TargetsOwn", });
          internal_static_messages_StaticGameData_descriptor =
            getDescriptor().getMessageTypes().get(15);
          internal_static_messages_StaticGameData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_StaticGameData_descriptor,
              new java.lang.String[] { "StaticMinerals", "StaticGeysers", "StaticNeutralUnits", "MapWidth", "MapHeight", "MapFilename", "MapName", "MapHash", "Walkable", "Buildable", "GroundHeight", "UnitTypes", "Weapons", "Upgrades", "Techs", "Colors", "Races", "StartLocations", });
          internal_static_messages_Bullet_descriptor =
            getDescriptor().getMessageTypes().get(16);
          internal_static_messages_Bullet_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_messages_Bullet_descriptor,
              new java.lang.String[] { "Id", "Player", "Type", "Source", "Position", "Angle", "VelocityX", "VelocityY", "Target", "TargetPosition", "RemoveTimer", "Exists", "IsVisible", });
          return null;
        }
      }