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;
        }
      }